28 votos

¿Puedo utilizar I2C a través de cables de 2 metros?

En mi proyecto actual, necesito comunicarme entre un microcontrolador y algunos sensores a través de I2C. Uno de ellos es un sensor de temperatura, que necesita ser colocado a aproximadamente 2 metros de distancia del microcontrolador. No puedo elegir otro protocolo (el sensor está en un módulo con un conector/pines/protocolo determinado).

¿Cree que es posible comunicarse con esta configuración? ¿Qué información debo buscar para asegurar que puede o no puede ser posible? ¿Tienen algún consejo?

Es la primera vez que me comunico con IC fuera del PCB.

5 votos

Por favor, añada más información. ¿Cuál sería la velocidad i2c? ¿Resistencias de pull-up? ¿Cable utilizado y su capacitancia? ¿Cuál es el MCU anfitrión y cuál es el sensor? Pero en general, I2C funciona a varios metros a través de cables como HDMI por lo que debería funcionar cuando las cosas se hacen correctamente.

6 votos

"No puedo elegir otro protocolo" Puedes poner un segundo microcontrolador cerca del sensor, leer los datos y enviarlos con el protocolo que quieras.

40voto

brettbuddin Puntos 273

I2C no está diseñado para ser utilizado a largas distancias, pero conozco varias aplicaciones en las que se utiliza realmente a una distancia de unos 2 metros. También sé de un caso en el que tuvieron problemas con eso y eventualmente se arregló arreglando los bucles de tierra creo.

Para estar seguro de que funcionará, debes utilizar un extensor de bus I2C como el P82B715.

Sin embargo, el ficha técnica del PB2B715 dice lo siguiente en la sección 8.2:

Para los típicos cables de par trenzado o planos, como los utilizados en telefonía o Ethernet (Cat5e), esa capacitancia es de unos 50 pF a 70 pF / metro, por lo que el cable podría, en teoría, tener hasta 50 m de longitud . Desde experiencia práctica, 30 m ha demostrado ser una longitud de cable segura para ser conducido de esta forma sencilla, hasta 100 kHz, con los valores indicados. Son posibles distancias más largas distancias y velocidades más altas son posibles, pero requieren un diseño más cuidadoso. diseño.

Así que los expertos (NXP es la antigua Philips, la inventora de I2C) dicen que 30 metros han demostrado ser una distancia factible. Mi experiencia dice que 2 metros es una distancia factible, y las experiencias que me fueron reportadas indican que buses I2C más cargados sin ningún extensor también son posibles.

Los puntos clave para trabajar los buses I2C en largas distancias son:

  • Utilizar un cable de baja capacitancia (par trenzado/Ethernet);
  • Limitación de la velocidad del bus;
  • Disponer de tirantes de tamaño correcto.

Cálculo del pullup

Texas Instruments tiene una buena nota de aplicación (SLVA689) sobre el cálculo del pull-up .

  • El límite inferior del pullup (valor mínimo) está determinado por la corriente que el periférico más débil del bus puede tirar, y la tensión máxima que representa el 0 para cualquier periférico. Así que si 1V sigue siendo 0, tu VCC es como máximo 3V6 y tu dispositivo más débil sólo puede tirar de 20mA, tu resistencia está determinada por la pérdida de voltaje sobre la resistencia y la corriente tirada por ese dispositivo: \$(3.6\ \mathrm{V}- 1\ \mathrm{V})\ /\ 20\ \mathrm{mA}=130\ \Omega\$ .
  • El límite superior viene determinado por el tiempo de subida máximo: su frecuencia I2C máxima está directamente relacionada con eso, pero también hay un límite superior definido por el protocolo. El límite superior es \$R_{max}=t_r/(0.8473 * C_b)\$ . En el sitio web \$t_r\$ es el tiempo máximo de subida y \$C_b\$ es la capacidad del bus. Por lo tanto, si \$C_b\$ es de 400pF, y el bus funciona en modo estándar ( \$t_r\$ =1ms), entonces encontrará \$R_{max}=2950\ \Omega\$ . La nota de aplicación de TI tiene gráficos para que pueda encontrar rápidamente los valores adecuados.
  • Por supuesto, el valor del pullup es el valor equivalente a todos los pullups en paralelo combinados. Puedes tener un pullup en el extremo maestro, en el extremo esclavo y en cualquier otro esclavo/maestro del bus.
  • Cuanto más "al límite", más hay que tener en cuenta las "parásitas", como la caída de tensión en el cable.

