文章目录

  • 一、开发笔记
  • 二、初始化与工作流程
    • 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

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

2. 01-配置寄存器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 )

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

  1. GRBL三轴+脱机运行移植STM32F103C8T6 GRBL_V1.1f三轴移植到STM32F103C8T6,并添加脱机控制,使用OLED屏和旋转编码器控制,联机脱机都可使用

    主页全部资料打包!GRBL三轴+脱机运行移植STM32F103C8T6 GRBL_V1.1f三轴移植到STM32F103C8T6,并添加脱机控制,使用OLED屏和旋转编码器控制,联机脱机都可使用. 只 ...

  2. 全球与中国三轴磁力计市场深度研究分析报告

    [报告篇幅]:88 [报告图表数]:130 [报告出版时间]:2022年2月 报告摘要 2021年全球三轴磁力计市场销售额达到了 亿美元,预计2028年将达到 亿美元,年复合增长率(CAGR)为 %( ...

  3. ESP32设备驱动-ADXL345三轴加速计驱动

    ADXL345三轴加速计驱动 文章目录 ADXL345三轴加速计驱动 1.ADXL345介绍 2.硬件准备 3.软件准备 4.驱动实现 1.ADXL345介绍 ADXL345 是一款小型.薄型.低功耗 ...

  4. 使用ESP32驱动QMA7981读取三轴加速度(带例程)

    使用ESP32驱动QMA7981读取三轴加速度(带例程) 1.简介 ESP32是国产乐鑫公司生产的32位单片机,双核240MHz,带有蓝牙和wifi功能,本例中使用的是ESP32-S模组.QMA798 ...

  5. ESP32设备驱动-L3GD20三轴角速率传感器驱动

    L3GD20三轴角速率传感器驱动 1.L3GD20介绍 L3GD20 是一款低功耗三轴角速率传感器. 它包括一个传感元件和一个 I2C 接口,能够通过数字接口 (I2C/SPI) 向外部世界提供测量的 ...

  6. 为Exynos4412移植U-Boot-2017.11(三)——DM9000A驱动

    系列文章 为Exynos4412移植U-Boot-2017.11的步骤(一) 为Exynos4412移植U-Boot-2017.11(二)--SD卡.eMMC驱动 为Exynos4412移植U-Boo ...

  7. sbus storm32bgc_STorM32 BGC三轴增稳云台驱动下载

    STorM32 BGC是一种硬件开源.软件闭源的三轴稳定云台控制项目.云台在我们生活中是越来越常见,我们手机拍照用的手持云台,无人机上挂载摄像机的机载隔振云台.我们在电影<流浪地球>里面那 ...

  8. 【正点原子Linux连载】第三十三章 U-Boot移植 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0

    1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...

  9. 【雕爷学编程】Arduino动手做(147)---QMC5883L三轴罗盘模块

    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的.鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为 ...

  10. 对于STM32F103三轴机械臂控制器进行基本功能测试-关节角度读取

    ➤01 机械臂调试 1.简介 对 基于STM32对于三轴机械臂控制器设计 中对应的控制电路读取肩部和肘部两个 角度编码器 ST-3806-15-RS 数据进行调试. 2.接口电路1 ▲ 角度读取的相关 ...

最新文章

  1. java import class_@class vs. #import
  2. 数字化专业人才短缺,企业亟待组建培养体系
  3. 干趴面试官系列 | 请你简述一下Kafka中的分区分配
  4. [Java基础]标准输入输出流
  5. 会议交流 | IJCKG 2021:Keynotes released!欢迎注册参会
  6. 用python写web网页_从零开始,使用python快速开发web站点(1) | 学步园
  7. Flask学习-Flask app接受第一个HTTP请求
  8. win2008r2 or centos6 硬盘挂载
  9. router vue 回到顶部_小猿圈HTML5学习之基于iview的router常用控制方式
  10. Javascript s04
  11. 2.tcpdump(2)
  12. The Things Network LoRaWAN Stack V3 学习笔记 2.6 新增一个 CN470 子频段
  13. 最佳阵容问题matlab,若在NBA组一队小球打法最佳阵容,哪5人在一起最无解?
  14. Excel单元格显示数据与实际数据不一致的设置与清除
  15. OPNsense - 多功能高可靠易使用的防火墙(一)
  16. LeetCode—面试题:移除重复节点(哈希集合)
  17. 计算机网络ap参数,酒店计算机网络(含无线AP)系统主要技术参数.docx
  18. C语言10道入门题集
  19. 关于报错django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you hav
  20. EXCEL 单元格内换行内容改成两行单元格内容

热门文章

  1. fileman命令的帮助+?
  2. AspNetPager常用属性及一些样式
  3. html制作dnf,DNF教你如何不花一分钱制作90顶级史诗
  4. 南京大学俞扬博士:强化学习前沿(下)
  5. northwind数据库mysql下载_SQLEXPRESS 2012 安装NorthWind和Pub数据库
  6. 色相、饱和度、明度定义
  7. SC-02-04-外包软件开发SOW工作说明书
  8. MineCraft建模工具
  9. pdfFactory2020最新7许可密钥-激活码版虚拟打印软件 中文特别授权版下载
  10. 全体是合同,多学学吧。当前少吃亏。