通信协议
Alius 机器人关节模组通过 CAN / CAN-FD 总线与控制器进行通信。本文档详细描述通信协议的数据帧格式、指令集和状态反馈机制,帮助开发者实现与关节模组的可靠通信。
协议概述
关节模组采用基于 CAN 总线的自定义应用层协议。协议设计遵循以下原则:
- 简洁高效:指令帧和数据帧格式紧凑,最小化总线负载。
- 灵活扩展:支持标准 CAN 2.0A 和 CAN-FD 帧格式,可根据带宽需求选择。
- 可靠传输:关键指令和状态数据均包含 CRC 校验,确保数据传输完整性。
每个关节模组在总线上拥有唯一的节点 ID(1–127),控制器通过节点 ID 区分不同模组。节点 ID 可通过软件配置,并保存在模组的非易失性存储器中。
CAN 标识符分配
CAN 标识符(CAN ID)采用 11 位标准帧格式,结构如下:
Bits [10:7] – 功能码(Function Code)
Bits [6:0] – 节点 ID(Node ID)
功能码定义:
| 功能码 | 名称 | 方向 | 描述 |
|---|---|---|---|
| 0x0 | 心跳帧 | 模组 → 控制器 | 模组周期性发送的状态心跳 |
| 0x1 | 控制指令 | 控制器 → 模组 | 位置/速度/力矩控制指令 |
| 0x2 | 状态反馈 | 模组 → 控制器 | 实时位置、速度、力矩反馈 |
| 0x3 | 参数读写 | 双向 | 读取/写入模组参数 |
| 0x4 | 故障上报 | 模组 → 控制器 | 故障代码和详细信息 |
| 0x5 | 固件升级 | 双向 | 固件升级数据流 |
控制指令帧
位置控制模式
数据帧格式(8 字节):
| 字节 | 字段 | 描述 |
|---|---|---|
| 0 | 指令类型 | 0x01 = 位置控制 |
| 1–3 | 目标位置 | 32 位有符号整数,单位:编码器计数 |
| 4–5 | 目标速度 | 16 位有符号整数,单位:0.1 °/s |
| 6–7 | 控制参数 | 高 8 位:加速度曲线;低 8 位:保留 |
速度控制模式
数据帧格式(8 字节):
| 字节 | 字段 | 描述 |
|---|---|---|
| 0 | 指令类型 | 0x02 = 速度控制 |
| 1–2 | 目标速度 | 16 位有符号整数,单位:0.1 °/s |
| 3–4 | 加速度 | 16 位无符号整数,单位:°/s² |
| 5–7 | 保留 | — |
力矩控制模式
数据帧格式(8 字节):
| 字节 | 字段 | 描述 |
|---|---|---|
| 0 | 指令类型 | 0x03 = 力矩控制 |
| 1–2 | 目标力矩 | 16 位有符号整数,单位:0.1 N·m |
| 3–7 | 保留 | — |
状态反馈帧
模组以可配置的周期(默认 10 ms)发送状态反馈帧。帧格式(8 字节):
| 字节 | 字段 | 描述 |
|---|---|---|
| 0 | 状态标志 | Bit 0: 使能状态;Bit 1: 故障标志;Bit 2: 到位标志 |
| 1–3 | 当前位置 | 32 位有符号整数,单位:编码器计数 |
| 4–5 | 当前速度 | 16 位有符号整数,单位:0.1 °/s |
| 6–7 | 当前力矩 | 16 位有符号整数,单位:0.1 N·m |
参数读写
读取参数
发送帧格式:
| 字节 | 字段 | 描述 |
|---|---|---|
| 0 | 操作码 | 0x01 = 读取 |
| 1–2 | 参数 ID | 16 位无符号整数 |
| 3–7 | 保留 | — |
响应帧格式:
| 字节 | 字段 | 描述 |
|---|---|---|
| 0 | 操作码 | 0x81 = 读取响应 |
| 1–2 | 参数 ID | 与请求帧一致 |
| 3–6 | 参数值 | 32 位数据,格式依参数类型而定 |
| 7 | 状态码 | 0x00 = 成功;非 0 = 错误代码 |
常用参数 ID
| 参数 ID | 名称 | 读写 | 描述 |
|---|---|---|---|
| 0x0001 | 节点 ID | R/W | 模组 CAN 节点 ID |
| 0x0002 | 通信波特率 | R/W | 0 = 1Mbps;1 = 2Mbps;2 = 5Mbps(CAN-FD) |
| 0x0003 | 控制模式 | R/W | 0 = 位置;1 = 速度;2 = 力矩 |
| 0x0004 | 零点偏移 | R/W | 编码器零点偏移量 |
| 0x0005 | 温度限制 | R/W | 过温保护阈值,单位:°C |
| 0x0006 | 电流限制 | R/W | 峰值电流限制,单位:0.1 A |
错误处理
模组在检测到故障时,会立即发送故障上报帧,并进入保护状态(停止输出扭矩)。
故障代码定义:
| 代码 | 名称 | 描述 | 恢复方式 |
|---|---|---|---|
| 0x01 | 过流故障 | 相电流超过安全阈值 | 断电重启 |
| 0x02 | 过温故障 | 模组内部温度超过保护阈值 | 温度降低后自动恢复 |
| 0x03 | 编码器故障 | 编码器信号异常或超时 | 检查连接,断电重启 |
| 0x04 | 通信超时 | 连续 500 ms 未收到控制指令 | 恢复通信后自动清除 |
| 0x05 | 欠压故障 | 供电电压低于 22 VDC | 电压恢复后自动清除 |
| 0x06 | 过压故障 | 供电电压高于 52 VDC | 电压恢复后自动清除 |
CAN-FD 扩展
当使用 CAN-FD 通信时,数据帧长度可扩展至 64 字节,支持更高带宽的状态反馈和固件升级数据传输。CAN-FD 帧的格式与标准 CAN 帧兼容,控制器可自动识别帧类型。
建议在多关节协同控制场景中优先使用 CAN-FD 通信,以获得更低的通信延迟和更高的数据吞吐量。