基于STM32的平衡车控制
基于STM32的双轮平衡车控制系统设计
摘要
两轮平衡车作为一种新型民用交通工具,具有广阔的应用前景。本文采用STM32F103CT6微控制器作为控制核心,将平衡车的电机转速以及XYZ三轴方向的角加速度和角速度反馈至控制器输入端,形成闭环控制。利用PID控制算法实现对平衡车速度和倾角的控制,从而在前进、后退和转向运动中实现抗干扰自校正平衡。实验结果表明,该控制系统能够在强干扰下控制平衡车保持直立平衡。
CCS概念
- 计算机系统组织~嵌入式与信息物理系统~嵌入式系统~嵌入式软件
关键词
两轮平衡车;单片机;MPU6050;PID
ACM参考文献格式:
邹子明、戴崇豪和杨玲。2020。基于STM32的双轮平衡车控制系统设计。载于ACM ISBDAI会议论文集 (ISBDAI ‘20)。ACM,南非约翰内斯堡,5页。https://doi.org/10.1145/3436286.3436409
1 引言
两轮平衡车(以下简称平衡车)属于一种两轮同轴车辆。与当前的电动车相比,平衡车在空间限制、交通拥堵和道路困难等复杂情况下具有结构紧凑、控制简单灵活的优点。因此,对其控制系统的研究与设计具有一定的使用价值和研究意义。
本文在分析平衡车动态模型的基础上,确定了平衡车直立环和速度环的控制原理,并给出了PID控制参数整定方法,具有一定的参考价值。
2 平衡车的动态模型
平衡车的工作原理源自倒立摆模型,通过该模型使两个车轮保持平衡。根据对平衡车的动态模型分析,可体现出非线性、强耦合、多变量和自然不稳定性等特性[1]。平衡车的动态模型如图1所示。

假设平衡车车辆模型的重心高度为L,倾角为 θ,外力引起的角加速度为x(t),车轮运动加速度为a(t)。可列出如下动力学方程:[2]
$$
\frac{d^2 \theta}{dt^2} = \frac{3}{2L} \sin[\theta(t)] + \frac{3}{2L} a(t) \cos[\theta(t)] + \frac{3}{2L} x(t)
$$
当角度接近0°时,上述公式可简化为:
$$
\frac{d^2 \theta}{dt^2} = \frac{3g}{2L} \theta + \frac{3}{2L} a(t) + \frac{3}{2L} x(t)
$$
当车辆模型静止时,即为 $ a(t) = 0 $:
$$
\frac{d^2 \theta}{dt^2} = \frac{3g}{2L} \theta + \frac{3}{2L} x(t)
$$
由公式(1) ~ (3)可知系统控制的基本要求:要使平衡车静止时,车身的重心必须落在两车轮与地面接触点连线的中心位置。当车身出现前倾或后倾角度时,为了防止平衡车向任意方向倾倒,必须使平衡车的两个车轮朝倾角方向旋转,即车轮的运动方向与倾斜方向一致。并且运动速度必须迅速跟随倾角的变化,以保持平衡车的平衡 [3]。
3 系统硬件结构
平衡车的硬件组成主要包括带霍尔传感器的12V直流电机、MPU6050模块、TB6612FNG驱动模块、STM32F103系列单片机和SWD接口。系统通过MPU6050模块采集平衡车在 X、Y和Z轴方向的角加速度和角速度,将采集到的数据传输至STM32单片机,通过控制算法进行计算与分析,并输出脉冲信号至TB6612FNG驱动模块,控制电机做出相应动作,以实现平衡的目的[4]。系统的整体结构如图2所示。

