Gostaria de começar a implementar um sistema composto por N microcontroladores (N> = 2 MCUs), mas gostaria de saber as possibilidades de permitir que eles se comuniquem um com o outro.
Idealmente, os microcontroladores (N-1) são colocados dentro da casa, atuando como clientes, enquanto o último (o "servidor") é conectado a um PC via USB. Os problemas que tenho agora são como conectar esses microcontroladores (N-1) ao "servidor". Os MCUs dos clientes executam tarefas muito simples, portanto, pode não ser uma boa solução usar ARMs para executar tarefas simples, apenas porque eles fornecem CAN / PHY-MAC .
A comunicação não ocorrerá mais de uma vez a cada poucos minutos para a maioria dos dispositivos e sob demanda para outros. A velocidade não é muito crítica (a mensagem é curta): 1 Mbit / s acho que é um exagero para os meus propósitos.
Os MCUs que planejo usar são os seguintes.
- Atmel AVR Tiny / Mega
- TI MSP430
- ARM Cortex M3 / M4
- (Possivelmente Atmel AVR UC3 - 32 bits)
Eu gostaria de evitar os PICs, se possível (escolha pessoal), simplesmente porque há menos possibilidades de programá-los (todos os itens acima têm mais ou menos ferramentas de código aberto, além de algumas ferramentas oficiais).
Sei que alguns ARMs oferecem funcionalidade CAN e não tenho tanta certeza sobre os outros.
No momento, eu vim com essas possibilidades:
- GPIO simples para enviar dados (digamos> 16 bits em ALTO para indicar o início da mensagem,> 16 bits em BAIXO para indicar o fim da mensagem). No entanto, ele deve estar em uma frequência padrão << (frequency_client, frequency_server) para poder detectar todos os bits. Precisa apenas de um cabo por MCU do cliente.
- RS-232 : Acho que esse é de longe o protocolo de comunicação mais usado, mas não sei o quão bem ele é escalável. Estou considerando até 64 MCUs clientes agora (provavelmente mais tarde)
- USB: o AFAIK é mais parecido com o RS-232, mas não acho que seja muito bom nesse caso (embora o USB suporte muitos dispositivos - 255 se bem me lembro - pode ser muito complicado para este aplicativo)
- RJ45 / Ethernet: é isso que eu realmente adoraria usar, porque permite a transmissão por longas distâncias sem problemas (pelo menos com cabo blindado> Cat 6 ). O problema é o custo (PHY, MAC, transformador, ...). Eu não sei se você pode realmente soldá-lo bem em casa. Dessa forma, eu não precisaria de um MCU cliente
- Wireless / ZigBee : os módulos são muito caros, embora possa ser o caminho a seguir para evitar "espaguete" atrás da mesa
- Módulos / transceptores de RF: estou falando daqueles na faixa de 300 MHz - 1 GHz, portanto deve ser difícil soldar em casa. Os módulos são todos integrados, mas são tão caros quanto o ZigBee (pelo menos os módulos de RF na Mouser, na Sparkfun parecem haver módulos mais baratos).
- PODE? Parece ser muito robusto. Mesmo que eu não pretenda usá-lo em aplicações automotivas, ainda pode ser uma boa alternativa.
- I²C / SPI / UART ? Mais uma vez - melhor evitar "espaguete" com os cabos, se possível
- PLCs não são realmente uma opção. O desempenho diminui muito rapidamente à medida que o comprimento aumenta e depende da carga de capacitância da rede elétrica. Eu acho que em termos de preço é o mesmo que Ethernet.
Além disso, qual protocolo seria "melhor" no caso de transmissões simultâneas (vamos assumir o raro caso de que no mesmo instante dois dispositivos comecem a transmitir: qual protocolo fornece o melhor "sistema de gerenciamento de conflitos" / "sistema de gerenciamento de colisões"?
Resumindo : eu gostaria de saber qual pode ser a melhor solução para um sistema cliente distribuído que faça comunicação de dados muito leve, considerando a flexibilidade (número máximo de dispositivos, sistema de gerenciamento de conflitos / colisões, ...), preço , fácil de fazer em casa (solda), ... eu gostaria de evitar gastar US $ 20 apenas no módulo de comunicação, mas ao mesmo tempo ter 30 fios atrás da mesa seria uma porcaria.
A solução que estou imaginando agora seria fazer uma comunicação básica entre MCUs próximas por GPIO ou RS-232 ( barato !) E usar Ethernet / ZigBee / Wi-Fi em um MCU por "zona" para se comunicar com o servidor ( caro , mas ainda é muito mais barato que um módulo Ethernet por cada MCU cliente).
Em vez de cabos, também pode ser possível usar fibras ópticas / fibras ópticas. Embora sejam necessárias conversões adicionais, não tenho certeza se seria a melhor solução nesse caso. Eu gostaria de ouvir detalhes adicionais sobre eles.