Я хотів би почати впроваджувати систему, що складається з N мікроконтролерів (N> = 2 MCU), але я хотів би знати можливості дозволити їм спілкуватися один з одним.
В ідеалі мікроконтролери (N-1) розміщуються всередині будинку, виконуючи функції клієнтів, а останній ("серверний") підключається до ПК через USB. Зараз у мене проблеми - як підключити ці (N-1) мікроконтролери до "сервера". Клієнтські MCU виконують дуже прості завдання, тому, можливо, це не вдале рішення використовувати ARM для виконання таких простих завдань лише тому, що вони забезпечують CAN / PHY-MAC .
Зв'язок не відбуватиметься не один раз кожні кілька хвилин на більшості пристроїв та на вимогу інших. Швидкість не дуже критична (повідомлення коротке): 1 Мбіт / с. Я думаю, що ВИЩО надмірний для моїх цілей.
MCU, які я планую використовувати, є наступними.
- Atmel AVR Tiny / Mega
- TI MSP430
- ARM Cortex M3 / M4
- (Можливо Atmel AVR UC3 - 32-розрядна)
Я б хотів уникнути ПІК, якщо це можливо (особистий вибір), просто тому, що можливостей їх програмування менше (всі перелічені вище мають більш-менш інструменти з відкритим кодом, а також деякі офіційні засоби).
Я знаю, що деякі зброї забезпечують функціональність CAN, і я не дуже впевнений в інших.
Саме зараз я придумав такі можливості:
- Простий GPIO для надсилання даних (скажімо,> 16 біт у HIGH, щоб вказати початок повідомлення;> 16 біт у LOW, щоб вказати кінець повідомлення). Однак він повинен бути на стандартній частоті << (frequency_client, frequency_server), щоб мати можливість виявляти всі біти. На клієнтський MCU потрібен лише один кабель.
- RS-232 : Я думаю, що це далеко не найчастіше використовується протокол зв'язку, але я не знаю, наскільки добре він масштабується. Я зараз розглядаю до 64 клієнтських MCU (можливо, пізніше)
- USB: AFAIK це, як правило, як RS-232, але я не думаю, що це дуже добре розширюється в цьому випадку (хоча USB підтримує безліч пристроїв - 255, якщо я правильно пам'ятаю - це може бути надто складним для цієї програми)
- RJ45 / Ethernet: це те, що я дуже хотів би використовувати, тому що він дозволяє передавати на великі відстані без проблем (принаймні, із екранованим> кабелем Cat 6 ). Проблема - вартість (PHY, MAC, трансформатор, ...). Я не знаю, чи можна насправді добре спаяти його вдома. Таким чином, мені не знадобиться клієнтський MCU
- Wireless / ZigBee : модулі дуже дорогі, хоча це може бути шлях, щоб уникнути "спагетті" за столом
- РЧ-модулі / приймачі: Я говорю про тих, що знаходяться в діапазоні 300 МГц - 1 ГГц, тому вдома вони повинні бути важкими для пайки. Усі модулі вбудовані, але вони є такими ж дорогими, як і ZigBee (принаймні, модулі РФ у Mouser, у Sparkfun, здається, дешевші).
- МОЖЕ? Це здається дуже надійним. Незважаючи на те, що я не планую використовувати його в автомобільних додатках, це все одно може бути хорошою альтернативою.
- I²C / SPI / UART ? Знову ж таки - краще уникайте "спагетті" з кабелями, якщо можливо
- ПЛК насправді не є варіантом. Продуктивність погіршується досить швидко, оскільки довжина збільшується і залежить від навантаження ємності електромережі. Я думаю, що ціна приблизно така ж, як і Ethernet.
Крім того, який протокол був би "кращим" у випадку одночасних передач (припустимо, рідкісний випадок, коли саме в цей же момент два пристрої починають передавати: який протокол забезпечує найкращу "систему управління конфліктами" / "систему управління зіткненнями"?
Підсумовуючи це : я хотів би почути, що може бути найкращим рішенням для розподіленої клієнтської системи, яка здійснює дуже легкий обмін даними, враховуючи гнучкість (максимальна кількість пристроїв, система управління конфліктами / зіткненнями, ...), ціну , легко зробити в домашніх умовах (паяти), ... Я хотів би не витрачати 20 доларів на лише комунікаційний модуль, але в той же час, якщо 30 стіл за столом буде смоктати.
Рішення, яке я зараз уявляю, було б зробити базовий зв'язок між MCU поблизу GPIO або RS-232 ( дешево !) Та використовувати Ethernet / ZigBee / Wi-Fi на одному MCU за "зону" для спілкування з сервером ( дорого) , але це все-таки набагато дешевше, ніж один модуль Ethernet на кожен MCU клієнта).
Замість кабелів, можливо, також можна використовувати оптичні / оптичні волокна. Хоча додаткові конверсії необхідні, і я не впевнений, чи було б це найкращим рішенням у цьому випадку. Я хотів би почути додаткові деталі щодо них.