APP下载

基于STM32控制的平衡小车系统设计

2020-09-02陈昱沈林涛王凯

软件导刊 2020年8期
关键词:车体编码器车轮

陈昱 沈林涛 王凯

摘要:为了响应节能环保、绿色出行倡议,缓解城市交通拥挤状况,提出一种基于STM32F103C8T6芯片控制的两轮平衡小车设计方案。以MPU-6050作为小车姿态传感器获取小车车体倾角和角速度,基于卡尔曼滤波算法对姿态传感器采集到的的数据进行滤波融合,利用霍尔编码器测量小车车轮转向和转速,运用PID算法对控制要求和采集的数据信息进行计算分析并输出控制PWM,经由TB6612电机驱动模块驱动电机,实现小车自主平衡并具备一定的抗干扰能力。另外小车通过蓝牙模块与手机APP通信,可通过手机端控制小车前进、后退、转弯等动作。

关键词:STM32;PID;MPU-6050;卡尔曼滤波;自平衡

DOI:10. 11907/rjdk. 201087 开放科学(资源服务)标识码(OSID):

中图分类号:TP319文献标识码:A 文章编号:1672-7800(2020)008-0117-05

Abstract:In order to response to the initiatives of energy conservation and environmental protection, green travel, and alleviate the urban traffic congestion, this paper introduces the design of self-balancing two-wheeled vehicle based on STM32F103C8T6 chip control.Sensors with MPU - 6050 is used to obtain car attitude angle and velocity of the vehicle body. The Kalman filter algorithm is used to filter and fuse the data collected by the attitude sensor. The Hall encoder is used to measure the steering and rotation speed of the trolley, and the PID algorithm is used to calculate and analyze the control requirements and collected data information and output the control PWM. The motor is driven by the TB6612 motor drive module to realize the autonomous balance of the trolley which has certain anti-interference ability. In addition, the car communicates with the mobile APP via bluetooth module, and the cars forward and backward movements, turn and other actions can be controlled through the mobile end.

Key Words: STM32; PID; MPU-6050; Kalman filter; self-balance

0 引言

隨着社会发展,环境污染日益加剧,与此同时公众环保意识逐步增强,绿色出行成为城市交通规划和公众出行首选。新能源汽车、折叠式电动车、便携式平衡车等逐渐成为日常代步工具。其中平衡车因为轻巧便携、转弯半径小,特别适用于在场地空间有限的地方运行,如大型购物中心、办公大楼、生活住宅小区、国际性会议或展览场所、生态旅游风景区等[1]。平衡车如何高效稳定地获取实时姿态信息、有效控制车体状态,在复杂环境下成功执行目标任务等成为研究热点。两轮平衡小车概念顺应当前研究浪潮,可有效解决复杂环境下小车运动问题,同时随着远程控制技术的发展,远程监控平衡车在军用、民用领域有广阔的发展空间[2]。

平衡小车是一种自然不稳定体,其原理是在倒立摆基础上对普通倒立摆的发展,因此比普通倒立摆具有更大的运动空间,使其不仅局限于实验室,更贴近现实生活[3]。国内外学者对此进行了研究,并取得了相应成果。韩竺秦等[4]对平衡车进行建模,利用KL25和MPU6050搭建实验平台,结合四元数、互补滤波和PID算法实现小车自主平衡,并利用MATLAB仿真验证方法有效性;陈木桂等[5]以MC9S12XS128为核心控制器,采用加速度传感器MMA7260、ENC-03陀螺仪结合PID控制算法提出一种光电平衡智能车设计方案,该两轮车能够按照预定的轨迹稳定运行;束方耀等[6]以STM32作为主控设计了一种声控自平衡小车,该平衡小车可在近距离内进行语音控制;文献[7]提出了一种基于Arduino的平衡小车设计方案。综上所述,平衡小车控制的关键在于车体倾斜角、角速度、车轮转向及速度测量准确性和实时性。针对该问题,本文采用STM32F103C8T6作为主控,利用霍尔编码器获取小车车轮转速,将MPU-6050作为姿态传感器采集车体倾角和角速度,结合卡尔曼滤波算法与PID控制算法实现小车自主平衡。

1 总体设计方案

1.1 原理分析

两轮平衡小车受力点在底部轮子上,如果不施加外力,车体将无法保持平衡。在日常生活中该原理的应用实例也较为常见,比如将木棒放置在手掌中,来回调整手的位置,可以实现木棒直立不倒[8]。在维持木棒平衡的过程中,必须满足两个条件:①木棒下面的手掌可来回移动;②必须实时观察木棒倾斜角度和倾倒趋势(角速度),凭借手掌的来回移动消除木棒倾斜角度和趋势,保持手掌中的木棒直立不倒。木棒维持平衡采用的控制方式是闭环负反馈控制,如图1所示。

