Me gustaría comenzar a implementar un sistema que consta de N microcontroladores (N> = 2 MCU), pero me gustaría saber las posibilidades para permitirles comunicarse uno con el otro.
Idealmente, los microcontroladores (N-1) se colocan dentro de la casa actuando como clientes, mientras que el último (el "servidor") está conectado a una PC a través de USB. El problema que tengo ahora es cómo conectar estos microcontroladores (N-1) al "servidor". Las MCU de los clientes realizan tareas muy simples, por lo que puede que no sea una buena solución utilizar ARM para realizar trabajos tan simples simplemente porque proporcionan CAN / PHY-MAC .
La comunicación no se realizará más de una vez cada pocos minutos para la mayoría de los dispositivos y a pedido de otros. La velocidad no es muy crítica (el mensaje es corto): 1 Mbit / s, creo que es una forma excesiva para mis propósitos.
Las MCU que planeo usar son las siguientes.
- Atmel AVR Tiny / Mega
- TI MSP430
- BRAZO Cortex M3 / M4
- (Posiblemente Atmel AVR UC3 - 32 bits)
Me gustaría evitar los PIC si es posible (elección personal), simplemente porque hay menos posibilidades de programarlos (todos los anteriores tienen más o menos herramientas de código abierto, así como algunas herramientas oficiales).
Sé que algunos ARM proporcionan la funcionalidad CAN y no estoy tan seguro de los demás.
En este momento se me ocurrieron estas posibilidades:
- GPIO simple para enviar datos (digamos> 16 bits en ALTO para indicar el inicio del mensaje,> 16 bits en BAJO para indicar el final del mensaje). Sin embargo, tiene que estar en una frecuencia estándar << (frecuencia_cliente, frecuencia_servidor) para poder detectar todos los bits. Solo necesita un cable por cliente MCU.
- RS-232 : Creo que este es, con mucho, el protocolo de comunicación más utilizado, pero no sé qué tan bien se escala. Estoy considerando hasta 64 MCU de cliente en este momento (probablemente más tarde)
- USB: AFAIK, esto es principalmente como RS-232, pero no creo que se adapte muy bien en este caso (aunque USB admite muchos dispositivos, 255 si recuerdo bien, puede ser demasiado complicado para esta aplicación)
- RJ45 / Ethernet: esto es lo que realmente me encantaría usar, porque permite la transmisión a largas distancias sin problemas (al menos con cable blindado> Cat 6 ). El problema es el costo (PHY, MAC, transformador, ...). Sin embargo, no sé si realmente puedes soldarlo bien en casa. De esta manera no necesitaría un cliente MCU
- Inalámbrico / ZigBee : los módulos son muy caros, aunque puede ser el camino a seguir para evitar "spaghetti" detrás del escritorio
- Módulos / transceptores de RF: estoy hablando de aquellos en la banda de 300 MHz - 1 GHz, por lo que deberían ser difíciles de soldar en casa. Todos los módulos están integrados, pero son bastante caros como el ZigBee (al menos los módulos de RF en Mouser, en Sparkfun parecen ser más baratos).
- ¿LATA? Parece ser muy robusto. Aunque no planeo usarlo en aplicaciones automotrices, aún puede ser una buena alternativa.
- I²C / SPI / UART ? Una vez más, mejor evitar "espagueti" con los cables si es posible
- Los PLC no son realmente una opción. El rendimiento se degrada bastante rápido a medida que aumenta la longitud y depende de la carga de capacitancia de la red eléctrica. Creo que el precio es casi lo mismo que Ethernet.
Además, ¿qué protocolo sería "mejor" en caso de transmisiones simultáneas (supongamos el raro caso de que en el mismo instante dos dispositivos comiencen a transmitir: ¿qué protocolo proporciona el mejor "sistema de gestión de conflictos" / "sistema de gestión de colisiones"?
En resumen : me gustaría saber cuál puede ser la mejor solución para un sistema de cliente distribuido que realiza una comunicación de datos muy ligera, teniendo en cuenta tanto la flexibilidad (número máximo de dispositivos, sistema de gestión de conflictos / colisiones, ...), precio , fácil de hacer en casa (soldar), ... Me gustaría evitar gastar 20 $ solo en el módulo de comunicación, pero al mismo tiempo tener 30 cables detrás del escritorio sería una mierda.
La solución que estoy imaginando en este momento sería hacer una comunicación básica entre las MCU cercanas por GPIO o RS-232 ( ¡ barato !) Y usar Ethernet / ZigBee / Wi-Fi en una MCU por "zona" para comunicarse con el servidor ( costoso , pero sigue siendo mucho más barato que un módulo Ethernet por cada MCU de cliente).
En lugar de cables, también es posible utilizar fibras ópticas / fibra óptica. Aunque son necesarias conversiones adicionales, y no estoy seguro de si sería la mejor solución en este caso. Me gustaría escuchar detalles adicionales sobre ellos.