您要使用USB与计算机进行通信。如果您有许多微控制器,则可能只会将其中一个微控制器直接连接到计算机。其他微控制器将需要从主微控制器获取命令。
您选择的通信方式取决于许多因素:
- 所需的带宽(我们假设您以16MHz的频率运行它们)
- 复杂度(接线和编码)
- 双向或主从
几乎所有选件都具有AVR微控制器的内置支持。没有比内置选项更合理的选项,因为内置选项需要额外的硬件。因为它们具有内置支持,所以软件的复杂性都是相似的,您只需配置端口(使用寄存器),将要发送的数据放在另一个寄存器中,然后通过在另一个寄存器中设置一个位来触发发送。在另一个寄存器中找到接收到的所有数据,并触发一个中断,以便您进行处理。无论选择哪个选项,唯一的区别就是寄存器位置的更改以及配置寄存器的某些更改。
USART循环具有以下功能:
- CLK / 16的最大波特率= 1MHz(在16MHz时钟下),这是大约90KB / s的传输速率
- 完全双向通信(无主机名或从机名)
- 每对微控制器之间都需要分开的导线-Atmega32u4本机支持两个USART端口,从而限制了您实际上可以在网络中连接的微控制器的数量(否则最终会产生一长串微控制器-即,以链接列表的形式连接)方式)
注意:这也是您用于获得RS232通信的方式,但由于RS232需要10V,因此它需要驱动器来获得这些电压电平。对于微控制器之间的通信,这没有用(仅更改电压电平)。
RS485:
- 本质上,您以不同的模式使用USART端口-带宽没有优势,它可能只会稍微简化布线,但也会使其复杂化。不建议这样做。
两线接口:
这也称为I2C。这意味着所有设备共享相同的两条线。
两条线上都需要一个上拉电阻
它很慢(因为上拉电阻的值受到限制,并且随着器件数量的增加和导线长度的增加,电容也随之增加)。对于此AVR微控制器,速度高达400 kHz-比USART慢(但该速度取决于限制电容)。原因是尽管设备将数据线驱动为低电平,但相反的过渡是通过使数据线再次浮空(上拉电阻)来实现的。
当您考虑所有通信共享相同的有限带宽时,速度甚至会更慢。由于所有通信共享相同的有限带宽,因此在通信中可能会有延迟,数据必须等待直到网络空闲才可以发送。如果不断发送其他数据,则也可能阻止该数据发送。
它确实依赖于主从协议,其中主节点寻址从节点,然后发送命令/请求,然后从节点进行回复。一次只能一个设备进行通信,因此从设备必须等待主设备完成。
任何设备都可以充当主设备和/或从设备,这使其非常灵活。
SPI
这是我建议/用于微控制器之间的常规通信的内容。
它具有很高的速度-最高CLK / 2 = 8MHz(对于CLK为16MHz),使其成为最快的方法。这是可以实现的,因为它单独用于时钟。
MOSI,MISO数据和SCK时钟线在整个网络中共享,这意味着其布线更简单。
它是主从格式,但是任何设备都可以是主从设备。但是,由于从站选择的复杂性,对于共享布线(在网络内),您只能以分层方式使用(与两线接口不同)。IE浏览器 如果将所有设备组织到树中,则设备应仅是其子设备的主设备,而应仅是其父设备的从设备。这意味着在从模式下,设备将始终具有相同的主设备。另外,要正确执行此操作,您需要在MISO / MOSI / SCK的上游主机上增加电阻,这样,如果设备在下游进行通讯(未选择为从机时),则通讯将不会影响其他部分的通讯。网络(请注意,使用电阻器可以执行此操作的级别数是有限的,有关使用两个SPI端口的更好解决方案,请参见下文)。
当从属选择时,AVR微控制器可以自动将MOSI信号置于三态,并切换到从属模式(如果处于主模式)。
尽管可能需要分层网络,但大多数网络都可以树状组织,因此通常不是重要的限制
由于每个AVR微控制器都支持两个单独的SPI端口,因此上述内容可以略微放松,因此每个设备在两个不同网络中的位置可以不同。
话虽如此,如果您的树/层次结构中需要多个级别(超过2个),则上述使用电阻器的解决方案就太麻烦了。在这种情况下,您应该在树的每一层之间更改SPI网络。这意味着每个设备将在一个SPI网络上连接其子设备,并在另一SPI网络上连接其父设备。尽管这意味着您只有一棵连接树,但好处是设备可以同时与其子代和父代进行通信,并且您没有灵活的电阻器(总是很难选择正确的值) 。
由于它具有独立的MOSI和MISO电线,因此主设备和从设备都可以同时进行通信,这使其潜在的速度提高了两倍。每个附加从机的从机选择都需要一个额外的引脚,但这并不是很大的负担,即使10个不同的从机也只需要10个额外的引脚,就可以很容易地将其容纳在典型的AVR微控制器中。
您指定的AVR微控制器不支持CAN。由于还有其他好的选择,因此在这种情况下可能并不重要。
推荐使用SPI,因为它速度快,接线不太复杂并且不需要灵巧的上拉电阻。在SPI无法完全满足您的需求的极少数情况下(可能是在更复杂的网络中),您可以使用多个选项(例如,同时使用两个SPI端口和双线接口,以及将一些微控制器配对使用USART循环!)
在您的情况下,使用SPI意味着自然可以将具有USB连接到计算机的微控制器作为主机,并且可以将相关命令从计算机转发到每个从属设备。它还可以从每个从站读取更新/测量并将其发送到计算机。
在8MHz和0.5m的线长下,我认为这不会成为问题。但如果是这样,请尝试更小心电容(保持接地和信号线之间的距离太近,并注意不同导体之间的连接)以及信号端接。万一仍然存在问题,可以降低时钟速率,但是我认为没有必要。