陶志成,張海
(北京航空航天大學(xué) 自動(dòng)化科學(xué)與電氣工程學(xué)院,北京 100191)
?
MPU6050和STM32L152的微功耗三維無線鼠標(biāo)設(shè)計(jì)
陶志成,張海
(北京航空航天大學(xué) 自動(dòng)化科學(xué)與電氣工程學(xué)院,北京 100191)
摘要:利用運(yùn)動(dòng)傳感芯片MPU6050和STM32L152,設(shè)計(jì)了一款運(yùn)動(dòng)感知及處理模塊功耗僅為1.2 mA左右的低功耗三維鼠標(biāo)。針對(duì)功耗問題,詳細(xì)介紹了符合鼠標(biāo)低功耗工作要求的STM32L152低功耗運(yùn)行、睡眠模式配置,以及MPU6050加速度計(jì)單獨(dú)循環(huán)、單軸加速度計(jì)工作模式的配置,給出了加速度計(jì)標(biāo)定及基于加速度計(jì)的姿態(tài)角計(jì)算方法,實(shí)現(xiàn)了鼠標(biāo)姿態(tài)的精確測量。
關(guān)鍵詞:STM32L152;MPU6050;三維無線鼠標(biāo)
引言
針對(duì)低功耗設(shè)計(jì)問題,大多數(shù)三維無線鼠標(biāo)僅考慮無線模塊的低功耗設(shè)計(jì)。本文在此基礎(chǔ)上,進(jìn)一步將鼠標(biāo)處理器模塊及慣性測量模塊功耗考慮進(jìn)來,實(shí)現(xiàn)一款功耗更低、性能更優(yōu)的三維無線鼠標(biāo)。
1方案選擇
圖1 系統(tǒng)功能框圖
系統(tǒng)主要由電源模塊、運(yùn)動(dòng)感測追蹤組件MPU6050模塊、串口轉(zhuǎn)無線WiFi模塊和主控芯片STM32L152構(gòu)成,系統(tǒng)功能框圖如圖1所示。這里WiFi模塊只是用于遠(yuǎn)程傳輸測試,不在低功耗設(shè)計(jì)考慮之中,若考慮遠(yuǎn)程傳輸?shù)凸脑O(shè)計(jì),則使用ZigBee無線傳輸。
2硬件電路設(shè)計(jì)
2.1微控制器接口電路
主控芯片STM32L152與MPU6050的I2C和串口轉(zhuǎn)WiFi模塊的接口電路如圖2所示。
圖2 微控制器與其他模塊接口電路
2.2運(yùn)動(dòng)感測追蹤組件MPU6050電路
MPU6050硬件電路設(shè)計(jì)如圖3所示,將其SCL、SDA端口連接4.7 kΩ上拉電阻(否則I2C總線不能通信),并與微處理器PB8、PB9引腳相連;AD0經(jīng)4.7 kΩ電阻接地,讀寫器件地址為0xD0,若懸空或接高電平,地址為0xD2;濾波電容取值0.1 μF,電荷泵電容取值10 μF,否則片上傳感器不工作。
圖3 MPU 6050數(shù)據(jù)采集電路
2.3串口轉(zhuǎn)WiFi模塊電路
WiFi232-s是一款實(shí)現(xiàn)串口到WiFi數(shù)據(jù)包的雙向透明轉(zhuǎn)發(fā),其內(nèi)部完成協(xié)議轉(zhuǎn)換。串口轉(zhuǎn)WiFi模塊電路如圖4所示。通過串口或WiFi網(wǎng)絡(luò)連接至電腦,可以對(duì)模塊進(jìn)行AT指令集設(shè)置其配置參數(shù)。其中9、10、12引腳接4.7 kΩ上拉電阻,5、6引腳接處理器串口引腳PD8、PD9。
圖4 串口轉(zhuǎn)WiFi模塊電路
3軟件設(shè)計(jì)
3.1三維鼠標(biāo)低功耗設(shè)計(jì)描述
使用MPU6050可以設(shè)計(jì)兩種三維鼠標(biāo):基于加速度計(jì)或陀螺儀,這里主要討論基于加速度計(jì)的三維鼠標(biāo)設(shè)計(jì)。
三維鼠標(biāo)低功耗設(shè)計(jì)中,主要實(shí)現(xiàn)在鼠標(biāo)不工作時(shí)系統(tǒng)進(jìn)入睡眠模式,達(dá)到功耗最低,并且能夠及時(shí)從睡眠中喚醒,進(jìn)入工作狀態(tài)。因此,在微處理器STM32L152中設(shè)置一個(gè)3 s定時(shí)器,用來掃描鼠標(biāo)當(dāng)前狀態(tài)是否符合進(jìn)入睡眠模式條件。每當(dāng)定時(shí)溢出中斷到來后,采集加速度計(jì)Z軸輸出值并持續(xù)0.5 s,采集的當(dāng)前數(shù)據(jù)與上一時(shí)刻相減得到變化值,判斷其是否大于所設(shè)的閾值,并對(duì)這些大于閾值的數(shù)據(jù)進(jìn)行計(jì)數(shù)。若計(jì)數(shù)大于所設(shè)閾值,則鼠標(biāo)仍然保持工作狀態(tài),等待下一次定時(shí)中斷到來,此時(shí)STM32L152為低功耗運(yùn)行模式,MPU6050工作模式為加速度計(jì)單獨(dú)循環(huán)模式;若計(jì)數(shù)小于所設(shè)閾值,則鼠標(biāo)進(jìn)入睡眠模式,此時(shí)微處理器設(shè)置為低功耗睡眠模式,MPU6050的工作模式設(shè)置為加速度計(jì)Z軸工作,其余軸為Standby待機(jī)模式。
3.2MPU6050低功耗設(shè)置
(1) MPU6050加速度計(jì)單獨(dú)循環(huán)工作模式
三維鼠標(biāo)的MPU6050模塊中的三軸加速度計(jì)設(shè)置為循環(huán)工作模式,三軸陀螺儀設(shè)置為Standby待機(jī)模式,此時(shí)MPU6050電流消耗500 μA。
MPU6050生產(chǎn)商已經(jīng)給出了編程所需頭文件mpu6050.h,其將編程中所用到的寄存器都做了定義,如MPU6050_DEFAULT_ADDRESS,在頭文件中對(duì)應(yīng)地址為0xD0或0xD2。
void mpu6050_setCycle(u8 cycleFre){
IICwriteByte(MPU6050_DEFAULT_ADDRESS,MPU6050_RA_PWR_MGMT_2, 0x07);
//三軸加速度計(jì)工作,三軸陀螺儀Standby
IICwriteByte(MPU6050_DEFAULT_ADDRESS,MPU6050_RA_PWR_MGMT_1, 0x28);
//開啟加速度計(jì)循環(huán),關(guān)閉溫度傳感器,時(shí)鐘設(shè)置為內(nèi)部8 MHz
//晶振
IICwriteBits(MPU6050_DEFAULT_ADDRESS,MPU6050_RA_PWR_MGMT_2,MPU6050_PWR2_LP_WAKE_CTRL_BIT,MPU6050_PWR2_LP_WAKE_CTRL_LENGTH, cycleFre);
//設(shè)置循環(huán)模式頻率:0x00為1.25 Hz;
//0x01為5 Hz;0x02為20 Hz;0x03為40 Hz
}
(2) MPU6050其他工作模式配置
MPU6050睡眠模式:電源管理1寄存器PWR_MGMT_1設(shè)置為0x40。此時(shí)加速度和陀螺儀傳感器都進(jìn)入Standby待機(jī)模式,陀螺儀輸出值為0,加速度傳感器輸出一個(gè)固定值,MPU6050電流消耗為5 μA。
MPU6050陀螺儀單獨(dú)運(yùn)行模式:電源管理1寄存器PWR_MGMT_1設(shè)置為0x0C,電源管理2寄存器PWR_MGMT_2設(shè)置為0x38。此時(shí)只有陀螺儀傳感器工作,加速度計(jì)進(jìn)入Standby待機(jī)模式,輸出為一個(gè)固定值,MPU6050電流消耗為3.6 mA。
3.3STM32L152低功耗設(shè)置
(1) STM32L152低功耗運(yùn)行工作模式
void low_power_run_mode (void){
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA|RCC_AHBPeriph_GPIOB|……, DISABLE);
//配置各個(gè)外設(shè)時(shí)鐘使能開啟或關(guān)閉
PWR_VoltageScalingConfig(PWR_VoltageScaling_Range2);
while(PWR_GetFlagStatus(PWR_FLAG_VOS)!= RESET){}
//設(shè)置電源管理器為range2
lowPowerRun_clock();
//設(shè)置匹配的工作頻率
PWR_EnterLowPowerRunMode(ENABLE);
while(PWR_GetFlagStatus(PWR_FLAG_REGLP)== RESET) ;
}
//LPSDSRLPRUN置1,進(jìn)入低功耗運(yùn)行模式
(2) STM32L152低功耗睡眠工作模式
void low_power_sleep (void){
low_power_run_mode (void);
NVIC_SystemLPConfig(NVIC_LP_SEVONPEND,DISABLE);
NVIC_SystemLPConfig(NVIC_LP_SLEEPDEEP,DISABLE);
//關(guān)閉深睡眠模式
NVIC_SystemLPConfig(NVIC_LP_SLEEPONEXIT,DISABLE);
//進(jìn)入睡眠方式為sleep-now
PWR_EnterSleepMode(PWR_Regulator_LowPower,PWR_SLEEPEntry_WFI);
//進(jìn)入睡眠模式
}
注意,一般睡眠函數(shù)放置在while循環(huán)最后執(zhí)行,在其他任務(wù)跑完后進(jìn)入睡眠模式,待中斷到來時(shí)喚醒。
(3) STM32L152低功耗模式參數(shù)
低功耗睡眠模式:當(dāng)靜止不動(dòng)時(shí),三維鼠標(biāo)會(huì)進(jìn)入不工作狀態(tài)。此時(shí)只有微處理器中的3 s定時(shí)掃描MPU6050加速度計(jì)Z軸動(dòng)作的定時(shí)器在工作,在1.8 V或3 V電壓下,微處理器功耗為6.1 μA。
低功耗運(yùn)行模式:三維鼠標(biāo)進(jìn)行旋轉(zhuǎn)或位移動(dòng)作時(shí),進(jìn)入工作狀態(tài),此時(shí)STM32L152處于低功耗運(yùn)行模式,主頻設(shè)置為16 MHz。關(guān)閉所有無關(guān)的外設(shè),其電流消耗在500 μA左右。
3.4鼠標(biāo)工作狀態(tài)及睡眠狀態(tài)下的總功耗
鼠標(biāo)正常工作狀態(tài):STM32L152工作在低功耗運(yùn)行模式,MPU6050工作在加速度計(jì)單獨(dú)循環(huán)模式,電流消耗在1.2 mA左右。
鼠標(biāo)睡眠狀態(tài):STM32L152工作在睡眠模式(定時(shí)器中斷喚醒),MPU6050只有加速度計(jì)Z軸工作,電流消耗在200 μA左右。
3.5三維鼠標(biāo)算法實(shí)現(xiàn)
三軸加速度計(jì)精度在出廠時(shí)便存在工藝誤差,制成MPU6050模塊后還存在安裝誤差等,所以大多數(shù)情況下加速度計(jì)所測得的值與真實(shí)值有所差別,需要進(jìn)行加速度計(jì)標(biāo)定過程。
(1) 加速度計(jì)標(biāo)定方法
標(biāo)定模型:ai=Kiui+Bi,i=x、y、z,其中ai為加速度計(jì)真值,ki為測量斜率,ui為測量值,Bi為零偏。
取多個(gè)靜態(tài)位置的加速度計(jì)測量值,當(dāng)三軸加速度計(jì)靜止時(shí),有如下狀態(tài)關(guān)系式:
g為當(dāng)?shù)刂亓铀俣戎?。將?biāo)定模型代入狀態(tài)關(guān)系式,并作相關(guān)變量代換[4],可得表達(dá)式:
其中,pi是與測量斜率ki和零偏bi有關(guān)的替換變量。
本文測量20組不同位置的加速度計(jì)測量值,并除以對(duì)應(yīng)的系數(shù)轉(zhuǎn)換成以g為單位,分別求取每組中各軸的均值和平方值,代入上式中求出最小二乘解,接著求出標(biāo)定參數(shù)中的斜率和零偏。
(2) MPU6050加速度計(jì)不同量程標(biāo)定及結(jié)果
MPU6050加速度計(jì)有4種量程,分別是±2g、±4g、±8g、±16g,并且傳感器輸出單位分別是16 384 LSB/g、8 192 LSB/g、4 096 LSB/g、2 048 LSB/g,表1給出了±2g、±4g量程標(biāo)定結(jié)果,當(dāng)?shù)刂亓铀俣热≈禐?.8。
表1 MPU6050加速度計(jì)Ki、Bi標(biāo)定結(jié)果
當(dāng)量程選取±2g時(shí),通過下式計(jì)算加速度值:
ai=9.8 Kiui/16 384+Bi
當(dāng)量程選取±4g時(shí),通過下式計(jì)算加速度值:
ai=9.8 Kiui/8 192+Bi
(3) 姿態(tài)角計(jì)算
俯仰角pitch和橫滾角roll的計(jì)算公式:
pitch=arcsin(-ay),roll=arctan(-ax/az)
三軸加速度計(jì)只有在靜止或勻速運(yùn)動(dòng)下,加速度測量合成矢量與重力矢量重合時(shí),才能準(zhǔn)確測量姿態(tài)角。在測量精度要求不高的情況下,可以通過放寬對(duì)合成矢量的要求,獲得姿態(tài)角連續(xù)測量。圖5(a)、圖5(b)以橫滾角為例,給出了不同閾值情況下的計(jì)算結(jié)果,其中黑點(diǎn)和細(xì)線分別為滿足于測量閾值條件時(shí)的橫滾角度計(jì)算值,可見對(duì)于三維鼠標(biāo),使用0.15g的閾值,能夠滿足連續(xù)測量的要求??煽啃耘卸l件如下:
圖5 不同閾值橫滾角的計(jì)算結(jié)果
(4) 三維鼠標(biāo)在屏幕上坐標(biāo)映射計(jì)算
三維鼠標(biāo)在屏幕上坐標(biāo)映射的兩種計(jì)算方式為:
① 旋轉(zhuǎn)角度判定方向、角度變化映射成坐標(biāo)位置:加速度傳感器計(jì)算橫滾、俯仰兩個(gè)傾角θ、Ψ,θ角變化表示鼠標(biāo)在屏幕水平方向移動(dòng);Ψ角變化表示在屏幕垂直方向移動(dòng)。角度變化按一個(gè)比例系數(shù)轉(zhuǎn)換為鼠標(biāo)的位移。
② 旋轉(zhuǎn)角度判定方向、加速度積分映射光標(biāo)位移:鼠標(biāo)光標(biāo)在屏幕移動(dòng)方向的判斷同上。對(duì)加速度計(jì)動(dòng)作軸的輸出值在時(shí)間軸上積分得到位移,從而得到屏幕映射坐標(biāo)位置。
結(jié)語
參考文獻(xiàn)
[1] 陳建新,卜翔,王榮,等.基于MEMS加速度的三維無線鼠標(biāo)設(shè)計(jì)與實(shí)現(xiàn)[J].無線互聯(lián)科技, 2011(8):22-25.
[2] InvenSense Inc.MPU-6000 and MPU-6050 Register Map and Descriptions Revision 4.2[EB/OL].[2015-06].http://download.csdn.net/download/peng08303/6320325.
[3] ST Microelectronics.STM32L1xx參考手冊,2013.
[4] 吳越鵬,金愛娟,李少龍.微機(jī)電三軸加速度計(jì)的無轉(zhuǎn)臺(tái)標(biāo)定[J].中國科技信息,2012(4):70-71.
陶志成(碩士研究生),主要研究方向?yàn)閼T性導(dǎo)航系統(tǒng);張海(教授),主要從事導(dǎo)航技術(shù)領(lǐng)域和研究智能交通領(lǐng)域工作。
Marvell推出Marvell EZ-Connect MW302 IoT Starter Kit,該套件已獲得“亞馬遜Web服務(wù)(AWS)IoT”平臺(tái)支持,這款入門套件使設(shè)備能夠簡便地連接AWS服務(wù),以便企業(yè)存儲(chǔ)、處理、分析全球范圍內(nèi)的互連設(shè)備所產(chǎn)生的大量數(shù)據(jù),并根據(jù)分析結(jié)果采取行動(dòng)。Marvell開發(fā)這款A(yù)WS IoT支持的入門套件,是為了幫助開發(fā)人員面向各種IoT應(yīng)用簡便地設(shè)計(jì)智能設(shè)備,包括家庭自動(dòng)化、家庭安防、個(gè)人健康、智能家電、照明、工業(yè)互聯(lián)網(wǎng)以及更多應(yīng)用。AWS IoT支持的Marvell IoT入門套件采用了Marvell EZ-Connect MW300/302 Wi-Fi微控制器單芯片系統(tǒng)(SoC),已開始向全球供貨。
Marvell公司副總裁、無線與物聯(lián)網(wǎng)業(yè)務(wù)部總經(jīng)理Philip Poulidis表示:“我們與AWS的合作表明,Marvell為加速IoT行業(yè)發(fā)展,一直在致力于最佳解決方案的開發(fā)和創(chuàng)新?,F(xiàn)在,通過Marvell EZ-Connect MW302 IoT Starter Kit,我們的客戶可以利用AWS IoT平臺(tái),為消費(fèi)者和企業(yè)快速開發(fā)并上市新一輪具備開創(chuàng)性的創(chuàng)新產(chǎn)品和服務(wù)?!?/p>
Marvell與AWS合作開發(fā)了Marvell EZ-Connect MW302 IoT Starter Kit,以幫助開發(fā)人員快速產(chǎn)生原型產(chǎn)品,將其連接到AWS IoT平臺(tái),并在此基礎(chǔ)上為消費(fèi)者和企業(yè)開發(fā)應(yīng)用和服務(wù)。88MW300/302 Wi-Fi微控制器SoC是Marvell EZ-Connect系列的旗艦產(chǎn)品,已經(jīng)得到全球領(lǐng)先設(shè)備制造商的廣泛采用,用來開發(fā)了多種產(chǎn)品,包括家用電器、自動(dòng)調(diào)溫器、一氧化碳/煙霧檢測器、玩具、無線存儲(chǔ)系統(tǒng)、HomeKit配件以及其他智能互連產(chǎn)品。Marvell也與蘋果HomeKit等領(lǐng)先智能家庭平臺(tái)及相關(guān)廠商建立了合作關(guān)系。
Low-power 3D Wireless Mouse Based on MPU6050 and STM32L152
Tao Zhicheng,Zhang Hai
(School of Automation Science and Electrical Engineering,Beihang University,Beijing 100191,China)
Abstract:Based on the motion sensor chip MPU6050 and STM32L152,a low-power 3D mouse is designed,in which the power consumption of the motion detection and processing module is only 1.2 mA.Aiming at the power consumption,the contents of the mouse with low-power need are introduced in detail such as STM32L152 low-power operation,sleep pattern configuration as well as MPU6050 accelerometer single cycle,single axis accelerometer working mode configuration.And the accelerometer calibration and attitude angle calculation method based on the accelerometer are given,then the precise measurement of mouse gestures is achieved.
Key words:STM32L152;MPU6050;3D wireless mouse
收稿日期:(責(zé)任編輯:薛士然2015-06-13)
中圖分類號(hào):TP21
文獻(xiàn)標(biāo)識(shí)碼:A