平衡小车自动维持平衡也采用负反馈调节的控制方式,如图2所示,由于小车底部只有两个并排的车轮,车体上部分只能在车轮前后方向出现倾斜时,通过控制车轮的转动方向和速度消除该倾斜方向上的倾角,保证小车车体平衡。将平衡小车离开垂直位置的倾角作为偏差量,凭借负反馈控制将该偏差量保持在0°附近,通过控制电机转动方向维持小车直立状态。

依据小车自平衡功能要求,小车底部并排的两个车轮是保持车体直立前后移动的控制目标,而小车轮胎的转动受电机控制,因此从控制思维看,受控对象是小车车体,车体底部两个电机转动速度作为控制输入量[9]。两轮平衡小车通过姿态检测模块检测出倾斜角,然后控制器接受姿态信息并进行处理,最后车轮电机在主控制器的控制下实现变速和换向,实现小车动态平衡。

1.2 系统设计方案

本文以STM32处理器为控制核心,接收并处理传感器传递的小车数据信息,MPU6050模块负责采集小车倾角和角速度数据信息,利用霍尔编码器获取小车车轮转速和转向数据信息并反馈给主控制器。STM32结合卡尔曼滤波算法与串级PID算法将控制信号输入至电机驱动模块TB6612FNC,驱动电机正反转和变速,实现小车上电后自主平衡。手机APP和小车通过蓝牙模块连接,实现小车动作控制,系统总体框架见图3所示。

2 系统硬件设计

系统硬件主要有主控制器、姿态传感器模块、电源模块、蓝牙模块、超声波模块、电机测速模块、电机和电机驱动模块等。

2.1 电源模块

两轮自平衡小车正常运行离不开电源支撑,本文设计以航模电池作为电源,相对于普通干电池,航模电池可有效改善电池漏液的安全问题,且可多次充放电,使用方便。电源模块原理如图4所示,12V航模电池经过低压差线性稳压器LM2596T与AMS1117模块变压后可降至5V和3V,为姿态传感器MPU-6050和主控芯片和测速等模块供电,保证各硬件模块正常工作。

2.2 主控制器模块

主控制器为ST公司推出的STM32F103C8T6,该微控制器内核为Cortex-M3,CPU为32位,存储器为SRAM, 6-64kB。其增强型系列处理速度达72MHz ,具有高性能、低成本等特点[10]。在该控制器的支持下,控制车轮实现车体平衡,主控模块电路原理如图5所示。

2.3 姿态传感器模块

车体姿态信息对于实现车体平衡至关重要,本文姿态检测采用MPU-6050模块,如图6所示。其内部自带稳压电路可兼容3.3V/5V供电电压,采用先进的数字滤波技术,有效解决了测量噪声跟随精度上升的问题。通信方面,权限高的用户可通过保留的I2C接口采样底层测量数据。芯片集成了DMP数字动态处理器(实现平衡小车姿体平衡),从陀螺仪、加速度计及外接传感器接收并处理数据,处理结果可从DMP寄存器读出或通过FIFO缓冲[11]。为了满足实时获取姿态信息的要求,联合使用陀螺仪与加速度计,共同构成姿态读取模块。

2.4 电机驱动模块

因为单片机IO口输出功率较小,无法使电机正常运行,为使电机速度和换向控制,需要一个功率放大器件。电机驱动选择是使用东芝半导体生产的直流电机驱动TN6612FNG,相对于传统的L298N电机驱动,TB6612FNG外围电路简单,在运行中发热量很小,且支持的PWM 调速频率更高,同时也有利于减小系统的尺寸。

2.5 电機测速模块

选用增量式输出的霍尔编码器进行小车测速。编码器为AB相输出,不仅可测速,还可辨别转向。只给编码器电源5V供电,在电机转动时编码随电机同步转动即可通过AB相输出存在相位差的方波信号。编码器自带上拉电阻,所以无需外部上拉,可直接连接单片机IO进行读取,这样就可判断电机实时转速和转动方向。

2.6 蓝牙模块

蓝牙模块选用HC-05,该模块价格低、能耗低、尺寸小、收发灵敏高。HC-05有两种工作模式:自动连接工作模与命令响应工作模式。前者又分为3种形式:主、从、回环。当蓝牙工作在第一种模式时模块以预先设定的步骤进行通信;当蓝牙工作在第二种模式时,设置模块参数需用户向蓝牙发送AT指令进行控制。通过控制引脚电平高低,实现模块工作模式转换。

2.7 超声波模块

