20ms一次的站立:迷你平衡车从倾角到PID的硬核拆解
01项目速览:一辆能站立的“迷你倒立摆”
STM32平衡小车早已是高校实验室与DIY圈的“明星”。下图这辆全长不足50 cm的“迷你版”却能在空地上稳稳站立,左右晃动幅度不到2°,它的诞生过程正是本文要拆解的主线。

02自行车为何会“站”起来?——倒立摆模型再回顾
2.1 ▍ 倒立摆:最经典的“不稳定系统”把自行车侧放,它就变成一根一维倒立摆:只要偏离垂直,重力分力就会把倾斜放大,系统越跑越偏。要让这根“棍子”立住,必须持续施加一个与倾角成正比的“回复力”。
2.2 ▍ 从“摆”到“车”:让回复力来得刚刚好 真正骑乘时,我们并不直接推底部,而是转动把手α,让车轮沿半径R做圆周运动,产生离心力Fc。在非惯性系里,这股离心力被“翻译”成横向力Fy,成为控制倒立摆的真正抓手。只要α合适,Fy就能把车“掰回”直立。
03把“车”立住的三道关:倾角、算法、执行
3.1 ▍ 倾角:用传感器读懂“歪了多少”GY521模块内置MPU6050,输出三轴加速度与角速度。互补滤波或卡尔曼滤波把这两个原始数据融合成当前倾角θ,误差被压进0.5°以内。
3.2 ▍ 算法:PID让车“自己找平衡”
比例项P:偏差多大就补多大力,像弹簧一样“硬”。
微分项D:预测速度,提前减速,防止冲过零点。
积分项I:当平衡点≠直立时,累积误差直到系统停在正确位置。
每20 ms刷新一次,θ与目标0°的差值Δθ被送进PID,输出α,实现“动态自平衡”。
3.3 ▍ 执行:电机与舵机同步“扭”与“转”电机:12 V减速电机,扭矩大、转速稳;用升压模块供电,STM32通过三极管PWM调占空比,100 %占空比才刚好不跛脚。
舵机:5 V供电,单片机IO经三极管电平转换后驱动,输出α角精确到0.1°。
皮带传动:简单可靠,皮带轮速比1:1,保证左右轮同步。
04硬件清单:一张图看懂“小车”全家桶









(上图依次为机械结构、总原理图、传动、电机驱动、GY521、电机驱动细节、电平转换、蓝牙、代码框架)
05软件架构:20 ms定时器撑起“站立”底座
底层驱动:初始化定时器、电机、舵机、GY521。
主循环:每20 ms进入中断→读取加速度→姿态融合→PID计算→输出α→电机PWM。
遥控调试:串口收到字符即刻刷新PID参数,现场调参不再“撞大运”。
日志输出:无线串口实时回传倾角、转速、电池电压,手机端一目了然。
06实战小结:从理论到上车的四个关键提醒
倾角传感器必须校零——水平台+磁力计双保险,开机自检误差≤0.3°。
PID参数三步走:先P调稳,再D抑超调,最后I消除静差;现场调试先脱手再上电。
电机扭矩要富余30 %——预留“安全区”,防止风阻或坡道瞬间拉偏。
蓝牙串口别省——调参效率提升5倍,后期升级固件也能无线OTA。
07彩蛋:代码即刻跑——GitHub直达链接放在文末了!