跳转至

Fashion Star CANBUS 舵机通信协议说明书

1. 文档说明

1.1 适用产品

适用产品

本文档适用于 Fashion Star CANBUS 系列舵机。

不同型号的额定电压、输出能力、温度传感器及部分参数范围可能不同。涉及具体机型差异时,应同时参考对应产品规格书。

本说明书按“先连接、再查表、后控制”的顺序编排。首次使用建议先阅读第 2 章;需要开发程序时重点查阅第 4~6 章;需要执行运动、停止或配置操作时查阅第 7~9 章。

1.2 适用对象

适用对象

  • 舵机设备使用人员
  • 机器人及自动化系统集成人员
  • 上位机和 CAN 主控程序开发人员
  • 产品调试、测试与维护人员

1.3 协议版本

项目 内容
协议名称 Fashion Star CANBUS 舵机通信协议
协议版本 V1.1.1
发布日期 2026-08-05
CAN 类型 Classical CAN
CAN 帧格式 CAN 2.0A 标准数据帧

1.4 文档符号说明

符号 含义
0x12 十六进制数
Data[n] CAN 数据区第 n+1 个字节
ServoID 舵机编号
DLC CAN 数据区实际字节数
R 可读
W 可写
R/W 可读写
无、未定义或不适用

1.5 使用注意事项

使用注意事项

  1. 本协议使用 11 位标准 CAN 数据帧,不使用扩展帧、远程帧或 CAN-FD。
  2. 主控和舵机必须配置为相同的 CAN 波特率。
  3. 多字节参数均采用小端序,低字节在前。
  4. 角度、速度等参数需要按本文规定的比例换算,不能直接把原始值当作工程量。
  5. 修改舵机编号、CAN 波特率、零点、圈数及 PID 参数前,应确认目标舵机和机械结构处于安全状态。
  6. 同一总线中存在多个舵机时,不应广播会产生响应的读取或写后回传命令。

2. 快速开始

2.1 CAN 接口与通信条件

CAN 总线应包含 CAN_H、CAN_L 和公共参考地。总线两端应按系统设计配置终端电阻,常见值为 120 Ω。

主控与舵机必须满足:

  • CAN_H 对接 CAN_H;
  • CAN_L 对接 CAN_L;
  • CAN 波特率一致;
  • 主控发送和接收均使用标准数据帧;
  • CAN ID 设置为 0x321

2.2 默认通信参数

项目 默认值
CAN 波特率 500 Kbps
CAN ID 0x321
帧格式 11 位标准数据帧
帧类型 数据帧
最大 DLC 8 Byte
普通舵机 ID 范围 0~254

2.3 CAN 标准帧格式

主控发送命令和舵机返回数据均使用:

CAN ID = 0x321
IDE    = Standard(标准帧)
RTR    = Data(数据帧)

舵机编号不放在 CAN ID 中,而是放在 CAN 数据区的 Data[1]

2.4 舵机 ID 与 CAN ID 的区别

项目 CAN ID ServoID
用途 CAN 总线仲裁标识符 区分同一总线上的不同舵机
本协议位置 CAN 帧标识符 CAN 数据区 Data[1]
本协议取值 固定 0x321 0~254

例如,读取舵机 ID 1 和舵机 ID 2 时,CAN ID 都是 0x321,区别仅在数据区第二个字节。

2.5 第一次读取舵机

以默认 500 Kbps、舵机 ID 1 为例,读取舵机型号地址 0x01

TX  CAN ID=0x321  DLC=3  Data: 72 01 01

正常响应格式:

RX  CAN ID=0x321  DLC=5  Data: 76 01 01 LL HH

其中:

  • 0x72:读取一个参数;
  • 0x01:目标 ServoID;
  • 0x01:舵机型号参数地址;
  • LL HH:型号参数低字节和高字节。

收到正确响应表示 CAN 接线、波特率、CAN ID 和舵机编号基本配置正确。

2.6 使用配套上位机连接舵机

使用 Fashion Star 配套转接板及 CANBUS Servo 上位机时:

  1. 将转接板连接电脑;
  2. 将转接板 CAN_H、CAN_L 与舵机正确连接;
  3. 为舵机提供符合规格的电源;
  4. 在支持 Web Serial 的浏览器中打开上位机;
  5. 点击“连接串口”;
  6. 选择舵机当前 CAN 波特率;
  7. 设置扫描范围并开始扫描;
  8. 扫描到舵机后选择目标 ID,再进行监控、控制或参数配置。

3. 通信协议基础

3.1 CAN 帧参数