测距模块选用HC-SR04,该超声波模块测距范围2cm~400cm,测距精度达高到3mm;模块有Trig(控制端)、Echo(接收端)、VCC和GND等4个引脚。模块Trig(控制端)有1个10us以上的高电平就可在Echo(接收端)等待高电平输出,一旦有输出即可开启模块内部定时器计时,当该端口变为低电平时可读取定时器的值,作为该次测距时间,根据时间可算出距离。测试距离=(高电平时间*声速(340M/S))/2。

3 系统软件设计

平衡小车上电后实现自主平衡是一个复杂的控制过程,主要包含:系统初始化、按键检测、车体姿态信息采集、数据滤波、PID控制算法等功能的设计,其控制流程如图7所示。

(1)读取姿态。MPU-6050每间隔5ms检测一次车体倾角和角速度,与此同时,编码器测量电机转速和方向,然后将测量值传递给主控制器。

(2)数据滤波。主控制器接收小车姿态信息后,借助卡尔曼滤波算法对姿态数据进行平滑滤波输出。

(3)PID控制。采用PID控制算法,结合优化后的姿态数据与当前电机运行信息,输出控制数据。

(4)PWM输出。最终在主控制器的控制下输出PWM波控制电机转向和速度,并再次等待定时中断。

3.1 系统初始化

在小车正式运行之前, 需对整个系统进行初始化,其流程如图8所示。

(1)时钟初始化。因为小车运行过程中需要每隔5ms获取一次车体姿态信息,因此系统中需要设置时钟,对时钟进行初始化是保证系统正常运行的前提。

(2)NVIC中断初始化。为了保证按时中断的准确性,5ms后实现中断,并开始读取MPU-6050所采集的小车姿态数据的过程,必须保证将定时中断初始化[12]。

(3)定时器初始化。同样是为了确保每5ms实现一次中断,让MPU-6050读取车体运行姿态和传递参数顺利进行。

(4)通信初始化。系统采用I2C通信,为了实现参数采集和数据在各模块间的有效快速的传输,需要进行初始化。

(5)测速模块初始化。实现车体稳定的平衡状态除需要准确获取车体倾角和角速度外,还需要准确获取车轮的转速和转向,测速模块的功能便在于实时检测车轮运行状态。

(6)MPU-6050初始化。姿态检测模块MPU-6050初始化的意义在于实现对小车的姿态检验。

(7)电机PWM初始化。在对车体姿态和车轮运行状态进行解析后输出控制PWM,控制电机不同的速度和方向转换。

3.2 卡尔曼滤波融合算法

在动态测量过程中, 测量小车倾角和角速度数值。与实际情况相比, 必定存在偏差。采用卡尔曼滤波算法将陀螺仪与加速度计采集的数据融合, 克服陀螺仪造成的漂移误差和加速度计造成的动态误差,得出最优值消除误差,可有效优化小车姿态数据信息 [13]。

3.3 PID 控制算法

在一些简单的PID控制系统中,一般加入单独的P控制或PI控制即可实现要求,但在要求提高干扰响应速度情况下,需加入D控制。

本文系统采用双闭环串级PID算法进行角度环(PD)控制和速度环(PI)控制。其中将速度环输出作为角度环输入,将角度环输出作为系统输出,这是一个串级控制系统,PID调节流程如图9所示。

由式(6)和式(7)得到让小车保持直立且速度为给定值的控制算法。由一个负反馈的直立PD控制器与一个正反馈的速度PI控制器组成平衡和速度的双闭环控制串级PID控制算法。

4 系统调试

在软件调试前先组装平衡小车硬件,在设计安装车体硬件各部分的过程中必须使车体重心尽可能在小车中心点,后续平衡调试才更容易。组装好车体后,小车通过下载线连接到电脑USB串口,经过软件Kile5编译烧录程序到主控芯片,软件调试主要有角度环调试和速度环调试,在倾斜角度和车轮速度控制共同作用下实现小车平衡。

4.1 调试角度环

将小车放在光滑地面上,调试角度环时,需屏蔽速度环,角度环调试步骤包括:确定小车平衡中值、确定 Kp、Kd极性及其大小。

(1)确定机械中值。将小车放在光滑地面,小车在零度附近有直立趋势,因此可确定小车机械中值为0。

(2)确定Kp极性(令 Kd=0),如表1所示。

当Kp值为正时,小车上电启动后有回复力驱使小车保持平衡,可确定Kp极性为正。

(3)确定Kp大小,如表2所示。

当Kp取值从300增加至500时,响应速度逐渐加快,直至Kp=500时出现大幅度抖动,表明设定的Kp值很大,抑制低频抖动需增加微分控制,削弱比例控制。

(4)确定Kd极性(令Kp=0),如表3所示。

