[11]ESP32+三轴磁罗盘HMC5883L移植与调试

article/2025/10/13 17:41:12

文章目录

    • 一、开发笔记
    • 二、初始化与工作流程
      • 1. 设置测量模式
      • 2. 设置采样率(默认15Hz)
      • 3. 设置测量范围
      • 4. 校准
      • 5. 开始测量
      • 6. 自测试操作(可选)
    • 三、寄存器表
      • 1. 00-配置寄存器A
      • 2. 01-配置寄存器B
      • 3. 02-模式寄存器
      • 4. 09-状态寄存器
      • 5. 10-12 Identification Register A/B/C
      • 6. 03-08 Data Output Register

ESPlane 项目更名为 ESP-Drone 现已公开代码仓库和文档
代码仓库:https://github.com/espressif/esp-drone
中文文档:https://docs.espressif.com/projects/espressif-esp-drone/zh_CN/latest/index.html


一、开发笔记

  1. 常用的地磁传感器主要有FreeScale(飞思卡尔)的MAG 系列和 Honeywell(霍尼韦尔)的HMC 系列。
  2. HMC5883 的工作电压在2.16V~3.6V 之间,典型为3.3V。可通过VDDIO 口来指定IO的工作电压(1.71v-VDD)。
  3. 设备默认地址0x3C for write operations, or 0x3D for read operations.
  4. 磁场范围广(+/-8Oe),测量误差1-2度,最大输出频率可达160Hz ,默认15hz
  5. HMC5883L仅有13个寄存器,其中03-08为数据输出寄存器(只读),09为状态寄存器(只读),标示是否有新数据等。00-02为配置和模式选择寄存器(读写)。10-12为识别寄存器,对应的ASCII字符分别是‘H’,‘4’,‘3’(见下表寄存器列表)
  6. 支持自动地址指针:例如访问过最后一个数据输出寄存器08后,地址指针自动指向03,不必再写入03地址,可以再次进行数据读取。
If (address pointer = 08) then address pointer = 03
Else if (address pointer >= 12) then address pointer = 0
Else (address pointer) = (address pointer) + 1

二、初始化与工作流程

1. 设置测量模式

默认为单次测量模式,可以通过更改02模式选择寄存器切换成连续测量模式

通电时间后传送三个字节:0x3C 0x02 0x00

2. 设置采样率(默认15Hz)

修改00-配置寄存器,配置数据输出寄存器的写入频率,和每次写入的采样次数。以下展示一种防止出错的写法:

#define HMC5883L_RA_CONFIG_A        0x00    //配置寄存器A 地址00#define HMC5883L_AVERAGING_1        0x00   //4种采样次数宏定义,CRA6-CRA5
#define HMC5883L_AVERAGING_2        0x01
#define HMC5883L_AVERAGING_4        0x02
#define HMC5883L_AVERAGING_8        0x03#define HMC5883L_RATE_0P75          0x00  //7种采样频率的宏定义 CRA4-CRA2
#define HMC5883L_RATE_1P5           0x01
#define HMC5883L_RATE_3             0x02
#define HMC5883L_RATE_7P5           0x03
#define HMC5883L_RATE_15            0x04
#define HMC5883L_RATE_30            0x05
#define HMC5883L_RATE_75            0x06#define HMC5883L_BIAS_NORMAL        0x00  //校准选项  CRA1-CRA0
#define HMC5883L_BIAS_POSITIVE      0x01
#define HMC5883L_BIAS_NEGATIVE      0x02

寄存器拼接:将以上宏定义设置的位,移动到对应的位置

#define HMC5883L_CRA_AVERAGE_BIT    6
#define HMC5883L_CRA_AVERAGE_LENGTH 2
#define HMC5883L_CRA_RATE_BIT       4
#define HMC5883L_CRA_RATE_LENGTH    3
#define HMC5883L_CRA_BIAS_BIT       1
#define HMC5883L_CRA_BIAS_LENGTH    2(HMC5883L_AVERAGING_8 << (HMC5883L_CRA_AVERAGE_BIT - HMC5883L_CRA_AVERAGE_LENGTH + 1)) |(HMC5883L_RATE_15 << (HMC5883L_CRA_RATE_BIT - HMC5883L_CRA_RATE_LENGTH + 1)) |(HMC5883L_BIAS_NORMAL << (HMC5883L_CRA_BIAS_BIT - HMC5883L_CRA_BIAS_LENGTH + 1))//配置信息:采样率15hz,每次结果来自8次采样,不进行校准

