机械手臂的处理器间通信


13

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

我正在考虑的一些想法:

  1. RS485
    • 优点:所有处理器都在同一条线上,差分信号更强大
    • 缺点:需要额外的芯片,需要编写(或查找?)协议以防止处理器同时传输
  2. UART循环(即,一个处理器的TX连接到下一处理器的RX)
    • 优点:简单的固件,处理器内置UART
    • 缺点:上一次连接必须经过机械手的行程,每个处理器必须花费周期来重新传输消息
  3. CANbus(对此我知之甚少)

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

Answers:


13

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


从我竖起大拇指对SPI
georgebrindeiro

2
我也很喜欢SPI,尽管也许I2C也值得考虑(避免对每个设备使用单独的CS线)。但是,CAN不应该那么容易被淘汰-毕竟,它是首选的汽车总线,因此,我不排除将它用于业余机器人!
安德鲁

SPI总线真的需要从主机到每个从机的单独CS线吗?如果是这样,那么在SPI总线上的Wikipedia文章中提到了,无论连接了多少个从机,您怎么称呼那一条需要与主机精确连接4条的总线
大卫·卡里

1
+1对于巨大的响应,我是老学校,我喜欢485,并且通常使用带有软件地址的总线,但是在这种情况下,考虑速度和资源消耗组件,我会选择SPI。尽管您会特别注意距离和电气噪声,尤其是如果总线与其他具有不同传输速度的IC(例如内存,NIC等)
并存时

3
您对CAN的评论不准确。CAN不仅仅是任何2线总线。我认为您将其与I2C混淆,后者的最高速度为400kbps。CAN的最高速度为1Mbps。
Rocketmagnet 2013年

5

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

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

CAN总线连接

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


以太网猫

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

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

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

添加:

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


该图像的来源是什么?它具有CAN High红色和蓝色导线。
2013年

1

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


欢迎。如果答案合适,可以复活旧帖子。您的评论似乎与我有关...
安德鲁

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

不是EtherCat,不是。我使用CAN(一个不错的选择),LIN(不是很好的IMHO),并且可以肯定地推荐使用SPI或I2C
Andrew

您是否成功控制了ET1100或ET1200芯片?如果您没有提供的话,现在还有另一个选择:微芯片LAN9252,它与ET1100兼容并且运行良好。使用
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.