STM32平衡车
目录
1. 核心原理:电机 + 直立 PD(比例-微分)控制 (反向推)
3.车为什么不会自己乱跑?——编码器+速度环PI(比例-积分)控制
4. 车怎么听话?——蓝牙 +转向环+三环混合(直立环PD、速度环PI、转向环)
3. 三环混合 (Three-loop Mixing):让车“一心多用”
三、 坑 (Pitfalls / Common Mistakes)
编码器——负责看轮子。速度环不看编码器,就不知道车到底有没有在跑
学习内容:调电机、PID控制算法
应用:平衡车,四轴飞行器,机器人
一、平衡车全链路问题(按顺序编排)

1.车怎么知道自己要倒了?
-
(1). IMU(硬件传感器)
全称:Inertial Measurement Unit(惯性测量单元)。
通俗解释:它是车上的“平衡感知器官”。通常是一个小芯片,里面至少包含加速度计(测前后左右的晃动)和陀螺仪(测旋转的角速度)。
作用:靠 IMU 来时刻感知车身的倾斜角度和旋转趋势。
-
(2). DMP (硬件算法:内置姿态解算算法)
全称:Digital Motion Processor(数字运动处理器)。
通俗解释:这是 IMU 内部自带的一个微型“协处理器”(类似于手机的 GPU,专门干重活的)
在图中的作用:它是一个算法加速器。
如果不加 DMP:单片机(主控板)需要自己读取原始的加速度和陀螺仪数据,通过复杂的数学公式(如互补滤波、卡尔曼滤波)去计算出当前的精确角度。这非常吃单片机的算力,代码也难写。
如果加了 DMP:你只需要给 IMU 发一条指令,DMP 就会利用它内部的硬件电路,自动把原始数据算成角度,直接把结果(角度值)扔给单片机。
结论:用了 DMP,单片机就可以“偷懒”,直接拿角度值去控制电机,反应更快,程序更简单。
总结图中的逻辑:
-
IMU + DMP = 硬件传感器 + 内置算法
-
它们合起来的作用就是:让车瞬间知道自己是歪了 5 度还是 10 度。这是实现自平衡的第一步,也是最关键的一步。
2.车怎么把自己扶起来?——电机+直立环PD
1. 核心原理:电机 + 直立 PD(比例-微分)控制 (反向推)
当车身向前倾倒时,传感器(IMU+DMP)会检测到倾斜角度。此时,控制器会命令电机向相反方向(向后)转动,产生一个推力,试图把车推回垂直位置。像“反向推秋千”一样把歪倒的车身推回直立状态
2. 什么是“直立 PD”?
PD 控制是实现精准推力的数学算法,包含两个参数:
P(比例):负责“用力”。车身歪得越厉害,电机转速越快。比如歪 30 度比歪 10 度转速快三倍。
D(微分):负责“刹车/减冲”。它不仅看角度,还看倾倒的速度。如果车正在快速倒下,D 参数会提前加大反向力,防止冲过头;如果车已经站稳,D 参数能抑制车身的抖动,让车更稳。
3. 为什么只用 PD 就够了?
在这个阶段,目标只有一个:保持直立。不需要考虑车往哪走,也不需要转弯。PD 控制足够快且稳定,能把车身稳定在平衡位置,防止它乱跑或摔倒。这是后续实现前进和转向的基础。
3.车为什么不会自己乱跑?——编码器+速度环PI(比例-积分)控制
如果说前面的“直立 PD”是让车学会站立不倒,那么这里的“速度 PI”就是给车套上“缰绳”,防止它因为惯性或外力而失控冲出去。
1. 核心逻辑:从“角度”到“速度”的跨越
仅靠直立很难控速:如果只用电动机控制车身角度,一旦车头前倾,车就会一直往前冲,直到撞墙。因为它没有限制“跑多快”。
引入速度闭环:我们需要给车设定一个目标速度(比如每秒跑 1 米)。系统会不断比较“目标速度”和“实际速度”,通过调节电机的出力,让实际速度始终跟上目标速度。
2. 关键硬件:编码器 (Encoder)
作用:它是安装在电机轴上的传感器,像汽车的“码表”一样,能极其精确地反馈车轮转了多少圈、当前转速是多少。
为什么重要:没有编码器,系统就不知道车到底跑得快还是慢,速度控制就成了瞎猜。有了编码器,系统才能实时获取真实速度数据,形成闭环控制。
3. 什么是“速度 PI”?
PI 控制用于精确调节速度,解决两个问题:
P(比例):负责“加速”和“减速”。发现车跑得比目标慢,就加大动力;跑得快了,就减小动力。
I(积分):负责“消除误差”。比如车轮因为地面摩擦阻力变慢了,P 可能拉不回来,I 就会累积过去的误差,持续施加一点额外的力,直到速度恢复正常,防止车“偷懒”停下来。
4. 如何实现“不让它乱跑”?
系统将两个控制环结合起来:
内环(直立 PD):始终在工作,确保车身不倒。
外环(速度 PI):根据设定的目标速度,微调“目标倾角”。
想加速?PI 控制会命令车身稍微前倾一点。
想减速或停止?PI 控制会命令车身稍微后仰一点。
通过这种方式,车不再是自由落体式地冲撞,而是被精确地控制在一个设定的速度范围内行驶。
4. 车怎么听话?——蓝牙 +转向环+三环混合(直立环PD、速度环PI、转向环)
这部分解决“人机交互”和“多任务协调”的问题。如果说前面的三个部分(直立、控速)是车的“本能”,那么这部分就是车的“意识”和“执行力”
1. 蓝牙 (Bluetooth):让车“听懂人话”
作用:无线通信模块。
解释:这是连接你和车的桥梁。通过手机 App 或遥控器发送指令(比如“前进”、“后退”、“左转”),蓝牙模块接收这些信号并传给主控板(单片机),车才能知道你想让它干什么。
2. 转向 (Steering):让车“改变方向”
作用:执行左右转弯的动作。
解释:平衡车通常采用差速转向(类似坦克):
左转:左轮减速,右轮加速。
右转:右轮减速,左轮加速。
原地转圈:两轮反向转动。
关键点:转向必须配合直立。如果一边轮停了,车身会立刻倒向那一边,所以转向时,直立控制(PD)也要同步调整两边电机的力度。
3. 三环混合 (Three-loop Mixing):让车“一心多用”
作用:控制算法的架构,把各个指令融合在一起。
解释:现在的车需要同时处理三个主要指令:
直立环:保持不倒(最高优先级)
速度环:保持速度(中优先级)
转向环:控制方向(低优先级)
“混合”是怎么做到的?
单片机的运算速度极快,它会在极短时间内轮流处理这三个环,并把它们的输出叠加在一起,最终得到一个总的电机控制量。
举个例子:
你按下“左转”键(蓝牙接收指令),同时车正在“前进”(速度环在工作)。
单片机会算出:
为了保持直立,电机需要输出 X 力量;
为了维持速度,电机需要输出 Y 力量;
为了向左转,电机需要输出 Z 力量(左轮减、右轮加)
最后,把 X+Y+Z 合在一起,发给电机。这就是三环混合。
5.怎么调出来:整体调优——最后一步,也是最难的一步
平衡车最核心的技术在于“调试(Tuning)”
一、 节拍 (Step / Rhythm)
在这里,“节拍”指的是调试的顺序和步骤,不能乱调,要踩着点来:
第一步:先调直立(内环)
目标:让车能独立站稳,不倒下。
操作:此时断开速度控制,用手扶着车或者用车架支撑,慢慢加大直立环的 P 值,直到车身能自己稳住。
意义:这是地基。地基不稳,后面全废。
第二步:再调速度(外环)
目标:让车能匀速跑,且松开手后速度能稳定在一个值。
操作:接入速度 PI 控制,先调 P(让车动起来并能刹车停下),再调 I(消除静差,让车停得准)。
意义:给车装上“油门”和“刹车”
第三步:最后调转向(混合)
目标:让车能转弯,且转弯时不倒
操作:加入转向控制,注意转向时要同步削弱两侧的直立力度,防止转圈时翻车
二、 调参 (Parameter Tuning)
这是“调优”的核心,指的是PID 参数的微调。参数直接决定了车的性格:
直立环 (PD):
P(比例):决定反应速度。太小车站不住(软绵绵);太大车会剧烈抖动(抽搐)
D(微分):决定稳定性。太小车倒下时刹不住(冲量大);太大车会高频啸叫(噪音大)
技巧:通常先调 P 找到临界的抖动,稍微减小一点,再加 D 抑制抖动。
速度环 (PI):
P:决定加速的猛度。
I:决定最终的稳态速度是否准确。
方法:通常采用“试凑法”,一点点加减参数,观察车的反应。
三、 坑 (Pitfalls / Common Mistakes)
这部分是前辈踩过的血泪教训,新手极易中招:
电源掉电坑:
现象:一推车电机,主控板重启或蓝牙断连。
原因:电机启动瞬间电流极大,电池内阻大或线太细导致电压跌落。
解决:换粗线、加电容、换好电池。
信号干扰坑:
现象:车不动的时候自己乱跑,或者一开电机就失控。
原因:电机线跟信号线绑在一起了,PWM 信号受到干扰。
解决:电机线用屏蔽线,或者与信号线分开走线,GND 多点接地。
机械安装坑:
现象:车往一边跑偏。
原因:两个轮子摩擦力不一样、轮胎气压不同、或者电机轴不平行。
解决:物理调平,打磨轮子,确保对称。
采样噪声坑:
现象:直立时车像喝醉了一样,MPU6050 数据乱跳。
解决:检查接线是否虚焊,传感器是否固定牢固(不能有相对位移)。
总结
“整体调优” 就是一个不断“看现象 -> 猜原因 -> 改参数/改硬件 -> 再试”的循环过程。没有一套完美的参数能通吃所有硬件,你的车最终能不能跑起来,全看这最后一步的耐心了。
二、平衡车工作原理与开发流程
- 工作原理:

