Extensor o repetidor I2C?

6

Estoy desarrollando un sistema dolly-pan-tilt, donde un Arduino está conectado a través de I2C a tres codificadores giratorios independientes para posicionamiento. Después de leer algunas publicaciones en este sitio y en otros lugares, soy consciente de que I2C tiene una limitación con respecto a la distancia de los cables para la transmisión correcta de la señal. Mis problemas / preguntas son los siguientes:

Los cables SDA y SCL deberían estar torcidos, aunque algunos piensan que no es necesario. Estoy pensando en usar un SDA / SCL trenzado para cada función, movimiento de la plataforma, giro e inclinación, que se sientan muy cerca uno del otro en un cable plano de 24 polos. Por lo tanto, la torsión es probablemente adecuada, así como un repetidor I2C, ya que la distancia entre el controlador Arduino para el codificador de dolly es de aproximadamente 2,20 m, la distancia para el codificador de panoramización es de 1,80 m y el codificador de inclinación está más cerca con 0,60-0,70 cm .

Sin embargo, he visto la mención de repetidores I2C así como también de extensores: ¿cuál es el más adecuado, ya que ambos parecen estar haciendo lo mismo?

Extensor I2C: P82B715

Repetidor I2C: CPC5902G por Clare

¿Cuál es realmente la diferencia y las ventajas entre los dos circuitos integrados? Además, leí en alguna parte, que la distancia total entre el maestro y sus esclavos I2C debería considerarse, en mi caso: sumar las distancias mencionadas anteriormente 2.20m + 1.80m + 0.70m para los tres movimientos, y no considerarlos independientemente hacia el microcontrolador; —Es esto válido?

Como desafortunadamente, los tres pares de cables I2C están uno al lado del otro (la distancia entre cada línea es de 1.26mm) en el cable plano seguido por la línea GND, aún puede hacer ruido, ya que a partir de entonces los cables impulsan los motores de CC + / - @ 12V y hasta 2A. Hice mis cálculos con respecto a la capacitancia del cable con respecto al cable de cinta AWG (28), en base a este sitio web y terminó con 38.51pF para 2.5m de cable.

La hoja de datos de mis codificadores exige, sin embargo, permanecer por debajo de 10pF, para garantizar un funcionamiento correcto.

    
pregunta AndreasB

3 respuestas

5

¿De dónde sacaste la idea de que las líneas SDA y SCL deberían estar torcidas?

Esto es lo segundo peor que puede hacer para la comunicación I2C al lado de cortar los cables.

El retorcido es adecuado para líneas diferenciales como CAN o RS485 / 422.

Con una comunicación lo suficientemente lenta, es probable que ni siquiera necesite un repetidor / extensor en 2,5 m. Especialmente, si este es un sistema de 5V. Solo desenrolle esas líneas I2C.

Si tiene algunas líneas de repuesto en el cable plano, intente colocar algunas líneas GND entre pares I2C (no retorcidos) o incluso entre SDA y SCL del mismo canal.

EDITAR: hay una forma en que el par trenzado puede ser útil para I2C. Es donde cada una de las dos señales se transmite de manera diferencial (algún tipo de I2C de 4 cables).

Conducción de señales de bus I2C sobre cables de par trenzado con PCA9605 transmite SDA bidireccionalmente a través de un par de cables trenzados.

Enviando señales de bus I2C a través de cables de comunicaciones largos con P82B96 o PCA9600 explica las ventajas de transmitir SDA utilizando un "método de conducción a 4 hilos" unidireccional.

    
respondido por el Rok Jarc
2

No tuerza SDA y SCL juntos. Ponga un cable a tierra entre la alimentación del motor y las señales digitales. Si es posible, coloca las señales digitales dentro de un escudo. Es posible que deba ejecutar dos cables en paralelo: uno para señales digitales y otro para el motor. Asegúrese también de que está utilizando tierra analógica y digital separada. I2C es MUY sensible al ruido.

Un repetidor no ayudará, ya que solo hace que la buena señal sea más fuerte, sin debilitar el ruido. Si el ruido es lo suficientemente fuerte como para causar bordes falsos, también será lo suficientemente fuerte para que el repetidor detecte los bordes y los amplifique.

    
respondido por el Ben Voigt
0

Tener un cable largo tiene dos efectos. El primero es la capacitancia adicional en el bus. El segundo es el retraso de propagación. Como ejemplo, un cable CAT-5 agrega aproximadamente 18pF / ft de capacitancia, y tiene un retraso de propagación de aproximadamente 0.6ft / ns.

En comparación con otros tipos de buses digitales, I2C es bastante lento. La capacidad agregada de unos pocos metros de cable es probablemente despreciable dado que la Tabla-6 de la especificación I2C 3.0 dice que puede tener hasta 400pF en cada línea SDA / SCL.

Los retrasos de propagación introducidos por unos pocos metros de cable también son probablemente despreciables dado que la Tabla-6 de la especificación I2C 3.0 permite que los tiempos de subida de las señales SDA / SCL sean de hasta 1us.

En general, es probable que no necesite agregar un repetidor.

Es posible que esté mal interpretando la hoja de datos de su codificador. 10pF es la capacidad de pines máxima permitida para alguien que diseña un chip que se conecta al bus. En su caso, ya que está construyendo el bus en sí mismo, no es un chip, probablemente solo necesite mantener el total en cada línea por debajo de 400pF.

Ciertamente no torcería SDA y SCL juntos ya que son señales digitales completamente separadas, no un par diferencial. Torcerlos juntos los unirá capacitivamente y causará interferencias que harán que sus comunicaciones sean menos confiables (lo que significa que los pulsos del reloj aparecen en sus datos y bits de datos en su reloj).

Sin embargo, puede girar SDA y SCL cada uno a su propio cable de tierra si lo desea. Esto mejorará la inmunidad al ruido a expensas de una pequeña capacidad adicional del bus.

Blindar SDA y SCL también puede ser útil.

    
respondido por el user4574

Lea otras preguntas en las etiquetas