¿Conectar esclavos i2c al maestro a través de un cable de estilo RJ45?

Estoy diseñando varios módulos (por ejemplo, sensores, controlador de motor, etc.) que necesitan comunicarse a través de I²C. Estos módulos pueden estar a una distancia de hasta 15 pies (5 m) del módulo base (maestro I²C - Spark Photon), aunque la mayoría estará a menos de 5 pies de distancia. Para mantener las conexiones simples, me gustaría poder conectar en cadena estos módulos.

Cada módulo utiliza un ATTiny84/85 que maneja las diversas funciones de cada módulo (por ejemplo, ADC/DAC). Cada micro también actúa como un esclavo i2c (dirección configurable) y responde a los comandos del maestro I²C (Spark Photon).

Realmente me gustaría usar (abusar) de un cable estilo ethernet (RJ45). Dado que los cables Ethernet están ampliamente disponibles en varias longitudes y son relativamente económicos, serían ideales. Podría proporcionar alimentación (3,3 V y 5 V) y conexión a tierra, así como las líneas I²C a cada módulo y todavía tengo cables de repuesto que podría usar en una revisión futura. Incluso podría usar dos pares trenzados para proteger las líneas i2c. ¿Tal vez? El único inconveniente que veo aquí es que alguien podría estar usando un cable cruzado, lo que podría estropear las cosas.

Alternativamente, podría usar cables USB (cables de extensión hembra estilo A). Si renuncio a las líneas eléctricas separadas y uso un regulador de voltaje en los módulos que requieren 3.3V. No estoy seguro de si mis requisitos de longitud se cumplirán aquí, pero si la conexión en cadena funciona, esto no debería ser un gran problema.

¿Existen conectores RJ45 que me permitan usar un conector estilo cable a placa (por ejemplo, Molex Mini-Latch)? Realmente me gustaría no tener que lidiar con el fresado de precisión y el costo que requieren los conectores de estilo de montaje en superficie o de orificio pasante.

Lo mismo ocurriría con los conectores de estilo USB.

ACTUALIZACIÓN: Parece que I²C es de hecho una solución viable. Mi mayor preocupación en este punto es el cable a usar y si hay conectores disponibles que no necesitan soldarse directamente a la PCB (lo ideal sería cable a placa).

I²C no es óptimo para distancias más largas ya que la capacidad del cable comienza a degradar la integridad de la señal, además, si desea conectarlos en cadena, ¿la longitud total del cable no sería aún más larga y empeoraría las cosas?
Voy a necesitar un controlador para que esto mantenga altas velocidades de giro a alta velocidad a larga distancia.
Mmm. No pensé en eso. Aunque hice una búsqueda rápida en Google y encontré esto: P82B715
En efecto; la capacitancia parásita es su principal enemigo aquí. Además, tenga en cuenta que el ATTiny no tiene I2C; tiene "I2C", que es solo un envoltorio alrededor de un (único) componente serial de hardware. Para hacerlos repetidores, deberá usar SoftwareSerial para al menos uno.
No creo que hayas querido decir en cadena como lo interpreté originalmente. Ese enlace debería ser útil; comienza a ponerse interesante alrededor de la página 7. Usando una conexión en cadena literal, el ATTiny puede ser el "búfer".
Conecté I2C a un Arduino y noté que reducir la velocidad del bus no rompe el protocolo. Si la capacitancia se convierte en un problema, simplemente disminuya la velocidad. I2C no se basa en el tiempo (a diferencia de OneWire o RS-232).
Creo que es mejor optar por los diseños RS422 o RS485, ya que están diseñados específicamente para la comunicación por cable.

Respuestas (2)

Si "conectar en cadena" significa que los datos entrarán en "I2C0" y se repetirán en "I2C1", no debería tener muchos problemas aparte de que sus esclavos están demasiado ocupados respondiendo a las interrupciones para medir algo.

"Conectar en cadena" también podría significar transportarlos.

En cualquier caso, considere aumentar su voltaje y/o usar un controlador de línea/búfer (al menos entre las ejecuciones más largas). Esto se acerca a un rediseño de RS-232.

Simple y podría ser lo suficientemente bueno:

esquemático

simular este circuito : esquema creado con CircuitLab

Eso es en realidad un pequeño esquema bastante agradable
Me gustaría tomar el crédito, pero es solo un "circuito equivalente" ampliado de la mayoría de los pines MCU :)
De hecho, me refería a la conexión en cadena más en el sentido de que cada módulo tiene 2 conectores, y las líneas, específicamente las líneas I²C, se comparten entre ellos. Entonces, en esencia, los está transportando.

La hoja de datos del extensor de bus I2C P82B715 afirma que puede conducir señales I2C hasta 50 m a través de cables de par trenzado como Cat5e, aunque dicen que 30 m es una cifra más segura. Eso sigue siendo mucho más de lo que necesita.

Estas cifras suponen una velocidad de datos de 100 kHz; dado que se comunicará a una distancia mucho más corta, es posible que obtenga una velocidad más rápida, ya sea 200kHz o incluso 400kHz.

ingrese la descripción de la imagen aquí

Como puede ver en el esquema, puede tener más de dos chips P82B715 conectados juntos en el mismo bus externo (indicado por las cuatro líneas punteadas que salen de la parte inferior del diagrama), por lo que puede tomar la forma de una red en estrella. de punto a punto.

Los circuitos integrados están disponibles en Digi-Key por tres o cuatro dólares.

Eso es exactamente lo que esperaba. ¡Gracias @tcrosley! No creo que la velocidad sea un gran problema. Básicamente, solo solicito datos de cada sensor conectado a 2 Hz o menos y envío comandos al controlador del motor incluso con menos frecuencia, si es que lo hago. Entonces 100kHz será adecuado.