# 灵足时代电机通信协议汇总 本文档汇总了灵足时代(Robstride)各型号电机的通信协议信息。 ## 支持的电机型号 - **EL05**: 准直驱6N.M一体化电机模组 - **RS00**: 准直驱14N.M一体化电机模组 - **RS01**: 准直驱一体化电机模组 - **RS02**: 准直驱一体化电机模组 - **RS03**: 准直驱一体化电机模组 - **RS04**: 准直驱一体化电机模组 - **EL05**: 准直驱一体化电机模组 - **RS06**: 准直驱一体化电机模组 ## 通信接口规范 ### 基本参数 - **通信方式**: CAN 2.0 - **波特率**: 1Mbps(默认,可通过协议修改) - **帧格式**: - 私有协议:扩展帧(29位ID) - CANopen协议:扩展帧(29位ID) - MIT协议:标准帧(11位ID) ### CAN ID结构(私有协议扩展帧) ``` 29位ID结构: Bit28~bit24: 通信类型 bit23~8: 数据区2(主机CAN_ID等) bit7~0: 目标地址(电机CAN_ID) ``` ## 一、私有协议(默认协议) 所有电机型号均支持私有协议,这是默认的通信协议。 ### 1.1 通信类型列表 #### 通信类型0:获取设备ID - **功能**: 获取设备的ID和64位MCU唯一标识符 - **发送帧**: - ID: `0x0` (Bit28~24=0) - 数据: `00 FD 7F 00 00 00 00 00 00 00` - 说明: bit15~8为主机CAN_ID,bit7~0为目标电机CAN_ID - **应答帧**: - ID: `0x0` - 数据: `00 7F FE [64位MCU唯一标识符]` - 说明: 返回64位MCU唯一标识符 #### 通信类型1:运控模式电机控制指令 - **功能**: 运控模式下的电机控制 - **发送帧**: - ID: `0x1` (Bit28~24=1) - 数据: `[Byte0~1: 目标角度] [Byte2~3: 目标角速度] [Byte4~5: Kp] [Byte6~7: Kd]` - 数据范围: - 角度: 0~65535 对应 (-12.57f~12.57f) rad - 角速度: 0~65535 对应 (-50rad/s~50rad/s) - Kp: 0~65535 对应 (0.0~500.0) - Kd: 0~65535 对应 (0.0~5.0) - 注意: 数据高字节在前,低字节在后 - **应答帧**: 通信类型2(电机反馈数据) #### 通信类型2:电机反馈数据 - **功能**: 电机状态反馈 - **发送帧**: 电机主动发送 - **数据格式**: - Byte0~1: 当前角度 [0~65535] 对应 (-12.57f~12.57f) rad - Byte2~3: 当前角速度 [0~65535] 对应 (-50rad/s~50rad/s) - Byte4~5: 当前力矩 [0~65535] 对应 (-6Nm~6Nm) - Byte6~7: 当前温度 Temp(摄氏度)*10 - Bit8~Bit15: 当前电机CAN ID - Bit16~21: 故障信息(0无 1有) - bit21: 未标定 - bit20: 堵转过载故障 - bit19: 磁编码故障 - bit18: 过温 - bit17: 三相电流故障 - bit16: 欠压故障 - Bit22~23: 模式状态 - 0: Reset模式[复位] - 1: Cali模式[标定] - 2: Motor模式[运行] - **注意**: 数据高字节在前,低字节在后 #### 通信类型3:电机使能运行 - **功能**: 使能电机运行 - **发送帧**: - ID: `0x3` (Bit28~24=3) - 数据: `00 FD 7F 00 00 00 00 00 00 00` - 说明: bit15~8为主机CAN_ID,bit7~0为目标电机CAN_ID - **应答帧**: 通信类型2(电机反馈数据) #### 通信类型4:电机停止运行 - **功能**: 停止电机运行 - **发送帧**: - ID: `0x4` (Bit28~24=4) - 数据: `00 FD 7F 00 00 00 00 00 00 00` - 说明: 正常运行时data区需清0;Byte[0]=1时:清故障 - **应答帧**: 通信类型2(电机反馈数据) #### 通信类型6:设置电机机械零位 - **功能**: 设置当前位置为零位 - **发送帧**: - ID: `0x6` (Bit28~24=6) - 数据: `00 FD 7F 01 00 00 00 00 00 00` - 说明: Byte[0]=1 - **应答帧**: 通信类型2(电机反馈数据) - **注意**: CSP和运控模式下可以标零,PP模式标零会屏蔽掉 #### 通信类型7:设置电机CAN_ID - **功能**: 更改当前电机CAN_ID,立即生效 - **发送帧**: - ID: `0x7` (Bit28~24=7) - 数据: `01 FD 7F [新CAN_ID] 00 00 00 00 00` - 说明: Bit16~23为预设置CAN_ID - **应答帧**: 通信类型0(获取设备ID) #### 通信类型17:单个参数读取 - **功能**: 读取电机单个参数 - **发送帧**: - ID: `0x11` (Bit28~24=17) - 数据: `00 FD 7F [Byte0~1: index] 00 00 00 00 00` - 说明: index为参数索引,详见可读写参数表,数据低字节在前,高字节在后 - **应答帧**: - ID: `0x11` - 数据: `00 7F FD [Byte0~1: index] 00 [Byte4~7: 参数数据]` - 说明: Bit23~16: 00为读取成功,01为读取失败 #### 通信类型18:单个参数写入(掉电丢失) - **功能**: 写入电机单个参数(需配合类型22保存) - **发送帧**: - ID: `0x12` (Bit28~24=18) - 数据: `00 FD 7F [Byte0~1: index] 00 [Byte4~7: 参数数据]` - 说明: 数据低字节在前,高字节在后 - **应答帧**: 通信类型2(电机反馈数据) #### 通信类型21:故障反馈帧 - **功能**: 故障信息反馈 - **发送帧**: 电机主动发送 - **数据格式**: - Byte0~3: fault值(非0:有故障,0:正常) - Bit16: A相电流采样过流 - Bit14: 堵转过载算法保护 - Bit9: 位置初始化故障 - Bit8: 硬件识别故障 - Bit7: 编码器未标定 - Bit5: C相电流采样过流 - Bit4: B相电流采样过流 - Bit3: 过压故障(超过60V) - Bit2: 欠压故障(低于12V) - Bit1: 驱动芯片故障 - Bit0: 电机过温故障(超过145度) - Byte4~7: warning值 - Bit0: 电机过温预警 #### 通信类型22:电机数据保存帧 - **功能**: 保存当前所有可存储变量 - **发送帧**: - ID: `0x16` (Bit28~24=22) - 数据: `00 FD 7F 01 02 03 04 05 06 07 08` - 说明: 保存通过类型18写入的参数 - **应答帧**: 通信类型2(电机反馈数据) #### 通信类型23:电机波特率修改帧 - **功能**: 修改CAN总线波特率(重新上电生效) - **发送帧**: - ID: `0x17` (Bit28~24=23) - 数据: `00 FD 7F 01 02 03 04 05 06 [F_CMD] 00` - F_CMD说明: - 01: 1Mbps - 02: 500Kbps - 03: 250Kbps - 04: 125Kbps - **应答帧**: 通信类型0(获取设备ID) #### 通信类型24:电机主动上报帧 - **功能**: 开启/关闭电机主动上报(部分型号支持) - **发送帧**: - ID: `0x18` (Bit28~24=24) - 数据: `00 FD 7F 01 02 03 04 05 06 [F_CMD] 00` - F_CMD说明: - 00: 关闭主动上报(默认) - 01: 开启主动上报(默认上报间隔10ms) - **应答帧**: 通信类型2(电机反馈数据) - **注意**: 上报间隔可通过类型18修改EPScan_time参数来更改 #### 通信类型25:电机协议修改帧 - **功能**: 切换电机通信协议(重新上电生效) - **发送帧**: - ID: `0x19` (Bit28~24=25) - 数据: `00 FD 7F 01 02 03 04 05 06 [F_CMD] 00` - F_CMD说明: - 0: 私有协议(默认) - 1: CANopen协议 - 2: MIT协议 - **应答帧**: 通信类型0(获取设备ID) #### 通信类型26:版本号读取帧 - **功能**: 读取电机版本号 - **发送帧**: - ID: `0x1A` (Bit28~24=26) - 数据: `00 FD 7F 00 C4 00 00 00 00 00` - 说明: Byte[0]=0x00, Byte[1]=0xC4 - **应答帧**: - ID: `0x2` - 数据: `00 7F FD 00 C4 [Byte2~6: 电机版本号]` - 说明: 版本号顺序由高到低 ### 1.2 可读写参数列表 | 参数index | 参数名称 | 描述 | 类型 | 字节数 | 单位/说明 | R/W | |-----------|----------|------|------|--------|----------|-----| | 0X7005 | run_mode | 运行模式 | uint8 | 1 | 0:运控 1:PP 2:速度 3:电流 5:CSP | W/R | | 0X7006 | iq_ref | 电流模式Iq指令 | float | 4 | 见下表(各型号不同) | W/R | | 0X700A | spd_ref | 转速模式转速指令 | float | 4 | 见下表(各型号不同) | W/R | | 0X700B | limit_torque | 转矩限制 | float | 4 | 见下表(各型号不同) | W/R | | 0X7010 | cur_kp | 电流的Kp | float | 4 | 默认值0.17 | W/R | | 0X7011 | cur_ki | 电流的Ki | float | 4 | 默认值0.012 | W/R | | 0X7014 | cur_filt_gain | 电流滤波系数 | float | 4 | 0~1.0,默认值0.1 | W/R | | 0X7016 | loc_ref | 位置模式角度指令 | float | 4 | rad | W/R | | 0X7017 | limit_spd | 位置模式(CSP)速度限制 | float | 4 | 见下表(各型号不同) | W/R | | 0X7018 | limit_cur | 速度位置模式电流限制 | float | 4 | 见下表(各型号不同) | W/R | | 0x7019 | mechPos | 负载端计圈机械角度 | float | 4 | rad | R | | 0x701A | iqf | iq滤波值 | float | 4 | 见下表(各型号不同) | R | | 0x701B | mechVel | 负载端转速 | float | 4 | 见下表(各型号不同) | R | | 0x701C | VBUS | 母线电压 | float | 4 | V | R | | 0x701E | loc_kp | 位置的kp | float | 4 | 默认值40 | W/R | | 0x701F | spd_kp | 速度的kp | float | 4 | 默认值6 | W/R | | 0x7020 | spd_ki | 速度的ki | float | 4 | 默认值0.02 | W/R | | 0x7021 | spd_filt_gain | 速度滤波值 | float | 4 | 默认值0.1 | W/R | | 0x7022 | acc_rad | 速度模式加速度 | float | 4 | 默认值20rad/s^2 | W/R | | 0x7024 | vel_max | 位置模式(PP)速度 | float | 4 | 默认值10rad/s | W/R | | 0x7025 | acc_set | 位置模式(PP)加速度 | float | 4 | 默认值10rad/s^2 | W/R | | 0x7026 | EPScan_time | 上报时间设置 | uint16 | 2 | 1代表10ms,加1递增5ms | W/R | | 0x7028 | canTimeout | can超时阀值 | uint32 | 4 | 20000代表1s,默认0 | W/R | | 0x7029 | zero_sta | 零点标志位 | uint8 | 1 | 0代表0-2π,1代表-π-π | W/R | | 0x702B | add_offset | 零位偏置 | float | 4 | 默认0 | W/R | #### 各型号参数范围差异表 **⚠️ 重要提示**: 不同型号电机的参数范围存在显著差异,使用时务必参考对应型号的参数范围! ##### 电机规格参数对照表 | 电机型号 | 额定负载 | 峰值负载 | 减速比 | 额定相电流 | 最大相电流 | |----------|----------|----------|--------|------------|------------| | EL05 | 1.8 N.m | 6 N.m | 9:1 | 2.6Apk | 11Apk | | RS00 | 5 N.m | 14 N.m | 10:1 | 4.7Apk | 15.5Apk | | RS01 | 6 N.m | 17 N.m | 7.75:1 | 7Apk | 23Apk | | RS02 | 6 N.m | 17 N.m | 7.75:1 | 7Apk | 23Apk | | RS03 | 20 N.m | 60 N.m | 9:1 | 13Apk | 27Apk | | RS04 | 40 N.m | 120 N.m | 9:1 | 27Apk | 45Apk | | EL05 | 1.6 N.m | 6 N.m | 7.75:1 | 2.4Apk | 10Apk | | RS06 | 11 N.m | 36 N.m | 9:1 | 14.3Apk | 27Apk | ##### 通信数据映射范围对照表(私有协议) | 电机型号 | 力矩范围 (T_MIN~T_MAX) | 速度范围 (V_MIN~V_MAX) | 角度范围 (P_MIN~P_MAX) | |----------|------------------------|------------------------|------------------------| | EL05 | -6Nm ~ 6Nm | -50rad/s ~ 50rad/s | -12.57rad ~ 12.57rad | | RS00 | -14Nm ~ 14Nm | -33rad/s ~ 33rad/s | -12.57rad ~ 12.57rad | | RS01 | -17Nm ~ 17Nm | -44rad/s ~ 44rad/s | -12.57rad ~ 12.57rad | | RS02 | -17Nm ~ 17Nm | -44rad/s ~ 44rad/s | -12.57rad ~ 12.57rad | | RS03 | -60Nm ~ 60Nm | -20rad/s ~ 20rad/s | -12.57rad ~ 12.57rad | | RS04 | -120Nm ~ 120Nm | -15rad/s ~ 15rad/s | -12.57rad ~ 12.57rad | | EL05 | -6Nm ~ 6Nm | -50rad/s ~ 50rad/s | -12.57rad ~ 12.57rad | | RS06 | -36Nm ~ 36Nm | -50rad/s ~ 50rad/s | -12.57rad ~ 12.57rad | ##### 运控模式Kp/Kd范围对照表 | 电机型号 | Kp范围 (KP_MIN~KP_MAX) | Kd范围 (KD_MIN~KD_MAX) | |----------|------------------------|------------------------| | EL05 | 0 ~ 500 | 0 ~ 5 | | RS00 | 0 ~ 500 | 0 ~ 5 | | RS01 | 0 ~ 500 | 0 ~ 5 | | RS02 | 0 ~ 500 | 0 ~ 5 | | RS03 | 0 ~ 5000 | 0 ~ 100 | | RS04 | 0 ~ 5000 | 0 ~ 100 | | EL05 | 0 ~ 500 | 0 ~ 5 | | RS06 | 0 ~ 5000 | 0 ~ 100 | ##### 参数limit_torque范围对照表 | 电机型号 | limit_torque 范围 | |----------|-------------------| | EL05 | 0 ~ 6 Nm | | RS00 | 0 ~ 14 Nm | | RS01 | 0 ~ 17 Nm | | RS02 | 0 ~ 17 Nm | | RS03 | 0 ~ 60 Nm | | RS04 | 0 ~ 120 Nm | | EL05 | 0 ~ 6 Nm | | RS06 | 0 ~ 36 Nm | ##### 参数limit_spd/spd_ref范围对照表 | 电机型号 | limit_spd / spd_ref 范围 | |----------|--------------------------| | EL05 | 0 ~ 50 rad/s | | RS00 | 0 ~ 33 rad/s | | RS01 | 0 ~ 44 rad/s | | RS02 | 0 ~ 44 rad/s | | RS03 | 0 ~ 20 rad/s | | RS04 | 0 ~ 15 rad/s | | EL05 | 0 ~ 50 rad/s | | RS06 | 0 ~ 50 rad/s | ##### 参数limit_cur/iq_ref/iqf范围对照表 | 电机型号 | limit_cur / iq_ref / iqf 范围 | |----------|-------------------------------| | EL05 | 0 ~ 11 A | | RS00 | 0 ~ 15.5 A | | RS01 | 0 ~ 23 A | | RS02 | 0 ~ 23 A | | RS03 | 0 ~ 27 A | | RS04 | 0 ~ 45 A | | EL05 | 0 ~ 10 A | | RS06 | 0 ~ 27 A | ##### 数据映射转换宏定义示例(C语言) ```c // EL05 / EL05 #define P_MIN -12.57f #define P_MAX 12.57f #define V_MIN -50.0f #define V_MAX 50.0f #define KP_MIN 0.0f #define KP_MAX 500.0f #define KD_MIN 0.0f #define KD_MAX 5.0f #define T_MIN -6.0f // EL05: -6 #define T_MAX 6.0f // EL05: 6 // RS00 #define V_MIN -33.0f #define V_MAX 33.0f #define T_MIN -14.0f #define T_MAX 14.0f // RS01 / RS02 #define V_MIN -44.0f #define V_MAX 44.0f #define T_MIN -17.0f #define T_MAX 17.0f // RS03 #define V_MIN -20.0f #define V_MAX 20.0f #define KP_MAX 5000.0f #define KD_MAX 100.0f #define T_MIN -60.0f #define T_MAX 60.0f // RS04 #define V_MIN -15.0f #define V_MAX 15.0f #define KP_MAX 5000.0f #define KD_MAX 100.0f #define T_MIN -120.0f #define T_MAX 120.0f // RS06 #define V_MIN -50.0f #define V_MAX 50.0f #define KP_MAX 5000.0f #define KD_MAX 100.0f #define T_MIN -36.0f #define T_MAX 36.0f ``` **版本兼容性说明**: - RS00: 固件版本0.0.2.6及之前P_MIN/P_MAX为±12.5,之后为±12.57 - RS01: 固件版本0.1.2.1及之前P_MIN/P_MAX为±12.5,之后为±12.57 - RS02: 固件版本0.2.2.11及之前P_MIN/P_MAX为±12.5,之后为±12.57 - RS03: 固件版本0.3.0.5及之前P_MIN/P_MAX为±12.5,之后为±12.57 - RS04: 固件版本0.4.0.5及之前P_MIN/P_MAX为±12.5,之后为±12.57 ### 1.3 控制模式使用说明 #### 运控模式 1. 电机上电后默认处于运控模式 2. 发送电机使能运行帧(通信类型3) 3. 发送运控模式电机控制指令(通信类型1) 4. 收到电机反馈帧(通信类型2) #### 电流模式 1. 发送电机模式参数写入命令(通信类型18)设置runmode参数为3 2. 发送电机使能运行帧(通信类型3) 3. 发送电机模式参数写入命令(通信类型18)设置iq_ref参数为预设电流指令 #### 速度模式 1. 发送电机模式参数写入命令(通信类型18)设置runmode参数为2 2. 发送电机使能运行帧(通信类型3) 3. 发送电机模式参数写入命令(通信类型18)设置limit_cur参数为预设最大电流指令 4. 发送电机模式参数写入命令(通信类型18)设置acc_rad参数为预设加速度指令 5. 发送电机模式参数写入命令(通信类型18)设置spd_ref参数为预设速度指令 #### 位置模式(CSP) 1. 发送电机模式参数写入命令(通信类型18)设置runmode参数为5 2. 发送电机使能运行帧(通信类型3) 3. 发送电机模式参数写入命令(通信类型18)设置limit_spd参数为预设最大速度指令 4. 发送电机模式参数写入命令(通信类型18)设置loc_ref参数为预设位置指令 #### 位置模式(PP) 1. 发送电机模式参数写入命令(通信类型18)设置runmode参数为1 2. 发送电机使能运行帧(通信类型3) 3. 发送电机模式参数写入命令(通信类型18)设置vel_max参数为预设最大速度指令 4. 发送电机模式参数写入命令(通信类型18)设置acc_set参数为预设加速度指令 5. 发送电机模式参数写入命令(通信类型18)设置loc_ref参数为预设位置指令 6. **注意**: 该模式不支持运行过程中改速度和加速度,如想急停可以在过程中将vel_max修改为0 #### 停止运行 发送电机停止运行帧(通信类型4) ## 二、CANopen通信协议 CANopen是一个基于CAN总线的"高层协议",实现了OSI模型的第七层。 ### 2.1 CANOpen协议报文分类 | 分类 | 作用 | |------|------| | NMT 网络管理报文 | 管理网络,切换节点的状态 | | SDO 服务数据对象报文 | 设置设备参数,关键数据传输 | | PDO 过程数据对象报文 | 传输设备的过程数据(温度、速度等) | | EMCY 紧急报文 | 传输设备的故障信息 | | SYNC 同步报文 | 同步数据,同步从站的TPDO数据 | | NODE GUARDING 节点保护报文 | 主站请求从站的状态 | | HeartBeat 心跳报文 | 设备主动发送心跳,表示在线 | ### 2.2 状态机说明 - **SWITCH_ON_DISABLED**: 电机初始上电状态 - **OPERATION_ENABLE**: 运行状态 - 通过修改controlword(6040)为6、7、15过渡到OPERATION_ENABLE状态 - 也可直接修改为15进入OPERATION_ENABLE状态 - **停止电机**: 修改controlword(6040)为1,进入SWITCH_ON_DISABLED状态 - **急停**: 修改controlword(6040)为11(慎用,易造成浪涌电压) - **清除错误**: 修改controlword(6040)可以清除常规错误 **注意**: 切换模式需要在失能状态下,请在进入OPERATION_ENABLE之前设置相应模式 ### 2.3 状态反馈参数 | 索引 | 名称 | 属性 | 类型 | 单位 | |------|------|------|------|------| | 603F | Error_code | 可读 | UINTEGER16 | / | | 6041 | Statusword | 可读 | UINTEGER16 | / | | 6061 | Modes_of_operation_display | 可读 | INTEGER8 | / | | 6062 | Position_demannd_value | 可读 | INTEGER32 | 脉冲,一圈对应16384脉冲 | | 6064 | Position_actual_value | 可读 | INTEGER32 | 脉冲,一圈对应16384脉冲 | | 606B | Velocity_demand_value | 可读 | INTEGER32 | 0.1rpm | | 606C | Velocity_actual_value | 可读 | INTEGER32 | 0.1rpm | | 6077 | Torque_actual_value | 可读 | INTEGER16 | 0.1%负载率,1000代表2N.m | | 6078 | Current_actual_value | 可读 | INTEGER16 | mA | | 6079 | DC_link_circuit_voltage | 可读 | INTEGER32 | mV | ### 2.4 归零模式(设置零位) | 索引 | 名称 | 属性 | 类型 | 单位 | |------|------|------|------|------| | 6040 | controlword | 可读写 | UINTEGER16 | / | | 6060 | Modes of operation | 可读写 | INTEGER8 | / | **标零方式**: 电机在失能状态下设置Modes of operation为6,电机即会设置当前位置为零位 **零点保持**: 修改controlword为15,电机会在零位位置保持 ### 2.5 位置模式(PP) | 索引 | 名称 | 属性 | 类型 | 单位 | |------|------|------|------|------| | 6040 | controlword | 可读写 | UINTEGER16 | / | | 6060 | Modes of operation | 可读写 | INTEGER8 | / | | 6067 | Position_window | 可读写 | UINTEGER32 | 脉冲,一圈对应16384脉冲 | | 6068 | Position_window_time | 可读写 | UINTEGER16 | ms | | 6071 | Target_torque | 可读写 | INTEGER16 | 0.1%负载率,1000代表2N.m | | 607A | Target_position | 可读写 | INTEGER32 | 脉冲,一圈对应16384脉冲 | | 6081 | Profile_velocity | 可读写 | UINTEGER32 | 0.1rpm | | 6083 | Profile_acceleration | 可读写 | UINTEGER32 | 0.1rpm/s | **步骤**: 1. 电机在失能状态下设置Modes of operation为1 2. 设置Target_torque(位置模式下最大力矩绝对值,必设) 3. 设置Profile_velocity(位置模式速度绝对值,必设) 4. 设置Profile_acceleration(位置模式加速度绝对值,必设) 5. 设置Position_window和Position_window_time(可选) 6. 设置controlword为15 7. 设置Target_position(绝对位置)即可到达指定位置 ### 2.6 位置模式(CSP) | 索引 | 名称 | 属性 | 类型 | 单位 | |------|------|------|------|------| | 6040 | controlword | 可读写 | UINTEGER16 | / | | 6060 | Modes of operation | 可读写 | INTEGER8 | / | | 6067 | Position_window | 可读写 | UINTEGER32 | 脉冲,一圈对应16384脉冲 | | 6068 | Position_window_time | 可读写 | UINTEGER16 | ms | | 6071 | Target_torque | 可读写 | INTEGER16 | 0.1%负载率,1000代表2N.m | | 607A | Target_position | 可读写 | INTEGER32 | 脉冲,一圈对应16384脉冲 | | 6081 | Profile_velocity | 可读写 | UINTEGER32 | 0.1rpm | **步骤**: 1. 电机在失能状态下设置Modes of operation为5 2. 设置Target_torque(位置模式下最大力矩绝对值,必设) 3. 设置Profile_velocity(位置模式速度绝对值,必设) 4. 设置Position_window和Position_window_time(可选,0即不启用) 5. 设置controlword为15 6. 设置Target_position(绝对位置)即可到达指定位置 ### 2.7 速度模式 | 索引 | 名称 | 属性 | 类型 | 单位 | |------|------|------|------|------| | 6040 | controlword | 可读写 | UINTEGER16 | / | | 6060 | Modes of operation | 可读写 | INTEGER8 | / | | 6071 | Target_torque | 可读写 | INTEGER16 | 0.1%负载率,1000代表2N.m | | 60FF | Target_velocity | 可读写 | INTEGER32 | 0.1rpm | **步骤**: 1. 电机在失能状态下设置Modes of operation为3 2. 设置Target_torque(位置模式下最大力矩绝对值,必设) 3. 设置controlword为15 4. 设置Target_velocity即可到达指定速度 ### 2.8 力矩模式 | 索引 | 名称 | 属性 | 类型 | 单位 | |------|------|------|------|------| | 6040 | controlword | 可读写 | UINTEGER16 | / | | 6060 | Modes of operation | 可读写 | INTEGER8 | / | | 6071 | Target_torque | 可读写 | INTEGER16 | 0.1%负载率,1000代表2N.m | **步骤**: 1. 电机在失能状态下设置Modes of operation为4 2. 设置controlword为15 3. 设置Target_torque即可输出指定力矩 ### 2.9 协议切换帧(扩展帧) 切换电机协议,重新上电生效 - **ID**: `0xFFF` - **数据**: `01 02 03 04 05 06 [F_CMD]` - **F_CMD说明**: - 0: 私有协议(默认) - 1: CANopen协议 - 2: MIT协议 **应答帧**: - **ID**: 电机id(11位标准帧) - **数据**: 64位MCU唯一标识符 ## 三、MIT通信协议 MIT协议采用标准帧格式(11位ID),波特率默认1Mbps。 ### 3.1 CAN ID结构(MIT协议标准帧) ``` 11位ID结构: Bit10~bit8: 模式类型 bit7~0: id(电机CAN_ID或主机CAN_ID) ``` ### 3.2 支持的控制模式 - **MIT模式**: 给定电机运控5个参数 - **速度模式**: 给定电机指定的运行速度 - **位置模式**: 给定电机指定的位置和速度,电机将以过程速度运行到该指定的位置 ### 3.3 指令列表 #### 应答指令1 - **ID**: `0xFD`(主机id) - **数据格式**: - Byte0: 电机canid - Byte1~2: 当前角度 [0~65535] 对应 (-12.57rad~12.57rad) - Byte3为高8位,Byte4[7-4](高4位)为低4位: 当前速度 [0~4096] 对应 (-50rad/s~50rad/s) - Byte4[3-0](低4位)为高4位,Byte5为低8位: 当前力矩 [0~4096] 对应 (-6N.m~6N.m) - Byte6~7: 绕组温度 Temp(摄氏度)*10,单位度 #### 应答指令2 - **ID**: 电机id - **数据**: 64位MCU唯一标识符 #### 指令1:电机使能运行 - **ID**: `0x7F`(目标电机canid) - **数据**: `FF FF FF FF FF FF FF FC` - **应答帧**: 应答指令1 #### 指令2:电机停止运行 - **ID**: `0x7F`(目标电机canid) - **数据**: `FF FF FF FF FF FF FF FD` - **应答帧**: 应答指令1 #### 指令3:电机MIT动态参数 - **ID**: `0x7F`(目标电机canid) - **数据格式**: - Byte0~1: 目标角度 [0~65535] 对应 (-12.57rad~12.57rad) - Byte2为高8位,Byte3[7-4](高4位)为低4位: 目标速度 [0~4096] 对应 (-50rad/s~50rad/s) - Byte3[3-0](低4位)为高4位,Byte4为低8位: kp [0~4096] 对应 (0-500) - Byte5为其高8位,Byte6[7-4](高4位)为其低4位: kd [0~4096] 对应 (0-5) - Byte6[3-0](低4位)为高4位,Byte7为低8位: 目标力矩 [0~4096] 对应 (-6N.m~6N.m) - **应答帧**: 应答指令1 #### 指令4:设置零点(非位置模式) - **ID**: `0x7F`(目标电机canid) - **数据**: `FF FF FF FF FF FF FF FE` - **应答帧**: 应答指令1 #### 指令5:清除错误及读取异常状态 - **ID**: `0x7F`(目标电机canid) - **数据**: `FF FF FF FF FF FF [F_CMD] FB` - F_CMD = 0xFF: 消除当前的异常 - F_CMD = 其他值: 在回复中的BYTE1中回传错误值 - **清错应答帧**: 应答指令1 - **异常状态应答帧**: - ID: `0xFD`(主机id) - Byte0: 电机canid - Byte1~4: fault值(非0:有故障,0:正常) - Bit16: A相电流采样过流 - Bit14: 堵转过载算法保护 - Bit9: 位置初始化故障 - Bit8: 硬件识别故障 - Bit7: 编码器未标定 - Bit5: C相电流采样过流 - Bit4: B相电流采样过流 - Bit3: 过压故障(超过60V) - Bit2: 欠压故障(低于12V) - Bit1: 驱动芯片故障 - Bit0: 电机过温故障(超过145度) #### 指令6:设置运行模式 - **ID**: `0x7F`(目标电机canid) - **数据**: `FF FF FF FF FF FF [F_CMD] FC` - F_CMD说明: - 0: MIT模式(默认) - 1: 位置模式 - 2: 速度模式 - **应答帧**: 应答指令1 #### 指令7:修改电机CANID - **ID**: `0x7F`(目标电机canid) - **数据**: `FF FF FF FF FF FF [F_CMD] FA` - F_CMD: 目标修改的电机id - **应答帧**: 应答指令2 #### 指令8:修改电机协议 切换电机协议,重新上电生效 - **ID**: `0x7F`(目标电机canid) - **数据**: `FF FF FF FF FF FF [F_CMD] FD` - F_CMD说明: - 0: 私有协议(默认) - 1: CANopen协议 - 2: MIT协议 - **应答帧**: 应答指令2 #### 指令9:修改主机canid - **ID**: `0x7F`(目标电机canid) - **数据**: `FF FF FF FF FF FF [F_CMD] 01` - F_CMD: 为主机canid - **应答帧**: 应答指令2 #### 指令10:位置模式控制指令 - **ID**: `0x17F`(Bit10~8=1,bit7~0=目标电机canid) - **数据格式**: - Byte0~3: 目标位置,单位rad,32位单精度float - Byte4~7: 目标速度,单位rad/s,32位单精度float - **应答帧**: 应答指令1 #### 指令11:速度模式控制指令 - **ID**: `0x27F`(Bit10~8=2,bit7~0=目标电机canid) - **数据格式**: - Byte0~3: 目标速度,单位rad/s,32位单精度float - Byte4~7: 速度位置模式电流限制,单位A,32位单精度float - **应答帧**: 应答指令1 ### 3.4 控制模式使用说明 #### 运控模式 1. 电机上电后默认处于运控模式 2. 发送电机使能运行帧(指令1) 3. 发送运控模式电机控制指令(指令3) 4. 发送电机停止帧(指令2) #### 速度模式 1. 发送电机模式参数写入命令(指令6)设置模式为2 2. 发送电机使能运行帧(指令1) 3. 发送电机模式参数写入命令(指令11)设置最大电流(绝对值)和预设速度 4. 发送电机停止帧(指令2) #### 位置模式(CSP) 1. 发送电机模式参数写入命令(指令6)设置模式为1 2. 发送电机使能运行帧(指令1) 3. 发送电机模式参数写入命令(指令10)设置最大速度(绝对值)和预设位置 4. 发送电机停止帧(指令2) ## 四、协议切换说明 ### 4.1 切换方法 1. **通过上位机修改**: 修改protocol_1标志位或发送通信类型25(私有协议)即可切换协议 2. **通过CAN盒操作**: 切换协议后,需要通过can盒发送相应通信协议的切换协议指令进行切换 - CANopen协议: 发送扩展帧的协议切换帧 - MIT协议: 发送标准帧的指令8 ### 4.2 生效方式 **重新上电生效**: 协议切换后需要重新上电才能生效 ### 4.3 CAN ID一致性 - **CANopen协议**: canopen的id与私有协议下的canid保持一致 - **MIT协议**: 使用标准帧,id为电机CAN_ID ## 五、故障说明 ### 5.1 故障位定义 故障信息通过通信类型2的Bit16~21或通信类型21的Byte0~3反馈: | 位 | 故障名称 | 说明 | |----|----------|------| | Bit0 | 电机过温故障 | 电机热敏电阻温度超过145度 | | Bit1 | 驱动芯片故障 | 电机驱动芯片报故障 | | Bit2 | 欠压故障 | 电机电压低于保护电压12V | | Bit3 | 过压故障 | 电机电压超过保护电压60V | | Bit4 | B相电流故障 | B相电流采样过流 | | Bit5 | C相电流故障 | C相电流采样过流 | | Bit7 | 编码器未标定 | 电机未标定编码器 | | Bit8 | 硬件识别故障 | 硬件识别故障 | | Bit9 | 位置初始化故障 | 位置初始化故障 | | Bit14 | 堵转过载算法保护 | 电机堵转过载算法保护 | | Bit16 | A相电流故障 | A相电流采样过流 | ### 5.2 警告位定义 | 位 | 警告名称 | 说明 | |----|----------|------| | Bit0 | 电机过温预警 | 默认145度 | ## 六、特殊功能说明 ### 6.1 主动上报 - **默认状态**: 关闭 - **开启方式**: 通过通信类型24开启上报 - **上报类型**: 通信类型2(电机反馈数据) - **上报间隔**: 默认10ms,可通过通信类型18修改EPScan_time参数来更改 - **最小间隔**: 10ms ### 6.2 零点标志位 - **参数**: zero_sta(0x7029) - **说明**: - 0: 上电后默认位置为0-2π(默认) - 1: 上电后默认位置为-π-π - **修改方式**: 通过上位机或通信类型18修改,通过通信类型18修改需要用通信类型22保存 ### 6.3 类型2变更说明 类型2变更为周期性循环-4π-4π,可通过该方式记圈数。 **位置接口变更**: - P_MIN: -12.57f - P_MAX: 12.57f ### 6.4 CAN超时保护 - **参数**: CAN_TIMEOUT(canTimeout,0x7028) - **说明**: - 值为0时: 该功能不启用 - 值为非0时: 当电机在一定时间段内没收到can指令时,电机进入reset模式 - 20000代表1s ### 6.5 标零功能 - **支持模式**: CSP和运控模式下可以标零 - **限制**: PP模式标零会屏蔽掉 - **说明**: 新版本电机在CSP和运控模式下标零,电机期望会马上更新为0,这样电机不会运动 ## 七、数据转换说明 ### 7.1 数据字节序 - **私有协议**: 大部分数据高字节在前,低字节在后 - **参数读写**: 数据低字节在前,高字节在后 - **MIT协议**: 按指令说明 ### 7.2 数据范围映射 **⚠️ 重要**: 各型号电机的数据映射范围不同,详见 [1.2 可读写参数列表](#12-可读写参数列表) 中的各型号参数范围差异表。 #### 通用映射规则 | 数据类型 | 原始值范围 | 映射方式 | 备注 | |----------|------------|----------|------| | 角度(私有协议16位) | 0~65535 | 线性映射到 P_MIN~P_MAX | 各型号统一为 ±12.57rad | | 角速度(私有协议16位) | 0~65535 | 线性映射到 V_MIN~V_MAX | 各型号不同,见差异表 | | 力矩(私有协议16位) | 0~65535 | 线性映射到 T_MIN~T_MAX | 各型号不同,见差异表 | | Kp(私有协议16位) | 0~65535 | 线性映射到 KP_MIN~KP_MAX | 小型号0~500,大型号0~5000 | | Kd(私有协议16位) | 0~65535 | 线性映射到 KD_MIN~KD_MAX | 小型号0~5,大型号0~100 | | 角度(MIT协议12位) | 0~65535 | 线性映射到 P_MIN~P_MAX | ±12.57rad | | 角速度(MIT协议12位) | 0~4096 | 线性映射到 V_MIN~V_MAX | 各型号不同 | | 力矩(MIT协议12位) | 0~4096 | 线性映射到 T_MIN~T_MAX | 各型号不同 | | Kp(MIT协议12位) | 0~4096 | 线性映射到 KP_MIN~KP_MAX | 各型号不同 | | Kd(MIT协议12位) | 0~4096 | 线性映射到 KD_MIN~KD_MAX | 各型号不同 | #### 各型号数据映射快速参考 | 电机型号 | 力矩范围 | 速度范围 | Kp范围 | Kd范围 | |----------|----------|----------|--------|--------| | EL05 | ±6Nm | ±50rad/s | 0~500 | 0~5 | | RS00 | ±14Nm | ±33rad/s | 0~500 | 0~5 | | RS01 | ±17Nm | ±44rad/s | 0~500 | 0~5 | | RS02 | ±17Nm | ±44rad/s | 0~500 | 0~5 | | RS03 | ±60Nm | ±20rad/s | 0~5000 | 0~100 | | RS04 | ±120Nm | ±15rad/s | 0~5000 | 0~100 | | EL05 | ±6Nm | ±50rad/s | 0~500 | 0~5 | | RS06 | ±36Nm | ±50rad/s | 0~5000 | 0~100 | #### 温度映射 - 格式: Temp(摄氏度)*10 - 示例: 温度25.5度 = 255 #### 数据转换函数 ```c // 浮点数转无符号整数(用于发送) int float_to_uint(float x, float x_min, float x_max, int bits) { float span = x_max - x_min; float offset = x_min; if (x > x_max) x = x_max; else if (x < x_min) x = x_min; return (int)((x - offset) * ((float)((1 << bits) - 1)) / span); } // 无符号整数转浮点数(用于接收) float uint_to_float(int x_int, float x_min, float x_max, int bits) { float span = x_max - x_min; float offset = x_min; return ((float)x_int) * span / ((float)((1 << bits) - 1)) + offset; } ``` ### 7.3 浮点数格式 - **IEEE-754标准**: 32位单精度浮点数 - **字节序**: 按协议要求(低字节在前或高字节在前) ## 八、版本说明 本文档基于以下版本说明书整理: - EL05使用说明书251210 - RS00使用说明书251210 - RS01使用说明书251210 - RS02使用说明书251210 - RS03使用说明书251210 - RS04使用说明书251210 - EL05使用说明书251210 - RS06使用说明书251210 **注意**: 不同型号的电机在某些细节上可能有差异,具体请参考对应型号的详细说明书。如无某些功能,请访问官网git升级最新版本。 ## 九、参考资料 - 官方网站: https://www.robstride.com/ - 下载中心: www.robstride.com(可下载EDS文件等) - 技术支持: 请通过官方网站联系技术支持 --- **文档生成日期**: 2025年12月29日 **文档版本**: 1.0