¿Extensor o repetidor I2C?

Estoy desarrollando un sistema dolly-pan-tilt, donde un Arduino está conectado a través de I2C a tres codificadores rotatorios independientes para el 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 las siguientes:

Los cables SDA y SCL deben estar retorcidos, aunque algunos piensan que no es necesario. Estoy pensando en usar un SDA/SCL trenzado para cada función, movimiento de plataforma rodante, 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 Dolly es de alrededor de 2,20 m, la distancia para el codificador panorámico es de aproximadamente 1,80 m y el codificador de inclinación está más cerca con 0,60-0,70 cm. .

Sin embargo, he visto menciones de repetidores I2C y extensores: ¿cuál es más adecuado ya que parecen estar haciendo lo mismo?

Extensor I2C: P82B715

Repetidor I2C: CPC5902G de 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 debe considerarse, en mi caso: sumando las distancias mencionadas anteriormente 2,20 m + 1,80 m + 0,70 m para los tres movimientos, y no considerarlos de forma independiente hacia el microcontrolador; —¿Es esto válido?

Como, lamentablemente, los tres pares de cables I2C están uno al lado del otro (la distancia entre cada línea es de 1,26 mm) en el cable plano seguido de la línea GND, aún puede haber 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 plano AWG (28), según este sitio web y terminé con 38,51 pF para 2,5 m de cable.

¡La hoja de datos de mis codificadores exige permanecer por debajo de 10pF, para garantizar un funcionamiento correcto!

¡Los cables I2C SCL y SDA ciertamente NO deben torcerse juntos! Retorcerlos a cada uno con un cable de tierra podría ser bueno, pero vigile la capacitancia a tierra.

Respuestas (3)

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

Esta es la segunda peor cosa que puede hacer con la comunicación I2C además de cortar los cables.

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

Con una comunicación lo suficientemente lenta, probablemente ni siquiera necesitará un repetidor/extensor en 2,5 m. Especialmente, si se trata de un sistema de 5V. Simplemente desenrosque 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 trenzados) 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 forma diferencial (una especie de I2C de 4 hilos).

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

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

Pensé que era un poco extraño, pero dado que el fabricante de los codificadores también había retorcido los cables de una longitud de unos 12 cm, pero, probablemente para separarlos y confundirlos con el Uart Rx/Tx, parecía adecuado seguir lo que ya había sido 'implicado'. ¡Gracias por aclarar esto para mí! Ya he separado las señales digitales de las líneas del motor por una línea GND, pero no entre cada par como mencionas, sino entre el lado de la señal de los tres pares y el otro lado que impulsa los motores de CC. Quizás esto no sea suficiente.
Probablemente debería ser suficiente, pero probablemente sea una palabra fuerte :) Por lo general, cuando uno está diseñando estas líneas en PCB, también colocaría una pista de tierra entre SDA y SCL, si hay suficiente espacio, por supuesto. Si puede conducir motores de CC a través de un cable separado, probablemente sea la mejor manera de hacerlo. o corte el cable plano entre las líneas del motor y las líneas de comunicación y coloque un escudo alrededor de las líneas de comunicación. Pero primero intente verificar la calidad y la forma de la señal I2C con un osciloscopio si es posible.
Sí, eso es probablemente lo mejor, ya que ya he construido la mayor parte y me enfrento a los problemas de I2C como se explica en la hoja de datos que he pegado a continuación (en mi respuesta a Ben Voigt)... el documento parece estar equivocado o engañoso en lo que respecta a los repetidores, etc. ¡Gracias de nuevo!

No tuerza SDA y SCL juntos. Coloque un cable de tierra entre el suministro del motor y las señales digitales. Si es posible, coloque las señales digitales dentro de un escudo. Es posible que deba colocar dos cables en paralelo, uno para señales digitales y otro para el motor. También asegúrese de estar utilizando una conexión a tierra digital y analógica 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 como para que el repetidor detecte los bordes y los amplifique.

Gracias por señalar esto. Aún así, la longitud de casi 2 m no es un problema, ya que la hoja de datos de los codificadores menciona lo siguiente:
"El estándar I2C dicta que la capacitancia del bus para cada línea debe mantenerse por debajo de 10 pF. La capacitancia del bus es importante para el correcto funcionamiento del bus. Para el cableado de las líneas SDA y SCL, se recomienda una configuración de par trenzado para garantizar la capacitancia mínima del bus. Si el la longitud total de un bus I2C induce una capacitancia de bus superior a 10pF no se puede garantizar el funcionamiento correcto. En ese caso, se recomienda un repetidor I2C. Como regla general, I2C es adecuado para longitudes de bus de hasta 1 m y debe evitarse sin el uso de repetidores para autobuses más largos".

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

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

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

En general, probablemente no necesite agregar un repetidor.

Es posible que esté leyendo mal la hoja de datos de su codificador. 10pF es la capacitancia de pin máxima permitida para alguien que diseña un chip que se conecta al bus. En su caso, dado que está construyendo el bus en sí, no 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 acoplará capacitivamente y causará una conversación cruzada que hará que sus comunicaciones sean menos confiables (lo que significa que los pulsos de reloj aparecerán en sus datos y los bits de datos en su reloj).

Sin embargo, puede torcer SDA y SCL cada uno a su propio cable de tierra por separado si lo desea. Esto mejorará la inmunidad al ruido a expensas de un poco más de capacitancia de bus.

El blindaje de SDA y SCL también puede ser útil.