一、IIC協議
默認(出廠) HMC5883LL 7 位從機地址為0x3C 的寫入操作,或0x3D 的讀出操作。
要改變測量模式到連續測量模式,在通電時間后傳送三個字節:0x3C 0x02 0x00
將00寫入第二寄存器或模式寄存器以完成從單一模式切換到連續測量模式的設置。隨着數據速率在出廠默認的15Hz更新,在查詢HMC5883L數據寄存器進行新的測量之前,I2C主機允許產生一個67毫秒的延遲。要計算新數據時鍾,發送:0x3D,並記錄下的DXRA,DXRB,DZRA,DZRB,DYRA,DYRB設在寄存器3到8上的時鍾脈沖。HMC5883L,將自動重新點回寄存器3進行下一個0x3D的查詢。全部六個寄存器在新的數據寫入任何一個寄存器前必須正確讀取
(1)首先確定IIC從機地址,即IIC設備的地址查手冊知為 0x3C
(2)確定HMC5883_Init()初始化操作的配置。注意選擇連續測量模式測量數據才能夠實時變化
HMC5883_WriteReg(0x00,0x14); //配置寄存器A:輸出速率30HZ正常測量 HMC5883_WriteReg(0x02,0x00); //配置模式寄存器:連續測量模式
(3)讀數據
我們所需要的數據是X和Y,其中|是按位或,用來將X和Y的高位和低位加起來,先將MSB左移8位再與LSB按位或運算
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三軸數位羅盤對角度的計算公式。
angle= atan2(y,x) * (180 / 3.14159265) + 180;
其實就是這樣的:
角度 = atan2(y,x) * (180 / π) + 180,這里角度用0~360°表示
X軸的正方向為正北 ,即上述0~360角度的180°表示正北,360°表示正南