我想开始实现一个由 N 个微控制器(N >= 2 个 MCU)组成的系统,但我想知道让它们相互通信的可能性。
理想情况下,(N-1)个微控制器被放置在房屋内充当客户端,而最后一个(“服务器”)通过 USB 连接到 PC。我现在遇到的问题是如何将这些(N-1)微控制器连接到“服务器”。客户端 MCU 执行非常简单的任务,因此仅仅因为 ARM 提供 CAN / PHY-MAC就使用 ARM 来完成这些简单的工作可能不是一个好的解决方案。
对于大多数设备,通信不会每隔几分钟发生一次以上,而对于其他设备,则根据需要进行。速度不是很关键(消息很短):1 Mbit/s 我认为对于我的目的来说太过分了。
我计划使用的MCU如下。
- 爱特梅尔 AVR 微型 / 巨型
- 德州仪器 MSP430
- ARM 皮质 M3/M4
- (可能是 Atmel AVR UC3 - 32 位)
如果可能,我想避免使用PIC(个人选择),仅仅是因为对它们进行编程的可能性较小(以上所有工具或多或少都有开源工具以及一些官方工具)。
我知道一些 ARM 提供CAN功能,但对其他的不太确定。
现在我想出了这些可能性:
- 用于发送数据的简单 GPIO(例如 > 16 位在 HIGH 表示消息开始,> 16 位在 LOW 表示消息结束)。但是,它必须处于标准频率 << (frequency_client, frequency_server) 才能检测到所有位。每个客户端 MCU 只需要一根电缆。
- RS-232:我认为这是迄今为止最常用的通信协议,但我不知道它的扩展性如何。我现在正在考虑多达 64 个客户端 MCU(以后可能会更多)
- USB:AFAIK,这主要类似于 RS-232,但我认为在这种情况下它的扩展性不是很好(尽管 USB 支持很多设备 - 如果我没记错的话是 255 - 对于这个应用程序来说可能过于复杂)
- RJ45 / 以太网:这是我真正喜欢使用的,因为它可以毫无问题地进行长距离传输(至少使用屏蔽 > Cat 6电缆)。问题在于成本(PHY、MAC、变压器……)。我不知道你是否真的可以在家里很好地焊接它。这样我就不需要客户端 MCU
- 无线 / ZigBee:模块非常昂贵,尽管它可能是避免桌子后面的“意大利面条”的方法
- RF 模块/收发器:我说的是 300 MHz - 1 GHz 频段的那些,所以它们应该很难在家焊接。这些模块都是内置的,但它们和 ZigBee 一样昂贵(至少 Mouser 的 RF 模块,Sparkfun 的模块似乎更便宜)。
- 能够?它似乎非常健壮。尽管我不打算在汽车应用中使用它,但它可能仍然是一个不错的选择。
- I²C / SPI / UART ? 再次 - 如果可能的话,最好避免使用电缆“意大利面”
- PLC并不是一个真正的选择。随着长度的增加,性能会迅速下降,这取决于电力网络的电容负载。我认为价格方面与以太网大致相同。
此外,在同时传输的情况下哪个协议会“更好”(让我们假设在同一时刻两个设备开始传输的罕见情况:哪个协议提供最好的“冲突管理系统”/“冲突管理系统”?
总结一下:考虑到灵活性(最大设备数量、冲突/冲突管理系统......)、价格,我想听听对于进行非常轻量数据通信的分布式客户端系统来说,什么可能是最佳解决方案,易于在家制作(焊接),......我想避免在通信模块上花费 20 美元,但同时在桌子后面有 30 根电线会很糟糕。
我现在正在想象的解决方案是通过 GPIO 或 RS-232(便宜!)在附近的 MCU 之间进行基本通信,并在每个“区域”的一个 MCU 上使用以太网 / ZigBee / Wi-Fi 与服务器通信(昂贵,但它仍然比每个客户端 MCU 一个以太网模块便宜很多)。
代替电缆,也可以使用光纤/光纤。尽管需要进行额外的转换,但我不确定这是否是这种情况下的最佳解决方案。我想听听有关它们的更多详细信息。