HMC5883L电子罗盘/指南针实现,附带校准方法(附STM32 源码)

article/2025/10/13 19:48:05

HMC5883L电子罗盘/指南针实现,附带校准方法(附STM32 源码)

  • 前言
  • 一、寄存器详解
    • 1.配置寄存器A
    • 2.配置寄存器B
    • 3.模式寄存器
    • 4.数据寄存器
    • 5.状态寄存器
    • 6.识别寄存器
  • 二、使用步骤
    • 1.STM32CubeMX设置
    • 2.初始化
    • 3.读取原始数据
  • 三、校准程序
  • 四、方位角计算
  • 五、测试结果
  • 六、总结
  • 七、获取工程源码


前言

HMC5883L是一款高集成的弱磁传感器芯片,带有能使罗盘精度控制在1°-2°的模数转换器。其灵敏度较高,开发难度不高。本文内容是将HMC5883L的XY两轴数据转换成指南针方位角,仅在水平面上使用。


一、寄存器详解

此款芯片的寄存器比较少,使用起来很简单。下面来逐一分析各个寄存器功能。
在这里插入图片描述

1.配置寄存器A

在这里插入图片描述

  • CRA7 :清除后才能使用;
  • CRA6 - CRA5 : 采样平均数,默认8次;
  • CRA4 - CRA2 : 输出速率,在连续测量模式下使用,默认15Hz;
  • CRA1 - CRA0 : 设置XYZ轴正偏压或负偏压,默认00即可。

2.配置寄存器B

在这里插入图片描述

  • CRB7 - CRB5:设置增益位,即多大的值为1高斯,默认1090/高斯,见下图;
  • CRB4 - CRB0:清零
    在这里插入图片描述

3.模式寄存器

在这里插入图片描述

4.数据寄存器

每个轴的数据共16位,存储在两个寄存器(高八位MSB,第八位LSB)。只有把所有寄存器都读取完后,才会清除RDY位和DRDY信号。

5.状态寄存器

在这里插入图片描述

6.识别寄存器

用来识别装置。

二、使用步骤

1.STM32CubeMX设置

使用一个I2C、UART和一个IO输入,如下图。

在这里插入图片描述

2.初始化

根据以上寄存器设置进行初始化。

