0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

HMC5883L磁力传感器使用指南

CHANBAEK 作者: Jason 2023-04-17 18:00 次阅读

1、前言

霍尼韦尔 HMC5883L 是一种表面贴装的高集成模块,并带有数字接口的弱磁传感器芯片,应用于低成本罗盘和磁场检测领域(指南针、GPS)。

HMC5883L 包括最先进的高分辨率 HMC118X 系列磁阻传感器,并附带霍尼韦尔专利的集成电路包括放大器、自动消磁驱动器、偏差校准、能使罗盘精度控制在 1°~2°的 12 位模数转换器.

支持 I2C,带有 16 引脚,尺寸为 3.0 X 3.0 X 0.9mm。

HMC5883L 的所应用领域有手机、笔记本电脑、消费类电子、汽车导航系统和个人导航系统。

HMC5883L 采用霍尼韦尔各向异性磁阻(AMR)技术,该技术的优点是其他磁传感器技术所无法企及。 这些各向异性传感器具有在轴向高灵敏度和线性高精度的特点。 传感器带有的对于正交轴低敏感行的固相结构能用于测量地球磁场的方向和大小,其测量范围从毫高斯到 8 高斯(gauss)。

2、传感器特性

  1. 三轴磁阻传感器和 ASIC 都被封装在 3.0 × 3.0 × 0.9mm LCC 表面装配中
  2. 12-bit ADC 与低干扰 AMR 传感器,能在 ±8 高斯的磁场中实现 5 毫高斯分辨率
  3. 内置自检功能
  4. 低电压工作(2.16-3.6V)和超低功耗(100uA)
  5. 内置驱动电路
  6. I2C 数字接口
  7. 无引线封装结构
  8. 磁场范围广(+/-8Oe)
  9. 有相应软件及算法支持
  10. 最大输出频率可达 160Hz
  11. 4 个可编程红外 LED 电流输出
  12. 高环境光抑制
  13. 串扰补偿
  14. 符合 RoHS 安全标准

优点

  1. 是体积小高集成产品。 只需添加一个微处理器接口,外加两个外部 SMT 电容。 专为大批量、成本敏感的 OEM 生产而设计,易于装配并与高速 SMT 装配件兼容
  2. 能让罗盘航向精度精确到 1°~2°
  3. 产品组装后能进行低成本功能性测试
  4. 适用于电池供电的应用场合
  5. 带置位/复位和偏置驱动器用于消磁、自测和偏移补偿
  6. 适用于消费类电子设备应用中通用双线串行数据接口
  7. 符合 RoHS 标准
  8. 传感器能在强磁场环境中罗盘航向精度达到 1°~2°
  9. 可获得罗盘航向、硬磁、软磁以及自动校准库
  10. 能应用于个人导航系统和 LBS

技术规格

25°C 时的测试

图片图片图片图片

内部示意图

图片

电源参考设计

图片

单电源参考设计

图片

电源管理

该器件可有两种不同的供电模式。 第一个是内部运作的 VDD 供电电源,第二个是为 IO 接口供电的 VDDIO 电源,当然 VDDIO 的电压可以与 VDD 电源电源相近; 单电源模式,或在 VDDIO 电压低于 VDD 的情况下,HMC5883L 都能正常运作并能与其他装置兼容。

自测

为了检测 HMC5883L 是否正常运行,传感器内部可产生标准磁场而进行的自测试(不论是正向配置还是负向配置),再去测量此标准磁场强度并输出。 在设置 A 寄存器上相应位 MS 的值,就可启动自测功能及产生电压的极性。 来自 VDD 电源的内部电流源产生直流电流(大约 10 mA),然后加到磁阻传感器的偏置带上,这样就在传感器内部产生了一个人为的标准磁场。

3、参考资料

《HMC5883L中文规格书.pdf》

《HMC5883L.pdf》

4、引脚说明

图片

图片

箭头标明磁场方向,该磁场在正常测量模式下产生正向输出可读。

封装图 HMC5883L(16-PIN LPCC,单位 mm)

图片

5、工作模式

1)连续测量模式

连续测量模式,在客户所选择的速率下进行连续的测量,并所测量的更新数据输出寄存器。 如果有必要,数据可以从数据输出寄存器重新读取,但是,如果主机并不能确保在下次测量完成之前可以访问数据寄存器,数据寄存器上的旧的数据会被新的测量数据取代。 为了保存测量之间的电流,该装置被放置在一个类似闲置模式的状态,但模式寄存器没有改变成空闲模式。 即MD[n]位不变。 配置寄存器A的设置在连续测量模式时会影响数据输出速率(比特DO[n]) ,测量配置(bits MS[n]),和增益(bits GN[n])。 所有寄存器在连续测量模式中保留数值。 在连续测量模式下 I2C 总线可被网络内的其他装置启用。

2)单次测量模式

