三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

机械臂底层通信协议:Modbus、RS485、CAN、EtherCAT 详解

机械臂底层通信协议:Modbus、RS485、CAN、EtherCAT 详解

机械臂底层通信协议:Modbus、RS485、CAN、EtherCAT 详解

机械臂不会说话,但它靠这些协议"开口"——通信协议选错了,你的机械臂就是个哑巴。

一、为什么机械臂需要这么多协议?

机械臂不是一个孤立的设备,它是一套多节点协同系统:上位机发指令,各关节驱动器执行,编码器回传位置,限位开关报告状态。这些节点之间的数据交互,就是靠通信协议完成的。

你可能会问:为啥不能统一用一个协议?原因很简单——不同场景对延迟、可靠性、成本的要求千差万别。低端教学机械臂用串口就够了,工业级六轴机械臂需要μs级实时总线。协议选型,本质上是在性能与成本之间做权衡

机械臂通信架构的经典拓扑:

上位机(PC/嵌入式板) │ │ EtherCAT / CAN / RS485 总线 │ ├──→ 关节1驱动器 ──→ 电机1 ├──→ 关节2驱动器 ──→ 电机2 ├──→ 关节3驱动器 ──→ 电机3 ├──→ ... └──→ 关节N驱动器 ──→ 电机N

上位机通过总线广播指令,各驱动器响应并反馈状态。总线协议决定了这条"神经通路"的速度和可靠性。

二、RS485物理层:差分信号的硬功夫

RS485不是协议,而是物理层电气标准。它定义了"信号怎么在电缆上跑",但不管"跑的数据是啥格式"。

2.1 差分信号原理

RS485用两根线(A、B)传输差分信号:

  • 逻辑1:A比B高 2~6V
  • 逻辑0:B比A高 2~6V

差分信号的核心优势是抗干扰。工业现场电磁噪声满天飞,单端信号一根线上的噪声直接叠加到数据上,差分信号两根线受到的噪声几乎相同,接收端做减法后噪声被抵消。这就是RS485能在工厂车间稳定跑数公里的原因。

2.2 多点通信与拓扑

RS485支持1个发送器 + 最多32(新标准256)个接收器的多点通信。总线拓扑必须是直线型或分支短桩型,两端需要加120Ω终端电阻匹配阻抗,防止信号反射。

2.3 波特率与距离关系

距离最大波特率
12m10 Mbps
120m1 Mbps
1200m100 kbps
4800m≤ 19.2 kbps

距离越远,信号衰减越大,波特率必须降低。机械臂内部通信距离通常 <10m,可以跑到较高的波特率。

三、Modbus-RTU:机械臂的"老大哥"协议

Modbus诞生于1979年,是工业自动化领域最古老也最普及的协议。Modbus-RTU基于RS485物理层,采用主从模式:上位机(主站)发起请求,驱动器(从站)响应。

3.1 寄存器模型

Modbus把设备内部数据抽象为四类寄存器:

类型地址范围读写典型用途
Coil0x0000R/W开关量输出(电机启停)
Discrete Input0x1000R开关量输入(限位开关)
Holding Register0x4000R/W关节角度目标值
Input Register0x3000R关节角度实际值

控制关节角度的典型流程:

  1. 写 Holding Register → 设置目标角度
  2. 读 Input Register → 获取实际角度
  3. 闭环比较 → 修正指令

3.2 Modbus-RTU帧结构

| 从站地址(1B) | 功能码(1B) | 数据(NB) | CRC(2B) |

功能码是最关键的字段:0x03读保持寄存器,0x06写单个寄存器,0x10写多个寄存器。CRC16校验确保数据完整性。

3.3 C代码示例:Modbus-RTU读取关节角度

#include<stdint.h>#include<stdio.h>// CRC16校验计算(Modbus标准)uint16_tmodbus_crc16(constuint8_t*data,uint16_tlen){uint16_tcrc=0xFFFF;for(uint16_ti=0;i<len;i++){crc^=data[i];for(uint8_tj=0;j<8;j++){if(crc&0x0001)crc=(crc>>1)^0xA001;elsecrc>>=1;}}returncrc;}// 构造Modbus-RTU读取请求帧intbuild_read_request(uint8_tslave_addr,uint16_treg_addr,uint16_treg_count,uint8_t*frame){frame[0]=slave_addr;// 从站地址frame[1]=0x03;// 功能码:读保持寄存器frame[2]=(reg_addr>>8)&0xFF;// 寄存器起始地址高字节frame[3]=reg_addr&0xFF;// 低字节frame[4]=(reg_count>>8)&0xFF;// 寄存器数量高字节frame[5]=reg_count&0xFF;// 低字节uint16_tcrc=modbus_crc16(frame,6);frame[6]=crc&0xFF;// CRC低字节frame[7]=(crc>>8)&0xFF;// CRC高字节return8;// 帧长度}// 使用示例:读取从站1的0x4000地址起2个寄存器(关节1角度)uint8_ttx_frame[8];intlen=build_read_request(0x01,0x4000,0x0002,tx_frame);// 将tx_frame通过RS485串口发送出去...

