{
HMC count
int x,y,z
double angle
Multiple_Read_HMC5883() //连续读出数据,存储在BUF中
x=HMC_BUF[0] << 8 | HMC_BUF[1] //Combine MSB and LSB of X Data output register
z=HMC_BUF[2] << 8 | HMC_BUF[3] //Combine MSB and LSB of Z Data output register
y=HMC_BUF[4] << 8 | HMC_BUF[5] //Combine MSB and LSB of Y Data output register
angle= atan2((double)y,(double)x) * (180 / 3.14159265) + 180 // angle in degrees
count.x=x
count.y=y
count.z=z
count.angle=angle
return count
}
不考虑外部干扰,从芯片自身来分析:从芯片读出的数据是磁场向量三个轴向的分量。由内部三个轴向传感器测得。
理想情况下,磁场一定,那么芯片输出的向量数据集是落在一个球面上的。
由于传感器制造时有误差,每个轴向感应磁场的线性度略有不同,对同一个强度,可能三个传感器给出的结果也不一样。导致球面变椭,偏离球心。
并且三个轴向传感器,正交坐标也可能存在误差。
有这些情况需存在,所以我们在使用它之前,首先要采集数据,进行分析,得出校正参数,修正从芯片读出的数据。
打不开MDK5的程序,就不看了。我分享的帖子里有MPU6050+HMC5883采集的,你下载下来把5883的摘出来就好。 一般是0都是I2C或传感器的配置没配好,先读那三个识别寄存器,能读出来再配置单次采集模式和连续采集模式,手册里说的够用了,一共就仨寄存器要你配。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)