Ich möchte mit der Implementierung eines Systems aus N Mikrocontrollern (N> = 2 MCUs) beginnen, möchte aber die Möglichkeiten kennen, mit denen sie miteinander kommunizieren können.
Im Idealfall werden (N-1) Mikrocontroller als Clients im Haus platziert, während der letzte (der "Server") über USB mit einem PC verbunden ist. Die Probleme, die ich momentan habe, sind, wie man diese (N-1) Mikrocontroller an den "Server" anschließt. Die Client-MCUs führen sehr einfache Aufgaben aus. Daher ist es möglicherweise keine gute Lösung, ARMs für solche einfachen Aufgaben zu verwenden, nur weil sie CAN / PHY-MAC bereitstellen .
Die Kommunikation wird bei den meisten Geräten nur einmal alle paar Minuten und bei Bedarf bei anderen Geräten stattfinden. Die Geschwindigkeit ist nicht sehr kritisch (Meldung ist kurz): 1 Mbit / s halte ich für WEG für übertrieben.
Die von mir geplanten MCUs sind die folgenden.
- Atmel AVR Tiny / Mega
- TI MSP430
- ARM Cortex M3 / M4
- (Möglicherweise Atmel AVR UC3 - 32-Bit)
Ich möchte PICs vermeiden nach Möglichkeit (persönliche Wahl), einfach weil es weniger Möglichkeiten gibt, sie zu programmieren (alle oben genannten haben mehr oder weniger Open-Source-Tools sowie einige offizielle Tools).
Ich weiß, dass einige ARMs CAN- Funktionalität bieten und bin mir bei den anderen nicht so sicher.
Im Moment habe ich mir folgende Möglichkeiten ausgedacht:
- Einfaches GPIO zum Senden von Daten (sagen wir> 16 Bits bei HIGH, um den Beginn der Nachricht anzuzeigen,> 16 Bits bei LOW, um das Ende der Nachricht anzuzeigen). Es muss sich jedoch um eine Standardfrequenz << (frequency_client, frequency_server) handeln, um alle Bits erkennen zu können. Benötigen Sie nur ein Kabel pro Client-MCU.
- RS-232 : Ich denke, dies ist das bei weitem am häufigsten verwendete Kommunikationsprotokoll, aber ich weiß nicht, wie gut es skaliert. Ich erwäge derzeit bis zu 64 Client-MCUs (wahrscheinlich später mehr)
- USB: AFAIK, das ist meistens wie RS-232, aber ich denke nicht, dass es in diesem Fall sehr gut skaliert (obwohl USB viele Geräte unterstützt - 255, wenn ich mich richtig erinnere - kann es für diese Anwendung zu kompliziert sein)
- RJ45 / Ethernet: Das würde ich sehr gerne nutzen, denn es ermöglicht die problemlose Übertragung über große Entfernungen (zumindest mit geschirmtem> Cat 6- Kabel). Das Problem sind die Kosten (PHY, MAC, Transformator, ...). Ich weiß aber nicht, ob man es zu Hause wirklich gut löten kann. Auf diese Weise würde ich keine Client-MCU benötigen
- Wireless / ZigBee : Module sind sehr teuer, obwohl es der richtige Weg ist, um "Spaghetti" hinter dem Schreibtisch zu vermeiden
- HF-Module / Transceiver: Ich spreche von denen im 300-MHz-1-GHz-Band, daher sollten sie zu Hause schwierig zu löten sein. Die Module sind alle eingebaut, aber sie sind ziemlich teuer wie das ZigBee (zumindest die RF-Module bei Mouser, bei Sparkfun scheinen es billigere zu sein).
- KÖNNEN? Es scheint sehr robust zu sein. Auch wenn ich nicht vorhabe, es in Automobilanwendungen zu verwenden, kann es dennoch eine gute Alternative sein.
- I²C / SPI / UART ? Nochmals - besser "Spaghetti" mit den Kabeln vermeiden, wenn möglich
- SPS sind eigentlich keine Option. Die Leistung nimmt mit zunehmender Länge ziemlich schnell ab und hängt von der Kapazitätsbelastung des Stromnetzes ab. Ich denke, preislich ist das ungefähr dasselbe wie Ethernet.
Welches Protokoll wäre außerdem bei gleichzeitiger Übertragung "besser" (nehmen wir den seltenen Fall an, dass zwei Geräte gleichzeitig mit der Übertragung beginnen: Welches Protokoll bietet das beste "Konfliktmanagementsystem" / "Kollisionsmanagementsystem"?
Etwas zusammenfassen : Ich würde gerne hören, welche Lösung für ein verteiltes Client-System, das eine sehr leichte Datenkommunikation bietet, die beste ist, wenn man sowohl die Flexibilität (maximale Anzahl von Geräten, Konflikt- / Kollisionsmanagementsystem, ...) als auch den Preis berücksichtigt , einfach zu Hause zu machen (löten), ... Ich möchte vermeiden, 20 $ nur für das Kommunikationsmodul auszugeben, aber gleichzeitig 30 Drähte hinter dem Schreibtisch zu haben, wäre zum Kotzen.
Die Lösung, die ich mir gerade vorstelle, wäre die einfache Kommunikation zwischen Near-MCUs über GPIO oder RS-232 ( billig !) Und die Verwendung von Ethernet / ZigBee / Wi-Fi auf einer MCU pro "Zone" für die Kommunikation mit dem Server ( teuer !) , aber es ist immer noch viel billiger als ein Ethernet-Modul pro Client-MCU).
Anstelle von Kabeln können auch Lichtwellenleiter / Lichtwellenleiter verwendet werden. Es sind jedoch zusätzliche Konvertierungen erforderlich, und ich bin nicht sicher, ob dies in diesem Fall die beste Lösung ist. Ich würde gerne weitere Details darüber erfahren.