今天我們來學(xué)習(xí)電子磁力計(jì)HMC5883L的使用。先介紹磁力計(jì)的基礎(chǔ)知識(shí),再給一個(gè)獲取磁力計(jì)數(shù)據(jù)的例子,最后講解HMC5883L磁力計(jì)的校準(zhǔn),以及一些使用中的經(jīng)驗(yàn)。
1)HMC5883L磁力計(jì)的基礎(chǔ)知識(shí)
磁力計(jì)是用來測量磁場強(qiáng)弱(也就是磁感應(yīng)強(qiáng)度)的,磁感應(yīng)強(qiáng)度是一個(gè)矢量,我們本篇使用的HMC5883L可以用來測量三個(gè)軸向的磁感應(yīng)強(qiáng)度。
磁感應(yīng)強(qiáng)度的標(biāo)準(zhǔn)單位是特斯拉(Tesla),也有用高斯(Gauss)來表示的,換算關(guān)系是1Tesla=10000Gauss。
當(dāng)垂直于磁場方向長度為1m的導(dǎo)體,通過1A電流時(shí),所受磁場的作用力的大小為1N,則該磁場的磁感應(yīng)強(qiáng)度為1T。
磁力計(jì)可以用來檢測地球磁場方向,也就是作為指南針使用,在航?;蛘咚妮S飛行器中,可以用來修正偏航角。
2)HMC5883L的數(shù)據(jù)獲取
HMC5883L器件比較小,而且引腳在芯片底下,焊接難度較大,一般建議使用已焊好的模塊。本文使用是硬件是STM32F103C8T6最小系統(tǒng)和如下的GY-273模塊:
硬件連接上,磁力計(jì)模塊上只連VCC、GND、SCL、SDA四根線,SCL連接到stm32的PB6,SDA連接到stm32的PB7,由于該模塊的電路板上已經(jīng)設(shè)計(jì)了上拉電阻,所以I2C接口的兩根線不用再外接上拉了。
如果想自己繪制電路板,也可以按如下圖紙?jiān)O(shè)計(jì):
在cubemx中創(chuàng)建工程,使用I2C1,此時(shí)可以看到PB6和PB7被占用為I2C引腳:
生成工程文件,在keil中打開,先修正cubemx的一個(gè)bug,把I2C時(shí)鐘使能語句提前:
對(duì)I2C代碼進(jìn)行一次封裝,使用HAL庫函數(shù)來實(shí)現(xiàn)底層的I2C操作,如下用HAL_I2C_Mem_Write和HAL_I2C_Mem_Read兩個(gè)函數(shù)實(shí)現(xiàn):
有了底層的I2C讀寫函數(shù),我們對(duì)HMC5883L的初始化和數(shù)據(jù)讀取時(shí)就方便多了。
安裝數(shù)據(jù)手冊的寄存器說明,初始化時(shí),只需要設(shè)置三個(gè)寄存器就行:
然后就可以讀取數(shù)據(jù)了,三個(gè)軸向的磁感應(yīng)強(qiáng)度數(shù)據(jù),在寄存器03開始的連續(xù)6個(gè)字節(jié)中,讀取后,存放在BUF數(shù)組里:
在主函數(shù)中,先調(diào)用初始化函數(shù),再循環(huán)讀取數(shù)據(jù)就行了:
這里將x、y、z三個(gè)方向的原始數(shù)據(jù)都打印出來的,并且計(jì)算了x、y方向的反正切角度,如果傳感器是水平放置的,x、y方向測量的就是水平方向的磁感應(yīng)強(qiáng)度,周圍沒有磁場干擾的話,它們的反正切角度就能指示出地磁場的方向。
上圖中atan2(y,x)計(jì)算的是y/x的反正切,得到的角度是x軸與地磁北向的夾角。
運(yùn)行結(jié)果如下圖:
3)HMC5883L的校準(zhǔn)
上面我們已經(jīng)成功獲取了HMC5883L的數(shù)據(jù),但是,一般來說都是不太準(zhǔn)確的。這是因?yàn)閭鞲衅鞒跏加姓`差,并且周圍可能有鐵制品的器件也會(huì)干擾磁場的方向。
如下圖所示,只考慮X、Y兩個(gè)方向,傳感器旋轉(zhuǎn)一周時(shí),測量到的地球磁場方向應(yīng)該如(a)所示是一個(gè)正圓形,但是由于受到各種影響,實(shí)際可能是一個(gè)中心偏離原點(diǎn)的橢圓形:
因此,數(shù)據(jù)需要校準(zhǔn)之后才能有比較好的效果。校準(zhǔn)通常有幾個(gè)方面的工作,一是校準(zhǔn)磁場的強(qiáng)度,二是校準(zhǔn)磁場的方向。
a)磁場強(qiáng)度校準(zhǔn)
在HMC5883L的數(shù)據(jù)手冊里有自檢和校準(zhǔn)的方法。
簡單來說,自檢時(shí),可以設(shè)置寄存器Configuration Register A的MS1和MS0這兩位,使得芯片內(nèi)部產(chǎn)生一個(gè)等效于約1.1高斯的磁感應(yīng)強(qiáng)度加在三個(gè)方向上(實(shí)際疊加的是X、Y方向1.16Ga、Z方向1.08Ga),此時(shí)設(shè)置為單次轉(zhuǎn)換模式,芯片會(huì)自動(dòng)先測量一次外部磁感應(yīng)強(qiáng)度,再測量一次疊加1.1高斯后的磁感應(yīng)強(qiáng)度,把兩次的值相減之后存放再輸出寄存器中。如果增益是默認(rèn)的,則X、Y軸的原始值應(yīng)該在951附近,Z軸應(yīng)該在886附近。(本人手頭的這一只,測得的值在1120附近,基本算正常吧)。
校準(zhǔn)時(shí),就是把自檢時(shí)測到的X、Y、Z三個(gè)方向的值,與內(nèi)部疊加的磁感應(yīng)強(qiáng)度(1.16Ga和1.08Ga)相除,算出一個(gè)比值,再用這個(gè)比值來反算測到的外部磁感應(yīng)強(qiáng)度。
一般進(jìn)行完這一步,可以一定程度地糾正(c)圖中的類似變成橢圓形的誤差。
b)磁場方向校準(zhǔn)
當(dāng)電路板上或者周圍有鐵質(zhì)品或磁性物品時(shí),會(huì)在外部疊加一個(gè)磁場,使得圓心偏離原點(diǎn),如果把原始量用于計(jì)算地磁北向,就會(huì)引起很大誤差。這時(shí)需要用另一種方法校準(zhǔn)。
將傳感器Z軸向上,勻速旋轉(zhuǎn)一周,收集X、Y軸的數(shù)據(jù);再X或Y軸向上,Z軸水平,勻速旋轉(zhuǎn)一周,收集Z軸數(shù)據(jù)。將將讀取到的各軸數(shù)據(jù)的最大值加上最小值除以2,就得到一個(gè)近似的各軸的原點(diǎn)偏移值,如下:
Xoffset=(Xmax+Xmin)/2
Yoffset=(Ymax+Ymin)/2
Zoffset=(Zmax+Zmin)/2
使用時(shí),原始值減去偏移值,就是方向校準(zhǔn)后的值:
X=X原始值-Xoffset
Y=Y原始值-Yoffset
Z=Z原始值-Zoffset
經(jīng)過上面兩步簡單的校準(zhǔn)后,磁力計(jì)的輸出值就準(zhǔn)確得多了。
4)一些使用經(jīng)驗(yàn)
a)磁力計(jì)會(huì)受到周圍磁鐵或鐵制品的影響,由于很多電子元器件(如插針、電阻、電容、芯片)內(nèi)部都含有鐵制品,印制板上的器件也會(huì)影響磁力計(jì)的數(shù)據(jù),需要注意盡量遠(yuǎn)離;
b)HMC5883L芯片是霍尼韋爾生產(chǎn)的磁力計(jì),同時(shí)也有國產(chǎn)的QMC5883L可以替換,引腳定義相同硬件上可以通用,但是寄存器不同,軟件上需要進(jìn)行相應(yīng)的更改;
c)計(jì)算地磁場來找北向時(shí),需要注意,地理的北向與地磁北向不是完全重合的,它們之間的夾角稱為“地磁偏角”,與各地的地理位置有關(guān),在用反正切算出地磁北向角時(shí),再加上當(dāng)?shù)氐牡卮牌沁M(jìn)行修正即可。地磁偏角需要查資料獲得,如北京地區(qū)的地磁偏角為5°50’w,也就是正北方向在地磁北向再往西偏5°50‘,使用atan2(y,x)計(jì)算出來角度后要再加上5°50‘就是相對(duì)于地理正北向的角度了;
d)只有在水平放置時(shí),使用atan2(y,x)計(jì)算出來的角度是地磁北向的角度,如果傳感器用在四軸飛行器或其他不水平的物體上,還要考慮俯仰、滾轉(zhuǎn)的角度影響,方法如下:
使用加速計(jì)進(jìn)行傾角補(bǔ)償,先要計(jì)算出橫滾角(Φ)Roll、以及俯仰角(θ)Pitch,再計(jì)算X、Y方向的磁感應(yīng)強(qiáng)度:
Xh=X*cos(θ)+Y*sin(Φ)*sin(θ)-Z*cos(Φ)*sin(θ)
Yh=Y*cos(Φ)+Z*sin(Φ)
再由Xh和Yh的反正切計(jì)算偏航角(ψ)yaw。
考慮到X、Y組成的坐標(biāo)軸四個(gè)象限,可以變成如下公式:
當(dāng)(Xh<0)時(shí),ψ=180-[arctan(Yh/Xh)*180/π]
當(dāng)(Xh>0,Yh<0)時(shí),ψ=-[arctan(Yh/Xh)*180/π]
當(dāng)(Xh>0,Yh>0)時(shí),ψ=360-arctan(Yh/Xh)*180/π
當(dāng)(Xh=0,Yh<0)時(shí),ψ=90
當(dāng)(Xh=0,Yh>0),ψ=270
好了,本節(jié)關(guān)于HMC5883L磁力計(jì)的使用就講到這里了。文章來源:http://www.zghlxwxcb.cn/news/detail-785245.html
如果覺得有用,可以關(guān)注我的微 信 公眾號(hào)“小白白學(xué)電子”,可以找到所有源碼和參考資料:文章來源地址http://www.zghlxwxcb.cn/news/detail-785245.html
到了這里,關(guān)于【STM32+cubemx】0029 HAL庫開發(fā):HMC5883L磁力計(jì)的應(yīng)用(電子指南針)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!