项目 规定
CAN 类型 Classical CAN
帧格式 CAN 2.0A 标准帧
标识符长度 11 bit
CAN ID 0x321
帧类型 数据帧
数据长度 由命令决定,最大 8 Byte
扩展帧 不使用
远程帧 不使用
CAN-FD 不使用

3.2 CAN 数据区结构

公开命令统一以命令字开头:

Data[0] = Command
Data[1] = ServoID
Data[2...] = Address、Value 等命令参数

不同命令的具体 DLC 和字段顺序见第 4 章。

3.3 字节编号

本文采用从 0 开始的数据区编号:

Data[0]  Data[1]  Data[2]  ...  Data[7]

部分原始资料可能将其写为 Byte1~Byte8,两者对应关系如下:

Byte1 = Data[0]
Byte2 = Data[1]
...
Byte8 = Data[7]

3.4 命令字

命令字为 ASCII 字符对应的十六进制值,并区分大小写。例如:

ASCII Hex 功能
r 0x72 读取一个参数
R 0x52 读取两个参数
w 0x77 写入一个参数
W 0x57 写入两个参数

rRwW 是不同命令,不能混用。

3.5 舵机 ID

  • 普通 ServoID 范围为 0x00~0xFE,即十进制 0~254
  • 0xFF 为广播 ID,仅用于执行已经分别缓存到各舵机中的同步运动。
  • 读取命令和需要响应的命令不得使用广播 ID。

3.6 16 位参数与小端序

16 位参数按低字节在前发送:

Value16 = ValueLow | (ValueHigh << 8)

例如,十六进制值 0x1234 的数据顺序为:

34 12

3.7 32 位参数组合

32 位参数由两个相邻的 16 位地址组成:

Value32 = WordLow | (WordHigh << 16)

低地址保存低 16 位,高地址保存高 16 位。每个 16 位字仍按低字节在前发送。

例如,目标角度由 0x53/0x54 组成:

0x53 = 低 16 位
0x54 = 高 16 位

3.8 有符号数编码

单圈角度、目标角度和角度限制参数使用二进制补码表示。解析时应根据参数类型转换为:

  • signed 16-bit;或
  • signed 32-bit。

负角度不得转换为 0~360° 后发送。

3.9 响应匹配与超时处理

主控收到响应后至少应校验:

  1. CAN ID 是否为 0x321
  2. DLC 是否符合命令定义;
  3. 响应命令字是否正确;
  4. ServoID 是否与请求一致;
  5. 参数地址是否与请求一致;
  6. 双参数响应中的两个地址和顺序是否一致。

通信超时和重试次数可由主控根据总线负载设置。建议避免在上一次请求尚未完成时发送会产生响应的新请求。


4. 命令及封包格式

4.1 命令总览表

ASCII Hex 方向 功能 DLC 响应
r 0x72 主控→舵机 读取一个参数 3 v,DLC=5
R 0x52 主控→舵机 读取两个参数 4 V,DLC=8
w 0x77 主控→舵机 写入一个参数 5 无响应
W 0x57 主控→舵机 写入两个参数 8 无响应
x 0x78 主控→舵机 写入一个参数并回传 5 v,DLC=5
X 0x58 主控→舵机 写入两个参数并回传 8 V,DLC=8
Q 0x51 主控→舵机 开始连续写入 2 无响应
q 0x71 主控→舵机 结束连续写入并提交 2 无响应
v 0x76 舵机→主控 单参数响应 5
V 0x56 舵机→主控 双参数响应 8

4.2 读取一个参数 r/v

请求格式:

Data[0] Data[1] Data[2]
0x72 ServoID Address

响应格式:

Data[0] Data[1] Data[2] Data[3] Data[4]
0x76 ServoID Address ValueLow ValueHigh

示例:读取 ID 1 的 0x18 单圈角度:

TX DLC=3: 72 01 18
RX DLC=5: 76 01 18 LL HH

4.3 读取两个参数 R/V

请求格式:

Data[0] Data[1] Data[2] Data[3]
0x52 ServoID AddressA AddressB

响应格式:

Data[0] Data[1] Data[2] Data[3] Data[4] Data[5] Data[6] Data[7]
0x56 ServoID AddressA ValueA_L ValueA_H AddressB ValueB_L ValueB_H

示例:读取 ID 1 的多圈角度低字和高字:

TX DLC=4: 52 01 15 16
RX DLC=8: 56 01 15 L0 L1 16 H0 H1

4.4 写入一个参数 w

封包格式:

Data[0] Data[1] Data[2] Data[3] Data[4]
0x77 ServoID Address ValueLow ValueHigh

该命令写入后不返回响应。

示例:向 ID 1 的地址 0x7B 写入停止锁力 0x0011

77 01 7B 11 00

4.5 写入一个参数并回传 x/v

