跳转至

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) * 8id * 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:电机 ID
  • POS:位置信息
  • VEL:速度信息
  • T:扭矩信息
  • T_MOS:驱动 MOS 温度(℃)
  • T_Motor:电机内部线圈温度(℃)

位置、速度、扭矩采用线性映射,将浮点数转换为有符号定点数:

  • 位置:16 位
  • 速度:12 位
  • 扭矩:12 位

5.3 master_idcan_id 关系

  • 默认关系:master_id = can_id | 0x010
  • 修改 can_id 时,会同步更新 master_id
  • 也可以通过上位机单独写入 master_id