跳到主要内容

QMC5883三轴地磁传感器

一、本例程实现功能

通过QMC5883三轴地磁传感器模块测量XYZ三轴的地磁强度以及航向角(Azimuth),并通过print()函数在电脑串口调试终端打印输出。

二、基本概念

1. 地磁传感器

theory0

2. 地磁场

地磁场是指地球内部存在的天然磁性现象。地球可视为一个磁偶极(magnetic dipole),其中一极位在地理北极附近,另一极位在地理南极附近。 地磁场强度大约是0.5-0.6高斯 (Gauss),在QMC5883传感器中配置地磁场的测量范围为2G或者8G就是这里说的2Gauss或8Gauss。

三、 传感器参数配置描述

QMC5883传感器我们已将其默认配置为ODR=100Hz(每秒钟最多输出100组测量结果), OSR=512(抗干扰最强,但功耗稍高一些)。

另外我们可以在LIB_QMC5883Config()函数中结合您的需求配置传感器在XYZ轴三个方向的测量范围,分别为-2G ~ 2G或-8G ~ 8G。不管选两种配置中的哪一种,传感器X Y Z轴三个方向的输出值的满量程皆为-32768 ~ 32767(即当您获取到传感器的XYZ轴测量值时,需要根据您配置的是2G还是8G的满量程,来进行一个简单的系数换算即可)。配置为2G范围时精确度和灵敏度更高,配置为8G范围时范围更广但精度稍差。

四、接线图

layout

五、材料清单

名称推荐购买链接(或者您可以自己制作)模块/芯片硬件资料下载
QMC5883L传感器模块QMC5883L购买链接(淘宝上有很多店卖一样的模块,价格不一,请自行逛淘宝选购相同的即可)下载地址
声明:这里推荐的购买链接仅供参考,您完全可以去其他商家或渠道购买,只要功能相似即可,如果需要更低的成本建议自己开发硬件模块或定制。

注意:一定要买QMC5883模块,不要买成HMC5883,二者不兼容

product0

六、完整代码

--配置USB以虚拟串口模式工作,这样调用print()函数就会在电脑串口终端打印输出
LIB_UsbConfig("CDC")
--设置QMC5883三轴磁场强度传感器占用SCL0和SDA0引脚,并设置三轴磁场的测量范围为-2G ~ +2G
LIB_QMC5883Config("IIC0", "RNG_2G")
--开始大循环
while(GC(1) == true)
do
--每隔0.2秒查询传感器是否出数
LIB_DelayMs(200)
flag, X, Y, Z, azimuth = LIB_QMC5883GetResult()
if flag == 1 then
--输出X Y Z三轴的原始值以及航向角,航向角去掉小数点部分
print(string.format("X:%d,Y:%d,Z:%d,Azimuth:%.0f\r\n", X, Y, Z, azimuth))
end
end
如果感兴趣,上面代码中出现的LIB开头的库函数可以在 API文档 中通过Ctrl+F查询。

七、代码运行结果

电脑串口调试终端上显示的XYZ三轴的原始值以及航向角如下图:

result0

result1