请求格式:

78 ServoID Address ValueLow ValueHigh

响应格式:

76 ServoID Address ActualValueLow ActualValueHigh

响应返回舵机写入后的实际参数值。主控应比较实际返回值与目标值,不能只依据收到响应就判断写入值完全一致。

4.6 写入两个参数 W

封包格式:

Data[0] Data[1] Data[2] Data[3] Data[4] Data[5] Data[6] Data[7]
0x57 ServoID AddressA ValueA_L ValueA_H AddressB ValueB_L ValueB_H

该命令写入后不返回响应。

4.7 写入两个参数并回传 X/V

请求格式:

58 ServoID AddressA ValueA_L ValueA_H AddressB ValueB_L ValueB_H

响应格式:

56 ServoID AddressA ActualA_L ActualA_H AddressB ActualB_L ActualB_H

4.8 开始连续写入 Q

51 ServoID

舵机收到该命令后进入连续写入缓存模式。

4.9 结束连续写入 q

71 ServoID

舵机收到该命令后提交缓存内容并结束连续写入。

连续写入规则:

  1. 缓存区最多接收 8 组 wW 写入;
  2. 缓存期间 x/X 分别等同于 w/W,不产生响应;
  3. 缓存期间允许使用 r/R 读取参数;
  4. 第 8 组写入后,舵机会自动写入当前缓存内容;
  5. 为兼容不同固件,主控仍应显式发送 q 收尾;
  6. Q、写入和 q 应使用相同的 ServoID。

4.10 广播执行规则

ServoID=0xFF 仅允许用于同步执行已经分别缓存到多颗舵机中的运动指令。

广播执行不产生响应。读取、普通写入、参数配置和保护区操作不得使用 0xFF 广播。


5. 内存表

5.1 表格说明

内存表使用以下字段:

字段 含义
地址 参数地址
参数名称 参数用途
类型 原始数据类型
权限 可读、可写或只写
单位/范围 工程单位及有效范围
生效方式 写入后立即生效、执行或需要重新上电
备注 补充说明

未明确工程单位的参数应按原始 16 位值处理,不应自行换算。

5.2 内存地址总览

地址范围 分类
0x01~0x04 设备信息
0x10~0x18 实时状态
0x28 运动阻尼模式
0x50~0x59 角度运动控制
0x78~0x7B 参数复位、校准与停止控制
0x80~0x90 通信、保护与启动配置
0x91~0x93 角度限制
0xC8~0xD5 PID 与受保护参数
0xFF 保护区解锁控制

5.3 设备信息参数 0x01~0x04

地址 参数名称 类型 权限 单位/范围 生效方式 备注
0x01 舵机型号 uint16 R 型号编码 只读
0x02 固件版本 uint16 R 版本编码
0x03 舵机序号低字 uint16 R 序号低 16 位
0x04 舵机序号高字 uint16 R 序号高 16 位

5.4 实时状态参数 0x10~0x18

地址 参数名称 类型 权限 单位/范围 生效方式 备注
0x10 舵机电压 uint16 R 型号相关 实时更新 换算方式以具体型号为准
0x11 舵机电流 uint16 R 型号相关 实时更新 换算方式以具体型号为准
0x12 舵机功率 uint16 R 型号相关 实时更新 换算方式以具体型号为准
0x13 舵机温度 uint16 R 型号相关 实时更新 换算方式以具体型号为准
0x14 舵机状态 uint16 R 位标志 实时更新 低 8 位见第 6.8 节
0x15 多圈当前角度低字 uint16 R 0.1° 实时更新 0x16 组成 signed 32-bit
0x16 多圈当前角度高字 uint16 R 0.1° 实时更新 0x15 组成 signed 32-bit
0x17 当前圈数 16-bit R 实时更新 方向及溢出规则以具体型号为准
0x18 单圈当前角度 signed 16-bit R -180.0°~180.0° 实时更新 原始单位 0.1°

5.5 运动阻尼参数 0x28

地址 参数名称 类型 权限 单位/范围 生效方式 备注
0x28 运动阻尼模式功率 uint16 R/W 0~1000 mW 写入后立即执行 独立运动模式,不是停止阻尼功率

0x28 写入功率后,舵机立即进入运动阻尼模式,不需要再写 0x590x7B

5.6 角度运动参数 0x50~0x59

