C610电调CAN通信协议及使用指南
基本信息及资料
- 通信协议:C610电调采用CAN通信协议
- 协议参考文档:40. CAN—通讯实验 — [野火]STM32 HAL库开发实战指南——基于H743_Pro_V
- 硬件适配:Arduino Mega2560无CAN差分信号引脚,需外接MCP2515(实现CAN差分信号与SPI信号转换)
- 推荐库:GitHub - autowp/arduino-mcp2515(Arduino MCP2515 CAN接口库)
报文接收格式
用于向电调发送控制指令控制电调的电流输出,两个标识符(0x200和0x1FF)各自对应 控制4个ID的电调。控制转矩电流值范围-10000-0-10000,对应电调输出的转矩电流 范围-10-0-10A。
即0x200用于控制1-4号电调
| 数据域 | 内容 | 电调ID |
|---|---|---|
| DATA[0] | 控制电流值高8位 | 1 |
| DATA[1] | 控制电流值低8位 | 1 |
| DATA[2] | 控制电流值高8位 | 2 |
| DATA[3] | 控制电流值低8位 | 2 |
| DATA[4] | 控制电流值高8位 | 3 |
| DATA[5] | 控制电流值低8位 | 3 |
| DATA[6] | 控制电流值高8位 | 4 |
| DATA[7] | 控制电流值低8位 | 4 |
0x1FF用于控制5-8号电调
| 数据域 | 内容 | 电调ID |
|---|---|---|
| DATA[0] | 控制电流值高8位 | 5 |
| DATA[1] | 控制电流值低8位 | 5 |
| DATA[2] | 控制电流值高8位 | 6 |
| DATA[3] | 控制电流值低8位 | 6 |
| DATA[4] | 控制电流值高8位 | 7 |
| DATA[5] | 控制电流值低8位 | 7 |
| DATA[6] | 控制电流值高8位 | 8 |
| DATA[7] | 控制电流值低8位 | 8 |
报文反馈格式
数据域定义
| 数据索引 | 内容 |
|---|---|
| DATA[0] | 转子机械角度高8位 |
| DATA[1] | 转子机械角度低8位 |
| DATA[2] | 转子转速高8位 |
| DATA[3] | 转子转速低8位 |
| DATA[4] | 实际输出转矩高8位 |
| DATA[5] | 实际输出转矩低8位 |
| DATA[6] | Null |
| DATA[7] | Null |
接收数据时的CANID若为0x201则为ID为1的电调的数据,以此类推。
若是ID为0x1FF+ID则为ID为5-8的电调的数据。
关键参数
- 发送频率:默认1KHz(可通过RoboMaster Assistant软件修改)
- 转子机械角度范围:0
8191(对应物理角度0360°) - 转子转速单位:rpm(转/分钟)
高8位与低8位的理解
C610电调中16位数据会拆分为高8位和低8位传输,具体说明如下:
数据拆分逻辑:
16位原始数据(如二进制0011 0000 1100 0100)拆分为:- 高8位:
0011 0000(通过16位数据右移8位获取:原始数据 >> 8) - 低8位:
1100 0100(直接截取原始数据的低8位)
- 高8位:
赋值方式:
高8位赋值给DATA[n],低8位赋值给DATA[n+1](如角度数据中,DATA[0]存高8位,DATA[1]存低8位)
CAN数据包解析方法
解析接收的CAN数据是拆分过程的逆操作,步骤如下:
- 将高8位数据(如
DATA[0])转换为16位变量(自动补高位0,例:0011 0000→0000 0000 0011 0000); - 将高8位数据左移8位(例:
0000 0000 0011 0000 << 8→0011 0000 0000 0000); - 与低8位数据(如
DATA[1])相加,还原16位原始数据(例:0011 0000 0000 0000 + 1100 0100→0011 0000 1100 0100); - 转换为十进制输出即得目标数据。
示例程序
1 |
|