基于STM32F429 两轮平衡车的研制
2020-11-10贾树林马双宝
贾树林,马双宝
(武汉纺织大学 机械工程与自动化学院,湖北 武汉 430200)
0 引言
在当今市场上,传统玩具慢慢地退出了市场,取而代之的是高科技智能型电子玩具。无线遥控小车、自动避障小车、智能循迹小车成为新一代高科技产物,无线遥控小车的实现可通过手机wifi、蓝牙、射频、红外线等几种,其中蓝牙控制技术具有一定的优越性,正应用于短距离通信、传输文件、远程遥控等多个方面[1]。
对于智能小车,双轮自平衡小车是研究热点之一。双轮自平衡小车有很多优点,例如:占地面积较小,运动灵活,可以在狭小的空间得到运用,也可以成为人们日常的代步工具,解决人们短距离行程,为人们的生活带来便利[2]。双轮自平衡小车可以实现不需人为控制的运行,且在不同的状态之间切换。本设计就是在这样的背景下提出的,通过计算机编程来实现对双轮自平衡小车的前进、后退、转弯以及停止等行为控制。双轮自平衡小车是一个复杂和集成的系统,它包括了通信方面、智能控制方面、自动控制方面、传感器和检测技术以及电子设计和其它技术方面的知识[3],通过对双轮平衡小车的研究,可以让初学者了解自动控制的基本方法以及多种技术结合而形成的控制问题。
1 系统硬件设计
图1 系统总体框图
系统总体框图如图1 所示。该系统由主控制器STM32F429、传感器模块、蓝牙模块、电源模块、串口显示模块、电机驱动模块和测速模块等部分组成。
1.1 控制器
控制器采用单片机STM32F429,该单片机使用的内核是Cortex M4,含有DSP 指令集,它内部的SRAM大小为256KB。该芯片的模拟量转为数字量的转换速度非常快,并且转换模块的工作供电电压很低,内部含有8 个定时器,可同时处理32 位数据,I/O 端口可以复用为很多其它的功能[4],常用的串行接口有USART 和SPI 通信,该单片机最高的工作频率可以达到180MHz,STM32F429 单片机总线访问的速度非常快,并且该单片机拥有强大的数据处理能力,可以完全满足本次设计要求。
1.2 串口显示模块
显示模块主要是将双轮自平衡小车的运行状态实时的显示到人机交互界面,使我们进一步了解双轮自平衡小车的运行状况。显示模块采用串口触摸屏显示,串口触摸屏HMI 就是将它的一般功能进行封装,使用者可以通过串口USART 与屏幕进行消息的交换,从而满足用户的要求,人机交互界面非常友好且操作性良好[5],用户可以通过屏幕发送相应的指令来完成相关操作。
串口显示电路如图2 所示。其中,PA9、PA10 为与控制器连接管脚,PA9 为发送端,PA10 为接收端,且控制器与串口显示屏通信方式为USART。
图2 串口显示电路
图3 LM2596 电压转换电路
1.3 电源模块
电源电路是整个系统工作的前提,它为各个模块提供所需的电源。电源的正确使用是系统稳定工作运行的前提。
电源采用12V 聚合物锂电池供电,该电池为可充电电池,可以重复使用。电压转换电路如图3 所示,将电源12V 经过降压芯片LM2596 转换为10V,作为电机驱动模块的电源。LM2596 是一款降压芯片,能够输出3A 的电流去驱动其它器件,它的输出电压大小可根据反馈电阻的大小进行调节,输出电压最高可达37V[6];再将转化后的10V 经过线性稳压芯片LM7805 转化为5V,为单片机供电,可以实现同一电源为不同模块供电,且保证了不同电压的需求,这样设计供电电路比较简单,易于实现,且能满足本次设计需求。LM7805 降压电路如图4 所示。
图4 LM7805 降压电路
图5 带霍尔传感器测速码盘的GB37 直流减速电机
1.4 测速模块
要实现对双轮自平衡小车速度的控制,需要实时知道小车的行驶速度,对小车的速度进行反馈,形成速度闭环反馈,从而实现对小车速度的控制。
测速模块采用霍尔传感器,采用GB37 直流减速电机,电机上带有一款霍尔传感器测速码盘,减速比为1:30 的520 电机,该电机额定电压为12V,空转电流为250mA,堵转电流最大可达6.5A,功率可达4.8W[7],同时测速码盘上配有13 线强磁码盘,在A、B 双相的共同输出下,就可以计算出当车轮转动一圈时,输出的脉冲数量可以达到780 个。如图5 所示为带霍尔传感器测速码盘的GB37 直流减速电机。
1.5 电机驱动模块
电机驱动模块采用TB6612FNG 芯片作为本次设计的电机驱动模块芯片,该芯片在效率方面比传统驱动有很大提高,也极大地缩减了驱动的体积,并且在正常的工作情况下该芯片不会散发热量,并且该芯片自带软启动功能,启动转矩大,性能较好[8]。在连接控制器与TB6612FNG 芯片之间加入隔离电路,可以有效地防止控制器被损坏。如图6 所示为电机驱动电路图。当STBY 端口被连接到MCU 时,电动机停止工作。当STBY 被连接到高电平时,该芯片是有效的。通过将AIN1、AIN2、BIN1、BIN2 置1 或者清零来控制电机的运行状态[9]。PWMA 和PWMB 接单片机的PWM 口,用来控制电动机的转动。
图6 电机驱动电路图
该单片微型计算机PA0、PA1、PA2 和PA3 口分别接电机驱动电路的BIN2、BIN1、AIN2 和AIN1 口,来控制电机的运行状态,当A、B 两个电机同时正转且两个电机的转动速度相同时,小车向前行驶;当A、B 两个电机同时反向转动且两个电机的转动速度相同时,小车向后倒退;当A、B 两个电机一个正向转动一个反向转动且两个电机的转动速度相同时,小车将在当前位置转圈行驶。PWMA 和PWMB 接单片机的PWM 口,当小车前进或者后退时,要求两轮小车的两个车轮速度是一样的,则输入电机的两路PWM波是一样的;当小车向左转弯,要求小车左轮的速度小于右轮的速度,则左轮所输入的PWM 波的占空比要小于右车轮所输入的PWM 波的占空比;当小车向右时,要求小车右车轮的速度要小于左车轮的速度,则右轮所输入的PWM 波的占空比要小于左轮所输入的PWM 波的占空比。PWM 波的占空比越大,小车的速度越大,反之亦然。通过改变PWM 波的占空比,即可改变小车的速度。当然,PWM 波的频率应该是合适的。如果PWM 频率较高时,电机连续运行,并且噪音较小,但该设备的功耗会随着频率的增加而增加;当PWM 波的频率较低时,它的功率损耗也比较小,并且大大提高调速的线性相关性,但是太低的频率可能会导致降低电机旋转的连续性[10]。实践证明,一般情况下,当PWM 波频率大于1KHz时,该装置能够稳定的控制电动机。其次,如果占空比较大,会影响电机输出电流的稳定性和该装置的输出电流的能力,占空比的大小应该根据不同速度的要求而进行正确设置。
1.6 通信模块
通信模块采用HC-06 蓝牙模块,采用手机app 进行蓝牙控制,该蓝牙模块输入电压范围在3.6V-6V之间,适用于正常的5V 供电并且模块具有连接指示灯,可以确定蓝牙的连接是否成功,操作较为方便。
1.7 传感器模块
传感器模块使用传感器MPU6050,MPU6050 是世界上第一个集成的六轴运动处理组件,它可以测量六个物理量(小车在x、y 和z 三个轴的倾斜程度和三个轴上速度的变化率)[11]。MPU6050 的内部数据检测为16 位,它可以将其测量的模拟量转化为可输出的数字量。为了更加准确的跟随各种运动,用户可以通过自己编写程序来设定传感器的可测范围。陀螺仪可测量±250,±500,±1000,±2000°/秒(dps),加速度计可测量范围为±2g, ±4g, ±8g, ±16g[12]。该芯片和其它器件之间通过串口I2C 进行交换信息,同时它极大的消除了单独使用陀螺仪和加速度计在时间上的积分误差。
2 系统设计理论分析与计算
2.1 小车处于不同状态时的分析
由于小车上安装有六轴传感器MPU6050,可以检测到小车x、y、z 三轴的倾斜角度和三轴方向的加速度,将所收集的数据进行分析和处理,可以得到小车所处的状态,并且程序是根据小车所处的不同状态而编写。
(1)静止时:当小车的重心位于电机轴线中心位置的正上方时,此时传感器MPU6050 将采集到的数据进行处理分析得出小车位于0°位置,即平衡位置,此时小车静止。当检测到小车的重心向前倾斜时,则需要小车向前运动来保持小车的平衡状态;当检测到小车的重心向后倾斜时,则需要小车向后运动来保持小车的平衡状态。
(2)前进时:小车略微向后加速,这将倾斜小车的重心,使其稍微向前,然后再使小车在反方向加速,小车就会向前倾斜,同时保持小车处于平衡状态,使得小车前进。
(3)后退时:小车的车轮稍微向前加速,这将倾斜小车的重心,使其稍微向后,然后再使小车的两轮在反方向加速,这将使小车向后倾斜,同时保持小车的平衡,使得小车倒退。
(4)左转时:当小车处于前进或者后退并且保持平衡状态时,控制小车的左轮以较慢的速度运动、小车的右轮以较快速度运动时,即可使小车向左转。
(5)右转时:当小车处于前进或者后退并且保持平衡状态时,控制小车的右轮以较慢的速度运动、小车的左轮以较快速度运动时,即可使小车向右转。
经过理论分析即可得出小车处于不同状态时的控制思路,进而对小车实现不同的控制。
2.2 传感器的数据处理分析
两轮自平衡小车要想实现小车的平衡状态,需要实时的知道小车所处的状态,根据不同的状态做出不同的控制,以此来实现小车的平衡,这一过程则需要将六轴传感器MPU6050 采集到的数据进行实时的分析处理,最终得出小车所处的状态。因此传感器的数据处理与分析显得尤为重要。
MPU6050 的内部含有加速度传感器和角速度传感器。
图7 加速度计模型图
2.2.1 加速度计
加速度计是用来测量加速度的,该加速度计可以测量x、y 和z 三轴方向上的加速度。加速度计反应的加速矢量与当前力的方向相反,例如:加速度方向为向左,但是力的方向为向右。该传感器可以同时测量三个方向上所受到的力。如图7 所示为加速度计模型图,x、y、z 之间两两垂直。向量R 是加速度计需要测量的力,并且Rx、Ry和Rz分别是R 在x、y 和z 轴上的映射,并且满足Rx2+Ry2+Rz2 =R2。Rx、Ry和Rz与实际加速度计的x 轴,y 轴和z轴有关[13]。MPU6050 中的加速度传感器接口方式为I2C。对于加速度的量程,用户可以通过自己编写程序任意设置,并且可以直接获取内部模数转换的最终结果。加速度计的数据是以LSB 为单位的,而不是g(9.8m/s2),需要进一步转换,加速度计灵敏度通常以LSB/g 来表示。例如,当我们选择±4g 的量程时,对应的灵敏度=8192 LSB/g。
为了获得最终结果,运用公式Rx =ADC/灵敏度(ADC表示x 轴上的ADC计数值)。即当轴上的计数值为ADC时,对应的加速度值为(ADC ⁄8192)g。我们将向量R 和X、Y、Z 轴之间的角度分别定义为A、B、C。则可以得到:
并且在每个方向上的角度可以通过反余弦函数则可得到各个方向的角度。即
当MPU6050 水平放置时,只有Z 轴方向有力的作用,它的大小为1g,其相应的采样值为8192(量程为±4g)。此时有Rx=0,Ry=0,Rz=1g,并且满足Rx2+Ry2+Rz2 =R2。则R 与x、y、z 三个方向所形成的角度为:
2.2.2 陀螺仪
陀螺仪是测量角速度的传感器,MPU6050 内部含有可以测量三个方向的陀螺仪,该芯片可检测角速度的范围为±250、±500、±1000 与±2000 dps(dps 是degree per second)。当选择量程为±1000dps 时,将会得到精确度为32.8LSB/(°/s)。即当载体在X+轴转动1dps 时,ADC 将输出32.8 的变化量。
图8 示出了陀螺仪模型图,每个陀螺仪负责检测相应的轴线,也就是转速,检测绕各轴的旋转速度。通过上述模型图定义:
Rxz为R 向量在XZ 平面的投影,Ryz为R 向量在XY 平面上的投影,Axz为Rxz和z 轴的夹角,Ayz为Ryz和z 轴的夹角。Rxz和Rz所形成的直角三角形,利用三角形定理,可以知道:Rx2+Rz2 =Rxz2,Ry2+Rz2 =Ryz2。
假设测量围绕Y 轴的转动角度在时刻t1为A,在t2时刻为B,则变化率为Rate=(B-A)/(t2-t1),Rate单位为deg/s,MPU6050 并不会以deg/s单位输出,要进行转换,转换公式为:
图8 陀螺仪模型图
当量程为±2000°/s 时,假设x 轴的ADC 值为300,从上表得出,当量程为±2000°/s 时的灵敏度为16.4LSB/(°/s)。根据上面公式可得出
经过上述分析可以对传感器的数据进行处理,最终得到所需要的加速度值与角速度值。
2.3 小车速度分析
本次设计采用霍尔传感器来测量小车车速,采用GB37 直流减速电机,电机上带有一款霍尔传感器测速码盘,减速比为1:30。速度测量码盘模块配有一个13 线强磁性编码盘,当A、B 两相的输出一起工作时,当车轮转动一圈时,脉冲数能够输出780 个,再测得小车车轮的直径为d,则小车转一圈所行驶的距离为:
再测出小车输出脉冲所用时间的时间为t,即可算出小车的速度为
3 系统软件设计
如图9 所示为程序流程图。
图9 程序流程图
当程序开始后,首先进行串口初始化、MPU6050 初始化、PID 初始化、电机初始化,接下来进行判断标志位,蓝牙模块向单片机发送不同的命令,则会赋予标志位不同的数值即为图9 中变量。当变量数值为1 时,此时执行小车静止直立的程序;当变量数值为2 时,此时执行小车前进的程序;当变量数值为3 时,此时执行小车后退的程序;当变量数值为4 时,此时执行小车转弯的程序。
4 整体调试
将各个模块调试完成后,最后将各模块组装进行整体调试。上电之后,先观察控制器是否可以控制电机转动,且电机转动与实际情况是否符合。
当小车稍微向前倾斜时,观察到车轮有向前运动的趋势;当小车稍微向后倾斜时,观察到小车有向后运动的趋势。并且串口屏实时显示小车当前所处的倾斜角度。则可以证实,控制器的控制逻辑与电机的实际运行状况相同。则接下来通过调节PID 的各个参数,使小车达到相应的功能。如图10 为小车正面测试图,如图11 为小车侧面测试图,表1 为测试数据。
图10 小车正面测试图
图11 小车侧面测试图
表1 测试数据
由测试数据表可知,随着小车倾斜角度不断变大,小车达到平衡状态所需要的时间也在不断增加,当小车的倾斜角度在0°到±30°之间时,小车最终都会达到平衡状态。
5 总结
本次系统设计采用单片机STM32F429IGT6 作为主控制器,共包含以下模块:电源模块为该系统提供供电电源,是所有功能实现的前提;控制器模块是该系统的核心部分,是系统的“大脑”,对该系统发送指令,实现控制;电机驱动模块是将控制信号进行放大,达到足以驱动电机运转的目的;传感器MPU6050模块用来检测当前小车的倾斜程度,通过倾斜程度来对小车进行控制;显示模块用来显示小车的运行信息;测速模块用来检测小车的速度,最终通过闭环反馈达到控制小车速度的目的;蓝牙模块是使手机和单片机进行通信的,以此来控制小车所处的不同运行状态,最终小车实现了在不同状态下的自平衡。