CAN通信稳定要求
目前已知机器人会在以下几种情况中由于CAN异常出现控制电机不稳定的现象
- 电机已经离线,PID进程仍然在继续,当电机恢复在线时出现失控
- CAN完全离线,但是仍然在中断里执行有阻塞的发送进程,导致中断系统卡死
- CAN总线上没有一个可应答的电机时,持续向CAN总线上发送数据会使STM32中的CAN模块由于发送应答错误过多而进入离线(Bus-off),目前已知该状态即使在自动离线管理模式(ABOM)打开的情况下也不能可靠地自动恢复
- CAN总线控制数据发送ID过大,在仲裁优先级里面排最低,在没有自动重传的情况下会出现连续掉帧的情况
- STM32 一个CAN缓冲区只有三个位置,当高速接收时可能会出现Overrun
- 在CAN的配置中打开自动重传(NART清0,注意NART意思是禁用自动重传,清0代表关闭禁用自动重传,在CubeMX图形界面配置时应该要区分开)以及自动离线管理(ABOM)
- 在分配CAN的ID时尽量不使用GM6020中0x2FF的反馈ID
- 在没有收到电机反馈数据不要往CAN总线上发任何数据,即使是没有用PID控制的电机
- 确保使用的HAL库的CAN发送函数不带阻塞(已知目前最新版HAL不存在这个问题)
- 在main函数的主循环内用HAL_CAN_GetState不断检测CAN是否处于离线模式(BOF),如果是,则重新启动CAN
- 打开CAN的过滤器,将不同ID的包分开到两个缓冲区