我正在构建一个爱好6自由度的机械臂,想知道最好的方式是在处理器之间进行通信(3-4个AVR,最大间隔为18英寸)。我想让控制环在计算机上运行,​​该计算机通过Atmega32u4 USB-to-???向微处理器发送命令?桥接。

我正在考虑一些想法:


RS485


优点:所有处理器都在同一根电线上,差分信号更健壮
缺点:需要额外的芯片,需要编写(或查找?)协议以防止处理器同时传输


UART循环(即TX)一个处理器的一个连接到下一个RX)



CANbus(对此我知之甚少)

我的主要考虑因素是硬件和固件的复杂性,性能和价格(我可以不要购买昂贵的现成系统)。

#1 楼

您要使用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微控制器都支持两个单独的SPI端口,因此每个设备在两个不同的网络中可以有不同的位置。

话虽如此,如果您的树/层次结构中需要多个级别(超过2个),则上述解决方案使用resi故事变得太愚蠢而无法工作。在这种情况下,您应该在树的每一层之间更改SPI网络。这意味着每个设备将在一个SPI网络上连接其子设备,并在另一SPI网络上连接其父设备。尽管这意味着您只有一棵连接树,但优点是设备可以同时与其子代和父代进行通信,并且您没有灵活的电阻器(总是很难选择正确的值) 。

由于它具有独立的MOSI和MISO导线,因此主设备和从设备都可以同时进行通信,这使其潜在的速度提高了两倍。对于每个附加从机,从机选择都需要一个额外的引脚,但这并不是很大的负担,即使10个不同的从机也只需要10个额外的引脚,就可以轻松地将其容纳在典型的AVR微控制器中。

指定的AVR微控制器不支持CAN。由于还有其他不错的选择,因此在这种情况下可能并不重要。


推荐使用SPI,因为它速度快,接线也不会太复杂,而且不会需要灵巧的上拉电阻。在SPI无法完全满足您的需求的极少数情况下(可能是在更复杂的网络中),您可以使用多个选项(例如,同时使用两个SPI端口和双线接口,以及将一些微控制器配对使用USART循环!)

在您的情况下,使用SPI意味着,具有USB连接到计算机的微控制器自然可以成为主机,并且可以将来自计算机的相关命令转发给每个从设备。它还可以读取每个从属设备的更新/测量结果并将其发送到计算机。

在8MHz和0.5m的导线长度下,我认为这不会成为问题。但如果是这样,请尝试更小心电容(保持接地和信号线之间的距离太近,并注意不同导体之间的连接)以及信号端接。万一仍然存在问题,可以降低时钟速率,但我认为没有必要。

评论


$ \ begingroup $
我支持SPI
$ \ endgroup $
–georgebrindeiro
2012年12月29日23:50

$ \ begingroup $
我也很喜欢SPI,尽管也许I2C也值得考虑(避免每个设备都需要单独的CS线)。但是,CAN不应该那么容易被淘汰-毕竟,它是首选的汽车总线,因此,我不排除将它用于业余机器人!
$ \ endgroup $
–安德鲁♦
2012-12-30 10:24



$ \ begingroup $
SPI总线是否真的需要从主机到每个从机的单独CS线?如果是这样,那么在SPI总线上的Wikipedia文章中提到了,无论连接了多少个从机,您怎么称呼那只需要与主机精确地4个连接的另一条总线?
$ \ endgroup $
–大卫·卡里(David Cary)
2012年12月30日13:15

$ \ begingroup $
+1为了获得巨大的反响,我是一所古老的学校,我喜欢485总线,并且通常使用带有软件地址的总线,但是在这种情况下,速度和资源消耗组件我会选择SPI。尽管您会特别注意距离和电气噪声,尤其是如果总线与其他具有不同传输速度的IC(例如内存,NIC等)并存时,可能会出现电压不足和时钟丢失幅度的情况。
$ \ endgroup $
– RTOSkit
2012-12-30 23:20