解读:采样次数选择为HMC5883L_AVERAGING_8,需要尾部对齐到 CRA5,已知头部的位置为CRA6(HMC5883L_CRA_AVERAGE_BIT),该选项暂居2bit(HMC5883L_CRA_AVERAGE_LENGTH)空间,可以推导出需要尾部移动6+1-2位 (HMC5883L_CRA_AVERAGE_BIT - HMC5883L_CRA_AVERAGE_LENGTH + 1)

3. 设置测量范围

默认增益1090,范围±1.3Ga。无人机项目选择增益为660,测量范围为±2.5Ga

4. 校准

应用层校准,保存初始值。

5. 开始测量

如果是连续测量模式,直接读取寄存器03-08值即可,需要进行拼接操作。如果选择单次模式,读取之后,需要将模式寄存器再次置位。

  i2cdevReadReg8(I2Cx, devAddr, HMC5883L_RA_DATAX_H, 6, buffer);if (mode == HMC5883L_MODE_SINGLE) i2cdevWriteByte(I2Cx, devAddr, HMC5883L_RA_MODE, HMC5883L_MODE_SINGLE << (HMC5883L_MODEREG_BIT - HMC5883L_MODEREG_LENGTH + 1));*x = (((int16_t)buffer[0]) << 8) | buffer[1];*y = (((int16_t)buffer[4]) << 8) | buffer[5];*z = (((int16_t)buffer[2]) << 8) | buffer[3];

