一、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°表示正南