void hmc5883l_init(){uint8_t data = 0x70;HAL_I2C_Mem_Write(&hi2c1,HMC5883L_ADDER,CONFIGURATION_A, 1, &data, 1,1000); //配置寄存器Adata = 0x20;HAL_I2C_Mem_Write(&hi2c1,HMC5883L_ADDER,CONFIGURATION_B, 1, &data, 1,1000); //配置寄存器Bdata = 0x0;HAL_I2C_Mem_Write(&hi2c1,HMC5883L_ADDER,HMC5883L_MODE, 1, &data, 1,1000); //配置模式寄存器,连续模式}

3.读取原始数据

void hmc5883l_rawread(float *GaX, float *GaY){uint8_t data[6];HAL_I2C_Mem_Read(&hi2c1,HMC5883L_ADDER, 0x03,1,data,6 , 1000); //连续读取int16_t dxra,dyra;dxra = (data[0] << 8) | data[1]; *GaX = (float)dxra /1090;dyra = (data[4] << 8) | data[5]; *GaY = (float)dyra /1090 ;/*	dzra = (data[2] << 8) | data[3];	float GaZ = (float)dzra /1090 ;		*/}

经过旋转一周测试后,发现X轴的测量值范围是 -0.34 ~ 0.30高斯,Y轴的范围是 -0.6 ~0.12 高斯

三、校准程序

通过以上发现传感器测量的数据并不准确,原因是磁阻传感器属于比较精密的器件,在生产时会产生误差,所以需要进行校准。因为最后转换的是角度值,所以将原始数据进行归一化处理,X,Y轴的测量值都转化为 -1~1的范围内。具体步骤如下:上电后大约20s内将传感器缓慢旋转几周,测得最大值和最小值,然后获得校准值。

		uint8_t i=0 ;float GaX,GaY,GaXmax=0,GaXmin=0,GaYmax=0,GaYmin=0;while(i != 100){hmc5883l_rawread(&GaX, &GaY);GaXmax = GaXmax < GaX? GaX:GaXmax;GaXmin = GaXmin > GaX? GaX:GaXmin;GaYmax = GaYmax < GaY? GaY:GaYmax;GaYmin = GaYmin > GaY? GaY:GaYmin;HAL_Delay(200);i++;}*Xoffest = (GaXmax+GaXmin)/2;*Yoffest = (GaYmax+GaYmin)/2;*Kx = 2/(GaXmax-GaXmin);*Ky = 2/(GaXmax-GaXmin);

最后由下列式子得到 -1~1 范围内的最终数值

 GaX = (rawGaX - Xoffest) * Kx;GaY = (rawGaY - Yoffest) * Ky;

经过校准后输出,X的取值范围是 -0.98 ~ 1.02 , Y轴取值范围是-1.08 ~ 1.12。(受环境磁场和测量偏离水平面的误差影响),对于特定一个传感器,可在没有环境磁场干扰情况下测定校准数值,直接应用,不必每次上电后进行校准。

四、方位角计算

方位角的计算公式如下:
在这里插入图片描述
但由于测试后发现与手机上的指南针不相符,可能是传感器镜像方位的原因,于是自行修改了计算方法,如下(方法可能不准确,仅供参考):

			if((GaX > 0)&&(GaY > 0)) Magangle = atan(GaY/GaX)*57;else if((GaX > 0)&&(GaY < 0)) Magangle = 360+atan(GaY/GaX)*57;else if((GaX == 0)&&(GaY > 0)) Magangle = 90;else if((GaX == 0)&&(GaY < 0)) Magangle = 270;else if(GaX < 0) Magangle = 180+atan(GaY/GaX)*57;

五、测试结果

用手机指南针软件和模块X轴对准同一个方向,随机测取几个数,串口输出和手机截图如下:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

六、总结

总的来说,精确度还是很高的。但是可能是用的是模块原因,测量的时候很飘,稍微一动测量结果就相差很多,并且受环境磁场影响大(电脑手机电器之类的),在PCB板或者面包板上可能有所改善。另外,DRDY引脚中断信号和GPIO未用到,可根据需要使用。

七、获取工程源码

关注下方公众号,回复 “HMC5883L” 获取源码;若有疑问,请在公众号回复“交流群”,进群一起讨论分享!
在这里插入图片描述


参考资料:
  • HMC5883L 磁力计校准 http://blog.sina.com.cn/s/blog_402c071e0102v8ie.html

http://chatgpt.dhexx.cn/article/FHLYHcLC.shtml

相关文章

【STM32+cubemx】0029 HAL库开发:HMC5883L磁力计的应用(电子指南针)

今天我们来学习电子磁力计HMC5883L的使用。先介绍磁力计的基础知识&#xff0c;再给一个获取磁力计数据的例子&#xff0c;最后讲解HMC5883L磁力计的校准&#xff0c;以及一些使用中的经验。 1&#xff09;HMC5883L磁力计的基础知识 磁力计是用来测量磁场强弱&#xff08;也就…

Web 应用防火墙怎样添加域名

Web 应用防火墙是一款基于 AI 的一站式 Web 业务运营风险防护方案。沉淀了安全大数据检测能力和多年自营业务 Web 安全防护经验。通过 Web 入侵防护、0day 漏洞补丁修复、恶意访问惩罚、云备份防篡改等多维度防御策略全面防护网站的系统及业务安全。 包括四个步骤&#xff1a; …

WEB应用防火墙(WAF启明设备)

1.应用背景 网络安全形式严峻 新型0day漏洞频发 等保2.0 热点需求 行业规范 安全事件 2.产品介绍 1.工作原理 a) 桥模式串行部署于Web服务器前端&#xff0c;对应用层攻击行为进行精确识别和实时阻断&#xff0c;主动而有效的保护 Web应用不被攻击及篡改 b) 单臂代理模…

阿里云服务器接入云盾Web应用防火墙教学

什么是云盾Web应用防火墙&#xff1f; 云盾Web应用防火墙(Web Application Firewall, 简称 WAF)基于云安全大数据能力实现&#xff0c;通过防御SQL注入、XSS跨站脚本、常见Web服务器插件漏洞、木马上传、非授权核心资源访问等OWASP常见攻击&#xff0c;过滤海量恶意CC攻击&…

Web应用防火墙和普通防火墙的区别与联系

随着互联网的不断发展&#xff0c;Web应用程序的安全问题日益凸显&#xff0c;各种安全漏洞和攻击手段层出不穷。Web应用防火墙(WAF)作为保障Web应用程序安全的一种有效手段&#xff0c;正在被越来越多的企业所采用。那么&#xff0c;Web应用防火墙到底有什么用呢?web应用防火…

腾某云web应用防火墙-被ban后小技巧绕过

长这样式de 修改xff即可正常访问 &#xff08;X-Forwarded-For Header&#xff09;浏览器插件

WEB应用防火墙安全技术要求与测试评价方法

信息安全技术 WEB应用防火墙安全技术要求与测试评价方法 范围 本标准规定了WEB应用防火墙的安全功能要求、自身安全保护要求、性能要求和安全保证要求&#xff0c;并提供了相应的测试评价方法。 本标准适用于WEB应用防火墙的设计、生产、检测及采购。 规范性引用文件 下列…

开源免费的WEB应用防火墙

开源免费的WEB应用防火墙 排名不分前后 资源宝分享&#xff1a;www.httple.net 南墙waf测试linux7.6和宝塔不兼容&#xff0c;会用使用docker版waf隔离开来https://waf.uusec.com/waf-docker-community.v2.1.5.tgz 1、南墙WEB应用防火墙&#xff08;简称&#xff1a;&#x…

Saas型网站域名如何接入腾讯云的web应用防火墙?

步骤 1&#xff1a;域名添加 使用 Web 应用防火墙&#xff08;WAF&#xff09;防护您的 Web 业务前&#xff0c;需要先将防护的网站接入到 Web 应用防火墙。未完成接入前&#xff0c;您的 Web 应用防火墙防护将无法生效。本文档将指导您如何在 SaaS 型 WAF 中接入域名。 登录…

云上守护者—Web应用防火墙

说到防火墙&#xff0c;大家既熟悉又陌生。熟悉&#xff0c;是因为我们日常或多或少听过见过&#xff0c;例如Window自带防火墙。陌生&#xff0c;是因为我们不知道如何定义防火墙。 什么是防火墙&#xff1f; 应用防火墙对应在现实生活中&#xff0c;像公司大门的保安大爷&am…

web应用防火墙与防火墙的差别

在蔚可云众多安全产品中&#xff0c;有一个名为“web应用防火墙”的产品&#xff0c;很容易引起普通开发者的疑惑&#xff0c;web应用防火墙和传统防火墙到底有什么差别&#xff0c;以至于我们还需要购买这一种产品&#xff1f; 传统防火墙 传统防火墙的功能&#xff0c;主要…

Web 应用程序防火墙 (WAF) 相关知识介绍

Web应用程序防火墙 (WAF) 如何工作&#xff1f; Web应用防护系统&#xff08;也称为&#xff1a;网站应用级入侵防御系统。英文&#xff1a;Web Application Firewall&#xff0c;简称&#xff1a;WAF&#xff09;。利用国际上公认的一种说法&#xff1a;Web应用防火墙是通过执…

什么是Web应用程序防火墙?

Web应用程序防火墙/WAF简介 Web应用程序防火墙&#xff08;WAF&#xff09;为来自恶意安全攻击&#xff08;例如SQL注入&#xff0c;跨站点脚本&#xff08;XSS&#xff09;&#xff09;的在线服务提供Web安全。 WAF安全性可以检测并过滤掉可能会使在线应用程序降级&#xff0…

如何不安装ORACLE就可以连接服务器端Oracle

在2021年10月7日开始我的本科实习的第一天&#xff0c;之前自己写demo和练习技术的时候&#xff0c;数据库用的都是MySQL&#xff0c;可视化工具用的都是navicat&#xff0c;来到了实习单位后&#xff0c;发现公司用的是Oracle数据库&#xff0c;工具只能使用plsql 不给使用na…

sqlserver链接oracle服务器

1.sqlserver链接orcacle数据库前提条件&#xff1a; sqlserver数据库服务器上sqlserver服务端的版本与oracle客户端的版本要统一 都是64为或者都是32位 如果sqlserver数据库服务器的版本是32位的&#xff0c;则需要在sqlserver数据库服务器上安装32位的oracle客户端 如果sqlser…

创建sql server 到Oracle的链接服务器

需要一个软件ODAC112040Xcopy_64bit 我连接的oracle是11g r2 sqlserver 是 2016 软件下载 https://pan.baidu.com/s/1OpYmpReEJcPg4wNESWy61Q 或者&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1uXpWP-QmRzEpaDnlwBuHbg 提取码&#xff1a;nazl 注意:所有操…

Oracle服务器和客户端的安装(图解)

处于网络覆盖的时代&#xff0c; 数据库 对于现代社会和行业已经不是什么新鲜事物&#xff0c;它已经被运用到了社会生产和生活的各个领域。作于一款高性能、高生产率的 数据库管理 应用平台&#xff0c;Oracle9i在数据库管理、数据完整性检查、数据库查询性能、数据 安全 性方…

oracle客户端连接oracle服务器

oracle客户端连接oracle服务器 1、配置监听器 2 启动监听器 启动成功&#xff01; 3查看当前数据库local_listener的值 发现该参数没有值&#xff0c;没有设置动态注册的监听器信息 4&#xff0c;查看刚配置监听器listner1状态信息 没有任何服务注册 5 动态注册orcl数据库…

oracle服务端安装

oracle服务端安装 1、下载oracle服务端&#xff0c;其安装包包含两个&#xff1a; 2、下载完成后&#xff0c;将2个压缩文件一起选中&#xff0c;鼠标右键—>解压文件&#xff0c;如下图所示。两个压缩文件解压到同一目录下。需要注意的是&#xff0c;路径名称中最好不要出…

以sys用户远程登录oracle服务器

说来还是因为arcgis的问题&#xff0c;因为安装arcgis sde的时候&#xff0c;需要以sys用户身份来创建sde所需要表空间和用户。当sde和oracle安装在同一台服务器的时候&#xff0c;可以直接使用sys用户登录本机oracle。但是当oracle和sde不在同一台服务器上时就不能那么好做了&…