10 votos

Señal y potencia I2C a largo plazo (10 metros de cable)

Después de algunas lecturas/pruebas me las arreglé para hacer una comunicación estable entre 2 dispositivos usando I2C con FTP CAT5 cable de par trenzado de cobre.

  • Cable verde - SCL
  • Alambre blanco/verde - GND
  • Cable azul - SDA
  • Alambre blanco/azul - GND

GND está conectado sólo en un extremo del cable, el reloj del bus I2C está a 10Khz y he usado resistencias de arranque de 10Kom a VCC

Funciona bien y es estable. Cuando decidí usar otros 2 pares de cable para la energía (+12V), dejó de funcionar. Probé +12V en un par GND en el otro par, también +12V/GND en el mismo par: mismo resultado, dejó de funcionar. Todo el bus I2C dejó de funcionar, otros dispositivos conectados a él también.

Me pregunto si puedo usar el mismo cable o ir a la opción más segura: otro cable para la energía.

3 votos

¿Has comprobado que la potencia en el lado receptor es lo suficientemente buena? No hay fallos, ni caídas... Los cables CAT5 son bastante finos, por eso PoE utiliza >40 V para la alimentación.

4 votos

Aquí es donde se necesita un osciloscopio. Todo lo demás serán conjeturas (educadas).

1 votos

Yo no uniría SDA o SCL con GND porque no quieres ninguna capacitancia entre ellos. Yo torcería +12V con GND porque sí quieres capacitancia entre ellos. ¿Qué corriente (de retorno) tiene el +12V? (puede que tengas rebote a tierra)

16voto

MeanderingCode Puntos 11

Tal vez sea una exageración si antes funcionaba, pero una opción es utilizar un convertidor de I2C a diferencial como PCA9615 , LTC4331 etc. Si hacer las resistencias más pequeñas no funciona o necesitas alargar el cable, considera no usar I2C directamente.

No sólo se ampliará el alcance, sino que también tendrá una mejor inmunidad al ruido.

enter image description here enter image description here

1 votos

Gran respuesta, esto es exactamente lo que debería hacerse, pero por supuesto puede ser un cambio radical para el OP.

0 votos

Es decir, son súper fáciles de implementar (si se compara con pasar a RS-485, CAN, etc), pero sí comparado con cambiar unas resistencias es un cambio radical.

1 votos

@JackCreasey El problema del OP no es sólo la capacitancia del cable, parece que sufren de ruido en la línea de 12V que han añadido. Bajar las resistencias de pull-up proporciona algo de inmunidad al ruido extra, pero no pueden seguir bajando esa resistencia indefinidamente.

9voto

pipe Puntos 314

Como señalé en un comentario, es difícil de depurar sin un trazado de osciloscopio, pero lo primero que destaca de tu pregunta es la resistencia de pull-up de 10 kOhm. Esto es inusualmente alto para I2C, aunque podría funcionar fácilmente en muchos casos.

Yo probaría a bajarlos a 1 kOhm primero, para ver si afecta a algo. Si ayuda, puedes aumentarlos gradualmente, aunque esto afectará al tiempo de subida.

0 votos

10 k \$\Omega\$ ¿pero no es tan grande para un bus I2C a 10 kHz? (¿O debería ser 100 kHz OP?)

0 votos

@Huisman Dos buenos puntos. 10 kOhm no me preocuparía a 10 kHz en un PCB normal pero quizás no es suficiente sobre el cable. Y 10 kHz es inusual pero no locamente inusual supongo.

7 votos

10k Ohm es enorme para I2C en cualquier distancia. Ese es el principal problema que tiene el OP.

5voto

Jamie3213 Puntos 48

Es absolutamente necesario dejar caer las resistencias pullup en distancias largas, y 10m es una distancia larga y 10k Ohm es muy alta.

El valor de la resistencia de pullup está relacionado con tres cosas:

  1. Capacidad del cable
  2. Sentido de la tensión de apuntamiento y del nivel de Rx.
  3. Velocidad

Pruebe a utilizar cualquiera de las calculadoras disponibles y comience su lectura aquí con la nota de aplicación de TI sobre los valores de pullup o aquí con el estándar NXP I2C (7.1).

En cuanto al problema que tienes, debería ser obvio que la conexión a tierra de los pares adicionales (12V,Gnd) en el cable cambiará la capacitancia a los hilos de la señal I2C.

2 votos

Estoy de acuerdo, se puede suponer que el cable CAT5 tiene unos 50pF por metro, por lo que 10 metros superan el límite de capacitancia de 400pF de la especificación I2C. Y llegar a 400kHz de reloj I2C no se puede conseguir con una capacitancia de 400pF utilizando la corriente de pull-up especificada de 3mA de las resistencias. Afortunadamente, reducir la velocidad ayudará - a menos que los dispositivos tengan una limitación de velocidad de reloj mínima. No sabemos de qué dispositivos se trata y cuáles son los voltajes del bus I2C, pero efectivamente los pullups deberían ajustarse para proporcionar al menos 3mA y si los dispositivos permiten y están de acuerdo con el voltaje de nivel bajo del bus, entonces incluso más.

0 votos

Sí voy a probar con eso, pero mi pregunta es ¿por qué funciona si no hay energía en ese cable?

0 votos

Un par de cables flotantes no tiene la misma capacitancia que su par de señales cuando el cable está conectado a tierra. Para su configuración, tanto el +12 como el Gnd son esencialmente los mismos .. Tienen una capacitancia hacia el cable de señal que afecta a su tiempo de subida. .

2voto

Jason Treon Puntos 19

Algunas notas:

Obtener los valores correctos de pull up es vital, sobre todo para la SDA. Diferentes dispositivos pueden hundir diferentes cantidades de corriente. He visto configuraciones que generan 1s extra en los datos debido a una resistencia de pull-up demasiado pequeña, después de cambiar a un chip sensor más pequeño. Las geometrías más pequeñas significaban que no podía tirar del bus hasta un cero limpio.

La velocidad mata. Un cable largo es efectivamente un filtro LRC de paso bajo. Para muchas aplicaciones I2C puedes reducir la velocidad del reloj sin perder nada. Un reloj más lento puede compensar un pull-up débil y una gran capacitancia (pero no un pull-up demasiado fuerte).

Las largas tiradas de cable son una invitación a la EMI. He visto una implementación de I2C que necesitaba una abrazadera de ferrita para pasar las pruebas de inmunidad. La terminación del extremo, el cable blindado o los filtros pueden ayudar.

Cuidado con la resistencia en paralelo. Si tienes un pull-up de 1k en el maestro, y luego un 1k en cada uno de los cuatro dispositivos cliente en el bus, entonces tienes un pull-up neto de 200 Ohm. No va a funcionar.

1voto

Jay Puntos 2515

El Placa I2C de Sparkfun es una buena solución que cuenta con:

PCA9615 buffer
I2C Supply voltage range 2.3-5.5V
Differential Supply voltage range 3-5.5V
draws 16µA of current
Extends I2C bus up to 100 feet
Data rate up to 400kHz
2x Qwiic Connectors

enter image description here

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