- 开发流程:

- 核心要点:
这辆车本质上是一个倒立摆闭环控制系统。它不是天然稳定,而是靠传感器、控制器和电机不断闭环纠正,才能站住。
1.传感器感知:
-
MPU6050——负责看车身
作用:负责“感知车身姿态”的 IMU(惯性测量单元)
感知“倒没倒”:它内部的加速度计和陀螺仪,分别实时测量车身的倾斜角度和角速度(倒下的速度)
提供“控制依据”:它输出的数据(经过 DMP 处理后的角度),直接作为 PID 控制器的输入。控制器根据这个角度偏差,决定电机是加速还是刹车,从而让车保持直立。
简单说:MPU6050 负责告诉主控板:“我现在歪了 10 度,快往反方向转轮子!”
MPU6050 与 DMP 的关系:
MPU6050 是硬件:负责采集原始的三轴“加速度”和三轴“角速度”数据。
DMP 是MPU6050 内部的协处理器:负责把 MPU6050 采集的6个原始数据,通过内置算法(如四元数、姿态解算)直接转换成稳定的角度值。
-
编码器——负责看轮子。速度环不看编码器,就不知道车到底有没有在跑
作用:左右轮转速(速度反馈)

2.控制算法(决策)
PID算法:
P 是什么
P 是比例项。
它解决的问题是:现在偏了多少,就按偏差大小立刻纠正,偏得越多,纠正越强,所以它通常是“主力纠偏项”
I是什么
I 是积分项。
它解决的问题是:虽然当前误差不大,但长期总有一点点偏差。如果这个偏差一直存在,就持续累加,直到把这点长期误差消掉。所以I项最擅长消除的是:稳态误差。D 是什么
D 是微分项。
它解决的问题是:变化太快了,再不提前刹车就会冲过头。所以 D项本质上是在看变化速度,它最大的作用通常是
- 增加阻尼
- 抑制振荡
一句话理解 PID
- P:偏得越多,拉得越狠
- I:总有一点偏,就慢慢积起来消掉
- D:变化太快,提前刹车
理解 PID 最重要的,不是会写公式,而是知道:为什么这个环用这个组合
为什么直立环用 PD
直立环的目标是:别摔。
所以它最需要两类信息:
车已经偏了多少——P:看偏差大小
车正在以多快的速度倒下去——D:看变化速度
那为什么通常不用I?——因为直立环如果把一点小误差长期积起来,很容易把“零点偏了一点“变成”持续推车往前或往后跑”。所以在平衡车直立控制里,直立环通常更适合PD。为什么速度环用 PI
速度环的目标是:别乱跑,最终回到目标速度。它特别关心的是
- 当前速度偏差
- 长期的小漂移
这正对应:
P:立刻修正当前速度偏差
I:慢慢消除长期稳态误差
为什么常常不用 D?——因为编码器测速本身有量化噪声,D项对噪声很敏感,容易把抖动放大,所以速度环通常更适合 PI。
结论
不是所有地方都机械地上 PID,而是根据物理目标去选:
- 直立环:PD
- 速度环: PI
- 转向环:按需要做简化控制
PID 调参与常见现象对照——调参是平衡车真正落地的一大门槛
- 调参顺序不能乱
推荐顺序是
1.先确认方向正确2.再调直立环 Kp
3.再调直立环 Kd
4.再调 Car_zero:机械零点
5.再调速度环 Kp
6.再调速度环 Ki
7.最后处理转向
- 常见现象怎么反推问题
常见现象和可能原因大致可以这样对应
一松手就倒:方向错了,或者Kp太小
高频抖动:Kp太大,或者阻尼不够
注意:控制系统不仅拼算法,也拼时序。快任务放中断,慢任务放主循环
3.电机驱动(执行)
(1)TB6612FNG双路直流电机驱动模块(PWM控制)
它负责接收单片机(STM32/Arduino)发出的微弱指令(PWM信号),然后输出大电流去驱动两个直流电机,实现正转、反转、调速和刹车。相比老旧的 L298N,它效率更高、发热更小,是小型机器人项目的首选。
|
参数 |
数值/说明 |
对平衡车意义 |
|---|---|---|
|
驱动路数 |
双路(A路 + B路) |
正好驱动左、右两个轮子 |
|
连续电流 |
每路 1.2A(峰值 3.2A) |
足够驱动中小型减速电机 |
|
电机电压 |
VM:2.5V ~ 15V |
接锂电池(如 7.4V 或 12V) |
|
逻辑电压 |
VCC:2.7V ~ 5.5V |
接单片机(3.3V 或 5V),电平兼容 |
|
PWM 频率 |
最高 100 kHz |
响应快,电机运行更平滑 |
(2)实物图:

4.左右电机(动力)

5.车身姿态变化

更多推荐



所有评论(0)