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!
¿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.
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.
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.
Wouter van Ooijen