Я хотел бы начать реализацию системы, состоящей из N микроконтроллеров (N> = 2 микроконтроллеров), но я хотел бы знать возможности, позволяющие им общаться друг с другом.
В идеале (N-1) микроконтроллеры размещаются внутри дома, выступая в качестве клиентов, а последний («серверный») подключается к ПК через USB. Проблема, с которой я столкнулся сейчас, заключается в том, как подключить эти (N-1) микроконтроллеры к «серверу». Клиентские микроконтроллеры выполняют очень простые задачи, поэтому использование ARM для выполнения таких простых задач может оказаться не лучшим решением только потому, что они предоставляют CAN / PHY-MAC .
Связь будет происходить не чаще, чем раз в несколько минут для большинства устройств и по запросу для других. Скорость не очень критична (сообщение короткое): 1 Мбит / с. Я думаю, что это ПУТЬ излишним для моих целей.
MCU, которые я планирую использовать, следующие.
- Atmel AVR Tiny / Mega
- TI MSP430
- ARM Cortex M3 / M4
- (Возможно Atmel AVR UC3 - 32-разрядная версия)
Я хотел бы избежать PIC (по собственному выбору) просто потому, что у них меньше возможностей для их программирования (все вышеперечисленные имеют более или менее инструменты с открытым исходным кодом, а также некоторые официальные инструменты).
Я знаю, что некоторые ARM обеспечивают функциональность CAN, и я не уверен в других.
Прямо сейчас я придумал эти возможности:
- Простой GPIO для отправки данных (скажем,> 16 битов в HIGH, чтобы указать начало сообщения,> 16 битов в LOW, чтобы указать конец сообщения). Однако он должен быть на стандартной частоте << (Frequency_Client, Frequency_Server), чтобы иметь возможность обнаруживать все биты. Требуется только один кабель для каждого клиентского MCU.
- RS-232 : Я думаю, что это наиболее часто используемый протокол связи, но я не знаю, насколько хорошо он масштабируется. Я рассматриваю до 64 клиентских микроконтроллеров прямо сейчас (возможно, позже)
- USB: AFAIK это в основном как RS-232, но я не думаю, что в этом случае он очень хорошо масштабируется (хотя USB поддерживает множество устройств - 255, если я правильно помню - это может быть слишком сложно для этого приложения)
- RJ45 / Ethernet: это то, что я действительно хотел бы использовать, потому что он позволяет без проблем передавать на большие расстояния (по крайней мере, с экранированным кабелем > 6 ). Проблема в стоимости (PHY, MAC, трансформатор, ...). Я не знаю, можете ли вы действительно хорошо спаять это дома, хотя. Таким образом, мне не нужен клиент MCU
- Wireless / ZigBee : модули очень дороги, хотя это может быть путь, чтобы избежать "спагетти" за столом
- РЧ-модули / приемопередатчики: я говорю о тех, кто работает в полосе 300 МГц - 1 ГГц, поэтому их трудно припаять дома. Все модули встроены, но они такие же дорогие, как ZigBee (по крайней мере, модули RF в Mouser, в Sparkfun, кажется, дешевле).
- МОЧЬ? Это кажется очень надежным. Несмотря на то, что я не планирую использовать его в автомобильной промышленности, он все еще может быть хорошей альтернативой.
- I²C / SPI / UART ? Опять же - лучше избегайте "спагетти" с кабелями, если это возможно
- ПЛК на самом деле не вариант. Производительность снижается довольно быстро, так как длина увеличивается и зависит от емкостной нагрузки электросети. Я думаю, что цена примерно такая же, как Ethernet.
Кроме того, какой протокол будет «лучше» в случае одновременных передач (допустим, редкий случай, когда в одно и то же время начинают передавать два устройства: какой протокол обеспечивает наилучшую «систему управления конфликтами» / «систему управления конфликтами»?
Подводя итог : я хотел бы услышать, что может быть лучшим решением для распределенной клиентской системы, которая обеспечивает очень легкую передачу данных, учитывая гибкость (максимальное количество устройств, система управления конфликтами / коллизиями, ...), цену Легко сделать дома (пайка), ... Я бы хотел не тратить 20 $ только на коммуникационный модуль, но в то же время иметь 30 проводов за столом было бы плохо.
Решение, которое я сейчас себе представляю, состоит в том, чтобы выполнить базовую связь между соседними MCU с помощью GPIO или RS-232 ( дешево !) И использовать Ethernet / ZigBee / Wi-Fi по одному MCU на «зону» для связи с сервером ( дорого). , но это все еще намного дешевле, чем один модуль Ethernet на каждый клиентский MCU).
Вместо кабелей также можно использовать оптоволоконные / оптические волокна. Хотя необходимы дополнительные преобразования, и я не уверен, что это будет лучшим решением в этом случае. Я хотел бы услышать дополнительные детали о них.