邱云平,伍寶玉
(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-),女,江西九江人,都昌縣司法局,碩士。研究方向:語言學及應用語言學。