La mejor manera de hacer I2C / TWI a larga distancia


9

Tengo un proyecto que requiere hacer I²C / I2C / TWI a larga distancia (30 a 40 metros).

He visto a algunas personas sugiriendo reducir la velocidad del reloj a alrededor de 500 Hz, para mitigar los efectos de la capacitancia de una línea tan larga, supongo. Los componentes que estoy usando requieren al menos la frecuencia de reloj estándar de 100 kHz. Investigué un poco más y encontré entre las respuestas a otra pregunta una sugerencia para usar una palanca de cambio de nivel P82B96. En la hoja de datos , dan ejemplos de su uso en líneas de incluso 100 metros:

I2C_longDistance

me he encontrado con otra forma de cambiar los niveles a través de una placa de arranque de adafruit , que es solo un mosfet (bss138) con dos resistencias pull-up (una para cada lado / voltaje). Ellos obtuvieron la idea deuna nota de aplicación de NXP (AN10441) , y dos de los canales allí podrían usarse así:

cambio de nivel de mosfet

Ahora me pregunto: ¿qué solución es la mejor? ¿O hay algo que he pasado por alto? Y también, ¿son suficientes 5V para garantizar una buena conexión? ¿Sería ventajoso usar un voltaje aún mayor como 12V?


Tal como está escrito, su pregunta es probablemente demasiado amplia para el formato de este sitio. Intenta reducir tu pregunta y hacerla muy específica.
Joe Hass

Agregué un resumen, ¿es lo suficientemente angosto y específico?
DaJF

También debe especificar la longitud máxima del cable a los sensores y dar una idea de lo que significa "bajo costo" para usted. ¿Espera proporcionar energía a los sensores a través del mismo cable?
Joe Hass

@JoeHass ¿La pregunta ahora es lo suficientemente estrecha? Si no, ¿qué más necesito hacer?
DaJF

Hola, sé que esta es una vieja pregunta, pero ¿qué terminaste haciendo al final? Tengo exactamente la misma pregunta que tú, distancias similares involucradas y una velocidad de reloj mínima de 100kHz. Me interesaría saber qué funcionó para usted, gracias.
pcdev

Respuestas:


1

Creo que estás en el camino correcto con algo como el NXP P82B96. Si observa la Figura 14 y el texto asociado, la hoja de datos analiza el uso de una longitud de cable de hasta 250 m con velocidades de datos superiores a 100 kHz.

Hay muchos sensores de temperatura I2C disponibles que pueden brindarle una precisión de unos pocos grados centígrados sin calibración y sin ningún circuito analógico adicional. Dado que de todos modos está recuperando los datos para procesarlos, filtrar el ruido sería muy fácil.

Si le preocupa la capacitancia del cableado, es mejor que tenga un par trenzado sin blindaje en lugar de un cable blindado.


¿Podría el P82B96 ser reemplazado por la alternativa mosfet? Por el precio de un P82B96, literalmente puedo comprar 100 mosfets bss138 (puedo darle los enlaces si lo desea). De hecho, como dijiste, he encontrado lo que parece un sensor de temperatura adecuado: LM75A. En cuanto a la elección entre un cable blindado o no blindado, parece que se trata de qué problema desea: posible interferencia (sin blindaje) o capacitancia de línea (blindada), ¿es esta una suposición correcta? ¿Es uno más prominente que el otro? No tengo idea de cómo determinar esto. Gracias por cierto!
DaJF

No creo que pueda reemplazar el P82B96 con los MOSFET para líneas largas. Parece que el IC del repetidor realmente proporciona algo de amplificación, donde los MOSFET proporcionan principalmente un cambio de nivel de voltaje. Me temo que no estoy seguro de cómo hacer la llamada en el cable ... debe mirar la nota de aplicación NXP AN255. Hablan sobre el uso de cableado de par trenzado, pero no mencionan un escudo. Para las señales digitales, el ruido podría ser un problema menor que la capacitancia.
Joe Hass

2

Probablemente pueda salirse con la suya con los sensores DS18B20 utilizando un cable blindado CAT5 o similar. Son solo mediciones térmicas, por lo que si algunas lecturas se corrompen, puede hacer que su programa sea lo suficientemente robusto como para lidiar con eso (de todos modos, es una buena práctica).

Para uso en cadenas de restaurantes, he diseñado lo que se conoce como controles RTU (unidad de techo) que funcionan en múltiples sensores pasivos (usan termistores NTC intercambiables , que no requieren calibración para calefacción de confort). Es mucho más fácil filtrar el ruido de un sensor pasivo. Otro conjunto de instalaciones (un importante complejo automotriz de América del Norte) utilizó RTD de platino con acondicionadores de señal, dispositivos muy precisos y estables. Primero debe decidir el sensor, luego ver cómo podría conectarse: cualquiera de estas opciones de sensor son adecuadas para su aplicación (aunque los RTD pueden ser excesivos).

En caso de que no esté claro, sugiero una configuración "estrella" de sensores alrededor de su procesador.

Si realmente desea utilizar un "bus" (que no sea un cable o I2C), necesitará inteligencia en los extremos, lo que significa un procesador de alguna forma. Si te estás volviendo loco, puedes considerar usar sensores inalámbricos que se comuniquen a través de alguna banda ISM que sea legal en tu localidad. Alternativamente, puede usar un sensor por Pi y hacer que se comuniquen entre sí a través de su intranet WiFi.


En este momento estoy en la etapa de "determinar qué comprar", por lo que el bus o el sensor pueden determinar el otro. Los únicos requisitos que tengo para estos son fáciles de usar y ampliables. La razón para elegir un bus es que prefiero no tender un cable a cada sensor (que es lo que parece sugerir, ¿o interpreté mal la "estrella"?). ¿Es I²C un protocolo viable para usar en un cable que puede ser 30M / 90FT?
DaJF

Sí, eso es lo que es una "estrella": cables del controlador a cada sensor. I2C a 30m ... bueno ... he escuchado afirmaciones de que es posible a velocidades muy bajas, pero no contaría con que funcione bien.
Spehro Pefhany
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.