Vorrei iniziare a implementare un sistema composto da N microcontrollori (N> = 2 MCU), ma vorrei conoscere le possibilità di farli comunicare tra loro.
Idealmente, i microcontrollori (N-1) sono collocati all'interno della casa fungendo da client, mentre l'ultimo (il "server") è collegato a un PC tramite USB. I problemi che ho ora sono come collegare questi microcontrollori (N-1) al "server". Le MCU dei client eseguono compiti molto semplici, quindi potrebbe non essere una buona soluzione utilizzare ARMs per svolgere tali semplici compiti solo perché forniscono CAN / PHY-MAC .
La comunicazione non avverrà più di una volta ogni pochi minuti per la maggior parte dei dispositivi e su richiesta per altri. La velocità non è molto critica (il messaggio è breve): 1 Mbit / s penso che sia eccessivo per i miei scopi.
Le MCU che intendo utilizzare sono le seguenti.
- Atmel AVR Tiny / Mega
- TI MSP430
- ARM Cortex M3 / M4
- (Forse Atmel AVR UC3 - 32-bit)
Mi piacerebbe evitare i PIC, se possibile (scelta personale), semplicemente perché ci sono meno possibilità di programmarli (tutto quanto sopra ha più o meno strumenti open source e alcuni strumenti ufficiali).
So che alcuni ARM forniscono funzionalità CAN e non sono così sicuro degli altri.
In questo momento ho trovato queste possibilità:
- GPIO semplice per inviare dati (diciamo> 16 bit in ALTO per indicare l'inizio del messaggio,> 16 bit in BASSO per indicare la fine del messaggio). Tuttavia, deve essere a una frequenza standard << (frequency_client, frequency_server) per poter rilevare tutti i bit. È necessario solo un cavo per MCU client.
- RS-232 : Penso che questo sia di gran lunga il protocollo di comunicazione più comunemente usato, ma non so quanto si ridimensiona. Sto considerando fino a 64 MCU client in questo momento (probabilmente più avanti)
- USB: AFAIK questo è principalmente come RS-232, ma in questo caso non penso che si ridimensioni molto bene (anche se USB supporta molti dispositivi - 255 se ricordo bene - potrebbe essere eccessivamente complicato per questa applicazione)
- RJ45 / Ethernet: questo è ciò che mi piacerebbe davvero usare, perché consente la trasmissione su lunghe distanze senza problemi (almeno con cavo schermato> Cat 6 ). Il problema è il costo (PHY, MAC, trasformatore, ...). Non so se puoi davvero saldarlo bene a casa però. In questo modo non avrei bisogno di un MCU client
- Wireless / ZigBee : i moduli sono molto costosi, anche se potrebbe essere la strada da percorrere per evitare "spaghetti" dietro la scrivania
- Moduli / ricetrasmettitori RF: sto parlando di quelli nella banda 300 MHz - 1 GHz, quindi dovrebbero essere difficili da saldare a casa. I moduli sono tutti integrati, ma sono abbastanza costosi come lo ZigBee (almeno i moduli RF di Mouser, a Sparkfun sembrano essere più economici).
- PUÒ? Sembra essere molto robusto. Anche se non ho intenzione di usarlo in applicazioni automobilistiche, potrebbe essere comunque una buona alternativa.
- I²C / SPI / UART ? Ancora una volta - meglio evitare "spaghetti" con i cavi se possibile
- I PLC non sono in realtà un'opzione. Le prestazioni si riducono piuttosto rapidamente all'aumentare della lunghezza e dipende dal carico di capacità della rete elettrica. Penso che il prezzo sia più o meno lo stesso di Ethernet.
Inoltre, quale protocollo sarebbe "migliore" in caso di trasmissioni simultanee (supponiamo il raro caso nello stesso istante in cui due dispositivi iniziano a trasmettere: quale protocollo fornisce il miglior "sistema di gestione dei conflitti" / "sistema di gestione delle collisioni"?
Riassumendo : mi piacerebbe sapere quale potrebbe essere la soluzione migliore per un sistema client distribuito che esegue comunicazioni di dati molto leggere, considerando sia la flessibilità (numero massimo di dispositivi, sistema di gestione di conflitti / collisioni, ...), prezzo , facile da realizzare a casa (saldatura), ... Vorrei evitare di spendere 20 $ solo per il modulo di comunicazione, ma allo stesso tempo avere 30 fili dietro la scrivania farebbe schifo.
La soluzione che sto immaginando in questo momento sarebbe quella di fare comunicazioni di base tra MCU vicine tramite GPIO o RS-232 (a buon mercato !) E usare Ethernet / ZigBee / Wi-Fi su un MCU per "zona" per comunicare con il server ( costoso , ma è ancora molto più economico di un modulo Ethernet per ogni MCU client).
Invece di cavi potrebbe anche essere possibile utilizzare fibre ottiche / fibre ottiche. Sebbene siano necessarie ulteriori conversioni, e non sono sicuro che sarebbe la soluzione migliore in questo caso. Mi piacerebbe sentire ulteriori dettagli su di loro.