6. 自测试操作(可选)

  1. 保存配置寄存器参数
  2. 设置增益为440 (HMC5883L_GAIN_440 // Gain value during self-test)
  3. 设置寄存器A,进行正向测试 HMC5883L_BIAS_POSITIVE
  4. 设置单次模式,读取正向测量值
  5. 设置寄存器B,进行负向测试 HMC5883L_BIAS_NEGATIVE
  6. 设置单次模式,读取反向测量值
  7. 依次比较正向和负方向测量值是否在正常范围内
#define HMC5883L_ST_GAIN            HMC5883L_GAIN_440  // Gain value during self-test
#define HMC5883L_ST_GAIN_NBR        440
#define HMC5883L_ST_ERROR           0.2                // Max error
#define HMC5883L_ST_DELAY_MS        250                // delay in millisec during self test */
#define HMC5883L_ST_X_NORM          (int32_t)(1.16 * HMC5883L_ST_GAIN_NBR)
#define HMC5883L_ST_X_MIN           (int32_t)(HMC5883L_ST_X_NORM - (HMC5883L_ST_X_NORM * HMC5883L_ST_ERROR))
#define HMC5883L_ST_X_MAX           (int32_t)(HMC5883L_ST_X_NORM + (HMC5883L_ST_X_NORM * HMC5883L_ST_ERROR))
#define HMC5883L_ST_Y_NORM          (int32_t)(1.16 * HMC5883L_ST_GAIN_NBR)
#define HMC5883L_ST_Y_MIN           (int32_t)(HMC5883L_ST_Y_NORM - (HMC5883L_ST_Y_NORM * HMC5883L_ST_ERROR))
#define HMC5883L_ST_Y_MAX           (int32_t)(HMC5883L_ST_Y_NORM + (HMC5883L_ST_Y_NORM * HMC5883L_ST_ERROR))
#define HMC5883L_ST_Z_NORM          (int32_t)(1.08 * HMC5883L_ST_GAIN_NBR)
#define HMC5883L_ST_Z_MIN           (int32_t)(HMC5883L_ST_Z_NORM - (HMC5883L_ST_Z_NORM * HMC5883L_ST_ERROR))
#define HMC5883L_ST_Z_MAX           (int32_t)(HMC5883L_ST_Z_NORM + (HMC5883L_ST_Z_NORM * HMC5883L_ST_ERROR))

三、寄存器表

地址HMC5883L寄存器名称访问权限
00配置寄存器 A读/写
01配置寄存器 B读/写
02模式寄存器读/写
03数据输出 X MSB 寄存器
04数据输出 X LSB 寄存器
05数据输出 Z MSB寄存器
06数据输出 Z LSB 寄存器
07数据输出 Y MSB 寄存器
08数据输出 Y LSB 寄存器
09状态寄存器
10识别寄存器A
11识别寄存器B
12识别寄存器C

1. 00-配置寄存器A

主要用于配置数据输出速率,每次输出结果的采样数。

配置寄存器A

数据输出速率

2. 01-配置寄存器B

用于配置传感器增益(灵敏度和测量范围)
配置寄存器B

增益设置

3. 02-模式寄存器

配置不同的工作模式:连续测量模式、单一测量模式、闲置模式。

模式寄存器

操作模式

4. 09-状态寄存器

LOCK:放置输出寄存器读取期间写入数据,在数据读取期间置位,数据不会在更新,读取完成后自动解锁。
RDY:Ready Bit,与DRDY引脚电平绑定,当数据写入数据寄存器完成,该位置位。开始写入时状态清零并保持250us。

状态寄存器

5. 10-12 Identification Register A/B/C

  1. 三个寄存器为只读寄存器
  2. 三个寄存器的数值,对应成ASCII码分别是‘H’ ‘4’ ‘3’

6. 03-08 Data Output Register

  1. 每个通道的输出对应两个8位寄存器A和B,大数端存放。
  2. 寄存器A存储MSB(高位数据),寄存器B存储LSB(低位数据)。
  3. 两个寄存器保存数据为补码形式,范围0xF800–0x07FF(-2048–2047 )

http://chatgpt.dhexx.cn/article/3ZXMm8P1.shtml

相关文章

STM32 HAL I2C读取HMC5883L磁偏角的实践

STM32 HAL I2C读取HMC5883L磁偏角的实践 源由成果代码头文件 G85HAL.h子文件 G85HAL.C主程序调用配置I2C引脚参考链接 源由 用传统的方式编写I2C总线数据读取&#xff0c;程序代码细碎&#xff0c;不好维护&#xff0c;移植性不好。CUBE MX配置方便灵活&#xff0c;程序架构好…

(二十六)树莓派3B+ 获取HMC5883L的磁场数据

模块介绍 霍尼韦尔 HMC5883L 是一种表面贴装的高集成模块&#xff0c;并带有数字接口的弱磁传感器芯片&#xff0c;应用于低成本罗盘和磁场检测领域。HMC5883L 包括最先进的高分辨率 HMC118X 系列磁阻传感器&#xff0c;并附带霍尼韦尔专利的集成电路包括放大器、自动消磁驱动…

HMC5883L校准

HMC5883L 磁力计校准 (2015-02-14 11:48:21) 转载▼ 标签&#xff1a; hmc5883 磁力计 校准 分类&#xff1a; 电子技术 这里针对 HMC5883L 磁力计 的校准&#xff0c;做一个简单讲解。欢迎交流&#xff0c;新浪长沙WalkAnt。 先看看这篇文章&#xff1a;http://blo…

STC 51单片机53——电子指南针HMC5883l

#include <REG51.H> #include <math.h> //Keil library #include <stdio.h> //Keil library #include <INTRINS.H> #define uchar unsigned char #define uint unsigned int //使用的端口&#xff0c;请按照以下接线 sbit …

HMC5883l磁力计数据读取

1.数据手册地址 2.芯片介绍 设备的7位地址为0x1e&#xff0c;读地址为0x3d&#xff0c;写地址为0x3c。如图 2.主要需要配置的寄存器有3个。分别是配置寄存器A&#xff08;0x00&#xff09;&#xff0c;配置寄存器B&#xff08;0x01&#xff09;和模式寄存器&#xff08;0x03&…

ESP8266-Arduino编程实例-HMC5883L磁场传感器

HMC5883L磁场传感器 1、HMC5883L介绍 霍尼韦尔 HMC5883L 是一款表面贴装、多芯片模块,专为低场磁场传感而设计,具有数字接口,适用于低成本罗盘和磁力计等应用。 HMC5883L 包括我们先进的高分辨率 HMC118X 系列磁阻传感器和一个 ASIC,该 ASIC 包含放大、自动消磁带驱动器、…

HMC5883L电子罗盘原理及应用,全网最详细~

寄存器配置部分 HMC5883L模块具有两个配置寄存器&#xff0c;配置寄存器A用来配置该装置设置的数据输出速率和测量配置&#xff1b;配置寄存器 B 设置装置的增益。 模式寄存器则是用来设定装置的操作模式&#xff0c;有连续测量模式&#xff0c;单一测量模式和闲置模式等。具…

HMC5883L磁力计使用

一、器件简介 HMC5883L是一款三轴磁场传感器&#xff0c;电子指南针罗盘模块。采用IIC通讯协议。 二、工作原理 传统罗盘用一根被磁化的磁针来感应地球磁场&#xff0c;地球磁场与磁针之间的磁力时磁针转动&#xff0c;直至磁针的两端分别指向地球的磁南极与磁北极。电子罗盘也…

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

HMC5883L电子罗盘/指南针实现&#xff0c;附带校准方法&#xff08;附STM32 源码&#xff09; 前言一、寄存器详解1.配置寄存器A2.配置寄存器B3.模式寄存器4.数据寄存器5.状态寄存器6.识别寄存器 二、使用步骤1.STM32CubeMX设置2.初始化3.读取原始数据 三、校准程序四、方位角计…

【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;主要…