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

article/2025/10/13 17:33:48

模块介绍

霍尼韦尔 HMC5883L 是一种表面贴装的高集成模块,并带有数字接口的弱磁传感器芯片,应用于低成本罗盘和磁场检测领域。HMC5883L 包括最先进的高分辨率 HMC118X 系列磁阻传感器,并附带霍尼韦尔专利的集成电路包括放大器、自动消磁驱动器、偏差校准、能使罗盘精度控制在 1°~2°的 12 位模数转换器.简易的 I2C 系列总线接口。HMC5883L 的所应用领域有手机、笔记本电脑、消费类电子、汽车导航系统和个人导航系统。
HMC5883L 采用霍尼韦尔各向异性磁阻(AMR)技术,该技术的优点是其他磁传感器技术所无法企及。这些各向异性传感器具有在轴向高灵敏度和线性高精度的特点.传感器带有的对于正交轴低敏感行的固相结构能用于测量地球磁场的方向和大小,其测量范围从毫高斯到 8 高斯(gauss)。霍尼韦尔的磁传感器在低磁场传感器行业中是灵敏度最高和可靠性最好的传感器。
在这里插入图片描述

连接莓派

在之前的文章中已经驱动了MPU6050这个模块。
12.树莓派3B+ MPU6050 两轴姿态显示
其实HMC5883L这个模块的驱动方式和MPU6050一样,差别只是在芯片的初始设置部分。最后读取的数据都是用的两个8位寄存器分别存储高低位的数据。
这里我是直接淘宝买的模块GY-273:
在这里插入图片描述
和树莓派的连接只需要4根线,VCC、GND、SCL和SDA。
在这里插入图片描述

寄存器列表

下面表格列出了寄存器及其访问。所有地址为8 bits。在这里插入图片描述

寄存器说明

在实际操作中一般使用只需要关注前9个寄存器即可,其中只有前3个是需要设置的。

1.配置寄存器A

在这里插入图片描述

2.配置寄存器B

在这里插入图片描述

3.模式寄存器

在这里插入图片描述

4.数据输出寄存器X、Y、Z

数据输出X、Y、Z寄存器是两个 8 位寄存器,数据输出寄存器 A 和 B。这些寄存器储存从通道 X 所测量结果。数据输出 X 寄存器 A 储存一个来自测量结果中的 MSB(高位数据),数据输出 X 寄存器 B 储存一个来自测量结果中的 LSB(低位数据)。存储在这两个寄存器的值是一个 16 位值以二进制的补码形式存在,其范围是 0xF800到 0x07FF。DXRA0 至 DXRA7、DXRB0 至 DXRB7 标识出位置, DXRA 和 DXRB 标识出在数据输出寄存器 X 中的位。DXRA7 和 DXRB7 标识出数据流的第一位,括号中的数目显示该位的默认值。在事件的ADC上溢或下溢阅读给定的通道,或者如果有一个数学溢出的过程,这种数据寄存器将包含-4096的值。在下一次有效测量完成进行之后,该寄存器上的值将被清除。其他寄存器就不说了。

驱动代码

