邱云平,伍宝玉
(1、深圳蓝桥林科技有限公司,广东 深圳 518127;2、都昌县司法局,江西 九江 332600)
MPU-6050模块角度算法处理及在嵌入式中的应用
邱云平1,伍宝玉2
(1、深圳蓝桥林科技有限公司,广东 深圳 518127;2、都昌县司法局,江西 九江 332600)
本文主要介绍MPU-6050全球首例6轴运动处理传感器,论述一种对MPU-6050的数据处理的新思想和算法。本设计主要讨论三个要点:第一、比较陀螺仪、加速度传感与9轴运动处理传感器(MPU-6050)的差距;第二、通过积分算法对MPU-6050模块采集的数据进行处理,从而获得更为准确的角度;第三、MPU-6050在嵌入式中的具体应用。
MPU-6050 6轴运动处理传感器;陀螺仪;加速度传感
MPU-6050集成了3轴MEMS陀螺仪,3轴MEMS加速度计以及一个可扩展的数字运动处理器DMP(Digital Motion Processor),可用I2C接口连接一个第三方的数字传感器,比如磁力计。扩展之后,就可以通过其I2C接口输出一个9轴的信号。MPU-6050也可以通过其I2C接口连接非惯性的数字传感器,比如压力传感器。MPU-6050对陀螺仪和加速度计分别用了三个16位的ADC,将其测量的模拟量转化为可输出的数字量。为了精确跟踪快速和慢速的运动,传感器的测量范围都是用户可控的,陀螺仪可测范围为±250,±500,±1000,±2000°/秒(dps),加速度计可测范围为±2,±4,±8,±16g。一个片上 1024 字节的 FIFO,有助于降低系统功耗。MPU-6050模块与所有设备寄存器之间的通信采用400kHz的I2C接口,片上还内嵌了一个温度传感器和在工作环境下仅有±1%变动的振荡器[1]。它的应用范围相当广,如智能手机,平板电脑,游戏机,3D遥控器,可携式导航设备和玩具小车等。
陀螺仪是一种用来传感与维持方向的装置,是基于角动量守恒理论设计出来的。陀螺仪主要是由一个位于轴心且可旋转的转子构成。陀螺仪一旦开始旋转,由于转子的角动量,陀螺仪有抗拒方向改变的趋向。陀螺仪多用于导航、定位等系统[2]。
加速度计是测量加速度的装置。相对于远距传感的装置,它测量的是自身的运动。加速度计的应用之一是测量重力,特别是使用于重量测定法的加速计,这样的装置称重力计[3]。
MPU-6050为全球首例整合性6轴运动处理组件,相较于多组件方案,免除了组合陀螺仪与加速器时的轴间差问题,减少了大量的包装空间[4]。所以,现在MPU-6050的应用范围越来越广,在一定程度上取代了陀螺仪和加速度计,而且MPU-6050使用也相当方便。
本设计主要介绍GY-521 MPU-6050模块,在电路设计的时候,主要是把GY-521 MPU-6050作为一个单独的模块来测试,通过引线来连接到STM32上。供电电压3~5V,通过内部低压差稳压。通信方式采用标准的IIC通信协议,芯片内置16bit AD转换器,16位数据输出。
一般的MPU-6050芯片都可以参考图1电路进行设计,如果要做成模块,那么该原理图基本通用,模块预留单排针引脚,可以通过焊接排针来引线与MCU进行连接,通过LED灯指示电源工作正常。图2为GY-521 MPU-6050模块的PCB图,体积比较小,方便集成,尤其是在外围器件比较多的情况下,可以通过排针和两个铜柱来固定。
图1 通用GY-521 MPU-6050的电路原理图
对MPU-6050模块的角度数据处理,算法很多,比如最常见的积分处理,卡尔曼滤波处理等等。本设计充分利用STM32的滴答定时器,采用积分处理。我们知道在误差要求允许范围内,对不连续的数据进行求和有时候可以替代积分,本设计就是依据这个思想来实现的。通过STM32的滴答定时器来记录系统运行的时间,然后通过两次运行的时间差,作为一个叠加也就是所谓的积分来处理。通过滴答定时器产生1ms的定时,然后让运行时间变量(RT)1ms加1,从而获得当前程序运行的时间(NT),再通过与上次运行的时间(LT)差值来作为积分数值(TS),从而可以得出如下两个式子:(a)NT=RT;(b)TS=NT-LT。下面利用这个思想和两个基本式子来进行角度的实际应用。
图2 GY-521 MPU-6050 PCB图
通过积分算法和上面的两个式子可以得出相对校准的角度,下面以X轴的角度为例,算法实现的主要步骤如下[1]:
(1)先通过IIC获得角度初始值,ax=GetData(ACCEL_XOUT_H);
(2)对加速度进行量化,得出单位为g的加速度值-2g量程,Ax=ax/16384.00;
(3)用加速到计算X轴和水平坐标系之间的夹角,Angle_accX=atan(Ax/Az)*180/pi;通过反正切获得弧度值,乘以180度再除以π;
(4)对角速度做量化-2000°量程,ggx=gx/16.38;
(5)对角度进行积分处理,NowTime=RunningTime;获得当前程序运行的时间;TimeSpan=NowTime-LastTime;近似积分;
(6)通过对角度积分实现X轴的角度测量,这里假设X轴的起始角度为0度,则Gx=Gx+(ggx-Gx_offset)*TimeSpan/1000;LastTime=NowTime;(记录当前运行的时间作为下次的减数)。
通过上面6个步骤基本可以获取最终的角度,通过大量的实验和实践证明,该方法可行,而且获得角度也相对准确。下面用一个函数实现上面的思想,程序所涉及的变量定义可以作为全局变量来处理。
/*********获得 X、Y、Z轴的加速度数据*******************/
/*********获得 X、Y、Z轴的角速度数据*******************/
/**对角速度进行量化,得出单位为g的加速度值-2g量程**//**用加速度计算三个轴和水平面坐标系之间的夹角**/
Angle_accX=atan(Ax/Az)*180/pi;//反正切获得弧度值,乘以 180°/π
NowTime=RunningTime;//获取当前程序运行的时间
TimeSpan=NowTime-LastTime;//近似积分
/**通过对角速度积分实现各个轴的角度测量,当然假设各轴的起始角度都是0**/
每次使用时,在固定MPU-6050模块上会由于各种因素导致角度有偏差,为了使数据趋于准确,我们在固定MPU-6050之后进行角度校零,通过一个按键来实现,该按键具有角度校零功能,当固定完MPU-6050模块的时候,按一下该按键就可以实现校零功能。同时为了提高性价比,本次设计可通过STM32的内部Flash来存储MPU-6050的角度数据,从而实现校零功能。
我们选用的是STM32F103ZET6,该FLASH容量为512个字节,属于大容量产品。表1是大容量的闪存模块组织[5]。
表1 大容量的闪存模块组织
从表1可以看出STM32的闪存模块由主存信息、信息块和闪存存储器接口寄存器等3部分组成。主存储器:用来存放代码和数据常数;信息块:分为2个小部分,一是启动程序代码,用来存储ST自带的启动程序,二是于串口下载代码;闪存存储器接口寄存器:用于控制闪存读写等,是整个闪存模块的控制机构[6]。
对STM32具体如何操作内部分FLASH在此不作详细讨论,图3是STM32的闪存编程过程,具体请参考《STM32F10XXX中文闪存编程手册》和《STM32参考手册》。
图3 STM32的闪存编程过程
由于硬件电路比较简单,这里就不作详细讨论,下面主要讨论校零的简单算法。图4是系统整体流程图,从图可以看出,初始化之后STM32的内部FLASH存储的初始值默认为0度,只有当校零按键按下时,STM32内部FLASH才存储角度,当校零没有按下的时候,直接通过串口打印角度数据,通过串口也可以验证是否需要校零。
图4 系统整体流程图
图5为串口调试软件上面显示的X轴角度数据,通过角度数据我们可以确定是否需要调整角度。也可以通过校零按键,直接进行校零。
本设计通过对MPU-6050模块的探讨,对芯片MPU-6050的内部ADC采集的数据进一步处理,从而使得角度更加准确。考虑实际使用MPU-6050模块的时候,角度难以一直保持零度,所以在设计的时候,增加一个校零按键,通过该按键可以实现随时校零,从而方便了模块的使用。MPU-6050模块也可广泛应用于工业产品上面,只要是对角度的检测一般都可以参考该设计方法。
图5 串口调试软件打印出的角度数据
[1]MPU-6000 and MPU-6050 Register Map and Descriptions Revision 3.2,11/14/2011 MPU-6050的芯片手册.
[2]http://zh.wikipedia.org/wiki/陀螺儀,维基百科.
[3]http://zh.wikipedia.org/wiki/加速度计,维基百科.
[4]http://baike.baidu.com/link?url=T9m_sr0RYgSmNb51_wDlrhu3UDEyXXh97-E7pO2DR9rGwexnOMNaCiJ7yO0mcHAF-bolmgQT6DehrY4UiaZ-_Za百度百科.
[5]STM32F10XXX中文闪存编程手册[K].2013,7,8.
[6]邱云平,冯光荣.STM32的便携式手机蓝牙考勤机系统设计[J].单片机与嵌入式系统应用,2012(11):61.
(责任编辑:陈 辉)
MPU-6050 Module Angle Algorithm Processing and Its Application in Embedded Style
QIU Yun-ping1WU Bao-yu2
(1.Shenzhen Lanqiaolin Technology Co.Ltd.Shenzhen,Guangdong,518127;2.The Justice Department of Duchang County,Jiujiang,Jiangxi,332600)
This paper mainly introduces the MPU-6050—the world's first 6 axis motion sensor,and discusses a new idea and algorithm of data processing of MPU-6050.This design mainly discuss three main points:firstly,comparing with the gyroscope,the acceleration sensor and 6 axis motion sensor(MPU-6050);secondly,through the integral algorithm for MPU-6050 module to process the data collected,in an attempt to gain more accurate angle;thirdly,the specific application of MPU-6050 in embedded style.
6 axis motion sensor;gyroscope;the acceleration sensor
TP391
A
123(2014)02-0026-04
2013-11-20
邱云平(1986-),男,江西九江人,深圳蓝桥林科技有限公司,硕士。研究方向:嵌入式系统及应用。
伍宝玉(1987-),女,江西九江人,都昌县司法局,硕士。研究方向:语言学及应用语言学。