放弃编码器!纯靠MPU6050和PID算法,我的TT马达平衡小车也能稳如老狗(STM32实战)
放弃编码器!纯靠MPU6050和PID算法实现TT马达平衡小车稳定控制
当大多数平衡小车方案都在强调编码器对速度反馈的重要性时,我们是否思考过:在资源受限的场景下,能否仅依靠姿态传感器和精妙算法实现同等稳定性?本文将分享一个基于STM32F103C8T6的实战案例——仅用MPU6050和TT马达,通过三环PID控制算法构建的高性价比平衡小车方案。
1. 硬件架构设计与成本优化
1.1 核心器件选型策略
在低成本学生项目中,TT马达的选用本身就是一种妥协艺术。这种常见于玩具车的直流减速电机单价不足10元,但存在明显缺陷:
- 无内置编码器导致速度反馈缺失
- 齿轮间隙带来的非线性响应
- 转速-电压曲线不理想
为弥补这些缺陷,我们采用以下硬件组合:
- TB6612FNG驱动模块:相比传统L298N,具有更低导通电阻(0.5Ω vs 2Ω)和更高效率(1.2A持续输出)
- MPU6050六轴传感器:集成三轴加速度计(±16g)和陀螺仪(±2000°/s)
- STM32F103C8T6最小系统:72MHz主频满足5ms控制周期需求
提示:TT马达建议选择减速比1:48版本,实测在5V供电时空载转速约150RPM,适合平衡控制场景。
1.2 电源系统设计要点
两节18650电池(7.4V)供电方案需特别注意:
# 典型电源树结构 7.4V锂电池 → 3.3V LDO(MCU) → 5V DCDC(传感器) → 直接供电(TB6612驱动)关键参数对照表:
| 模块 | 工作电压 | 最大电流 | 注意事项 |
|---|---|---|---|
| STM32 | 3.3V | 80mA | 需低噪声LDO |
| MPU6050 | 5V | 3.6mA | 建议独立供电 |
| TB6612FNG | 7.4V | 1.2A | 电池直连需加滤波电容 |
2. 传感器数据处理与姿态解算
2.1 MPU6050原始数据校准
未校准的传感器数据会导致零点漂移,典型校准流程:
- 水平静止放置200ms采样
- 计算陀螺仪零偏:
gyro_offset_x = Σgyro_x / sample_count; - 加速度计归一化处理:
θ = atan2(acc_y, acc_z) * 180/π
2.2 互补滤波实现
为融合加速度计的低频特性和陀螺仪的高频特性,采用加权互补滤波:
angle = 0.98*(angle + gyro*dt) + 0.02*acc_angle参数调节经验:
- 静态场景:加速度计权重可增至0.05
- 运动场景:陀螺仪权重需提高到0.99
3. 三环PID控制算法实现
3.1 直立环(角度环)设计
直立环作为最内层控制环,直接影响响应速度:
float直立环(float目标角度, float当前角度){ static float积分项=0; float误差 = 目标角度 - 当前角度; 积分项 += 误差 * dt; return Kp*误差 + Ki*积分项 + Kd*陀螺仪数据; }典型参数范围:
- Kp: 25.0(过小无法抵抗倾斜,过大会振荡)
- Kd: 0.5(抑制超调的关键)
3.2 速度环的虚拟反馈机制
无编码器时,通过电机占空比反推虚拟速度:
虚拟速度 = Σ(电机输出PWM * sign(车身倾角))速度环需注意:
- 积分限幅防止windup
- 输出作为直立环的角度补偿
3.3 转向环的差速控制
转向控制采用开环P控制:
左轮PWM += 转向系数 * 遥控指令 右轮PWM -= 转向系数 * 遥控指令4. STM32实时控制实现
4.1 定时器中断配置
5ms控制周期通过TIM2实现:
void TIM2_IRQHandler(){ static uint32_t counter; if(TIM_GetITStatus(TIM2, TIM_IT_Update)){ MPU6050_GetData(&imu); Angle_Calculate(); PWM_Output(直立环() + 速度环()); if(++counter %4 ==0) OLED_Refresh(); TIM_ClearITPendingBit(TIM2, TIM_IT_Update); } }4.2 蓝牙调试接口设计
通过串口指令动态调整PID参数:
# 示例指令格式 SET KP=25.0 KI=0.02 KD=0.5建议开发简易的上位机界面,实时监控角度波形。
5. 机械结构与装配技巧
5.1 重心优化方案
- 电池安装位置应低于电机轴心线
- MPU6050尽量靠近几何中心
- 轮径建议6-8cm(过大影响响应速度)
5.2 常见问题排查
- 持续单边倾倒:检查电机线序是否对称
- 高频抖动:降低Kp或提高Kd
- 缓慢摇摆:适当增加Ki值
在最终调试阶段,发现当车身向右侧倾斜时,左轮应加速旋转以恢复平衡——这个看似简单的结论,却需要反复验证三环PID的输出极性。通过蓝牙模块实时调整参数的过程,就像在给一个机械生命体进行"神经调节",这种算法对硬件缺陷的补偿效果,正是嵌入式控制的魅力所在。