这是预设的供电模式。 在单测量模式,该装置进行单次测量并将测量数据更新至输出数据寄存器中。 在完成测量和输出数据寄存器的更新以后,通过设置MD[n] bits,该装置被置于闲置模式,模式寄存器变更为闲置模式。 配置寄存器的设置在单一测量模式时影响测量配置(bits MS[n])。。 在单测量模式中所有寄存器保留数值。 在单测量模式下 I2C 总线可被网络内其他装置启用。

3)闲置模式

在此模式下,装置可以通过 I2C 总线访问,但主要电源能耗是禁用的,如 ADC,放大器,传感器偏置电流,但不仅限于这些。 在空闲模式下所有寄存器保留数值。 在闲置测量模式下 I2C 总线可被网络内其他装置启用。

6、I2C 读写地址

7位地址:0x1E

8位读取地址:0x3D

8位写入地址:0x3C

7、寄存器

寄存器详细解释请参考数据手册

图片

8、代码

博主用的是轮询去读数据,大家也可以配置成中断方式。

HMC5883L.H

#define HMC5883_ADDR      0X1E
 
#define HMC_CONFIG_A_REG    0X00
#define HMC_CONFIG_B_REG    0X01  
#define HMC_MODE_REG        0X02 
  
#define HMC_XMSB_REG        0X03    //X
#define HMC_XLSB_REG        0X04  
  
#define HMC_ZMSB_REG        0X05    //Z 
#define HMC_ZLSB_REG        0X06  
  
#define HMC_YMSB_REG        0X07    //Y  
#define HMC_YLSB_REG        0X08  
  
#define HMC_STATUS_REG      0X09   
  
#define HMC_CHEAK_A_REG     0X0A 
#define HMC_CHEAK_B_REG     0X0B  
#define HMC_CHEAK_C_REG     0X0C  

//value
  
#define HMC_CHECKA_VALUE    0x48
#define HMC_CHECKB_VALUE    0x34  
#define HMC_CHECKC_VALUE    0x33

HMC5883_Check

u8 HMC5883_Check(void)
{
 u8 tempA;
 u8 tempB;
 u8 tempC;
 
 tempA=I2C2_ReadOneByte(HMC5883_ADDR,HMC_CHEAK_A_REG);
 tempB=I2C2_ReadOneByte(HMC5883_ADDR,HMC_CHEAK_B_REG);
 tempC=I2C2_ReadOneByte(HMC5883_ADDR,HMC_CHEAK_C_REG);
     
 if(tempA == HMC_CHECKA_VALUE & tempB == HMC_CHECKB_VALUE & tempC == HMC_CHECKC_VALUE)
  return 0; 
 else
   return 1; 
}

void Hmc5883_Init(void)
{
 I2C2_WriteOneByte(HMC5883_ADDR,HMC_CONFIG_A_REG,0x78);  //set 75Hz
 I2C2_WriteOneByte(HMC5883_ADDR,HMC_CONFIG_B_REG,0x00);
 I2C2_WriteOneByte(HMC5883_ADDR,HMC_MODE_REG,0x00);  //cotinue mode
}

读取数据

xValue = I2C2_ReadOneByte(HMC5883_ADDR,HMC_XLSB_REG)|(I2C2_ReadOneByte(HMC5883_ADDR,HMC_XMSB_REG)<<8);
zValue = I2C2_ReadOneByte(HMC5883_ADDR,HMC_ZLSB_REG)|(I2C2_ReadOneByte(HMC5883_ADDR,HMC_ZMSB_REG)<<8);
yValue = I2C2_ReadOneByte(HMC5883_ADDR,HMC_YLSB_REG)|(I2C2_ReadOneByte(HMC5883_ADDR,HMC_YMSB_REG)<<8);
printf("M-SENSOR:xValue:%d ,yValue:%d ,zValue:%d \\r\\n",xValue,yValue,zValue);

9、国产替代

HMC5883L 国产替代是 QMC5883L,硬件上 PIN to PIN,软件上大致相同,寄存器有所区别,如下:

图片

图片

图片

因此大家也可以用 QMC5883L。

10、传感器集线器

自此,博主大致实现了一个 sensorhub,在 STM32 上,用 FreeRTOS 启用几个 task,采集传感器数据并上报。 后面会继续扩展:

1、将 accgyro 从轮询模式改成中断模式,并从 I2C 改为 SPI 接口,应对高速率采集场景。 其他三个传感器还是轮询模式,I2C 接口,但是不用延时实现,用定时器去做。

2、可以动态的 enable、disable、config、sample、calibration 各个传感器,并且支持数据时间戳机制。

3、为该系统提供一个 framework 层,统一管控各个传感器的 enable、disable、config 、sample、calibration 操作。

4、在 framework 层区分下命令的 user,根据 user 下命令的不同,为各个 user 分发不同速率的传感器数据,简称 down sample 机制(down sample 只能以倍数实现,如采样 200Hz,可以分发出 50Hz,100Hz)

5、若器件数据手册写明支持自测功能,则增加 self_test 函数,如 lsm6dso accgyro 和 HMC5883L 磁力计都支持。