这段代码构造了一个标准的Modbus-RTU请求帧,发送后等待从站响应,响应帧中就包含关节角度数据。

四、CAN总线:工业级的"仲裁大师"

CAN(Controller Area Network)最初为汽车设计,后来被工业自动化广泛采纳。它的核心杀手锏是非破坏性仲裁机制

4.1 仲裁机制:谁优先谁先发

CAN总线采用线与逻辑:显性位(0)覆盖隐性位(1)。当多个节点同时发送时,每个节点边发边监听:

  • 发送隐性位(1)但读到显性位(0)→ 说明有更高优先级的节点在发 → 立即退让
  • 发送显性位(0)且读到显性位(0)→ 继续发送

仲裁通过报文ID完成:ID越小优先级越高。这个机制零开销——不需要额外的仲裁时间,最高优先级的报文无损发送。对于机械臂多关节实时控制,这意味着紧急指令(如急停)永远能第一时间到达。

4.2 CAN帧结构

标准CAN帧(CAN 2.0A):

| 帧起始(1bit) | 仲裁场(11bit ID) | 控制场(6bit) | 数据场(0-8B) | CRC(15bit) | ACK(2bit) | 帧结束(7bit) |

最多8字节数据载荷,对于机械臂关节角度(通常2字节/轴)刚好够用。CAN FD扩展了数据场到64字节,带宽也更高。

4.3 为什么机械臂爱用CAN

  • 可靠性:CRC校验 + 错误帧 + 自动重发,5级错误检测机制
  • 实时性:仲裁零开销,高优先级报文延迟确定性
  • 多节点:理论110个节点,实际可达更多
  • 抗干扰:差分信号,和RS485同理

五、EtherCAT:μs级实时总线之王

EtherCAT是Beckhoff公司开发的基于以太网的实时总线协议,专为高性能运动控制设计。

5.1 “Processing on the fly”——数据在帧飞过时被读写

EtherCAT的绝招是:以太网帧从主站发出后,在经过每个从站时,从站硬件直接提取/插入数据,帧不需要停下来等从站处理。帧飞过从站的时间仅需几纳秒,一个1000节点的系统刷新周期可以做到μs级别

5.2 主从架构

  • 主站:通常运行在上位机(PC或嵌入式Linux板),负责发送周期帧
  • 从站:各关节驱动器上的ESC(EtherCAT Slave Controller)芯片,硬件级实时处理

主站→从站帧包含下行指令数据,从站→主站帧包含上行反馈数据。全双工,线型或环型拓扑。

5.3 性能指标

  • 周期时间:1000个节点刷新 ≤ 100μs
  • 同步精度:分布式时钟(DC)同步误差 < 1μs
  • 带宽:理论100 Mbps(以太网基础)
  • 节点数:65535个从站

这就是为什么高端工业机械臂(如KUKA、ABB)几乎都用EtherCAT——它能满足6轴甚至7轴伺服的严苛实时要求。

六、四大协议对比

指标RS485+ModbusCANEtherCAT
延迟10-100ms1-10ms0.1-1ms(μs级)
带宽≤10 Mbps1 Mbps(CAN FD 5Mbps)100 Mbps
节点数32-256110+65535
可靠性CRC校验5级错误检测CRC+冗余
成本极低(单片串口)低(CAN控制器)中(ESC芯片+PHY)
实时性非实时软实时硬实时
适用场景教学臂/低端中端多关节高端伺服臂

七、选型建议:别花冤枉钱

  • 低成本教学臂:Modbus-RTU + RS485,几块钱的串口芯片搞定,够用就行
  • 中等性能多关节臂:CAN总线,实时性好、成本适中、生态成熟,适合3-6轴步进/小伺服
  • 高性能伺服臂:EtherCAT,μs级延迟是伺服三环控制的前提,贵但值得
  • 混合架构:上位机EtherCAT连伺服关节 + CAN连传感器 + Modbus连简单IO,分层设计各取所需

选型原则一句话:够用就行,别为不需要的性能买单,也别为省钱牺牲必要的实时性

← 返回列表