Meow 电机协议
禁止使用 Node-ID 100 和 101
不得将电机或其他 CANopen 设备的 Node-ID 设置为十进制 100(0x64)或 101(0x65)。 电机升级协议使用 0x780 + Node-ID 发送请求,这两个地址分别落在 0x7E4、0x7E5,与 LSS 的应答/请求 ID 冲突。LSS 扫描或配置可能因此干扰电机升级通信。
Device Settings 禁止将新地址设为这两个值;Motor Control 和固件升级会对使用这些地址的电机报错并拒绝操作。已有设备使用这些值时,请先在 Device Settings 改为其他合法且未占用的 ID,保存并重新上电,再控制或升级。故障恢复探测也跳过这两个 ID。
Meow 协议沿用 CANopen CiA301 的 NMT、心跳、SDO 和 PDO 通信,使用独立的电机运行状态与对象字典。运动控制通过 0x4401/0x4402 完成,支持轮廓位置、轮廓速度、力矩和 MIT 模式。
先用快速上手与上位机操作完成连接和低速测试;自行开发控制程序请看 API 与 PDO。
识别电机
读取 0x1018:01(Vendor ID)与 0x1018:02(Product Code),同时匹配两者。GUI 会据此自动打开 Meow 电机面板;0x1008 产品名称可缺失,不用于识别型号。
| Meow 型号 | Vendor ID | Product Code | 名义减速比 |
|---|---|---|---|
| hexmeow 4310 | 0x00686578 |
0x6C64BC78 |
10:1 |
| hexmeow 4342(HEX 4342P) | 0x00686578 |
0x6C64BCAA |
42:1 |
| hexmeow 3525(驱动也支持) | 0x00686578 |
0x6C64AE8D |
25:1 |
0x1018:03 为固件版本,:04 为序列号。未知身份应先核对型号和固件,确认后再写入控制命令。电压、尺寸、额定负载等硬件参数见 4310 / 4342P 资料中心。
CAN 总线
使用线形总线,两端各一组终端电阻,避免星形接线;USB-CANFD-HUB 自带的终端电阻也算其中一端。接口线序见电机拆箱和 CAN 接口说明。
GUI 的常规电机连接使用以下配置,主机与整条总线上的设备必须一致:
| 项目 | 配置 |
|---|---|
| 仲裁段 | 1 Mbit/s,采样点 0.8 |
| 数据段 | 1 / 2 / 4 / 5 Mbit/s;GUI 默认 5 Mbit/s |
| 数据段采样点 | 1 / 2 / 4 Mbit/s 为 0.8;5 Mbit/s 为 0.75 |
| Node-ID | 协议范围 1–127;不可与其他节点或主机重复 |
| GUI 主机 Node-ID | 默认 0x0A(十进制 10) |
分配设备 ID 时避开主机 ID;系统预留 100、101 和 127,不作为日常电机分配值。电机通信参数对象允许的仲裁段速率还包括 125 / 250 / 500 / 800 kbit/s,但常规 GUI 电机连接按 1 Mbit/s 检查。
帧类型与 BRS
NMT、心跳和 SDO 均使用标准 11 位 ID 的 Classic CAN 帧。PDO 的帧类型由 0x2001:04 与载荷长度共同决定:
| PDO BRS | PDO 有效载荷 ≤ 8 字节 | PDO 有效载荷 > 8 字节 |
|---|---|---|
| 0 | Classic CAN | CAN-FD,不切换速率 |
| 1 | CAN-FD + BRS | CAN-FD + BRS |
因此,即使 TPDO1 只有 8 字节、TPDO2 只有 7 字节,开启 BRS 后也必须按 FD+BRS 接收。不要因为短帧就过滤掉 FD。SDO 使用 0x600 + Node-ID 请求、0x580 + Node-ID 响应;心跳为 0x700 + Node-ID。
状态与模式
电机运行状态为失能、某种运行模式或错误。NMT 状态与运行模式各自独立:NMT Operational 不代表已经输出力矩;失能时仍可在 Operational 下继续反馈 PDO。
写 0x4401:00(U8) |
含义 | 正常 0x4402:00 回显 |
|---|---|---|
0x00 |
失能 | 0x00 |
0x01 |
轮廓位置 PP | 0x01 |
0x02 |
轮廓速度 PV | 0x02 |
0x03 |
力矩 | 0x03 |
0x04 |
MIT | 0x04 |
0xFF |
清除错误 | 成功后为失能 0x00 |
切换模式时先写目标值,再写模式命令,并等待新的反馈确认。允许在使能状态下切换模式。0x4401 按值变化触发动作;重复清错应先写 0x00,再写 0xFF。GUI 和驱动已处理该重触发流程。
数据单位与编码
所有运动命令与反馈都使用输出轴单位,不要再次乘除减速比。
| 数据 | 协议编码与单位 |
|---|---|
| PP 目标 / 位置反馈 | 有符号 I32 Q8.24,单位 Rev(圈) |
| PV 目标 / 速度读取 | REAL32,Rev/s |
| 力矩目标 / 反馈 | I16,峰值力矩的千分比(‰) |
| 最大力矩 | U16,0–1000 ‰ |
| 峰值力矩 | REAL32,N·m |
| 非压缩 MIT 位置 / 速度 / 前馈力矩 | REAL32,Rev / Rev/s / N·m |
| 温度 | I16,每单位 0.1 °C |
| TPDO1 时间戳 | U16,µs,按 65536 µs 回绕 |
多字节数据均为小端。Q8.24 的换算为 Rev = raw_i32 / 2^24,可表示范围为 [-128, 128 - 2^-24] 圈,步长约 5.96 × 10^-8 圈。PP 目标超出此范围会被驱动拒绝;持续多圈运动使用 PV,位置反馈回绕后由主机连续累计。累计连续性在丢帧、掉线或重初始化后可能失效,不能当作掉电保持的多圈绝对位置。
GUI 的 PP / PV 输入为 Rev / Rev/s;MIT 卡片使用 rad、rad/s、N·m、N·m/rad 和 N·m·s/rad,会自动转换为协议值。直接调用 Rust 库时需自行完成此换算,见 API 说明。
常用对象
以下为当前 GUI / 驱动使用的对象子集。R 为读取、W 为写入;表中不声明未核实的默认值或其他访问能力。
通信与位置预设
| 地址 | 类型 | 本文使用 | 含义 |
|---|---|---|---|
0x1018:01..04 |
U32 | R | 厂商、产品、固件版本、序列号 |
0x1016:01 |
U32 | R/W | 消费者心跳:(主机 Node-ID << 16) \| timeout_ms |
0x1017:00 |
U16 | R | 设备心跳周期,ms |
0x2001:00 |
U8 | R | 通信参数最高子索引,当前款式为 4 |
0x2001:01 |
U8 | R/W | 保存的 Node-ID,可能与当前活动 ID 不同 |
0x2001:02 |
U32 | R/W | 仲裁段波特率,bit/s |
0x2001:03 |
U32 | R/W | 数据段波特率,bit/s |
0x2001:04 |
U8 | R/W | PDO BRS,0 或 1 |
0x1010:04 |
U32 | R/W | 保存上述通信设置,写 0x65766173(小端 ASCII save) |
0x1010:02 |
U32 | W | 显式保存 PDO 通信参数,写 save;普通初始化不执行 |
0x3001:01 |
REAL32 | W | 位置预设值,-0.5~0.5 Rev |
0x3001:02 |
U32 | W | 写 0x73657270(小端 ASCII pres)提交位置预设并自动保存 |
修改通信配置要求节点在线、身份匹配、尚未初始化且 NMT 为 Pre-Operational 或 Stopped。驱动写入后回读 0x2001:01..04,确认一致才保存;随后需手动断电再上电。不要将其他设备的 0x2100/0x2101 配置方式套用到此款电机。
位置预设是独立操作:必须先确认失能,再写预设值及 pres,保存后保持失能。它修改当前位置的参考值,不是驱动电机转到目标位置。
运动控制与反馈
| 地址 | 类型 | 本文使用 | 含义 |
|---|---|---|---|
0x4401:00 |
U8 | W | 模式命令 |
0x4402:00 |
U8 | R | 模式 / 错误状态 |
0x453F:00 |
U16 | R | 详细错误码 |
0x4564:00 |
I32 Q8.24 | R | 输出轴位置 |
0x456C:00 |
REAL32 | R | 输出轴速度,Rev/s |
0x4577:00 |
I16 | R | 力矩反馈,‰ |
0x457A:00 |
I32 Q8.24 | W | PP 目标位置 |
0x45FF:00 |
REAL32 | W | PV 目标速度,Rev/s |
0x4571:00 |
I16 | W | 力矩目标,-1000~1000 ‰ |
0x4572:00 |
U16 | R/W | 最大力矩,0~1000 ‰ |
0x4576:00 |
REAL32 | R | 峰值力矩,N·m,以设备读取值为准 |
0x4581:00 |
REAL32 | R/W | 规划速度,Rev/s,须大于 0 |
0x4583:00 / 0x4584:00 |
REAL32 | R/W | 规划加 / 减速度,Rev/s²,须大于 0 |
0x4102:01..03 |
REAL32 | W | MIT 目标位置、速度、前馈力矩 |
0x4102:04..05 |
U16 | W | MIT Kp / Kd 原始值 |
0x4102:06 |
U16 | W | MIT Kp、Kd 各项运算输出限制,0~1000 ‰ |
0x4102:07 |
REAL32 | R | MIT Kp / Kd 尺度因子 |
0x4103 |
RECORD | R/W | 压缩 MIT 参数,详见 PDO 控制 |
0x4104:01..02 |
I16 | R | 驱动器 / 电机温度,0.1 °C |
0x4713:00 |
U16 | R | TPDO 时间戳,µs |
0x4001:01..07 |
U32 | R | 出厂标定数据,GUI 用于读取力矩系数 |
错误与恢复
0x4402 的错误回显为 0xA1 过流、0xA2 过压、0xA3 欠压、0xA4 心跳错误、0xA5 驱动器过温、0xA6 电机过温、0xAF 其他错误。进一步读取 0x453F,常见值如下:
| 详细错误码 | 含义 |
|---|---|
0x0000 |
无错误 |
0x2310 |
相线过流 |
0x3210 / 0x3220 |
母线过压 / 欠压 |
0x4210 / 0x7124 |
驱动器 / 电机过温 |
0x7121 |
电机堵转 |
0x7340 |
编码器错误 |
0x8130 |
心跳错误 |
0x8140 |
总线恢复错误 |
先消除供电、温度、负载或心跳异常,再点击清错。清错成功后应为失能,不自动恢复此前的运行模式。主机默认每 50 ms 发送心跳,初始化配置的消费者超时默认为 250 ms;停止主机或切换工具会影响心跳,重新控制前应确认状态并按需初始化。
部分已测试的旧固件存在 0x4102 缺失的情况:即使 0x4103 存在,也不代表普通 MIT SDO 模式可用。若出现 0x06020000 ObjectDoesNotExist,应记录身份和固件版本并联系固件提供方;当前 GUI 不会自动切换成另一种 MIT 协议。