地址 参数名称 类型 权限 单位/范围 生效方式 备注
0x50 到目标角度时间低字 uint16 R/W ms 参数写入 0x51 组成 uint32
0x51 到目标角度时间高字 uint16 R/W ms 参数写入 0x50 组成 uint32
0x52 运动模式 uint16 R/W 0/1/2 参数写入 见第 7 章
0x53 目标角度低字 uint16 R/W 0.1° 参数写入 0x54 组成 signed 32-bit
0x54 目标角度高字 uint16 R/W 0.1° 参数写入 0x53 组成 signed 32-bit
0x55 角度模式执行功率 uint16 R/W 0~65535 mW 参数写入 停止阻尼时限定为 0~1000 mW
0x56 启动加速时间 uint16 R/W ms 参数写入 加减速模式使用
0x57 接近目标减速时间 uint16 R/W ms 参数写入 加减速模式使用
0x58 最大速度 uint16 R/W 0.1°/s 参数写入 速度模式使用
0x59 执行角度运动 uint16 R/W 0/1 1 执行 执行 0x50~0x58 参数

5.7 复位、校准与停止参数 0x78~0x7B

地址 参数名称 类型 权限 写入值 生效方式 备注
0x78 参数恢复出厂设定 uint16 W 1 写入即执行 恢复参数出厂设定
0x79 清除当前圈数 uint16 W 1 写入即执行 清除多圈计数
0x7A 零点设定旗标 uint16 W 0:当前位置设为零点;非零值:恢复出厂设定的零点 写入即执行 非零值只恢复出厂零点,不恢复其他参数
0x7B 停止模式 uint16 W 0x10/0x11/0x12 写入即执行 见第 8 章

5.8 通信、保护与启动配置 0x80~0x90

地址 参数名称 类型 权限 单位/范围 生效方式 备注
0x80 控制回应 uint16 R/W 型号相关 型号相关 不同型号定义可能不同
0x81 舵机编号 uint16 R/W 0~254 立即生效 后续通信使用新 ID
0x82 CAN 波特率索引 uint16 R/W 0~9 固件相关 可能立即生效或重新上电生效
0x83 堵转保护功能 uint16 R/W 0=关闭,1=开启 写入配置
0x84 堵转功率上限 uint16 R/W 0~65535 mW 写入配置
0x85 低压保护电压 uint16 R/W 0~65535 mV 写入配置
0x86 高压保护电压 uint16 R/W 0~65535 mV 写入配置
0x87 温度保护值 uint16 R/W 型号相关 写入配置 原始值换算以具体型号为准
0x88 功率保护值 uint16 R/W 0~65535 mW 写入配置
0x89 电流保护值 uint16 R/W 0~65535 mA 写入配置
0x8A 加速度 uint16 R/W 型号相关 写入配置 原始 16 位参数
0x8B 功率保护迟滞 uint16 R/W 050~99% 写入配置 0 表示取消
0x8C 上电锁力开关 uint16 R/W 0=关闭,1=开启 写入配置
0x8E 角度限制开关 uint16 R/W 0=关闭,1=开启 写入配置 0x91~0x93 配合
0x8F 上电缓启动开关 uint16 R/W 0=关闭,1=开启 写入配置
0x90 上电缓启动时间 uint16 R/W 0~65535 ms 写入配置

5.9 角度限制参数 0x91~0x93

地址 参数名称 类型 权限 单位/范围 生效方式 备注
0x91 角度上限 signed 16-bit R/W 0.1° 写入配置 与角度限制开关配合
0x92 角度下限 signed 16-bit R/W 0.1° 写入配置 与角度限制开关配合
0x93 中点偏移 signed 16-bit R/W 0.1° 写入配置

5.10 PID 与受保护参数 0xC8~0xD5

地址 参数名称 类型 权限 单位/范围 生效方式 备注
0xC8 Kp uint16 R/W,受保护 型号相关 解锁后操作
0xC9 Kd uint16 R/W,受保护 型号相关 解锁后操作
0xCA Ki uint16 R/W,受保护 型号相关 解锁后操作
0xCB PwmBias uint16 R/W,受保护 型号相关 解锁后操作
0xCC HoldKp uint16 R/W,受保护 型号相关 解锁后操作
0xCD HoldKd uint16 R/W,受保护 型号相关 解锁后操作
0xCE HoldPwmBias uint16 R/W,受保护 型号相关 解锁后操作
0xCF FullDeg uint16 R/W,受保护 型号相关 解锁后操作
0xD0 PwmLimit uint16 R/W,受保护 型号相关 解锁后操作
0xD1 NegativeDirectionMap uint16 R/W,受保护 型号相关 解锁后操作
0xD2 PwmFreq uint16 R/W,受保护 型号相关 解锁后操作
0xD3 DeadBand uint16 R/W,受保护 型号相关 解锁后操作
0xD4 MotorDirMap uint16 R/W,受保护 型号相关 解锁后操作
0xD5 VersionInfo uint16 R/W,受保护 型号相关 解锁后操作