0 votos

¿Tener tirantes de tamaño correcto? Cómo determinar el valor y la potencia nominal?

0 votos

Como Nick B comentó en otra respuesta, ten cuidado con la posibilidad de que el chip extensor del bus o lo que sea caliente el sensor de temperatura un par de grados.

17voto

Wolver1n3 Puntos 126

Se puede, pero no se recomienda.

Diferentes autobuses para diferentes propósitos

I2C, al igual que SPI, está diseñado para la comunicación dentro de una placa o grupo de placas (piensa en Raspberry Pi y sus gorras o en arduino y sus escudos). Puede funcionar en distancias más largas (ver otras respuestas), pero no debe ser utilizado en esos casos, simplemente porque no es para lo que fue diseñado, optimizado y calificado.

El riesgo que corre es que no pueda añadir más sensores en el futuro, o que su sistema no funcione en todas partes, o que falle en determinadas circunstancias.

Lo que debería buscar es un bus de campo, algo como 1 hilo, CAN, RS-485, ethernet, etc.

Los sistemas inalámbricos como bluetooth o zigbee también podrían ser una opción.

15voto

filo Puntos 1

Generalmente está limitado por una capacitancia máxima de bus de 400 pF.

Debería funcionar bien si bajas la frecuencia a algo así como 1 kHz y proporcionas un desacoplamiento de la fuente de alimentación junto al sensor.

Si necesitas algo más robusto entonces puedes usar convertidores I2C diferenciales en ambos extremos como PCA9615 .

0 votos

Recuerdo vagamente que algunos sensores tienen una frecuencia I2C mínima (no sé por qué).

10voto

Caleb Reister Puntos 30

Como señala @filo, I2C es generalmente limitado por la capacitancia del bus. Sin embargo, hay formas de evitarlo:

  1. Utiliza un extensor de bus. El P82B96 o PCA9600 serían ambas buenas opciones en su caso.
  2. Si necesita velocidades más altas o cables extremadamente largos, puede utilizar un transceptor I2C diferencial como el PCA9600 . Sin embargo, esto hará que su circuito sea considerablemente más complicado, y necesitará un CI en ambos extremos del cable.

Echa un vistazo a AN10658 y AN11084 de NXP para más información.

2 votos

Esto funcionará bien con un extensor de bus, como varios otros han dicho. Algo que no es inmediatamente obvio para tener en cuenta es que el extensor de bus en el extremo del sensor puede disipar suficiente calor para aumentar la lectura de los sensores de temperatura por un par de grados si el sensor y el extensor de bus están cerca.

0 votos

La nota de aplicación AN11075 nxp.com/docs/es/application-note/AN11075.pdf para I2C sobre pago trenzado es también una lectura interesante.

5voto

Janka Puntos 305

Me gustan las respuestas de filo y Caleb.

Otra opción es utilizar uno o varios DS28E17 Puentes maestros de 1 cable a I2C en los sensores individuales y cablear el bus como Onewire. Esto es bueno para buses de más de 100 m y es adecuado para aplicaciones de conjuntos de sensores de bajo rendimiento, como la gestión de la temperatura y la batería distribuidas.

0 votos

Una idea interesante, aunque puede introducir una sobrecarga de software adicional si el maestro no tiene una interfaz 1-Wire.

0 votos

Es sobre todo una opción si tienes un host Linux, ya que tiene la pila de controladores completa para este truco. En una Raspberry Pi, sólo tienes que conectar GPIO4 a la entrada de 1W del DS28E17 a través de esos 100m de cable (más GND por supuesto), editar config.txt y ya está. Es totalmente transparente, parece un I²C local. Sólo es más lento.

0 votos

Gracias. Me sorprendió mucho que 1-Wire pueda hacer ese tipo de distancia. Supongo que tiene sentido, ya que las resistencias son más pequeñas.

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