文章

AxDr_L_Motor:如何通过 USB 与固件通信

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 表示读取成功。

  其他常用参数:

想读取什么参数编号
母线电压 Vbus0x0004
A 相电流 Ia0x0001
q 轴电流 Iq0x0011
当前控制模式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 等命令可能驱动电机实际运动,发送前需要检查电源和电机配置;这里不展开它们的控制过程。

连续查看波形

  读取参数是“发送一次,返回一次”。波形采集是配置并启动后,固件会持续发送数据,直到收到停止命令。

类型采样频率常用来观察
NORMAL1 kHz电压、转速等
FAST20 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 通信测试脚本。

本文由作者按照 CC BY 4.0 进行授权