王恒++沈梦娇
摘 要:两轮自平衡小车具有重要的应用与理论研究意义。文中设计了两轮自平衡小车的实验平台,系统分为5个模块:电源管理模块,微处理器模块,电机驱动模块,姿态传感器数据采集模块,以及蓝牙无线通讯模块。本设计从硬件电路,软件设计对系统的5个模块分别进行了详细设计。最后,制作了两轮自平衡小车的原型,并给予了初步运动控制验证。该实验平台能够初步实现自平衡功能,后续的研究将着重于对控制算法在该平台的验证研究。
关键词:两轮自平衡小车;数据融合;卡尔曼滤波;STM32
中图分类号:TP242.3 文献标识码:A 文章编号:2095-1302(2015)11-00-04
0 引 言
两轮自平衡小车(two-wheeled self-balanced vehicle)或两轮自平衡机器人(two-wheeled self-balanced robot)是一种类似人类直立姿态的平衡控制系统,其核心问题是如何保证在各工况下运动姿态的平衡控制及导航[1]。两轮自平衡小车或机器人系统是一个高阶次、不稳定、多变量、非线性、强耦合的系统[2]。其系统设计不仅要考虑机械结构的运动学设计[3] ,也要考虑动力学设计[2]、能量设计[4]、控制系统的参数辨识、控制系统的滤波处理[5]等,然后建立相应的控制策略,设计确实可行的控制器[6],实现自平衡小车在各工况下的运动平衡控制。
两轮自平衡小车在实践应用上,可用于军事领域中的侦查、排雷、单兵载人等,或作为日常生活中的短途交通工具[7]。然而,目前两轮自平衡小车更多的是其理论研究的意义,它是检验各种控制理论控制性能的一个较好的实验平台[8]。目前国内不少院校都对两轮自平衡小车进行了研究,主要为哈尔滨工业大学赵杰团队[8],西安电子科技大学屈胜利团队[9],北京工业大学阮晓刚团队[1, 2]等。国外也对两轮自平衡小车有研究,如Sayidmarie[10]等对两轮自平衡机器人上坡的平衡控制进行了研究,Slavov[11]等人基于线性二次型控制(linear-quadratic regulator, LQR)对两轮机器人进行了研究,Larimi[12]等构建了反作用轮系辅助的两轮小车的新型的稳定算法,Kim[13]等建立了两轮自平衡移动机器人的动态模型等。这说明两轮自平衡小车不仅仅在应用需求上,尤其在学科理论需求上,对其研究都具有重要的意义。因此,作为进行各种平衡控制理论研究的第一步,对两轮自平衡小车的实验平台的研制具有非常重要的意义。
本文主要设计了两轮自平衡小车的实验平台。设计采用STM32F103C8T6为核心处理器进行控制,姿态检测选用MPU6050运动处理传感器,数据融合采用卡尔曼滤波算法,结合陀螺仪的快速响应特性和加速度传感器的长时间稳定特性,得到小车的倾角。然后通过PID算法使小车能够处在一个相对平衡的位置,从而保持直立的姿态。系统控制参数的选择采用系统辨识的方法,在Matlab仿真平台得到系统的优化参数,并写入编写好的C语言软件,通过HC-06蓝牙模块可以使用Android手机控制小车实现前进、后退、左转、右转等动作模式。
1 系统设计
本设计采用模块化设计思想,系统总体功能框图如图1所示,分为五个模块,分别为:电源管理模块,微处理器模块,电机驱动模块,姿态传感器数据采集模块,以及蓝牙无线通讯模块。电源管理模块负责整个系统的供电,微处理器模块为系统的控制与数据处理核心,姿态数据采集模块为采集小车的姿态(包括加速度和角速度),然后通过微处理器控制算法后,再驱动电机控制模块运动以保持平衡,而蓝牙通讯模块则通过手机设备控制系统的运行,同时,系统运行的数据也可以上传到手机或电脑上。
图1 系统功能框图
2 硬件电路设计
2.1 电源管理模块
系统主要使用的电平为12 V,5 V,3.3 V共三种电平,其中STM32F103C8T6、MPU6050、HC-06主要采用3.3 V供电,电机驱动模块用12 V和5 V供电。所以,本设计总电源使用12 V的锂电池供电,采用LM2576将锂电池进行降压为5 V,再利用LM1117把得到的5V电平降为3.3 V。
2.2 STM32F103微处理器模块
系统采用STM32F103C8T6意法半导体(ST)的32位ARM Cortex-M3 内核的微处理器。该处理器正常工作主频为72 MHz,具有12 bit 分辨率的ADC,以及16 bit 电机控制PWM定时器,2个I2C接口(SMBus/PMBus)。该处理器可应用于电机驱动,应用控制,医疗手持设备,游戏,GPS平台等多种场合,所以,本设计采用STM32F103C8T6具有一定的合理性。其最小系统电路图如图2所示。
2.3 电机驱动模块
自平衡小车的驱动电机为两个无刷直流电机(电机A为左侧电机,电机B为右侧电机)。采用L298N芯片作为电机驱动电路的主芯片,小车的不同状态运动通过电机的三种转动方式(正转,反转,停止)实现,具体如表1所列。电机驱动电路原理图如图3所示。L298N的VSS接5 V电源,VS接12 V电源。IN1、IN2、IN3、IN4分别接STM32的PB1、PB0、PB6和PB5,ENA接PA0,ENB接PA1,此接法不是唯一的,可以根据程序中的端口设置进行相应的更改。具体的控制过程:角速度和加速度经过闭环控制之后产生一个结果,其运算结果用来改变PWM脉冲的占空比,进而分别控制了左电机和右电机的转速。在两个电机之间加入二极管主要是为了保护电路的安全运行。
表1 引脚状态电机制动电机A IN1 IN2 电机B IN3 IN4
正转 1 0 正转 1 0
反转 0 1 反转 0 1
停止 0 0 停止 0 0
—— 1 1 —— 1 1
2.4 姿态传感器模块
为了得到高精度的角度检测,系统采用Invensense 公司的MPU6050,该姿态传感器同时集成了3轴加速度和3轴陀螺仪,自带16位AD转换,加速度测量范围为±16 g(实际应用仅为±2 g范围),倾角角度测量范围不到1度。所以不需要分别使用加速度计和陀螺仪,以及相应的ADC电路,但此处数据不能简单采集使用,还需要经过微处理器卡尔曼滤波融合算法才可得到倾角。姿态传感器模块电路如图4所示。
2.5 蓝牙无线通讯模块
自平衡小车系统可以通过无线方式和上位机或者手机进行通讯,实现手机控制小车运行,并同时把数据上传到手机上。本设计采用的是蓝牙模块HC-06,此模块波特率可变,串口电压为3.3 V或者5 V,可以进行主从机切换,并且可以通过AT指令改变一些出厂的基本设置,如名字和密码等。HC-06主要用来接收安卓手机发送的指令,接收到之后,把指令通过串口发送给主控芯片,再由单片机控制电机,根据不同的指令来实现小车的左转、右转、前进和后退。HC-06原理图如图5所示。
图3 电机驱动电路
图4 MPU6050电路原理图
3 系统软件设计
系统的控制流程图如图6所示,主要包括:STM32的初始化,MPU6050初始化,姿态(倾角)信息的采集,卡尔曼滤波,倾角PID控制,PWM控制电机输出。系统软件开发为基于CMSIS架构的固件库开发平台,软件版本为MDK V4.12,它支持常见的ARM7,ARM9和ARM最新内核的CM3系列微处理器。
图6 系统控制流程图
STM32的初始化主要包括时钟初始化、延时初始化以及中断初始化。时钟初始化采用SystemInit()。STM32是CM3内核的,所以其内部有一个SysTick定时器,而使用的延时函数就是以这个定时器为基准,delay_init()函数主要是配置SysTick的中断时间,以及延时初始化fac_us和fac_ms两个参数。NVIC_Configuration()函数主要用来设置抢占优先级和响应优先级。
MPU6050要根据装配位置,通过I2C读取各个轴角速度和各个轴的加速度,再进行卡尔曼滤波处理进行数据融合,然后得到融合后的倾角。数据读取函数、卡尔曼滤波函数分别为IIC_6050()、Kalman()。滤波器参数通过模型仿真与实验结合的方式得到。并写入到软件代码中。
电机控制可采用方波或正弦波控制。虽然正弦波相比有效率的多,但考虑到系统实现的复杂度和效率,本文采用方波来实现电机控制。设计采用TIM2的通道一和通道二产生PWM波输出,使用TIM2并设置其为定时器模式,脉冲宽度调制模式2,通过代码产生频率为18 kHz占空比可变的PWM,其中占空比由获取到的角速度和角度来控制,使用函数TIM_SetCompare()来驱动电机。
本设计的手机显示界面如图7所示。设计没有使用查询而是使用中断接收指令,因此中断服务函数是整个串口模块的核心。当收到不同的指令时,通过控制电机转向进行不同的操作。需要注意的是每次控制电机之后都要调用一个清除缓冲区的函数,否则缓冲区的指令会保持不变,只能保持一个状态。串口不断接收从蓝牙传过来的指令,串口接收到的指令都是由Android程序控制的。程序分为两个部分,一个是XML文件,XML是布局文件,对此文件进行修改可以改变手机显示的界面,设计使用Button控件。另外一个是Java文件,真正的行为控制是Java文件来做的,首先要实例化Button,然后定义蓝牙地址变量,使之固定不变。本设计蓝牙设备的地址为00:21:13:07:BC,找到地址之后就要发送指令,这些指令都是由一些蓝牙架包实现的,最后把message发送出去。本设计中若message指令为G,则向前,若为B则后退,S为停止,L为左转,R为右转。
图7 手机界面
4 自平衡小车原型实物
本设计采用两个无刷直流电机控制,选择飞思卡尔竞赛使用的C型车模进行改装得到小车机械结构,底盘使用一块面包板来代替,板子和支架部分固定在一起。小车的倾角传感器MPU6050,电机控制模块L298,锂电池模块,降压模块,STM32核心板,蓝牙模块等都安装在面包板上面。完整车体如图8所示。通过手机控制界面,可以遥控两轮自平衡小车的运动,同时可以把采集数据上传到手机上。
图8 自平衡小车原型
5 结 语
本文对两轮自平衡小车实验平台进行了设计,作为较为理想的验证各种控制理论的实验平台,进行了系统的硬件平台设计、软件平台设计以及机械平台设计。系统主要以STM32F103 32 位 ARM控制器为核心,采用卡尔曼融合滤波算法对MPU6050姿态传感器进行数据处理,通过PWM控制左、右电机的运动,该系统能够初步实现小车的运动平衡控制。后期的研究将着重理论控制算法的仿真,与参数融合优化方面。
参考文献
[1] 阮晓钢, 赵建伟. 基于Hopfield网络的柔性两轮自平衡机器人控制 [J]. 机器人, 2010, 32(3): 405-413.
[2] 阮晓钢, 任红格. 两轮自平衡机器人动力学建模及其平衡控制 [J]. 计算机应用研究, 2009, 26(1): 99-101.
[3] 彭楠. 两轮自平衡电动车机械结构设计与有限元分析 [D]. 郑州:郑州大学, 2010.
[4] 王晓宇, 闫继宏, 秦勇, 等. 基于改进遗传算法的两轮自平衡机器人能量优化策略 [J]. 吉林大学学报(工学版), 2009(3): 830-835.
[5] 刘二林, 姜香菊. 基于卡尔曼滤波的两轮自平衡车姿态检测 [J]. 自动化与仪器仪表, 2015 (2): 52-54.
[6] 陈波. 基于神经网络PID控制的两轮自平衡小车研究 [D].成都:西南交通大学, 2014.
[7] 王晓宇. 两轮自平衡机器人的研究 [D].哈尔滨:哈尔滨工业大学, 2007.
[8] 秦勇, 闫继宏, 王晓宇, 等. 两轮自平衡机器人运动控制研究 [J]. 哈尔滨工业大学学报, 2008 (5): 721-726.
[9] 程刚, 屈胜利, 刘学超. 两轮自平衡小车可控角度的推导研究 [J]. 机床与液压, 2009,37(5): 115-116.
[10] Sayidmarie O K, Agouri S A, Tokhi M O. Balancing and Control of a Two-Wheeled Robot on Inclined Surface [Z]. Mobile Service Robotics, 2014.
[11] Slavov T, Kralev J, Petkov P. Linear-Quadratic Control of a Two-Wheeled Robot [J]. Cr Acad Bulg Sci, 2014, 67(8): 1153-1158.
[12] Larimi S R, Zarafshan P, Moosavian SAA. A New Stabilization Algorithm for a Two-Wheeled Mobile Robot Aided by Reaction Wheel [J]. J Dyn Syst-T Asme, 2015, 137.
[13] Kim S, Kwon S. Dynamic Modeling of a Two-wheeled Inverted Pendulum Balancing Mobile Robot [J]. Int J Control Autom, 2015, 13(4): 926-933.