除非具有对应机型的调试资料,否则不建议修改受保护参数。

5.11 保护区解锁地址 0xFF

解锁保护区:

77 ServoID FF E6 00

并在 500 ms 内发送:

77 ServoID FF 09 00

完成保护区读取或写入后重新上锁:

77 ServoID FF 00 00

解锁状态保持到主动重新上锁或舵机重新上电。部分固件在未解锁时读取保护区会返回格式正确但数值为 0 的响应,因此可靠读取 PID 参数前也应执行解锁流程。


6. 参数编码与状态解析

6.1 单圈角度编码

单圈角度地址为 0x18,原始类型为 signed 16-bit,单位为 0.1°

AngleDegree = signed16(RawValue) / 10

有效工程范围:

-180.0°~180.0°

6.2 多圈角度编码

多圈角度由 0x15/0x16 组成 signed 32-bit:

Raw32 = Word_0x15 | (Word_0x16 << 16)
AngleDegree = signed32(Raw32) / 10

6.3 目标角度编码

目标角度由 0x53/0x54 组成 signed 32-bit:

RawAngle = round(AngleDegree × 10)
WordLow  = RawAngle & 0xFFFF
WordHigh = (RawAngle >> 16) & 0xFFFF

当前产品支持目标角度范围:

-368640.0°~368640.0°(±1024 圈)

6.4 时间参数编码

  • 0x50/0x51:uint32,单位 ms;
  • 0x56:uint16,单位 ms;
  • 0x57:uint16,单位 ms。

速度模式不使用、不发送运动时间内存地址 0x50/0x51;命令字 Q=0x51 仍仅用于连续写入流程,二者不是同一概念。

6.5 速度参数编码

最大速度地址为 0x58,原始单位为 0.1°/s

RawSpeed = round(SpeedDegreePerSecond × 10)

6.6 功率参数编码

地址 功能 单位/范围
0x28 运动阻尼模式功率 0~1000 mW,写入即执行
0x55 角度模式执行功率 0~65535 mW
0x55 停止阻尼功率 停止阻尼场景限定为 0~1000 mW

6.7 电压、电流、功率与温度

0x10~0x13 返回 16 位原始测量值。不同机型可能使用不同传感器或换算参数,工程量换算应以具体型号资料为准。

使用 Fashion Star 配套上位机时,上位机会根据当前支持机型进行换算和显示。

6.8 状态寄存器位定义

地址 0x14 的低 8 位定义如下:

状态 置 1 条件 清零条件
BIT0 执行指令中 正在执行运动指令 执行完成后自动清零
BIT1 执行错误 运动指令执行错误 下一次正确执行后清零
BIT2 堵转错误 检测到堵转 堵转解除后清零
BIT3 电压过高 电压高于保护阈值 电压恢复正常后清零
BIT4 电压过低 电压低于保护阈值 电压恢复正常后清零
BIT5 电流错误 电流保护触发 电流恢复正常后清零
BIT6 功率错误 功率保护触发 功率恢复正常后清零
BIT7 温度错误 温度保护触发 温度恢复正常后清零

BIT8~BIT15 当前版本未定义,接收端应忽略。


7. 运动控制

7.1 运动控制流程

角度运动的一般流程:

  1. 写入运动模式 0x52
  2. 写入目标角度 0x53/0x54
  3. 根据模式写入时间、加减速或速度参数;
  4. 写入执行功率 0x55
  5. 0x59 写入 1 执行运动。

参数也可以使用第 4.8、4.9 节的连续写入方式统一提交。

7.2 简易模式

0x52 = 0

使用参数:

  • 目标角度 0x53/0x54
  • 运动时间 0x50/0x51
  • 执行功率 0x55
  • 执行指令 0x59=1

7.3 基于时间的加减速模式

0x52 = 1

使用参数:

  • 目标角度 0x53/0x54
  • 运动时间 0x50/0x51
  • 加速时间 0x56
  • 减速时间 0x57
  • 执行功率 0x55
  • 执行指令 0x59=1

7.4 基于速度的加减速模式

0x52 = 2

使用参数:

  • 目标角度 0x53/0x54
  • 最大速度 0x58
  • 加速时间 0x56
  • 减速时间 0x57
  • 执行功率 0x55
  • 执行指令 0x59=1

7.5 三种运动模式参数对照表

参数 简易模式 时间加减速模式 速度加减速模式
模式 0x52 0 1 2
目标角度 0x53/0x54 使用 使用 使用
执行功率 0x55 使用 使用 使用
运动时间 0x50/0x51 使用 使用 不使用
加速时间 0x56 不使用 使用 使用
减速时间 0x57 不使用 使用 使用
最大速度 0x58 不使用 不使用 使用
执行 0x59=1 使用 使用 使用