6、增加虚拟传感器功能,利用物理传感器的数据进行融合,实现如计步器、步伐检测、设备旋转方向等功能。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 传感器
    +关注

    关注

    2526

    文章

    48093

    浏览量

    740057
  • 驱动器
    +关注

    关注

    51

    文章

    7308

    浏览量

    142942
  • 接口
    +关注

    关注

    33

    文章

    7639

    浏览量

    148485
  • I2C
    I2C
    +关注

    关注

    28

    文章

    1346

    浏览量

    120816
  • HMC5883L
    +关注

    关注

    0

    文章

    25

    浏览量

    14925
收藏 人收藏

    评论

    相关推荐

    Protues中HMC5883L寻找

    最近要做一个电子指南针,需要用到元件HMC5883L,软件元件库中找不到,求帮助。
    发表于 11-27 13:03

    基于MSP430F149和HMC5883L的数字指南

    基于MSP430F149和HMC5883L的数字指南
    发表于 08-09 14:06

    电子罗盘HMC5883LHMC5983哪个更好呢

    本帖最后由 我也是醉了 于 2015-5-6 17:43 编辑 HMC5883L是很常用的磁场传感器,但是已经有更新的传感器HMC5983发布。同时相比于
    发表于 05-06 15:28

    HMC5883L

    HMC5883L 是一种表面贴装的高集成模块,并带有数字接口的弱磁传感器芯片,应用于低成本罗盘和磁场检测领域。HMC5883L 包括最先进的高分辨率HMC118X系列磁阻
    发表于 04-16 09:04

    基于HMC5883L的电子指南

    在I2C方面做了部分的改动。读取HMC5883L传感器的读取函数中要注意寄存器的地址和读出来的数据所存放的缓冲器大小及位置void read_hmc5883l(void
    发表于 09-10 09:57

    请问怎么进行HMC5883L数据的读取

    最近在调试GY-86模块,调试到HMC5883L的时候读回来的数据都是0,仔细看原理图发现HMC5883L的SDA,SCL是连接到MOU6050的XDA,XCL上的,这样的话就是MPU6050作为
    发表于 05-08 04:16

    如何处理磁力HMC5883L获取的三轴数据?

    HMC5883L来矫正陀螺仪使用四元数法来求偏航角,想问问如何处理磁力HMC5883L获取的三轴数据?
    发表于 07-25 19:44

    请问MPU6050,HMC5883L,ADXL345之间我该选择哪个?

    我想测量一个物体的自身旋转角度(应该是相当于自身的偏航角yaw),最近一段时间一直在看相关的资料和一些程序。MPU6050是 3轴角度+3轴加速度,HMC5883L磁力计,ADXL345是加速度计
    发表于 07-31 04:36

    HMC5883L传感器的sampling rate tolerance指的是什么?

    我用到一个传感器HMC5883L,有人提出必须考虑传感器的sampling rate tolerance,可是我不明白这是什么意思???
    发表于 12-15 07:29

    GY-273 HMC5883L电子指南针罗盘

    【Realplay】GY-273 HMC5883L电子指南针罗盘模块 三轴磁场传感器
    发表于 11-10 10:44 70次下载

    hmc5883l三轴电子罗盘传感器连接arduino

    本文开始对HMC5883L进行了介绍,其中包括了HMC5883L的主要技术参数、工作原理、应用领域及尺寸说明,然后阐述了hmc5883l三轴电子罗盘传感器连接arduino的方法及程序
    的头像 发表于 03-08 08:46 1.8w次阅读

    hmc5883l的特点及优点_HMC5883L磁力计校准方法

     霍尼韦尔 HMC5883L 是一种表面贴装的高集成模块,并带有数字接口的弱磁传感器芯片,应用于低成本罗盘和磁场检测领域。HMC5883L 包括最先进的高分辨率HMC118X系列磁阻
    发表于 03-08 10:32 1.6w次阅读

    HMC5883L应用说明

     霍尼韦尔 HMC5883L 是一种表面贴装的高集成模块,并带有数字接口的弱磁传感器芯片,应用于低成本罗盘和磁场检测领域。HMC5883L 包括最先进的高分辨率HMC118X系列磁阻
    发表于 03-08 10:49 2.8w次阅读

    如何利用HMC5883L实现三轴磁力计的设计

    在这个中,我们的 HMC5883L 3 项目设备可以测量地球将磁力计连接到 Arduino 方向。 Uno。它是一种以低轴设备中的设备,可以在手机或导航中,找到提供准确的您航还可以使用它们来检测含铁(含铁)金属,因为金属中的铁在靠近传感
    的头像 发表于 06-10 16:24 4820次阅读
    如何利用<b class='flag-5'>HMC5883L</b>实现三轴<b class='flag-5'>磁力</b>计的设计

    磁力HMC5883L传感器特性

    霍尼韦尔 HMC5883L 是一种表面贴装的高集成模块,并带有数字接口的弱磁传感器芯片,应用于低成本罗盘和磁场检测领域(指南针、GPS)。 HMC5883L 包括最先进的高分辨率
    的头像 发表于 07-20 10:40 712次阅读