1. MCU地址分配
系统采用型号为STM32F103C8T6的32位单片机作为系统的主控芯片。主控板的最小系统电路主要包括复位电路、晶振电路、SWD程序下载接口电路、BOOT启动模式电路等。
I/O和资源分配详见表1。
| I/O端口 | 模块/接口 |
|---|---|
| PA8、PA11 | 电机驱动模块输出 |
| PB12~PB15 | 电机驱动模块输入 |
| PA0、PA1、PB6、PB7 | 编码器 |
| PC13~PC15、PB4 | OLED显示模块 |
| PB3、PA2、PA5、PB6 | PS2传输接口 |
| PB10、PB11 | 蓝牙模块 |
| PB8、PB9、PB5 | MPU6050模块 |
| PA13、PA14 | SWD下载接口 |
| PA9、PA10 | 串口1 |
2. MPU6050模块
MPU6050模块是一种集成了三轴陀螺仪和三轴加速度计的传感器,可分别测量平衡车的角速度和加速度。STM32单片机通过IIC通信协议与此模块建立通信,能够以[5]的时间间隔读取平衡车在X、Y和Z轴上的角速度和角加速度。
4 双轮平衡车控制系统的软件结构
4.1 软件设计流程
软件设计包括:主程序初始化、传感器数据采集与处理、电机转速和转向的PWM脉宽控制、车体垂直平衡、蓝牙遥控。
系统软件主程序的流程图如图3所示。

系统初始化后,通过外部中断每5毫秒采集一次平衡车的角速度和角加速度信号。这两个角度通过卡尔曼滤波算法融合为实际角度值,作为PD控制器的输入变量,并输出PWM信号控制电机转动,从而维持车身平衡。
速度环以实际速度与目标速度的偏差作为输入值,通过PI控制器计算输出值,将速度环的输出值与直立环的输出值相减后输出给电机,实现平衡车的前进和后退功能。转弯时,直立环输出值与转向环输出值的差作为内轮的脉冲信号,外轮的脉冲信号为两者之和,从而实现平衡车的差速转向功能。
4.2 PID算法控制
系统采用经典的PID控制原理,其中直立控制为带负反馈的 PD控制,速度控制是采用一阶低通滤波器加正反馈的PI控制器,转向控制则采用P加PD串级控制[6]。
在参数设置的实验过程中,遵循先比例后微分的原则。调节比例参数时,将积分系数和微分系数设为零,选择合适的比例参数,使平衡车车身基本保持平衡。然后微调微分参数,但微分系数具有预测性,会放大噪声干扰信号。当微分系数过大时,会导致平衡车的抗干扰能力下降,并产生高频抖动。
因此,找到合适的微分系数可以提高平衡车的稳定性。积分参数具有记忆功能,是对平衡车达到稳态的一种补偿。如果补偿过多,会导致车身向一侧倾倒,无法维持平衡 [7‐8]。
4.3 直立环PD控制原理
由于平衡车存在结构问题,如果仅使用纯平衡倾角进行PD控制,平衡车只能在短时间内保持垂直平衡,且在此控制方法下,平衡车的抗干扰能力较弱。因此,将采用类似倒立摆的控制方法,以平衡车的平衡倾角偏差作为直立环中的比例系数,以MPU6050模块中X轴方向的角速度值作为直立环中的微分系数。该控制策略能够更直接地预测平衡车的摆动趋势,并提高平衡车恢复平衡的能力。
4.4 速度环PI控制原理
对于平衡车运动状态的分析,当平衡车向前倾斜时,平衡车应前进;否则,平衡车应后退。如果平衡车的速度环采用负反馈控制,电机转速将趋于设定值。当平衡车向前倾斜时,直立环会控制电机正向旋转以校正平衡倾角。因此,直立环的控制将阻碍电机转速收敛到设定值。为了抑制这种干扰,速度环会驱动平衡车向与倾角相反的方向运动,这将导致平衡车迅速向倾斜方向倾倒,因此平衡车的速度无法通过常规的负反馈[9]进行控制。只有当平衡车满足电机旋转方向与车身倾角方向一致,并且电机扭矩能快速跟随倾角变化的条件时,车体才不易倾倒。结合上述分析,平衡车的速度控制将采用正反馈PI控制。平衡车两个车轮的速度值之和减去设定速度值,其结果进行正反馈PI运算。一旦平衡车发生倾斜,直立环的输出值与实际速度值之间产生偏差值,随后电机转速将迅速上升,此时平衡车会快速向倾斜方向移动。为了协调直立环与速度环的控制效果,需要在速度环输入端设置低通滤波器或缓冲器,以抑制正反馈PI控制器的无限放大速度。
4.5 PID参数整定
对于直立环比例微分系数的设定,首先关闭速度环和转向环的子程序,将直立环的微分系数设为零,使比例系数从较小值逐渐增大,推动平衡车观察其稳定性。开始时平衡车来回摆动,难以保持平衡;若继续增大比例因子,虽然平衡车能较快恢复平衡,但车身会产生严重抖动。随后设置微分系数并逐步增大微分系数,发现平衡车的抖动明显减小,表明微分系数能够提升平衡车的稳定性。需要注意的是,微分系数不宜过大。因此,综合考虑系统的快速性和抗干扰能力,最终选定比例系数为420,微分系数为1.4,此时系统动态性能较好,平衡车的自校正速度快速且稳定。
速度环本身被设计为一个正反馈系统。比例积分控制器的参数整定基于直立环的控制。整定方法是首先清除速度环的所有参数,让积分系数从零开始缓慢增加,推动平衡车可以发现车身来回摆动的幅度逐渐变小,当积分系数在0.7到1.0之间时运行效果较好。然后设定比例系数,采用与直立环相同的调参方法,找出几组平衡车动态性能较好的参数。这三组数据分别为KP=80和Ki=1.0,KP=90和Ki=0.8,KP=100和Ki=0.7。此时推动平衡车左右摆动,平衡车能够迅速回到起始位置并保持直立,基本达到自校正[10]的目标。
转向环PD控制器的参数整定方法是先设定KD=0,然后调节KP值。当车身出现轻微晃动时,将此时的KP值乘以0.8作为比例系数,再缓慢增大KD值。经过多次参数调整后,最终选定转向环控制参数为KP=55,KD=1.6。
5 仿真与验证
Simulink是MATLAB软件中的图形化仿真设计组件,包含丰富的仿真模型,可用于简单方便地构建数学模型[11]。为了验证平衡车直立环PD控制的可行性,基于MATLAB软件建立了平衡车直立环的模型,如图4所示。

