Hex 43x pdo map cn
在 CANopen 中,PDO 的 COB-ID 可以按需配置。只要把多个电机的 RPDO 配置为相同的 COB-ID,主站发送一帧 CAN-FD 报文,就可以同时更新多个电机各自的目标值。为此,需要同时调整每台电机的 RPDO COB-ID 和 RPDO Mapping。
听起来有点抽象?
以带力矩上限的速度控制为例,每个电机使用 6072h(最大力矩,2 字节)和 60FFh(目标速度,4 字节),共占 6 字节。4 个电机的目标值合计占 24 字节,可以放入同一帧 CAN-FD 报文。
假设四个电机的 CANopen ID 分别为 0x01、0x02、0x03、0x04。选择一个未被其他报文占用的 COB-ID,并把四台电机的 RPDO1 都配置为接收这个 COB-ID。
本例选择 0x190。它对应节点 0x10 的 TPDO1 COB-ID,但这里只是把它作为主站发送共享控制帧时使用的 CAN-ID;关键是确保它不与总线上的其他报文冲突。
发送程序中的 24 字节排列如下:
4字节填充对象为 3000h 03h, 2字节填充对象为 3000h 02h
电机1最大力矩(2 Bytes) | 电机1目标速度(4 Bytes) | 电机2最大力矩(2 Bytes) | 电机2目标速度(4 Bytes) | 电机3最大力矩(2 Bytes) | 电机3目标速度(4 Bytes) | 电机4最大力矩(2 Bytes) | 电机4目标速度(4 Bytes)
| 字节偏移 | 内容 |
|---|---|
| 0~1 | 电机 1:6072h |
| 2~5 | 电机 1:60FFh |
| 6~7 | 电机 2:6072h |
| 8~11 | 电机 2:60FFh |
| 12~13 | 电机 3:6072h |
| 14~17 | 电机 3:60FFh |
| 18~19 | 电机 4:6072h |
| 20~23 | 电机 4:60FFh |
每台电机只把属于自己的 6 字节映射到有效对象,其他 18 字节映射到 3000h 填充对象。这样四台电机虽然收到同一帧报文,但每台只更新自己的目标值。
对于 1 号电机,映射如下:
最大力矩 6072h | 目标速度 60FFh | 4字节填充 | 4字节填充 | 4字节填充 | 4字节填充 | 2字节填充
对于 2 号电机,RPDO Mapping 如下:
4字节填充 | 2字节填充 | 最大力矩 6072h | 目标速度 60FFh | 4字节填充 | 4字节填充 | 4字节填充
对于 3 号电机,RPDO Mapping 如下:
4字节填充 | 4字节填充 | 4字节填充 | 最大力矩 6072h | 目标速度 60FFh | 4字节填充 | 2字节填充
对于 4 号电机,RPDO Mapping 如下:
4字节填充 | 4字节填充 | 4字节填充 | 4字节填充 | 2字节填充 | 最大力矩 6072h | 目标速度 60FFh
例如,将四台电机的最大力矩都设置为 800(峰值力矩的 80%),目标速度都设置为 1.0 Rev/s 时,每组 6 字节均为:
其中 20 03 是 Uint16 数值 800 的小端表示,00 00 80 3F 是 Float32 数值 1.0 的小端表示。把这一组重复 4 次,即可通过一帧 24 字节 CAN-FD 报文更新四台电机。
保存PDO Mapping
PDO Mapping 映射是可以保存的,避免每次开机都重新设置。具体请查看对象 1010h。保存后每次开机仅需发送NMT指令即可直接开始控制。
关于填充对象
无需拘泥于此形式,得益于PDO的灵活特性,您可以自由安排。假设实际上目标速度需要更高的变动频率,而最大力矩不需要,那么完全可以将所有的最大力矩放到RPDO2,以高频发送目标速度,低频发送最大力矩。
也无需强制所有的电机都处于同一控制模式,完全可以一部分电机处于速度控制模式,一部分电机使用MIT控制模式。只要 Mapping 正确即可。
关于配置自动化与配置持久化
请记住,本质上 canopend 就是发送了一些 can 消息,您完全可以将配置PDO的过程自动化。关于 SDO 协议的具体格式请直接查看丰富的互联网教程。
另外,这些配置除非通过 1010h 对象进行保存,否则每次开机后都会恢复为默认配置。如果您确认不会改变这些配置,那么只要通过 1010h 对象进行保存,即可实现配置持久化。后续开机无需重新配置,仅需发送NMT指令与选择模式,操作控制字。