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.
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
Relacionados: ¿Longitud máxima del bus I2C? , La mejor manera de hacer I2C/TWI a larga distancia , Forma fiable y práctica de conectar un dispositivo I²C (a 1 m de distancia) , Problemas de distancia con la conexión I2C para múltiples dispositivos , Memorias de un bus I2C sobredimensionado
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.
1 votos
¿Tiene una velocidad mínima en kbit/s?
3 votos
Si se ralentiza el reloj se puede recorrer una distancia bastante larga.
0 votos
Considere la posibilidad de aceptar una respuesta.