7.6 单圈与多圈目标角度

目标角度统一通过 0x53/0x54 发送有符号 0.1° 数据。

  • 单圈应用建议限制在 -180.0°~180.0°
  • 多圈应用当前产品支持 -368640.0°~368640.0°
  • 负角度直接按 signed 32-bit 补码发送。

7.7 执行运动

所有必要运动参数写入后:

77 ServoID 59 01 00

即向 0x59 写入 1 执行运动。

7.8 运动阻尼模式 0x28

运动阻尼模式是一种独立运动方式,不使用目标角度、运动时间或 0x59

0x28 写入 0~1000 mW 后立即执行:

77 ServoID 28 PowerLow PowerHigh

7.9 连续写入与同步运动

单颗舵机可使用 Q/q 缓存并统一提交运动参数:

51 01
57 01 53 AL0 AL1 54 AH0 AH1
57 01 50 TL0 TL1 51 TH0 TH1
77 01 52 00 00
77 01 55 PL PH
77 01 59 01 00
71 01

7.10 广播执行多个舵机

多舵机同步运动时,应先分别向每颗舵机缓存运动参数,再使用广播 ID 0xFF 执行已缓存运动。

广播不产生响应。不要使用广播读取参数或执行普通写后回传操作。


8. 停止与校准控制

8.1 停止卸力

停止运动并释放输出:

77 ServoID 7B 10 00

8.2 停止锁力

停止运动并保持当前位置:

77 ServoID 7B 11 00

8.3 停止阻尼

停止阻尼的功率来自 0x55。必须先写入 0~1000 mW,再发送停止阻尼命令:

77 ServoID 55 PowerLow PowerHigh
77 ServoID 7B 12 00

两帧应连续、按顺序发送。如果功率写入失败或数值超出范围,不应继续发送 0x7B=0x12

8.4 运动阻尼与停止阻尼的区别

功能 功率地址 功率范围 执行方式
运动阻尼模式 0x28 0~1000 mW 写入功率后立即执行
停止阻尼 0x55 0~1000 mW 先写功率,再写 0x7B=0x12

两种阻尼功能不能混用。0x28 不是停止阻尼功率地址。

8.5 清除多圈圈数

77 ServoID 79 01 00

该操作会改变多圈位置基准,应确认机械结构安全后执行。

8.6 零点设定 0x7A

0x7A 根据写入值执行两种零点操作:

写入值 功能 示例
0 将舵机当前位置设置为零点 77 ServoID 7A 00 00
非零值 恢复产品出厂设定的零点 77 ServoID 7A 01 00

写入非零值只恢复出厂零点,不会恢复其他用户参数。

进行零点设定前,应确认机械结构安全,并先使舵机进入停止卸力或停止阻尼状态。

8.7 恢复参数出厂设定 0x78

0x78 写入 1

77 ServoID 78 01 00

9. 舵机配置

9.1 修改舵机 ID

舵机编号地址为 0x81,有效范围 0~254

示例:将 ID 1 修改为 ID 2:

78 01 81 02 00

新 ID 立即生效。写入成功后,后续通信必须使用新 ID 2。

9.2 修改 CAN 波特率

CAN 波特率地址为 0x82,写入波特率索引。

示例:将 ID 1 修改为 1 Mbps,索引为 9:

78 01 82 09 00

9.3 波特率生效时机

不同舵机固件可能采用以下任一种方式:

  • 写入后立即切换;
  • 参数立即保存,重新上电后切换。

推荐操作流程:

  1. 修改时总线上只连接目标舵机;
  2. 写入新波特率索引;
  3. 在旧波特率下尝试读回 0x82
  4. 若仍能在旧波特率读回新索引,则重新上电后再切换主控;
  5. 若旧波特率立即无响应,则主控切换到新波特率验证;
  6. 同一条总线上的所有舵机必须保持相同波特率。

9.4 配置角度限制

角度限制使用以下参数:

  • 0x8E:角度限制开关;
  • 0x91:角度上限;
  • 0x92:角度下限;
  • 0x93:中点偏移。

角度上限、下限和中点偏移均为 signed 16-bit,单位 0.1°

9.5 配置保护参数

保护参数包括:

  • 堵转保护 0x83/0x84
  • 低压保护 0x85
  • 高压保护 0x86
  • 温度保护 0x87
  • 功率保护 0x88
  • 电流保护 0x89
  • 功率保护迟滞 0x8B

功率保护迟滞只允许:

0       = 取消
50~99  = 百分比迟滞

9.6 配置上电行为

  • 0x8C:上电锁力开关;
  • 0x8F:上电缓启动开关;
  • 0x90:上电缓启动时间,单位 ms。

