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