STM32 磁场传感器HMC5883
一、IIC協(xié)議
默認(rèn)(出廠) HMC5883LL 7 位從機(jī)地址為0x3C 的寫入操作,或0x3D 的讀出操作。
要改變測量模式到連續(xù)測量模式,在通電時間后傳送三個字節(jié):0x3C 0x02 0x00
將00寫入第二寄存器或模式寄存器以完成從單一模式切換到連續(xù)測量模式的設(shè)置。隨著數(shù)據(jù)速率在出廠默認(rèn)的15Hz更新,在查詢HMC5883L數(shù)據(jù)寄存器進(jìn)行新的測量之前,I2C主機(jī)允許產(chǎn)生一個67毫秒的延遲。要計算新數(shù)據(jù)時鐘,發(fā)送:0x3D,并記錄下的DXRA,DXRB,DZRA,DZRB,DYRA,DYRB設(shè)在寄存器3到8上的時鐘脈沖。HMC5883L,將自動重新點(diǎn)回寄存器3進(jìn)行下一個0x3D的查詢。全部六個寄存器在新的數(shù)據(jù)寫入任何一個寄存器前必須正確讀取
?
(1)首先確定IIC從機(jī)地址,即IIC設(shè)備的地址查手冊知為 0x3C
(2)確定HMC5883_Init()初始化操作的配置。注意選擇連續(xù)測量模式測量數(shù)據(jù)才能夠?qū)崟r變化
HMC5883_WriteReg(0x00,0x14); //配置寄存器A:輸出速率30HZ正常測量 HMC5883_WriteReg(0x02,0x00); //配置模式寄存器:連續(xù)測量模式(3)讀數(shù)據(jù)
我們所需要的數(shù)據(jù)是X和Y,其中|是按位或,用來將X和Y的高位和低位加起來,先將MSB左移8位再與LSB按位或運(yùn)算
BUF[1]=Single_Read(HMC5883L_Addr,0x03); BUF[2]=Single_Read(HMC5883L_Addr,0x04); BUF[3]=Single_Read(HMC5883L_Addr,0x07); BUF[4]=Single_Read(HMC5883L_Addr,0x08); x=(BUF[1] << 8) | BUF[2]; y=(BUF[3] << 8) | BUF[4]; if(x>0x7fff)x-=0xffff; if(y>0x7fff)y-=0xffff; angle= atan2(y,x) * (180 / 3.14159265) + 180;?
θ?=?ATan(y?/?x)求出的θ取值范圍是[-PI/2, PI/2]。
θ?=?ATan2(y, x)求出的θ取值范圍是[-PI, PI]。
(二) 什么是磁偏角和方位公式
HMC5883三軸數(shù)位羅盤對角度的計算公式。
angle= atan2(y,x) * (180 / 3.14159265) + 180;?
其實(shí)就是這樣的:
角度 = atan2(y,x) * (180 / π) + 180,這里角度用0~360°表示
X軸的正方向?yàn)檎?,即上述0~360角度的180°表示正北,360°表示正南
轉(zhuǎn)載于:https://www.cnblogs.com/Kevin127/p/5368652.html
總結(jié)
以上是生活随笔為你收集整理的STM32 磁场传感器HMC5883的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是硬件工程师
- 下一篇: 毕业设计2- MPU6050传感器调试记