当Kd值为正时,上电启动小车后倾斜车体,车轮会跟随傾角方向转动,保证调节转速达到平衡目的,可确定Kd极性为正。

(5)确定Kd大小(令Kp=500),如表4所示。

Kp=500,Kd=1.7是Kp和Kd的最大值,超过该数值会影响小车平衡状态。根据工程经验可知,将调试得到的最大值分别乘以0.6,然后取整得Kp=300,Kd=1,这是实现最好平衡状态的理想参数值[14]。此时小车能保持一定时间的平衡,但是十几秒后小车仍会向一个方向倒下,这是因为需依靠直立控制和速度控制两者的共同作用才能实现小车长时间平衡,因此需进行速度环参数调试。

4.2 调试速度环

将小车放在光滑地面上,在调试速度环时,需屏蔽角度环,通过确定 Kp、 Ki极性及大小完成速度环调试。

(1)为确定Kp、Ki极性进行第一次调试,如表5所示。

当Kp、Ki取值为正时,转动小车其中一个车轮,另一个可以实现同向转动,说明调节速度可实现两个车轮同步控制,因此可确定Kp、Ki两参数极性为正。

(2)为确定Kp、Ki极性进行第二次调试,如表6所示。

逐渐增大Kp、Ki的取值,当Kp=80、Kd=0.4时,小车整体性能良好。确定角度环和速度环后,经过调试实现小车上电后在无外力作用下自主平衡,并且在遇到一定外力作用时,小车能抗干扰,迅速回到稳定平衡状态。

5 结语

本文设计以STM32为主控制器, 以MPU-6050和霍尔编码器为数据采集模块,结合卡尔曼滤波算法与PID算法对姿态数据进行处理,系统上电后按下启动按钮,可实现小车在无外力作用下自主平衡。通过蓝牙连接手机APP后,可在手机端控制小车前进、后退、转弯等动作。在一定范围内的外力干扰下,小车能维持车体不倒且在短时间内恢复到平衡状态。通过对平衡小车的研究,为进一步学习倒立摆及对更复杂的控制系统(如四轴飞行器)研究打下了坚实基础。

参考文献:

[1] 季鹏飞.  基于STM32的两轮自平衡小车控制系统设计[J]. 电子科技,2014,27(11):96-105.

[2] 王素青,熊维堂.  基于STM32的两轮自平衡小车系统设计[J]. 实验室研究与探索,2016,35(5):146,150.

[3] 李满.  基于积分分离PID 控制的自平衡车设计[J]. 武汉交通职业学院学报,2016,18(2):82-86.

[4] 韩竺秦,张丽娜. 两轮平衡机器人控制系统设计与仿真研究[J]. 软件导刊,2019,18(3):86-90.

[5] 陈木桂,张谦,黄睿,等.  一种光电平衡智能车设计[J]. 教育教学论坛,2019(39):76-80.

[6] 束方耀,戴丽华,邹壮志,等. 声控自平衡小车的设计与研究[J]. 电子制作,2018(17):17-18,16.

[7] HOU Z Y. Design of intelligent balancing vehicle control system based on arduino[J]. International Journal of Plant Engineering and Management,2018,23(3):164-167.

[8] 李澍源,冯奇杰,兰家祥,等. 基于超声波测距式的自平衡车控制系统[J]. 内燃机与配件,2017(2):9-11.

[9] 王宇坤,陈沃源. 基于PI控制器的两轮平衡小车设计[J]. 信息记录材料,2018,19(7):215-216.

[10] 徐猛. 基于STM32自平衡小车的设计与制作[J]. 计算机产品与流通,2019(9):110.

[11] 熊跃军,史明政,林金勇,等. 一种两轮自平衡小车的设计与实现[J]. 长沙大学学报,2016,30(2):39-42.

[12] 李详鹏,陈春,周子文,等. 基于MEMS传感器的两轮平衡小车设计[J]. 科技创新与应用,2019(22):27-29.

[13] 杨柳. 两轮自平衡小车控制系统探讨与分析[J]. 中国新通信,2018,20(19):152-152.

[14] 林伟捷,黄唯佳,蔡剑卿. 基于四元数互补滤波和PID控制算法的两轮自平衡车系统设计[J]. 软件导刊,2016,15(6):80-82.

(责任编辑:江 艳)

猜你喜欢

车体编码器车轮
车轮的位置
车轮开启赴爱之旅
基于FPGA的同步机轴角编码器
基于PRBS检测的8B/IOB编码器设计
动车组过分相的车体最佳接地技术分析
JESD204B接口协议中的8B10B编码器设计
MIG—V工作站在高速动车铝合金车体侧墙焊接中的应用
渗透检测在铝合金车体中的实际应用
多总线式光电编码器的设计与应用
车体尺寸和几何量检测系统设计