找到根本原因了。诊断结果汇总:
| 测试项 | 结果 | 状态 |
|---|---|---|
| I2C总线 | Bus0: AS5600, Bus1: AS5600+MPU6050 | OK |
| AS5600编码器 | S1=2.67, S2=1.24 | OK |
| MPU6050 | 角度、角速度正常更新 | OK |
| 电池电压 | 7.46V | OK |
| Driver1 | init FAIL | 故障 |
| Driver2 | init FAIL | 故障 |
| Motor1 | 正转0.00 反转0.00 完全不转 | 故障 |
| Motor2 | 正转+0.26 反转-0.26 | OK |
| 问题根因 |
- 两个电机驱动初始化都失败(Driver init: FAIL)
这说明驱动芯片的PWM引脚或EN引脚有问题。SimpleFOC的 driver.init() 返回FAIL通常意味着无法正确配置PWM通道。
但Motor2在驱动FAIL的情况下还能转,说明可能是诊断程序里 Serial2.begin(1000000) 放在 driver.init() 之后导致引脚冲突的时序问题。在主程序里Serial2是先初始化的,所以driver可能实际没问题。 - Motor1完全不转 --- 这是机器人站不住的真正原因
只有一个轮子在工作,当然无法平衡。Motor1的硬件连接有问题:
检查Motor1相关引脚(32, 33, 25, EN=22):
- GPIO 32, 33, 25 --- 三相PWM输出线
- GPIO 22 --- 使能引脚(EN)
你需要检查:
- Motor1的三根相线(连接到GPIO 32/33/25)是否虚焊或断线
- Motor1驱动板的EN引脚(GPIO 22)是否正常连接
- Motor1的驱动芯片是否烧了(闻一下有没有焦味)
- 用万用表量一下GPIO 22在程序运行时是否有高电平输出
Motor2(GPIO 26/27/14,EN=12)正常工作,说明电路设计没问题,问题出在Motor1这一路的硬件上。
这就是机器人一直倒的原因------只有一个轮子在转,单轮无法平衡。