6 votos

¿Extensor o repetidor I2C?

Estoy desarrollando un sistema dolly-pan-tilt, donde un Arduino está conectado vía I2C a tres codificadores rotativos independientes para posicionamiento. Después de haber leído algunos posts en este sitio y en otros lugares, soy consciente de que I2C tiene una limitación en cuanto a la distancia de los cables para la correcta transmisión de la señal. Mis cuestiones/preguntas son las siguientes:

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

Sin embargo, he visto que se mencionan tanto repetidores I2C como extensores: ¿cuál es el más adecuado, ya que parece que ambos hacen 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, he leído en algún sitio, que se debe considerar la distancia total entre el maestro y sus esclavos I2C, en mi caso: sumando las distancias antes mencionadas 2,20m+1,80m+0,70m para los tres movimientos, y no considerarlas 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 haber ruido ya que a partir de ahí están los cables que conducen los motores DC +/- @ 12V y hasta 2A. Hice mis cálculos con respecto a la capacitancia del alambre en relación con el cable de cinta AWG (28), basado en esto sitio web y acabé con 38,51pF para 2,5m de cable.

Sin embargo, la hoja de datos de mis codificadores exige que se mantenga por debajo de 10pF para garantizar un funcionamiento correcto.

6voto

che Puntos 6899

¿De dónde has sacado que las líneas SDA y SCL deben estar trenzadas?

Esta es la segunda peor cosa que puedes hacer a la comunicación I2C después de cortar los cables.

La torsión es adecuada para líneas diferenciales como CAN o RS485/422.

Con una comunicación lo suficientemente lenta probablemente ni siquiera necesites un repetidor/extensor en 2,5m. Especialmente, si se trata de un sistema de 5V. Sólo desenroscar esas líneas I2C.

Si tienes algunas líneas de sobra en el cable plano intenta poner algunas líneas GND entre los pares I2C (no trenzados) o incluso entre SDA y SCL del mismo canal.

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

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

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 a 4 hilos" unidireccional.

2voto

e100 Puntos 130

No juntes SDA y SCL. Coloque un cable de tierra entre la alimentación del motor y las señales digitales. Si es posible, coloque las señales digitales dentro de una pantalla. Puede que necesites tender dos cables en paralelo: uno para las señales digitales y otro para el motor. Asegúrate también de que utilizas masas digitales y analógicas separadas. I2C es MUY sensible al ruido.

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

0voto

Ozzyprv Puntos 1

Tener un cable largo tiene dos efectos. El primero es la capacitancia adicional en el bus. El segundo es el retardo de propagación. Por ejemplo, un cable CAT-5 añade unos 18pF/pie de capacitancia, y tiene un retardo de propagación de unos 0,6ft/ns.

Comparado con otros tipos de buses digitales, I2C es bastante lento. La capacitancia añadida de unos pocos metros de cable es probablemente insignificante dado que la Tabla-6 de la especificación I2C 3.0 dice que puedes tener hasta 400pF en cada línea SDA/SCL.

Los retardos de propagación introducidos por unos pocos metros de cable también son probablemente insignificantes 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, probablemente no necesites añadir un repetidor.

Puede que estés leyendo mal la hoja de datos de tu codificador. 10pF es la capacitancia máxima de pin permitida para alguien que diseña un chip que se conecta al bus. En tu caso, dado que estás construyendo el propio bus y no un chip, probablemente sólo necesites mantener el total de cada línea por debajo de 400pF.

Yo ciertamente no retorcería SDA y SCL juntas ya que son señales digitales completamente separadas, no un par diferencial. Si las retuerces juntas, se acoplarán capacitivamente y se producirá una interferencia cruzada que hará que tus comunicaciones sean menos fiables (es decir, los pulsos de reloj aparecerán en tus datos y los bits de datos en tu reloj).

No obstante, si lo deseas, puedes conectar SDA y SCL cada uno a su propio cable de tierra. Esto mejorará la inmunidad al ruido a expensas de un poco más de capacitancia del bus.

También puede ser útil apantallar SDA y SCL.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X