根据公式(3)进行拉普拉斯变换,得到传递函数:
$$
G(s) = \frac{\theta(s)}{D(s)} = \frac{1}{s^2 - \frac{mgL}{I}}
$$
假设平衡车的质量为1 kg,重心长度L为1.2米,则可得到平衡车的传递函数为:
$$
G(s) = \frac{1}{s^2 - 8}
$$
给定合适的PD参数并运行仿真模型,在t为5时加入扰动脉冲信号,得到的仿真曲线如图6所示:
:无PD控制器的仿真结果图)
:有PD控制器的仿真结果图)
从图5可以看出,无PD控制器的系统不稳定,在干扰下会发生发散。加入PD控制器后,即使受到外部干扰,系统在短暂超调后也能迅速恢复稳定,体现了良好的抗干扰性能,验证了PD控制对平衡车直立环的可行性。
6 总结
在介绍平衡车控制系统硬件的基础上,本文给出了平衡车电机转速以及XYZ三轴方向角加速度和角速度的PID控制整定方法,重点分析了直立控制与速度控制的设计思路。实验测试表明,平衡车能够执行前进、后退、左转和右转指令,并且在静止时保持直立。整个控制系统运行稳定,具有良好的抗干扰能力。在无人为干预或适当扰动的情况下,平衡车能够保持或迅速恢复到稳定直立状态。该平衡车的控制系统具有一定的参考价值。
更多推荐
所有评论(0)