$ \ begingroup $
您对CAN的评论不准确。 CAN不仅仅是任何2线总线。我认为您将其与I2C混淆,后者的最高速度为400kbps。 CAN的最高速度为1Mbps。
$ \ endgroup $
– Rocketmagnet
13年1月2日,12:50

#2 楼

我强烈推荐CAN用于处理器间通信。我们在机器人中使用它,同一总线上最多有22个处理器。通过良好的协议设计,您可以使用大约90%的可用带宽(如果将所有错误检查和帧间间隔都考虑在内,则大约为640kbps)。我们能够在一条CAN总线上以1000Hz的频率伺服10台电动机。这已接近极限。如果非常仔细地打包数据,则可能会将其压缩到20个电动机上。

通常,每个处理器的CAN需要一个收发器芯片(这只是一个8针设备)。该收发器可为您提供出色的差分信号,该信号几乎不会产生干扰,如果在嘈杂的电气环境(电机,螺线管和无线电发射器)中工作,它也可以不受干扰。



但是,在有限的情况下,实际上可以在不使用收发器的情况下使用CAN。




如果要实现带宽较大的总线,建议您尝试EtherCAT。这是一条100Mb的总线,可以连接到PC的以太网端口。总线有两个重要部分:


桥梁。这将以太网物理层转换为更简单,成本更低的LVDS物理层,该物理层不需要大型连接器,Phy芯片以及以太网本身需要的许多组件。
节点。每个节点只需要一个ET1200芯片和一个微控制器。

PC可以以1kHz或更快的速度与节点之间收发大量数据。您可以在单个EtherCAT总线上控制很多东西。

添加:

Shadow Robot Company现在出售一种有用的EtherCAT总线系统,称为Ronex。它使您可以添加很多I / O,并且它们很快将引入许多其他类型的板,例如电机控制器和高质量ADC。

评论


$ \ begingroup $
该图像的来源是什么?它的红色和蓝色导线均具有CAN高电平。
$ \ endgroup $
–伊恩
13年10月31日在16:31

#3 楼

我知道我正在挖掘一个旧线程,这是不切实际的话题,但是我认为您无法从Beckhoff获得ET1200芯片。我不久前给他们发送了电子邮件,并被告知我需要加入Ethercat组。为此,我必须证明我将为团队做出贡献-即通过制造和销售使用Ethercat组件的设备。在那个(和这个)时间点上,我仍在为我的设备(用于机器人应用的无刷电机控制器,目前正在使用CAN)制作原型,所以我什么也不能提供(我不能给完成工作留下足够的时间-我仍然在为我工作)本科)。我对他们表示失望。他们说不要失望!很有趣的东西!
我真的很想进入Ethercat,但是ASIC似乎对于业余爱好者或没有公司的人来说是不可接触的。
此外,这是我的第一篇文章,所以如果我通过挖掘激怒了众神而道歉上一个旧帖子!

评论


$ \ begingroup $
欢迎。如果答案合适,可以复活旧帖子。您的评论似乎与我有关...
$ \ endgroup $
–安德鲁♦
13年11月11日在19:40

$ \ begingroup $
谢谢队友。这是一个很棒的论坛!出于兴趣,您对Ethercat有任何经验吗?您是否碰巧知道其他任何方法来获得适合在PCB上进行原型设计的从设备?我愿意付钱,但目前我根本不满足加入该团队购买Bechoff ASIC的要求。令人沮丧!
$ \ endgroup $
–法律
13年13月13日在6:32

$ \ begingroup $
不是EtherCat,不是。我使用CAN(一个不错的选择),LIN(不是很好的IMHO),并且肯定可以推荐SPI或I2C
$ \ endgroup $
–安德鲁♦
13年11月13日在7:05



$ \ begingroup $
您是否成功控制了ET1100或ET1200芯片?如果您没有提供的话,现在还有另一个选择:微芯片LAN9252,它与ET1100兼容并且运行良好。使用SOES库的问候
$ \ endgroup $
–user14818
16-09-23在22:30