Chciałbym zacząć wdrażać system składający się z N mikrokontrolerów (N> = 2 MCU), ale chciałbym wiedzieć, jakie są możliwości komunikacji między nimi.
Idealnie, mikrokontrolery (N-1) są umieszczone w domu, działając jako klienci, podczas gdy ostatni („serwer”) jest podłączony do komputera PC przez USB. Problem, który mam teraz, to sposób połączenia tych mikrokontrolerów (N-1) z „serwerem”. MCU klientów wykonują bardzo proste zadania, więc może nie być dobrym rozwiązaniem użycie ARM do wykonywania tak prostych zadań tylko dlatego, że zapewniają CAN / PHY-MAC .
Komunikacja nie będzie się powtarzać częściej niż raz na kilka minut dla większości urządzeń i na żądanie dla innych. Szybkość nie jest bardzo krytyczna (wiadomość jest krótka): 1 Mbit / s Myślę, że jest to MOŻLIWA przesada w moich celach.
MCU, których zamierzam używać, są następujące.
- Atmel AVR Tiny / Mega
- TI MSP430
- ARM Cortex M3 / M4
- (Prawdopodobnie Atmel AVR UC3 - 32-bit)
Chciałbym unikać PIC, jeśli to możliwe (osobisty wybór), po prostu dlatego, że są mniejsze możliwości ich programowania (wszystkie powyższe mają mniej lub więcej narzędzi open source, a także niektórych oficjalnych narzędzi).
Wiem, że niektóre ARM zapewniają funkcjonalność CAN i nie jestem pewien co do innych.
W tej chwili wymyśliłem te możliwości:
- Proste GPIO do wysyłania danych (powiedzmy> 16 bitów przy WYSOKIM, aby wskazać początek wiadomości,> 16 bitów przy NISKIM, aby wskazać koniec wiadomości). Jednak musi być na standardowej częstotliwości << (częstotliwość_klient, częstotliwość_serwer), aby móc wykryć wszystkie bity. Potrzebuję tylko jednego kabla na MCU klienta.
- RS-232 : Myślę, że jest to zdecydowanie najczęściej używany protokół komunikacyjny, ale nie wiem, jak dobrze się skaluje. Rozważam obecnie do 64 MCU klienta (prawdopodobnie później)
- USB: AFAIK jest to w większości jak RS-232, ale nie sądzę, aby skalowało się w tym przypadku bardzo dobrze (chociaż USB obsługuje wiele urządzeń - 255, jeśli dobrze pamiętam - może być zbyt skomplikowane dla tej aplikacji)
- RJ45 / Ethernet: właśnie tego chciałbym używać, ponieważ pozwala na przesyłanie bez problemu na duże odległości (przynajmniej z ekranowanym kablem > Cat 6 ). Problemem jest koszt (PHY, MAC, transformator, ...). Nie wiem jednak, czy da się to dobrze lutować w domu. W ten sposób nie potrzebowałbym MCU klienta
- Wireless / ZigBee : moduły są bardzo drogie, choć może to być dobry sposób, aby uniknąć „spaghetti” za biurkiem
- Moduły RF / nadajniki-odbiorniki: Mówię o tych w paśmie 300 MHz - 1 GHz, więc powinny być trudne do lutowania w domu. Wszystkie moduły są wbudowane, ale są tak samo drogie jak ZigBee (przynajmniej moduły RF w Mouser, w Sparkfun wydają się być tańsze).
- MOGĄ? Wydaje się być bardzo solidny. Mimo że nie planuję używać go w aplikacjach motoryzacyjnych, może być dobrą alternatywą.
- I²C / SPI / UART ? Znowu - lepiej unikać „spaghetti” z kablami, jeśli to możliwe
- Sterowniki PLC nie są tak naprawdę opcją. Wydajność spada dość szybko wraz ze wzrostem długości i zależy od obciążenia pojemnościowego sieci energetycznej. Myślę, że pod względem ceny jest mniej więcej taki sam jak Ethernet.
Ponadto, który protokół byłby „lepszy” w przypadku jednoczesnych transmisji (załóżmy rzadki przypadek, że w tym samym momencie dwa urządzenia zaczynają transmitować: który protokół zapewnia najlepszy „system zarządzania konfliktami” / „system zarządzania kolizjami”?
Podsumowując : chciałbym usłyszeć, jakie może być najlepsze rozwiązanie dla rozproszonego systemu klienta, który zapewnia bardzo lekką komunikację danych, biorąc pod uwagę zarówno elastyczność (maksymalna liczba urządzeń, system zarządzania konfliktami / kolizjami, ...), cenę , łatwe do zrobienia w domu (lutowanie), ... Chciałbym uniknąć wydawania 20 $ na sam moduł komunikacyjny, ale jednocześnie posiadanie 30 przewodów za biurkiem byłoby do bani.
Rozwiązaniem, które teraz obrazuję, byłoby wykonanie podstawowej komunikacji między bliskimi MCU przez GPIO lub RS-232 ( tanio !) I użycie Ethernet / ZigBee / Wi-Fi na jednym MCU na „strefę” do komunikacji z serwerem ( drogie , ale wciąż jest znacznie tańszy niż jeden moduł Ethernet na każdy MCU klienta).
Zamiast kabli można równie dobrze zastosować włókna światłowodowe / światłowodowe. Chociaż konieczne są dodatkowe konwersje i nie jestem pewien, czy byłoby to najlepsze rozwiązanie w tym przypadku. Chciałbym usłyszeć o nich dodatkowe szczegóły.