三轴指南针 HMC5883L 的角度算法公式是怎样的?如何使用CC++编程序将数据处理并返回呢?

三轴指南针 HMC5883L 的角度算法公式是怎样的?如何使用CC++编程序将数据处理并返回呢?,第1张

HMC HMC_count()

{

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或传感器的配置没配好,先读那三个识别寄存器,能读出来再配置单次采集模式和连续采集模式,手册里说的够用了,一共就仨寄存器要你配。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11087740.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存