HMC5983驱动详解

  • 简述
  • 一、寄存器
  • 二、命令
    • 1.代码
    • 2.命令详解
  • 三、读取详解
  • 四、校准

简述

17届智能车智能视觉组需要获取航向角,为此我尝试了hmc5983这款磁力计,它可以看成hmc5883l的上位替代,相比5883l最快输出75hz频率,它可以达到220hz并且设置了温度补偿位。


一、寄存器

我们主要会用到前8个寄存器,通过配置Register A,Register B,Mode Register来设置传感器模式,通过读取下面6个寄存器来读取x,y,z三个轴上的磁分量。

二、命令

1.代码

/**传感器控制配置参数*/
// ConfigRegA temperature sensor, 开启后可以自动补偿温漂
#define Temprature_Sensor    0x80
// ConfigRegA valid sample averaging
#define SampleAveraging_1    0x00
#define SampleAveraging_2    0x20
#define SampleAveraging_4    0x40
#define SampleAveraging_8    0x60
// ConfigRegA valid data output rates
#define DataOutputRate_0_75HZ 0x00
#define DataOutputRate_1_5HZ  0x04
#define DataOutputRate_3HZ    0x08
#define DataOutputRate_7_5HZ  0x0C
#define DataOutputRate_15HZ   0x10
#define DataOutputRate_30HZ   0x14
#define DataOutputRate_75HZ   0x18
#define DataOutputRate_220HZ  0x1C
// ConfigRegA Measurement Mode
#define Normal_Measurement          0x00
#define Positive_Measurement        0x01
#define Negative_Measurement        0x10
#define Temperature_Measurement 0x11//ConfigRegB Gain
#define Ga_0_88 0x00
#define Ga_1_3  0x20
#define Ga_1_9  0x40
#define Ga_2_5  0x60
#define Ga_4_0  0x80
#define Ga_4_7  0xA0
#define Ga_5_6  0xC0
#define Ga_8_1  0xE0//ModeRegister, 太麻烦,只写出我需要的两种模式,其他的白嫖怪请自己参考英文手册写
#define ContinuousConversion 0x00
#define SingleConversion     0x01

2.命令详解

#define MAG_ADDRESS 0x1E#define ConfigRegA           0x00
#define ConfigRegB           0x01
#define ModeRegister         0x02
#define MAG_DATA_REGISTER    0x03
#define StatusReg            0x09
#define IDRegA               0x0A
#define IDRegB               0x0B
#define IDRegC               0x0C

先配置寄存器A吗,再配置寄存器B,最后配置模式寄存器;

代码如下(示例):

iic_write_reg(HMC5983_IIC, MAG_ADDRESS, ConfigRegA, Temprature_Sensor|SampleAveraging_4|DataOutputRate_220HZ|Normal_Measurement);
rt_thread_delay(1);
iic_write_reg(HMC5983_IIC, MAG_ADDRESS, ConfigRegB, Ga_2_5);
rt_thread_delay(1);
iic_write_reg(HMC5983_IIC, MAG_ADDRESS, ModeRegister, ContinuousConversion);

一般来说,普通使用的话只用配置SampleAveraging,DataOutputRate,Ga就可以了。

  • Ga详解

三、读取详解

可以看到6个寄存器是连在一个的,故可以从0x03开始读6位

  • 代码示例
    uint8_t buf[6];iic_read_reg_bytes(HMC5983_IIC, MAG_ADDRESS, MAG_DATA_REGISTER, buf, 6);x_mag = buf[0] << 8 | buf[1];z_mag = buf[2] << 8 | buf[3];y_mag = buf[4] << 8 | buf[5];

四、校准

可以从数据手册中看出hmc5983中拥有内置偏置电流发生器,通过配置寄存器A
#define Positive_Measurement 0x01
#define Negative_Measurement 0x10

可以在内部产生磁场从而来校准;目前我还没有研究出来。至于地磁计,如果只需要获取航向角的话就只需要将磁力计原地旋转进行椭圆校准就行,如果需要做AHRS就需要椭球校准了。

