CANFD 通信说明
本文档说明 BXI 关节模组在 MIT 控制模式下的 CAN/CANFD 通信协议。
1. 通信概述
电机使用 CANFD 通信,并兼容传统 CAN。电机会按收到的帧格式返回相同格式的响应帧,因此通常不需要单独配置帧类型与可变波特率。
- CANFD 速率最高:
1M + 5M - 不使用可变波特率时:
1M
按功能划分,数据帧分为:
- 主控控制帧:上位控制器下发给电机的控制命令
- 电机响应帧:电机上传给上位控制器的状态反馈
2. MIT 模式主控控制帧(8 字节)
2.1 数据布局
| 控制报文 | D[0] | D[1] | D[2] | D[3] | D[4] | D[5] | D[6] | D[7] |
|---|---|---|---|---|---|---|---|---|
| ID | p_des[15:8] | p_des[7:0] | v_des[11:4] | v_des[3:0] \| Kp[11:8] | Kp[7:0] | Kd[11:4] | Kd[3:0] \| t_ff[11:8] | t_ff[7:0] |
2.2 字段说明
- 帧 ID:等于目标电机
can_id,默认1;广播帧使用0x7FF p_des:位置给定值v_des:速度给定值Kp:位置比例系数Kd:位置微分系数t_ff:转矩给定值
2.3 默认参数范围
Kp / Kd 范围(可由上位机修改):
Kp:[0, 500]Kd:MOTOR_50:[0, 5]MOTOR_50_L:[0, 5]MOTOR_70:[0, 5]MOTOR_85:[0, 20]MOTOR_J3505:[0, 5]MOTOR_J3510:[0, 5]
p_des / v_des / t_ff 范围(可由上位机修改):
p_des:[0, 12.5]v_des:[0, 45.0]t_ff:MOTOR_50:[0, 40]MOTOR_50_L:[0, 40]MOTOR_70:[0, 80]MOTOR_85:[0, 160]MOTOR_J3505:[0, 18]MOTOR_J3510:[0, 18]
温度通信范围:[-30.0, 150.0] ℃。
2.4 位宽说明
标准 CAN 单帧仅 8 字节。MIT 控制命令将 5 个参数打包进 8 字节:
- Position:16 位(2 字节)
- Velocity:12 位
- Kp:12 位
- Kd:12 位
- Torque:12 位
3. CANFD 广播多电机控制
CANFD 单帧最多可携带 64 字节。多电机控制时:
- 帧 ID 固定为
0x7FF - 第
id个电机数据位于对应 8 字节区间:(id - 1) * 8到id * 8 - 1
即每个电机都使用一段完整的 8 字节 MIT 控制块,按电机 ID 顺序拼接到同一帧中。
示例(前 16 字节,控制 M[1] 与 M[2]):
| 控制报文(ID=0x7FF) | D[0] | D[1] | D[2] | D[3] | D[4] | D[5] | D[6] | D[7] |
|---|---|---|---|---|---|---|---|---|
| M[1] | p_des[15:8] | p_des[7:0] | v_des[11:4] | v_des[3:0] \| Kp[11:8] | Kp[7:0] | Kd[11:4] | Kd[3:0] \| t_ff[11:8] | t_ff[7:0] |
| 控制报文(ID=0x7FF) | D[8] | D[9] | D[10] | D[11] | D[12] | D[13] | D[14] | D[15] |
|---|---|---|---|---|---|---|---|---|
| M[2] | p_des[15:8] | p_des[7:0] | v_des[11:4] | v_des[3:0] \| Kp[11:8] | Kp[7:0] | Kd[11:4] | Kd[3:0] \| t_ff[11:8] | t_ff[7:0] |
后续电机以 8 字节为步长顺延。
例如第 3 台电机使用 D[16]~D[23],第 4 台电机使用 D[24]~D[31],以此类推,最多可扩展到 64 字节。
4. 特殊控制帧(8 字节)
以下命令均为 8 字节固定值:
- 电机使能:
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFC - 电机失能:
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFD - 保存零点:
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFE - 打开终端输出:
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFB - 关闭终端输出:
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFA
5. 电机响应帧
电机响应帧 ID 可通过上位机设定,默认 0x11(电机内字段为 master_id)。
主要反馈:位置、速度、扭矩、驱动温度与电机温度。
5.1 数据布局
| 反馈报文 | D[0] | D[1] | D[2] | D[3] | D[4] | D[5] | D[6] | D[7] |
|---|---|---|---|---|---|---|---|---|
| MST_ID | ID | POS[15:8] | POS[7:0] | VEL[11:4] | VEL[3:0] \| T[11:8] | T[7:0] | T_MOS | T_Motor |
5.2 字段说明
ID:电机 IDPOS:位置信息VEL:速度信息T:扭矩信息T_MOS:驱动 MOS 温度(℃)T_Motor:电机内部线圈温度(℃)
位置、速度、扭矩采用线性映射,将浮点数转换为有符号定点数:
- 位置:16 位
- 速度:12 位
- 扭矩:12 位
5.3 master_id 与 can_id 关系
- 默认关系:
master_id = can_id | 0x010 - 修改
can_id时,会同步更新master_id - 也可以通过上位机单独写入
master_id