李佳駿 王洪源
(沈陽理工大學(xué)信息科學(xué)與工程學(xué)院 遼寧沈陽 110159)
基于Arduino的HMC5883L電子羅盤設(shè)計與實現(xiàn)
李佳駿 王洪源
(沈陽理工大學(xué)信息科學(xué)與工程學(xué)院 遼寧沈陽 110159)
電子羅盤是利用地磁場的方向來測量航向的一種導(dǎo)航工具,它能夠提供載體實時的航向和姿態(tài),被廣泛地應(yīng)用于航空、航海、車輛導(dǎo)航以及手機定位系統(tǒng)等領(lǐng)域。該設(shè)計以AVR單片機Arduino為控制核心,以HMC5883L為磁場測量元件。實現(xiàn)對載體的實時導(dǎo)航和方向控制。采用C語言編程控制HMC5883L的正常數(shù)據(jù)采集,Arduino實現(xiàn)對數(shù)據(jù)的處理。
Arduino;HMC5883L;電子羅盤
Arduino是一個基于AVR單片機的開放原始碼的軟硬件平臺,軟件開放源代碼、硬件電路公開、程序開發(fā)接口免費下載,是在國際上流行的快速電子設(shè)計制作的方案。由于Arduino的易用性與擴展性強,它的出現(xiàn)使得制作原型變得更快、更好、更簡單。磁阻傳感器HMC5883L通過I2C總線采集水平方向的磁場強度,并將輸出的數(shù)據(jù)通過Arduino傳到上位機上。
HMC5883L是一種采用表面貼裝技術(shù)的高集成模塊。內(nèi)部包括非常先進(jìn)的高分辨率傳感器[1]。可以使其控制在1~2°的誤差范圍內(nèi)。采用的IIC系列總線接口。HMC5883L的引腳示意圖如圖1所示。
圖1 HMC5883L引腳示意圖
HMC5883L有多種操作模式,主要分為連續(xù)、單次測量模式和閑置模式。
(1)連續(xù)測量模式
顧名思義,在此模式下,模塊會在指定的速率下連續(xù)的采集實時的數(shù)據(jù)并把它輸出并存儲到寄存器中。在連續(xù)測量模式下IIC總線可以被電路中的其他裝置啟用。
(2)單次測量模式
不同于連續(xù)測量模式,該模式下模塊測量一次數(shù)據(jù)并將其保存。它是一種供電模式,可以通過電源管理來控制。在該模式下寄存器可以保存數(shù)據(jù)并且I2C總線可被其他裝置啟用。
(3)閑置模式
在此模式下,裝置主要是通過總線接口訪問但是主要功能是不可以用的。和其他模式一樣,在空閑模式下I2C總線可被其他裝置啟用。
磁北方問就是地磁場在水平面上分量的方向。假設(shè)電子羅盤處于水平面上,要確定其相對于磁北的航向角口。由磁阻傳感器可以直接得出地磁場的水平分量HX、HY。
由于地磁南北極與地理南北極存在磁偏角,要得到準(zhǔn)確的南北極方向,必須用計算結(jié)果加上或減去所在地區(qū)磁偏角,得出前進(jìn)方向與地理北極的夾角,即真北方位角。
磁羅盤通過測量地磁場水平方向分量確定磁北極方向并推算出其他方向。當(dāng)羅盤水平放置時,傳感器坐標(biāo)系的X、Y軸在水平面內(nèi),X軸為前進(jìn)方向,Y軸垂直于X軸向右,Z軸沿重力方向向下,從磁北方向順時針到X軸的夾角即為方位角α。
實際應(yīng)用中,電子羅盤并不是始終水平,需要根據(jù)加速度傳感器測得的俯仰角和滾轉(zhuǎn)角,通過坐標(biāo)變換,將磁傳感器測得的磁場強度分量折算到水平方向,再計算方位角。俯仰角φ為羅盤縱軸與水平面之間的夾角,滾轉(zhuǎn)角θ為羅盤Z軸與過X軸的鉛垂面之間的夾角。當(dāng)羅盤處于非水平狀態(tài)時,測得重力加速度g在羅盤三軸方向的分量分別為Ax,Ay,Az,則根據(jù)坐標(biāo)關(guān)系可求得俯仰角和滾轉(zhuǎn)角為:
此時,磁傳感器測出的地磁場在羅盤三軸方向的分量為Hx,Hy,Hz,由坐標(biāo)關(guān)系得水平方向磁分量:
利用三角函數(shù)關(guān)系可求得方位角為:
本設(shè)計是以Arduino為平臺開發(fā)的,使用的是類C的Arduino語言,Arduino語言是以Setup()開頭,Loop()作為主體的一個程序架構(gòu)。本設(shè)計在Setup()函數(shù)中完成端口的初始化,即通過調(diào)用“I2Cdev.h”庫函數(shù)和“HMC5883L.h”庫函數(shù)來定義HMC5883L和Arduino的數(shù)據(jù)通信以及HMC5883L的數(shù)據(jù)采集。在應(yīng)用程序中對定義的端口進(jìn)行操作來控制顯示。
Loop函數(shù)是Arduino軟件項目的主體函數(shù),當(dāng)Setup函數(shù)執(zhí)行完成以后就進(jìn)入Loop函數(shù),該函數(shù)無限循環(huán),調(diào)用的應(yīng)用程序就放在該函數(shù)中運行。
應(yīng)用程序主要實現(xiàn)了驅(qū)動HMC5883L的數(shù)據(jù)采集與處理。
程序中所用到的主要基本顯示函數(shù)有:
本設(shè)計使用Arduino單片機作為控制核心,用數(shù)據(jù)采集程序控制數(shù)據(jù)采集,用HMC5883L來測量數(shù)據(jù)并輸出到上位機。由于電子羅盤廣泛應(yīng)用于各類導(dǎo)航場所,所以本設(shè)計的現(xiàn)實應(yīng)用性很強。此外,Arduino單片機簡單易學(xué)的這一特點會使得越來越多的人對Arduino單片機產(chǎn)生興趣,同時推動世界智能化的發(fā)展。
[1]宋麗君.基于MEMS器件的航向姿態(tài)測量系統(tǒng)的研究[D].西北工業(yè)大學(xué),2007.
TN966
A
1004-7344(2016)20-0270-01
2016-7-1