20ms一次的站立:迷你平衡车从倾角到PID的硬核拆解

频道:科技 日期: 浏览:424 作者:张伟

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直达链接放在文末了!