hmc5983驱动解析相关推荐

  1. usb 转 uart cp210x 驱动解析

    USB 转 uart (cp210x.c) 驱动解析 * usb_serial_driver 结构体解析 include/linux/usb/serial.h/** 描述一个usb 串口设备驱动 * ...

  2. 第三章 PX4-Pixhawk-SPI底层驱动解析

    第三章 PX4-SPI底层驱动解析 这一章节我们会对PX4的底层驱动进行解析,我们这里主要解析的是SPI协议,因为这个协议是所有传感器的一个协议,至于IIC和串口就可以类似的读写一下,大家看完这个解析 ...

  3. 第三章 PX4-SPI底层驱动解析

    版权声明:本文为博主原创文章,未经博主允许不得转载. 第三章 PX4-SPI底层驱动解析 这一章节我们会对PX4的底层驱动进行解析,我们这里主要解析的是SPI协议,因为这个协议是所有传感器的一个协议, ...

  4. Waveform Audio 驱动(Wavedev2)之:WAV 驱动解析

    Waveform Audio 驱动(Wavedev2)之:WAV 驱动解析 上篇文章中,我们模拟了WAV API.现在进入我们正在要解析的Wave 驱动的架构.我们了解一个驱动的时候,先不去看具体跟硬 ...

  5. AW9523 linux 按键驱动解析

    AW9523 linux 按键驱动解析 硬件介绍 AW9523是国产芯片,中文手册也是看着方便很多,我从datasheet中摘录一些编写驱动过程中重要信息贴到下面,当然,最好还是看芯片手册,项目使用A ...

  6. 图像sensor的特性和驱动解析视频教程-第4/11季-海思-朱有鹏-专题视频课程

    图像sensor的特性和驱动解析视频教程-第4/11季-海思-122人已学习 课程介绍         本季课程以配置的2款图像sensor为案例来讲解图像sensor的关键特性和相关数据结构,I2C ...

  7. 【usb】linux内核USB键盘驱动解析--普通键值上报及转化

    一.概况 建议阅读前置文章[usb]linux内核USB键盘驱动解析–特殊键值上报及转化 以Linux5.10内核中USB键盘驱动为例进行解析:https://mirrors.edge.kernel. ...

  8. linux选择usb功能,USB gadget设备驱动解析(1)——功能体验

    利用Linux USB gadget设备驱动可以实现一些比较有意思的功能,举两个例子: 1.一个嵌入式产品中的某个存储设备,或是一个存储设备的某个分区,可以作为一个U盘被PC:设别,从而非常方便的完成 ...

  9. linux触摸屏代码解析,Linux触摸屏驱动解析

    Linux下开发触摸屏驱动,最好的范例莫过于mc68328digi.c的实现.在没有看到原文之前,我把其中用到的结构解析一下. 1,struct ts_pen_info 该结构是触摸屏的核心数据结构. ...

最新文章

  1. 机器学习——线性回归的原理,推导过程,源码,评价
  2. python怎么样才算入门编程-编程零基础应当如何开始学习 Python?
  3. 【Android开发】Android 删除指定文件和文件夹
  4. 解密Redis持久化
  5. JPA和Hibernate级联类型的初学者指南
  6. 刚刚!北京高考时间和开学时间定了
  7. SVN的各种符号含义,svn的星号,感叹号,问号等含义
  8. 论文阅读《Vision-Aided RAIM: A New Method for GPS Integrity Monitoring in Approach and Landing Phase》3
  9. 基于Java毕业设计大学生旅游拼团网站源码+系统+mysql+lw文档+部署软件
  10. mysql复制一行sql语句_MySQL复制表数据操作sql语句
  11. android的popwindow控件,及控件设为圆角
  12. 2022 极术通讯-基于安谋科技 “星辰” STAR-MC1的灵动MM32F2570开发板深度评测
  13. C#怎么选中datagridview中的一行,并获得它的数据?
  14. Android安装busybox
  15. SSIS_创建SSIS包和数据源
  16. idea创建文件时生成文档注释
  17. 阿里云大数据组件零碎点总结(不定时更新)
  18. 2021年Java者未来的出路在哪里
  19. 100个囚犯的脱狱问题
  20. 桌面PC/服务器 ubuntu18.04 Linux内核编译升级与机制分析

热门文章

  1. 显示计算机密码,电脑显示器密码忘记了怎么打开
  2. 2022年最新吉林机动车签字授权人模拟考试及答案
  3. Go的Slice和数组
  4. 彦舜原创,CSDN首发:面向接口编程思想,设计程序
  5. 记录--前端小票打印、网页打印
  6. 云滋味:微信点餐系统案例分析
  7. 网络型PLC可编程控制器/变频调速/电气控制及单片机综合实验装置(PLC、变频器、触摸屏、电气控制、单片机)
  8. android 开源 + 一些素材网站
  9. [转]AES加密算法及java代码实现
  10. VFP调用WIN32API之路,让你的软件更强大