STM32读取HMC5883L的偏航角数据

article/2025/10/13 16:52:01

HMC5883L是一种IIC通信的电子罗盘芯片,输出与北的角度偏差,数值是0-360度,靠西方向增长,可以理解为逆时针为正。配合GPS模块简直就是四轴飞行器的铁杆标配。

5883的初始化

HMC5883L也是一个IIC器件,具体的操作方式和前面介绍的MPU6050类似,这里就不在赘述了。主要区别在于5883作为IIC从机时,其地址为0x3C。

初始化HMC5883

初始化HMC5883的方法和初始化MPU6050的方法差不太多,主要是模拟出IIC信号,对对应的寄存器操作,具体的可查看HMC5883的说明手册。

void HMC5883L_Init(){     MPU_IIC_Init();//初始化IICMPU_IIC_Start();MPU_IIC_Send_Byte(0x3c); MPU_IIC_Wait_Ack(); MPU_IIC_Send_Byte(0x00); MPU_IIC_Wait_Ack(); MPU_IIC_Send_Byte(0x14);//模拟IIC的信号时序MPU_IIC_Start();MPU_IIC_Send_Byte(0x3c); //写指令MPU_IIC_Wait_Ack();MPU_IIC_Send_Byte(0x01); MPU_IIC_Wait_Ack();MPU_IIC_Send_Byte(0x20); MPU_IIC_Wait_Ack();MPU_IIC_Stop();}

读取数据

 MPU_IIC_Start();MPU_IIC_Send_Byte(0x3c); // HMC5883L,0x3c,0x03读取这两个地址的寄存器数据,分别为LSB和MSBMPU_IIC_Wait_Ack(); MPU_IIC_Send_Byte(0x03); //MPU_IIC_Wait_Ack(); MPU_IIC_Start();          MPU_IIC_Send_Byte(0x3d); //读数据MPU_IIC_Wait_Ack();for(i=0;i<5;i++)        //第六次不应答{XYZ_Data[i]=MPU_IIC_Read_Byte(1);}XYZ_Data[5] =MPU_IIC_Read_Byte(0);  MPU_IIC_Stop();delay_ms(5);

数据处理

读出寄存器的原始数据之后,下一步应该将数据进行处理,比如多次求和取平均,然后利用磁偏角方位公式算出偏角。

void  HMC58X3_newValues(int16_t x,int16_t y,int16_t z)
{unsigned char i ;int32_t sum=0;for(i=1;i<10;i++){HMC5883_FIFO[0][i-1]=HMC5883_FIFO[0][i];HMC5883_FIFO[1][i-1]=HMC5883_FIFO[1][i];HMC5883_FIFO[2][i-1]=HMC5883_FIFO[2][i];}HMC5883_FIFO[0][9]=x;HMC5883_FIFO[1][9]=y;HMC5883_FIFO[2][9]=z;sum=0;for(i=0;i<10;i++){ //求和取平均sum+=HMC5883_FIFO[0][i];}HMC5883_FIFO[0][10]=sum/10; //将平均值更新sum=0;for(i=0;i<10;i++){sum+=HMC5883_FIFO[1][i];}HMC5883_FIFO[1][10]=sum/10;sum=0;for(i=0;i<10;i++){sum+=HMC5883_FIFO[2][i];}HMC5883_FIFO[2][10]=sum/10;}

取平均值之后,利用磁偏角公式可以求出角度。

Angle = (atan2(Y,X) * (180 / 3.14159265) + 180);

HMC5883的问题

如果前面MPU6050弄明白了,那5883也很容易弄懂。值得注意的有如下两个问题:

  1. 接线
    HMC5883和MPU605需要连接在同一个IIC总线上,下图是我们的接线方式。
    模块背面
    模块正面
    最下方是没有用到的BMP模块
  2. 四元数融合算法
    要将HMC5883用到自主导航小车的姿态估算中,我们采用的是四元数融合算法,需要上传MPU6050和HMC5883的原始数据。如何进行四元数融合解算,我准备在下一篇文章写出。

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

相关文章

HMC5883L 磁力计校准

原文地址&#xff1a; http://blog.sina.com.cn/s/blog_402c071e0102v8ie.html 这里针对 HMC5883L 磁力计 的校准&#xff0c;做一个简单讲解。欢迎交流&#xff0c;新浪长沙WalkAnt。 先看看这篇文章&#xff1a;http://blog.sina.com.cn/s/blog_8240cbef0101i7gn.html 如果磁…

使用Arduino和HMC5883L磁力计的数字罗盘

原文&#xff1a;https://circuitdigest.com/microcontroller-projects/digital-compass-with-arduino-and-hmc5883l-magnetometer 使用Arduino和HMC5883L磁力计的数字罗盘 ARDUINO的 经过**阿斯温斯拉吉(Aswinth Raj)** 2018年11月6日 人脑由复杂的结构层构成&#xff0c…

地磁计HMC5883L

信方式&#xff1a;IIC 工作电压&#xff1a;2.16~3.6V 工作电流&#xff1a;100uA 罗盘航向精度&#xff1a;1~2 当达到预定的最大输出频率&#xff0c;才需要监控DRDY中断引脚 I2C接口 装置包含一个7-bits串行地址&#xff0c;并且支持标注和快速模式&#xff08;100kHZ和400…

3轴数字罗盘IC HMC5883L介绍

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

HMC5883L

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

STM32模拟I2C协议获取HMC5883L电子罗盘磁角度数据 (HAL)

STM32模拟I2C协议获取HMC5883L电子罗盘磁角度数据(HAL) HMC5883L 传感器采用霍尼韦尔各向异性磁阻(AMR)技术&#xff0c;应用于罗盘和三轴磁场角度检测领域&#xff0c;常用于水平物体转动的角度识别。HMC5883L 采用I2C总线接口&#xff0c;2.16~3.6V供电范围&#xff0c;带有…

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

文章目录 一、开发笔记二、初始化与工作流程1. 设置测量模式2. 设置采样率&#xff08;默认15Hz&#xff09;3. 设置测量范围4. 校准5. 开始测量6. 自测试操作&#xff08;可选&#xff09; 三、寄存器表1. 00-配置寄存器A2. 01-配置寄存器B3. 02-模式寄存器4. 09-状态寄存器5.…

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攻击&…