hmc5983驱动解析


简述

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详解
    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就需要椭球校准了。

  • 13
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HMC833驱动程序是一种用于控制和配置HMC833频率合成器的软件程序。HMC833是一款高性能宽频带频率合成器芯片,可以提供广泛的频率合成和调制功能。驱动程序通过与HMC833芯片进行通信,向其发送命令和参数,并接收芯片返回的状态和数据,以实现对HMC833的控制和配置。 HMC833驱动程序通常由两个主要部分组成:控制接口和配置函数。控制接口用于与HMC833芯片进行通信,可以通过串行外设接口(SPI)或并行外设接口(PDI)等方式实现。配置函数则负责将所需的设置和参数发送给HMC833芯片,以达到期望的频率合成效果。这些设置和参数包括参考频率、频率分频器设置、锁定模式、时钟分频和相位调整等。 使用HMC833驱动程序进行频率合成时,首先需要初始化驱动程序并建立与HMC833芯片的通信连接。然后,通过设置配置函数中的参数,将所需的频率合成设置应用到HMC833芯片上。最后,通过操作控制接口,向HMC833芯片发送相应的命令,启动频率合成过程。 HMC833驱动程序的使用可以极大地简化对HMC833芯片的控制和配置。它能够提供灵活的频率合成方案,并支持频率快速切换和精确的频率调整。同时,HMC833驱动程序也提供了丰富的状态和错误信息,以帮助用户监测和调试系统。总而言之,HMC833驱动程序是实现高性能频率合成的关键工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值