9.7 读取和修改 PID 参数

PID 及电机控制参数位于 0xC8~0xD5,属于受保护参数区。

普通用户不建议修改该区域。需要修改时,应使用对应机型的调试参数和第 9.8 节解锁流程。

9.8 PID 保护区解锁与重新上锁

解锁:

77 ServoID FF E6 00

500 ms 内继续发送:

77 ServoID FF 09 00

完成后重新上锁:

77 ServoID FF 00 00

10. 完整通信示例

以下示例均使用标准 CAN ID 0x321,示例 ServoID 为 0x01。除特别说明外,字节均为十六进制。

10.1 读取舵机型号

TX DLC=3: 72 01 01
RX DLC=5: 76 01 01 LL HH

10.2 读取固件版本

TX DLC=3: 72 01 02
RX DLC=5: 76 01 02 LL HH

10.3 读取单圈角度

TX DLC=3: 72 01 18
RX DLC=5: 76 01 18 LL HH

RawAngle = signed16(LL | (HH << 8))
AngleDegree = RawAngle / 10

10.4 读取多圈角度

TX DLC=4: 52 01 15 16
RX DLC=8: 56 01 15 L0 L1 16 H0 H1

WordLow = L0 | (L1 << 8)
WordHigh = H0 | (H1 << 8)
RawAngle = signed32(WordLow | (WordHigh << 16))
AngleDegree = RawAngle / 10

10.5 读取实时电压和电流

TX DLC=4: 52 01 10 11
RX DLC=8: 56 01 10 VL VH 11 CL CH

物理量换算以具体舵机型号为准。

10.6 控制舵机运动到指定角度

示例:目标角度 90.0°,运动时间 1000 ms,简易模式:

57 01 53 84 03 54 00 00     # 90.0°,Raw=900
57 01 50 E8 03 51 00 00     # 1000 ms
77 01 52 00 00              # 简易模式
77 01 55 00 00              # 执行功率
77 01 59 01 00              # 执行

10.7 使用时间加减速模式运动

57 01 53 AL0 AL1 54 AH0 AH1
57 01 50 TL0 TL1 51 TH0 TH1
77 01 52 01 00
77 01 56 AccelLow AccelHigh
77 01 57 DecelLow DecelHigh
77 01 55 PowerLow PowerHigh
77 01 59 01 00

10.8 使用速度加减速模式运动

57 01 53 AL0 AL1 54 AH0 AH1
77 01 52 02 00
77 01 58 SpeedLow SpeedHigh
77 01 56 AccelLow AccelHigh
77 01 57 DecelLow DecelHigh
77 01 55 PowerLow PowerHigh
77 01 59 01 00

速度模式不发送运动时间内存地址 0x50/0x51;如使用连续写入,命令字 Q=0x51 仍按第 4.8 节使用。

10.9 进入运动阻尼模式

示例功率 500 mW:

77 01 28 F4 01

10.10 停止锁力

77 01 7B 11 00

10.11 停止卸力

77 01 7B 10 00

10.12 停止阻尼

示例停止阻尼功率 500 mW:

77 01 55 F4 01
77 01 7B 12 00

10.13 修改舵机 ID

ID 1 修改为 ID 2:

78 01 81 02 00

10.14 修改 CAN 波特率

修改为 1 Mbps,索引 9:

78 01 82 09 00

10.15 清除圈数

77 01 79 01 00

10.16 设置零点

77 01 7A 00 00

10.17 多舵机同步运动

推荐流程:

  1. 分别向每颗舵机发送 Q + ServoID
  2. 分别缓存各自的运动参数和 0x59=1
  3. 使用协议允许的广播执行方式同步触发已缓存舵机;
  4. 广播不等待响应。

同步运动前应确认所有舵机波特率一致,且不存在重复 ServoID。


11. 常见问题与故障排查

11.1 舵机没有响应

依次检查:

  1. 舵机供电是否正常;
  2. CAN_H、CAN_L 是否接反;
  3. 主控和舵机波特率是否一致;
  4. 是否使用标准帧;
  5. CAN ID 是否为 0x321
  6. ServoID 是否正确;
  7. DLC 和命令格式是否正确;
  8. 总线终端电阻和接地是否合理。

11.2 CAN ID 与舵机 ID 混淆

CAN ID 固定为 0x321。舵机 ID 位于 Data[1],不能把舵机编号写入 CAN ID。

11.3 标准帧与扩展帧设置错误

本协议使用 11 位标准数据帧。若主控配置为 29 位扩展帧,舵机不会按本协议正常通信。

11.4 CAN 波特率不一致

