AxDr_L_Motor:如何通过 USB 与固件通信
把 AxDrive-L 开发板通过 USB 接到电脑后,可以查看电机的电压、电流,修改控制参数,发送控制命令,也可以连续采集波形。固件通过 USB 虚拟串口传输数据。
下面以 VOFA+ 发送十六进制命令为例,介绍如何与 AxDr_L_Motor 通信。示例对应的固件为 main @ 204215f。
连接与发送
电脑识别开发板的 USB 后,Linux 通常出现 /dev/ttyACM0 一类串口,Windows 则显示为 COM 端口。VOFA+ 连接这个端口即可。
下面代码框中的每一行都是一条完整的十六进制命令。 需要按 Hex 原始字节发送,而不是把 41 58... 当作文字;发送时不需要加换行符。
使用与固件协议匹配的 JustCanFd 数据引擎 接收数据。参数读取可对照返回的数值,连续采集的数据可以在 VOFA+ 中显示为波形。
读取一个参数
先读取电机极对数。发送:
1
41 58 44 52 C1 01 04 01 01 01 01
假设当前极对数为 7,会收到:
1
41 58 44 52 81 00 08 01 07 01 00 01 01 00 07
最后的 07 是读到的极对数;前面的状态码 00 表示读取成功。
其他常用参数:
| 想读取什么 | 参数编号 |
|---|---|
| 母线电压 Vbus | 0x0004 |
| A 相电流 Ia | 0x0001 |
| q 轴电流 Iq | 0x0011 |
| 当前控制模式 | 0x0701 |
| 电机极对数 | 0x0101 |
读取其他参数时,把上面第一条命令最后两个字节换成对应编号(低字节在前)即可。例如,要读取母线电压,发送:
1
41 58 44 52 C1 01 04 01 01 04 00
若电压为 24.0 V,回复示例为:
1
41 58 44 52 81 00 0C 01 07 01 00 04 00 02 00 00 C0 41 00
其中 00 00 C0 41 表示 24.0。极对数用一个字节存整数,而电压、电流等数据使用四字节浮点数(float32),不能把这些字节直接按十进制阅读。
更多参数编号和数据类型见固件的 参数定义文件。
修改一个参数
例如,将运动加速度上限设置成 100 rad/s²,发送:
1
41 58 44 52 C1 01 0C 01 02 02 06 02 00 00 C8 42 00 00 00
这里 0x0602 是加速度参数编号,00 00 C8 42 表示 100.0。返回成功时会收到:
1
41 58 44 52 81 00 06 01 07 02 00 02 06
状态码 00 表示修改成功。此时更改的是固件当前运行参数;想断电后仍保留,需要另外发送 Save 命令。
写入的有效数据原本只有 9 字节,但协议要求补到 12 字节,所以末尾多了三个 00。修改其他浮点参数也要注意补齐。
发送控制命令
这些操作同样通过 USB 发送命令。每条命令分别发送。
Enable(使能)
1
41 58 44 52 C1 01 05 01 02 01 10 06
Run(运行)
1
41 58 44 52 C1 01 05 01 02 02 10 06
Stop(停止)
1
41 58 44 52 C1 01 05 01 02 03 10 06
Disable(禁用)
1
41 58 44 52 C1 01 05 01 02 04 10 06
Save(保存参数到 Flash,仅在 DISABLED 状态允许)
1
41 58 44 52 C1 01 05 01 02 02 12 06
例如 Enable 请求成功时,收到:
1
41 58 44 52 81 00 06 01 07 02 00 01 10
回复中,状态码 00 表示成功;如果是 06,说明当前状态不允许这项操作。Run 等命令可能驱动电机实际运动,发送前需要检查电源和电机配置;这里不展开它们的控制过程。
连续查看波形
读取参数是“发送一次,返回一次”。波形采集是配置并启动后,固件会持续发送数据,直到收到停止命令。
| 类型 | 采样频率 | 常用来观察 |
|---|---|---|
| NORMAL | 1 kHz | 电压、转速等 |
| FAST | 20 kHz | 电流等快速变化的量 |
连续读取母线电压
先配置采集 Vbus:
1
41 58 44 52 01 01 07 01 01 01 01 01 04 00
再启动 NORMAL 采集:
1
41 58 44 52 01 01 03 01 02 02
之后 VOFA+ 就会连续显示母线电压的变化,单位为 V。
不再需要时发送停止命令:
1
41 58 44 52 01 01 03 01 03 02
连续读取 A、B 两相电流
先配置 Ia、Ib 两个采集通道:
1
41 58 44 52 01 01 0C 01 01 00 02 02 01 00 02 00 00 00 00
FAST 采集需要先完成通道配置,再启动采集。
启动 FAST 采集:
1
41 58 44 52 01 01 03 01 02 01
固件以 20 kHz 采样,VOFA+ 会显示两个电流通道,按配置顺序分别对应 Ia 和 Ib。JustCanFd 会自动将数据换算成安培(A)。
停止 FAST 采集:
1
41 58 44 52 01 01 03 01 03 01
还可以更换通道编号,采集其他电压、电流、转速等数据;可用的通道编号见固件的 参数定义文件。
这些十六进制命令是什么
所有命令都使用同一种格式:
1
AXDR(4字节) | 消息编号(2字节) | 数据长度(1字节) | 具体数据
例如刚才读取极对数的命令:
1
2
41 58 44 52 | C1 01 | 04 | 01 01 01 01
AXDR 编号 长度 读取操作、参数编号
固件收到后,根据消息编号和数据内容决定是读取参数、写入参数,还是启动波形采集,然后返回对应结果。
自己编写 Python 或其他上位机程序时,也按相同格式收发。对应源码是 Protocol.h 和 Protocol.c,可参考 Python 通信测试脚本。