var i2c = require('i2c-bus');// 寄存器说明 可读可学
var CONFIG_A = 0x00,  // 配置寄存器ACONFIG_B = 0x01,  // 配置寄存器BMODE     = 0x02;  // 模式寄存器
// 数据存储寄存器  只读
var X_DATA_REG = 0x03,  // 寄存器高位  低位+1Z_DATA_REG = 0x05,Y_DATA_REG = 0x07;
// 状态寄存器  只读
var STATUS = 0x09;// 识别寄存器  只读
var ID_A = 0x10,   // 识别寄存器AID_B = 0x11,   // 识别寄存器BID_C = 0x12;   // 识别寄存器C// 工作模式 配置寄存器A的CRA1~CRA0
var workModeMap = {'0': 0,  // 正常测量模式 (默认)'1': 1,  // X、Y、Z 轴正偏压配置'2': 2,  // X、Y、Z 轴负偏压配置'3': 3,  // 次配置预留
}// 采样率(Hz) 配置寄存器A的CRA4~CRA2
var sampleRateMap = {'0.75': 0,'1.5': 1,'3': 2,'7.5': 3,'15': 4, // 默认值'30': 5,'75': 6
};// 增益 配置寄存器B的CRB7~CRA5
var scaleMap = {'0.88': {reg: 0, scalar: 0.73}, // 默认值'1.3': {reg: 1, scalar: 0.92},'1.9': {reg: 2, scalar: 1.22},'2.5': {reg: 3, scalar: 1.52},'4.0': {reg: 4, scalar: 2.27},'4.7': {reg: 5, scalar: 2.56},'5.6': {reg: 6, scalar: 3.03},'8.1': {reg: 7, scalar: 4.35}
};// 模式 模式寄存器的MR1~MR0
var modeMap = {'0': 0, // 连续测量模式'1': 1, // 单一测量模式(默认)'2': 2, // 闲置模式'3': 3  // 闲置模式
};function hmc5883l(i2cbus, hmcaddress,options) {if (!(this instanceof hmc5883l)) {return new hmc5883l(i2cbus, hmcaddress,options);}this.address = hmcaddress;this.bus = i2c.openSync(i2cbus);if (!options) {options = {rate: '15',workMode: '0',scale: '0.88',mode: '0'};}// 采样率this.sampleRate = sampleRateMap[options.rate || '15'];// 工作模式this.workMode = workModeMap[options.workMode || '0'];// 增益this.scale = scaleMap[options.scale || '0.88'];// 模式this.mode = modeMap[options.mode || '0'];this.bus.writeByteSync(this.address, CONFIG_A, (224 + (this.sampleRate << 2) + this.workMode));// 配置增益 默认0.88this.bus.writeByteSync(this.address, CONFIG_B, this.scale.reg << 5); // 配置测量模式this.bus.writeByteSync(this.address, MODE, this.mode);
}hmc5883l.prototype.read_raw_data = function (addr) {var high = this.bus.readByteSync(this.address, addr);var low = this.bus.readByteSync(this.address, addr+1);var value = (high << 8) + low; // 高8位 左移8位 组装成16位的数据if (value > 32768) {value = value - 65536;}return value;
};
// 获取 X Y Z 三轴的磁场值
hmc5883l.prototype.get_magnetic_xyz = function() {var x = this.read_raw_data(X_DATA_REG);var y = this.read_raw_data(Y_DATA_REG);var z = this.read_raw_data(Z_DATA_REG);var magnetic_xyz = {x:x,y:y,z:z}return magnetic_xyz;
}
module.exports = hmc5883l;

测试例子

var HMC5883L = require('./hmc5883l');
var rpio = require('rpio'); // 引入rpio这个库
var hmc5883l_add = 0x1E; //HMC5883L 地址
var bus = 1; // i2c.1
var Compass = new HMC5883L( bus,hmc5883l_add);
rpio.sleep(5);function main(){var i = 0;let hmcData = {};let angle = 0;while(true){hmcData = Compass.get_magnetic_xyz();// 角度angle = Math.atan2(hmcData.y,hmcData.x) * (180 / 3.14159265) + 180;console.log('hmc5883l = ',hmcData);console.log('angle = ',angle);rpio.msleep(500);console.log('------------------------> ' + i + ' <------------------------');i++;}
}
main();

这里没有自检也没有校正操作。这些可以自行百度。

最后

实际在使用这个芯片的时候发现晚上没有Node.js操作的,都是C和python。但是关于Node.js操作的都是外国友人写的。我这个也是在外国友人的基础上对着手册总结的。后面计划把自己操作过的芯片全部总结之后发布npm上了。
想了解更多可以关注我:
在这里插入图片描述


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

相关文章

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

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…