同一物理 CAN 总线上的所有节点必须使用相同波特率。不同波特率的舵机不能混接通信。

11.5 修改波特率后无法连接

部分固件需要重新上电后才切换波特率。请分别尝试旧波特率和新波特率,并根据第 9.3 节流程处理。

11.6 角度数值相差 10 倍

角度原始值单位为 0.1°。例如原始值 1600 表示 160.0°,不是 1600°

发送 160.0° 时应编码:

160.0 × 10 = 1600

11.7 负角度解析错误

角度使用有符号补码。必须按 signed 16-bit 或 signed 32-bit 解析,不能按无符号数处理,也不能把负角度自动转换成 0~360°

11.8 PID 参数读取为 0

部分固件在保护区未解锁时仍返回响应,但参数值可能全部为 0。读取 PID 参数前执行 0xFF 解锁流程,读取完成后重新上锁。

11.9 停止阻尼没有效果

检查是否按正确顺序执行:

先写 0x55 = 0~1000 mW
再写 0x7B = 0x12

不要把 0x28 当成停止阻尼功率地址。

11.10 多舵机同时响应冲突

不要广播读取命令或写后回传命令。多颗舵机同时响应会造成总线数据冲突。广播 ID 仅用于执行已缓存的同步运动。


附录 A:命令快速索引

ASCII Hex 功能 TX DLC RX 命令/DLC
r 0x72 读取一个参数 3 v / 5
R 0x52 读取两个参数 4 V / 8
w 0x77 写入一个参数 5
W 0x57 写入两个参数 8
x 0x78 写入一个参数并回传 5 v / 5
X 0x58 写入两个参数并回传 8 V / 8
Q 0x51 开始连续写入 2
q 0x71 结束连续写入并提交 2

附录 B:内存地址快速索引

地址 参数 权限 单位/范围
0x01 舵机型号 R 型号编码
0x02 固件版本 R 版本编码
0x03/0x04 舵机序号 R 32-bit
0x10 舵机电压 R 型号相关
0x11 舵机电流 R 型号相关
0x12 舵机功率 R 型号相关
0x13 舵机温度 R 型号相关
0x14 舵机状态 R 位标志
0x15/0x16 多圈当前角度 R signed 32-bit,0.1°
0x17 当前圈数 R
0x18 单圈当前角度 R signed 16-bit,0.1°
0x28 运动阻尼模式功率 R/W 0~1000 mW,写入即执行
0x50/0x51 到目标角度时间 R/W uint32,ms
0x52 运动模式 R/W 0/1/2
0x53/0x54 目标角度 R/W signed 32-bit,0.1°
0x55 角度模式执行功率 R/W 0~65535 mW
0x56 加速时间 R/W ms
0x57 减速时间 R/W ms
0x58 最大速度 R/W 0.1°/s
0x59 执行角度运动 R/W 1 执行
0x78 参数恢复出厂设定 W 1
0x79 清除圈数 W 1
0x7A 零点设定旗标 W 0=当前位置为零点;非零=恢复出厂零点
0x7B 停止模式 W 0x10/0x11/0x12
0x80 控制回应 R/W 型号相关
0x81 舵机编号 R/W 0~254
0x82 CAN 波特率索引 R/W 0~9
0x83 堵转保护功能 R/W 0/1
0x84 堵转功率上限 R/W mW
0x85 低压保护电压 R/W mV
0x86 高压保护电压 R/W mV
0x87 温度保护值 R/W 型号相关
0x88 功率保护值 R/W mW
0x89 电流保护值 R/W mA
0x8A 加速度 R/W 型号相关
0x8B 功率保护迟滞 R/W 050~99%
0x8C 上电锁力开关 R/W 0/1
0x8E 角度限制开关 R/W 0/1
0x8F 上电缓启动开关 R/W 0/1
0x90 上电缓启动时间 R/W ms
0x91 角度上限 R/W signed 16-bit,0.1°
0x92 角度下限 R/W signed 16-bit,0.1°
0x93 中点偏移 R/W signed 16-bit,0.1°
0xC8~0xD5 PID 与保护参数 R/W,受保护 型号相关
0xFF 保护区解锁/上锁 W 控制地址

附录 C:CAN 波特率索引

索引 CAN 波特率
0 50 Kbps
1 100 Kbps
2 125 Kbps
3 200 Kbps
4 250 Kbps
5 400 Kbps
6 500 Kbps(默认)
7 750 Kbps
8 800 Kbps
9 1 Mbps

附录 D:状态位速查表

状态
BIT0 执行指令中
BIT1 执行错误
BIT2 堵转错误
BIT3 电压过高
BIT4 电压过低
BIT5 电流错误
BIT6 功率错误
BIT7 温度错误