Estoy considerando implementar un sistema de automatización del hogar alrededor de mi Raspberry Pi, pero descubrí que el precio y el espacio requerido para insertar un Pi en cualquier lugar requieren demasiado control, pero los cables Cat5e necesarios para este diseño ya están instalados durante la renovación. Tengo algunos PCF8574, PCF8591 y SSR por ahí, ¿es posible conducirlos con cables Cat5e?
Todos mis cables Cat5e ya están cableados con pin TIA / EIA 568B. Son parte de mi cableado estructural y no están protegidos, por lo que se requiere un voltaje de línea más alto. Estoy pensando en enviar energía y líneas I2C a través del cable, con este pinout:
Pin 1 (Pair 1): SCL+
Pin 2 (Pair 1): SCL-
Pin 3 (Pair 2): SDA+
Pin 4 (Pair 3): +12V
Pin 5 (Pair 3): +12V
Pin 6 (Pair 2): SDA-
Pin 7 (Pair 4): GND
Pin 8 (Pair 4): GND
La disposición de los pines de alimentación es la misma que el cableado PoE 100BASE-TX, por lo que la potencia nominal también será la misma, y el uso de señalización diferencial bidireccional se encuentra en 1000BASE-T, que requiere Cat5e.
Las líneas I2C SCL y SDA originales se derivan en dos pares diferenciales bidireccionales a niveles TTL (el drenaje abierto no se mantiene en el cable, sino que se restaura en el dispositivo de terminación de línea / cambio de nivel que estoy diseñando)
¿Alguna sugerencia sobre eso? Además, ¿qué chip debo usar para convertir líneas I2C a la señalización diferencial? Por favor, sugiérame chips con la opción de orificio pasante DIP. No sé cómo manejar las cosas SMT.
EDITAR
Encontré este chip, SN65LBC180, ¿es una buena opción? ¿Cómo conectarlo a una unidad bidireccional? ¿Cómo cambiar el nivel (es una parte de BiCMOS que requiere un nivel TTL pero Pi funciona a niveles CMOS de 3.3v) y hacer que sea compatible con drenaje abierto?
EDITAR 2
Los comentaristas sugirieron RS-485 que me pareció aceptable, pero aún así se requiere que los dos pares diferenciales sean bidireccionales y solo dos pares diferenciales bidireccionales solamente. Estoy reutilizando los cables Ethernet existentes.
EDITAR 3
Como alguien lo mencionó, no puedo usar CAN. No hay forma de que pueda encajar CAN en RPi sin sacrificar nada (SPI está ocupado por una pantalla táctil, por lo que no hay convertidor SPI a CAN)
Soy consciente de la limitación de I2C PHY, así que esencialmente estoy tratando de adaptar 1000BASE-T PHY: señalización diferencial bidireccional para señales SCL y SDA, pero además de eso se ejecuta el protocolo I2C.
EDITAR 4
Se me ocurrió un nuevo chip: NXP P82B96 que divide I2C en 4 líneas unidireccionales, que a su vez se pueden utilizar para alimentar SN65LBC180 a través del optoaislamiento (solo lado Pi) para formar una señalización de larga distancia de 8 pines. Ahora solo necesito descubrir cómo obtener energía a través del cable, o cómo determinar si el bus está enviando y hacer que los pares sean bidireccionales.
EDITAR 5
A partir de las sugerencias de respuestas, creo que necesito cambiar un poco el pin de alimentación:
Pin 1 (Pair 1): SCL+
Pin 2 (Pair 1): SCL-
Pin 3 (Pair 2): SDA+
Pin 4 (Pair 3): +5V
Pin 5 (Pair 3): GND
Pin 6 (Pair 2): SDA-
Pin 7 (Pair 4): GND
Pin 8 (Pair 4): +12V
El voltaje de señalización diferencial I2C es TTL. El + 5V sobre el par 3 proviene del Pi, sin búfer pero fusionado. El + 12V sobre el par 4 puede no estar presente solo se usa para manejar algunos dispositivos de alta potencia. Si es necesario, el dispositivo puede usar su propia fuente de alimentación y dejar ambos rieles colgando sin conectar o suministrar su propio voltaje más alto, pero use el riel de 5V.
RASCA ESO
Pinout sigue siendo mi diseño original, que es compatible con 802.1af.
fuente
Respuestas:
Intentar hacerlo con IIC es una mala idea. IIC está realmente destinado a la comunicación entre chips en una sola placa. Dado que la corriente máxima requerida para tirar de una línea baja es limitada, las líneas tienen una impedancia relativamente alta (unos pocos kΩ). Esto significa que pueden captar el ruido fácilmente, lo cual es un problema grave cuando se ejecuta un cable sin blindaje en las paredes, posiblemente justo al lado de los cables de alimentación de CA.
Yo usaría CAN para esto. CAN utiliza un solo par trenzado unido con solo 60 Ω en cualquier punto, y la señal es diferencial. Eso significa que la mayoría del ruido inevitable en modo común que se captará debido al acoplamiento capacitivo puede ser cancelado por los receptores. PUEDE correr a 500 kbits / s puede cubrir algo del tamaño de una casa ordinaria.
Muchos microcontroladores están disponibles hoy en día con CAN incorporado. Por lo general, necesita un chip tranceiver físico separado (como el MCP2551 común), pero las pocas capas más bajas del protocolo se implementan en silicio en el periférico CAN. El firmware interactúa con el bus CAN a nivel de envío y recepción de paquetes completos. La detección y reintento de colisión, la generación de suma de verificación, los detalles de la señalización del paquete de bus, la validación de la suma de verificación recibida y el ajuste de la deriva del reloj se manejan por usted.
No caigas en el RS-485. Esa es una reliquia de una época pasada. También utiliza una única señal diferencial como CAN, por lo que también tiene buena inmunidad al ruido. Sin embargo, las personas generalmente caen en el RS-485 porque parece "más simple". Esto es solo porque no miran todo el sistema. Primero, no es realmente menos complejo eléctricamente. Aún necesitará algún tipo de transceptor para conducir y recibir la señal diferencial. Ya sea que tenga un transceptor RS-485 conectado al UART del microcontrolador o un MCP2551 conectado al periférico CAN, es prácticamente irrelevante en términos de costo y complejidad de hardware. La gran diferencia es que RS-485 te deja en el nivel de bytes sin procesar (a través del UART). Esto significa que para implementar cualquier sistema significativo y robusto, debe inventar su propio protocolo para manejar la detección de colisiones, decida cómo manejar reintentos, paquetización, generación y verificación de suma de verificación, control de flujo, etc. Puede usar una sola arquitectura maestra, pero obtener los detalles correctos es mucho más complicado de lo que la gente piensa que no los ha analizado cuidadosamente. Con CAN simplemente envía y recibe paquetes, y el hardware se encarga de los detalles.
fuente
I2C no es el camino a seguir. Los transceptores de CAN cuestan un dólar cada uno, y puede usarlos como transeves de uart y escribir su propio protocolo para que no necesite un micro compatible con lata de usted no quiera usar la pila completa de latas.
Siempre me siento un poco incómodo cuando veo conductores cat5 en paralelo para más corriente. Me molesta porque si un conductor se rompe, el otro llevará la corriente completa del sistema. Las clasificaciones actuales de cat5 son muy conservadoras, por lo que las probabilidades de incendio son bastante bajas, pero no me gusta la posibilidad.
La forma segura de hacerlo es tener un fusible múltiple en ambos rieles de alimentación y unir las tierras en la fuente de alimentación, y conectar cada dispositivo a un único conjunto de alimentación / tierra. De esa manera, si falla un cable, los dispositivos que usan esa línea pierden energía en lugar de que una línea se vea obligada a transportar la energía de dos.
A mucha gente le gusta poner potencia y tierra en ambos pares trenzados por razones EMI en lugar de tener un par de potencia y un par de tierra. Si tiene dos pares de potencia / tierra, la línea eléctrica estará más cerca de la tierra, y los campos se cancelarán, reduciendo las ondas de radio transmitidas o recibidas de las líneas eléctricas. Innecesario, pero agradable si hay mucho ruido eléctrico zumbando.
En mi opinión, 12 V es demasiado bajo para la distribución de energía cuando 24 V todavía es razonablemente seguro y mucho más eficiente.
fuente
Si la automatización está simplemente encendiendo y apagando las cosas de la casa, simplificaría esto al:
fuente
simular este circuito : esquema creado con CircuitLab
EUREKA! ¡Lo averigué! (no probado, lo probaré este fin de semana)
Los chips de interfaz son NXP P82B96 I2C buffer / splitter y 2 chips de interfaz de bus CAN SN65HVD251P TI. Esencialmente, estoy ejecutando I2C en CAN PHY.
P82B96 entiende el protocolo I2C y maneja el arbitraje de bus por mí, y me da pines Tx y Rx separados que se pueden unir. Los introduzco en el transceptor CAN SN65HVD251P y me da el par diferencial bidireccional para enviar a través de cables.
Los pines de alimentación vienen directamente, sin búfer del riel de 5V de mi Pi. (No utilizaré el voltaje y la potencia de señalización de 12V por un tiempo)
fuente
Independientemente de los méritos de la CII a nivel de chip, su implementación propuesta será muy difícil. El problema es el arbitraje de autobuses. Aunque se pueden poner en paralelo varias unidades utilizando, por ejemplo, RS485, la gran pregunta será:
¿Cómo sabe alguna unidad si puede tomar el control del bus para enviar datos?
En IIC, con líneas de señal de drenaje abiertas, la transferencia bidireccional es fácil, pero con los buses triestados necesita alguna forma de asegurarse de que solo una unidad intente conducir el bus a la vez. Esto será complicado. Puede hacerlo, especialmente si establece un maestro único y requiere que todos los esclavos tengan restricciones de tiempo rígidas para enviar datos, y que solo envíen datos si el maestro lo solicita, pero esto requerirá un esfuerzo considerable de su parte en el diseño del tableros de interfaz para el maestro y los esclavos.
En cuanto a los controladores / receptores físicos, RS485 funcionará bien y hay muchos chips de interfaz disponibles. Solo Google
fuente
No sé si está interesado en una solución prefabricada en lugar de construir su propio circuito, pero pensé en señalar que Pololu vende estas placas de extensor diferencial de larga distancia I²C hechas por SJTbits, que parecen funcionar bastante exactamente Que estas buscando. (Divulgación completa: trabajo para Pololu).
Incluso si no desea usarlo directamente, tal vez mirar el circuito que usa podría darle algunas ideas. Puede ver el esquema en la hoja de datos; utiliza un búfer NXP PCA9600D, un controlador de línea diferencial TI AM26LS31CDR y un receptor de línea diferencial TI AM26LS32ACDR.
fuente
Sé que esto es un poco viejo y una solución parece haberse resuelto en algún lugar entre las respuestas, pero tenía esta sugerencia que ofrecer. Hay dispositivos como el PCA9614 / 5/6 de NXP que estoy viendo en este momento como una solución para un bus I2C de larga distancia más robusto (PCA9614 2 canales multipunto Fast-mode Plus diferencial búfer de bus I2C) . Esencialmente es cierto que se está convirtiendo en algo diferente al verdadero I2C, pero al final del bus es invisible para los dispositivos. Esta familia en particular traduce las señales en 2 pares diferenciales bidireccionales, y también hay dispositivos similares a los mencionados en los comentarios, que se traducen en 4 pares diferenciales unidireccionales. La traducción a solo 2 pares le permite usar un cable CAT y aún tener 2 pares para alimentación / tierra.
fuente
¡Pulgares hacia arriba! Actualmente estoy tratando de resolver el mismo problema. También estoy tratando de usar I2C sobre cat5 para la automatización del hogar con mi pinout personalizado. La razón es el costo, quiero que sea muy rentable y los componentes I2C sigan siendo al menos 5 veces más baratos que incluso attiny13 uC (se requiere AFAIU uC para CAN y RS485).
1) Actualmente estoy en un proceso de prueba para la primera parte de un sistema y ahora tengo éxito con un cable de 15m de largo con 5V y conexión SCL y SDA directa. Utilizo PCF8574 y 2 relés para encender las luces de mi habitación. Pinout es
2) Entiendo que no permitirá un par de relés más o 10 metros adicionales ... Una caída de voltaje es significativa (de 5.5 a 4.7). Entonces, para el problema de caída de voltaje, voy a colocar 12V en una línea y agregar reguladores de voltaje de 5V en las placas para mantener el voltaje fino en todas partes, independientemente de la caída de línea completa. De todos modos, pondré fuentes de alimentación adicionales durante las líneas futuras.
3) La señal en sí puede mejorarse utilizando P82B96 o P82B715 barato sin dividirse en líneas diferenciales. Un NXP en sí usa Cat5 en algunas presentaciones, pero no puedo encontrar su pinout. Una parte importante aquí es que claramente usan líneas de señal en diferentes pares ... por ejemplo, un par es GND + SDA y el otro es VCC + SCL.
4) Otro punto interesante: este búfer simplemente puede elevar una amplitud de hasta 12V para aumentar la resistencia al ruido. Por lo tanto, probablemente también intente poner 12V en las líneas de señal y eso debería permitir colocar pullups directamente del cable de 12V ... Pero eso me obligará a colocar algo como P82B96 en cada dispositivo.
Como se habrá dado cuenta, también uso una línea de interrupción separada ... Master está actualmente en la placa Arduino conectada a la PC. El software maestro primario estará en una PC 24x7 de todos modos, por lo que arduino solo traduce la señal y maneja la interrupción. Puedo enviar una configuración específica para el manejo de interrupciones a bordo, por ejemplo, para manejar la conmutación conveniente del interruptor a través de la interrupción ... Eso me permite olvidarme de cualquier retraso al alternar la luz manualmente. El manejo de interrupciones es una ventaja adicional de i2c.
Entonces, mi idea es que I2C es lo suficientemente simple como para ser aplicable en <= 100m de cableado de apartamentos en la ciudad. En lugar de ir a la señal diferencial, espero poder reducir la frecuencia adicional.
Me gusta su idea de poner tanto 5V como 12V, ya que esto reduce la necesidad de reguladores y el costo ... toda la idea del bus de varios cables para reducir el costo de los puntos finales, también lo consideraré para un nuevo pinout :)
fuente