自平衡两轮电动车运动控制系统的硬件设计及实现
2016-06-08王娜孙思远
王娜 孙思远
【摘 要】两轮自平衡小车是一种不稳定系统,只有通过调节两轮的运动快慢和方向才能使其达到动态的平衡。本文基于stm32系列单片机,从硬件原理开始分析说明,阐述了控制系统的硬件设计,对陀螺仪和加速度传感器测量实际倾角的过程和方法做了仔细分析说明,并设计了双闭环 PID 控制器,同时对系统中涉及的滤波算法和PID控制算法做了理论分析,给出了整个系统的软件控制流程。通过实验表明两轮自平衡小车基本能够实现直立控制。
【关键词】平衡控制;PID控制器;卡尔曼滤波;STM32;传感器
0 引言
移动机器人技术是目前科学技术发展最活跃的领域之一,而两轮自平衡小车又是移动机器人研究中的一个重要领域[1],两轮自平衡小车系统具有本质不稳定、多变量、非线性、强耦合等特点,并且涉及到复杂的运动学、动力学系统和很多控制算法[2]。本文在对该控制理论分析的基础上通过PID控制和卡尔曼滤波,最终实现对平衡车的系统设计。
1 自平衡两轮电动车的运动控制原理
由于该模型是单轴双轮,所以在车体与竖直方向产生倾角的时候,小车就会在车体重力沿水平方向的分力作用下运动而不能保持静止,但是我们可以通过电机控制两个轮子的转速和转向,从而使其抵消其倾斜的趋势,这样便可以使两轮小车保持自平衡。[3]
两轮自平衡小车的总体控制原理如图1所示。整个系统的核心是STM32F103C8T6单片机,该系统主要由运动处理传感器、电机驱动、电源管理电路、串口通信、直流无刷电机和磁电编码器组成。MPU6050内部集成陀螺仪和加速度计,分别用于测量角速度和角加速度,并将采集到的数据存放到FIFO寄存器,通过I2C协议传输给单片机后进行卡尔曼滤波,就可以得到正确的倾角。而电机的转速则是由磁电编码器返回到单片机并计算出一定时间内的计数来判断车速的大小和方向。电机驱动则选用TB6612FNG来控制两个直流电机的正转、反转、制动和调速功能。串口通信主要是进行程序的烧写。电源模块的主要作用是提供各电路工作所需的电源。
2 系统的硬件设计及实现
2.1 单片机选型
主控芯片采用STM32F103C8T6单片机,它作为一种高性能、低成本、低功耗的ARM Cortex-3内核单片机,比传统的51单片机应用更加广泛,体积更加小巧。最高时钟频率可达72MHz,而工作电压只有3.3V,它的外设包括10个定时器、4路PWM、两个12位模数转换器、两个12位数模转换器、两个I2C接口、五个USART接口和三个SPI端口。新产品外设共有12条DMA通道,可以用ARM内核的Keil工具进行编程。
2.2 系统电源的设计
本系统的电源共涉及三个电压值,分别为12V、5V、3.3V。12V用于驱动电机,3.3V作为单片机和传感器的逻辑电平,5V则作为驱动电机的电平,而且在供电设计时的压降也不宜过大,否则容易使芯片发热量过大。利用软包电池组或者其他电池作为12V直流电源,先通过LM2596稳压芯片将12V转换为5V,再通过AMS1117-3.3将5V转换为3.3V电源。其应用方式均可在相应芯片资料中得到。
2.3 测速系统的设计
测速设计采用的是AB相增量式霍尔编码器,其原理是采用磁阻或者霍尔元件对变化的磁性材料的角度或者位移值进行测量,磁性材料角度或者位移的变化会引起一定电阻或者电压的变化,通过放大电路对变化量进行放大,通过单片机处理后输出脉冲信号或者模拟量信号,达到测量的目的。
其核心代码如下:
Encoder_TIM= (short)TIM2 -> CNT; TIM2 -> CNT=0;
通过一段时间内计数器的计数个数来判断速度大小,其具体速度值还需要进一步处理。
2.4 电机控制芯片选型
电机控制采用芯片TB6612FNG,它有6路输入8路输出,可控制两个直流电机,逻辑电平输入为5V,驱动电压为12V。每四个输出控制一个电机,每三个输入都可以实现一组电机的正转、反转、制动。而速度的调节则由单片机的计时器提供的PWM波实现。
3 车身倾角的获取
3.1 运动处理传感器的选取和编码
对于车身倾角的获取采用MPU6050运动处理传感器,它内部包含GYRO(陀螺仪)用于采集角速度和ACCEL(加速度计)用于采集加速度,由于陀螺仪的温漂还集成了温度传感器。采集后的数据存入FIFO寄存器,可以输出6轴旋转矩阵,分别对应xyz轴的角度和角加速度。其并不需要AD转换的步骤,而是利用I2C同步通讯与单片机传输数据,提高了系统运行效率。
其采集数据的核心代码为:
MPU6050_FIFO[i][j-1]=MPU6050_FIFO[i][j];
该数组表示对第i个轴上的第j-1个数据进行更新,通过循环即可得到一段时间内的i*j的矩阵。为了减小噪声干扰,可以取多组数据平均值即为该时刻的运动状态。
3.2 传感器数据的处理
在传感器采集到数据后,就会通过I2C传输给单片机进行下一步处理,此时就可以得到FIFO寄存器中的数据。加速度计可以测量动态和静态的线性加速度,则加速度计输出的加速度与车身倾角的关系为:
?兹=tan-1(Ax/Ay)
其中Ax为x轴方向上的加速度,Ay为y轴方向上的加速度。在C程序中可以用math.h里面的函数计算,其代码为:
angle_Y=atan2(Accel_X,Accel_Z)*180/PI;
根据小车模型及焊接方向即可确定倾角的旋转轴,此处以y轴为例,为了计算简便最好在设计之初确定好MPU6050的轴向。
陀螺仪的直接输出值是相对灵敏轴的角速率,角速率对时间积分即可得到围绕灵敏轴旋转过的角度值,在C程序中利用累加即可完成。
4 整体的控制流程
首先对整个电路的工作方式进行设置,包括系统时钟初始化、中断初始化、ADC初始化、传感器初始化等。然后传感器开始工作,采集到的加速度经过公式转换为角度值,而角速度经过积分得到角度或者直接进行滤波,这里采用互补滤波。
其中Ti表示积分时间常数;Td表示微分时间常数。经过滤波后的角度值为PD控制,而对编码器返回的速度值为PI控制,最后输出的增量值赋值给相应寄存器来调节PWM占空比,最后驱动电机转动,使小车达到平衡。
5 结论
实际试验表明我们的设计基本实现了控制小车防倾倒和行动的目的,对滤波算法和PID算法进行了说明,同时降低了硬件成本和能耗。我们将会在此基础上做更进一步的深入研究,相信未来两轮自平衡车技术也将会得到更大的发展。
【参考文献】
[1]徐国华,谭民.移动机器人的发展现状及其趋势[J].机器人技术与应用,2001,14(3):7-14.
[2]郑晓伟,陈万米.基于DSP的两轮自平衡小车系统的研究[J].工业控制计算机,2012,25(9):33-35.
[3]杨亚龙,刘金栋,孙玉环,丁婷.基于 STC12C5410AD 单片机的两轮自平衡小车的系统设计[J].电子设计工程,2013,10(20):162-164.
[4]张洋,刘军,严汉宇.原子教你玩STM32(库函数版)[M].北京:北京航天航空大学出版社,2013.
[5]李宁.ARM MCU开发工具MDK使用入门[M].北京:北京航天航空大学出版社,2012.
[6]欧阳骏,李英芬,王小强,等.疯狂STM32实战讲学录[M].北京:中国水利水电出版社,2013.
[7]陈海宴.51单片机原理及应用——基于Keil C与Proteus(第2版)[M].北京:北京航天航空大学出版社,2010.
[8]何钦铭,颜晖.C语言程序设计[M].北京:高等教育出版社,2012.
[责任编辑:王伟平]