最佳实践:故障排除
CAN 通信错误
”socketcan write failed: No buffer space available (os error 105)”
原因: CAN TX 缓冲区溢出 - 发送消息太快。解决方案 1:增加控制周期
解决方案 2:增加 TX 队列长度
解决方案 3:停止其他 CAN 发送程序
解决方案 4:减少反馈请求频率
”CAN interface not found”
原因: CAN 接口未配置或未启动。解决方案
“Permission denied on /dev/ttyACM0”
原因: 用户没有访问串口的权限。解决方案 1:加入 dialout 组(永久)
解决方案 2:临时权限(临时)
电机响应问题
state = None
原因: 还没收到反馈帧。
解决方案:实现重试循环
检查清单
| 检查项 | 说明 |
|---|---|
| 电机已上电 | 检查 LED 灯是否亮 |
| CAN 接线正确 | CAN_H 接 CAN_H,CAN_L 接 CAN_L |
| motor_id 正确 | 用 scan 命令确认 |
| feedback_id 正确 | 用 scan 命令确认 |
| 波特率匹配 | 电机和 CAN 接口波特率一致 |
”Mode switch timeout”
原因: 电机未响应模式切换命令。解决方案 1:验证电机 ID
解决方案 2:检查电机状态
解决方案 3:先清除错误
解决方案 4:增加超时时间
”Motor not moving”
原因: 电机未使能、模式错误或命令未发送。检查清单
错误码参考
达妙状态码
| 代码 | 含义 | 处理方法 |
|---|---|---|
| 0 | 正常 | 无需处理 |
| 1 | 过压 | 检查电源电压 |
| 2 | 欠压 | 检查电源电压 |
| 3 | 过流 | 减小负载 |
| 4 | MOSFET 过温 | 停止运行,等待冷却 |
| 5 | 转子过温 | 停止运行,等待冷却 |
| 6 | 通信超时 | 检查 CAN 接线 |
错误处理代码
导入错误
”ImportError: cannot import name ‘Controller’”
原因: 包未安装或 ABI 库缺失。解决方案
”AbiLoadError: Failed to load libmotor_abi”
原因: ABI 共享库找不到或不兼容。解决方案
性能问题
CPU 使用率过高
原因 1:紧凑循环无休眠
原因 2:过度轮询
定时不稳定
解决方案
调试技巧
启用详细日志
检查 CAN 流量
使用 CLI 测试
隔离问题
获取帮助
如果问题持续:1. 检查文档
2. 收集信息
3. 报告问题时包含
- 完整错误消息
- 代码片段
- 系统信息
- CAN 配置
- 电机型号和厂商