HMC5883L_3-Axis_Digital_Compass_IC

合集下载

hmc5883l工作原理

hmc5883l工作原理

hmc5883l工作原理HMC5883L是一种三轴磁力计,它能够测量地球磁场的强度和方向。

它采用了霍尔效应传感器来测量磁场,并且具有高精度和低功耗的特点。

在本文中,我们将详细介绍HMC5883L的工作原理。

一、霍尔效应传感器霍尔效应是指当电流通过一个导体时,如果该导体处于一个磁场中,那么该导体两侧会产生一定的电势差。

这种现象被称为霍尔效应。

基于霍尔效应原理的传感器被称为霍尔传感器。

HMC5883L采用了三个霍尔效应传感器来测量磁场,这三个传感器分别安装在不同的轴上(X、Y、Z轴),可以同时测量三个方向上的磁场强度。

二、I2C通信协议HMC5883L使用I2C通信协议与主控板进行通信。

I2C是一种串行通信协议,它只需要两根线(SDA和SCL)即可实现双向数据传输。

其中SDA线用于数据传输,SCL线用于时钟同步。

在I2C通信中,主控板负责产生时钟信号,从而控制数据传输的速率和时序。

HMC5883L作为从设备,接收主控板的指令,并返回相应的数据。

三、HMC5883L的寄存器HMC5883L内部有多个寄存器,用于存储配置信息和测量结果。

下面是一些重要的寄存器:1. Configuration Register A(0x00):用于配置测量模式、采样速率和增益。

2. Configuration Register B(0x01):用于配置磁场测量范围。

3. Mode Register(0x02):用于选择单次测量模式或连续测量模式。

4. Data Output X MSB Register(0x03):用于存储X轴磁场强度的高8位数据。

5. Data Output X LSB Register(0x04):用于存储X轴磁场强度的低8位数据。

6. Data Output Z MSB Register(0x05):用于存储Z轴磁场强度的高8位数据。

7. Data Output Z LSB Register(0x06):用于存储Z轴磁场强度的低8位数据。

HMC5883L中文规格书

HMC5883L中文规格书
控制该装置可以通过I²C总线来实现。该装置将作为从机在一个主机(例如:处理器)的控制下连接总线。
该装置必须符合I2C-Bus Specification(I2C-总线技术规格标准),文件号为:9398 393 40011。作为一 个I2C 兼容装置,该装置包含一个7-bit串行地址,并支持I2C 协议。这一装置可以支持标准和快速模式,分 别为100kHz 和 400kHz,但不支持高速模式(Hs)。还需要外接电阻才能支持这些标准和快速模式。
► 无引线封装结构
► 符合 RoHS 标准
► 磁场范围广(+/-8Oe)
► 传感器能在强磁场环境中罗盘航向精度达到 1°~2°
► 有相应软件及算法支持
► 可获得罗盘航向、硬磁、软磁以及自动校准库
► 最大输出频率可达160Hz
► 能应用于个人导航系统和LBS
HMC 5583L
技术规格 (*在25°C时的测试,另有说明除外)
+8
高斯(gauss)
±8
高斯
0.1
±%满量程
毫高斯
µs
ppm
%FS/Gauss
75
Hz
160
Hz
us
ms
%
hex(十六进制) hex(十六进制) hex(十六进制)
400
kHz
0.2*VDDIO 0.8*VDDIO
±1.16 ±1.08
510
V V 高斯
LSb
2000
V
750
V
-30
85
ºC
-40
内部示意图
HMC5883L
上海:Tel:021-62370237 北京:Tel:010-84583280 广州: Tel:020-84101800 香港:Tel:00852-29536412

磁阻传感器HMC5883L在车辆检测及分类中的应用

磁阻传感器HMC5883L在车辆检测及分类中的应用

磁阻传感器HMC5883L在车辆检测及分类中的应用作者:李娣娜来源:《电子技术与软件工程》2017年第04期摘要本文采用三轴各向异性磁阻传感器HMC5883L设计了一种车辆检测与车型分类系统,针对车辆首尾相接与大型车辆的检测矛盾,利用磁阻传感器三轴磁场信息提取车辆特征信号对车辆进行分类。

该系统成本低、传感器节点小、车辆检测分类精度高,可广泛用于军事侦察及智能交通等领域的车辆检测及分类。

【关键词】HMC5883L 车辆检测车型分类1 引言目前,各国学者对磁阻传感器检测车辆的原理及相关算法进行了研究,这些研究都是基于地磁场强度垂直分量展开的,已提出的车辆检测算法均没有考虑大型车辆被判为多辆车与车辆漏检的情况对最终车辆检测数量的相互弥补,而本文要在车辆检测的基础上对车型进行分类。

国内外现有的研究多数是基于单轴或双轴磁场信号实现车辆的检测与分类,没有充分利用空间磁场信息,不能全面体现车辆的扰动,导致车辆检测分类精度不高、车型划分种类少。

针对车辆检测分类的需求,采用新型三轴磁阻传感器HMC5883L以及无线通信模块XL02-232AP1研制了一种车辆检测分类系统。

2 磁阻传感器检测分类车辆原理磁阻传感器的基础器件是恵斯通电桥,组成电桥的电阻由镍铁合金材料制成,该电阻的阻值在一定范围内与磁场矢量变化呈线性关系。

当含铁磁物质的物体(如车辆)经过磁阻传感器时,会对传感器周围的地磁场造成扰动,磁阻传感器可以检测出由于车辆的经过而产生的地磁场变化,不同类型的车辆包含的铁磁性材料大小和形状均不同,从而不同类型的车辆对地磁场产生的扰动也不同,依据这个原理可以对车辆进行分类。

3 传感器节点设计本文选用一种三轴数字式磁阻传感器HMC5883L,该传感器采用霍尼韦尔各向异性磁阻(AMR)技术,封装在3.0×3.0×0.9 mm LCC 表面装配中,具有12 bit 的ADC 模块,能在±8 高斯的磁场中实现5 毫高斯分辨率。

hmc5883l工作原理(一)

hmc5883l工作原理(一)

hmc5883l工作原理(一)HMC5883L工作原理概述HMC5883L是一款采用磁电阻原理测量磁场的数字式三轴磁力计,可测量X、Y、Z轴的磁场强度。

它广泛应用于电子罗盘、导航、定位等领域。

磁电阻原理磁电阻效应是指材料在磁场中具有电阻率的变化现象,其本质是材料内部磁矩的定向受到外部磁场的影响。

当外部磁场方向与材料内部磁矩方向相同时,电阻率最小,反之则最大。

利用磁电阻效应可以实现磁场测量。

HMC5883L结构HMC5883L内部由磁电阻元件、前置放大器、AD转换器、数字信号处理器等组成。

其结构示意图如下:•磁电阻元件:负责测量外部磁场的大小和方向;•前置放大器:将测量结果进行放大;•AD转换器:将模拟信号转换为数字信号;•数字信号处理器:处理并输出数字信号。

工作原理HMC5883L三个轴的磁场强度受物体周围磁场的影响,导致其磁电阻元件产生电阻值变化。

该变化信号通过前置放大器,被转换成模拟电压信号,并被送入AD转换器转换成数字信号。

数字信号处理器将这些数字信号处理后,输出计算得出的三轴磁场数据。

结束语本文简单介绍了HMC5883L的工作原理,以及使用磁电阻原理测量磁场的基本原理。

HMC5883L在实际应用中,可以根据需要对不同轴的磁场进行测量和调整,是一款功能强大的磁力计。

使用注意事项使用HMC5883L时,需要注意以下事项:•HMC5883L对磁场干扰较为敏感,应注意周围环境中的磁场干扰;•HMC5883L在工作时,应注意温度和外部电磁干扰对其测量结果的影响;•HMC5883L输出的磁场数据需要校准,以提高其精度和准确性。

总结HMC5883L是一款广泛使用的数字式三轴磁力计,采用磁电阻原理测量磁场,可应用于电子罗盘、导航和定位等领域。

了解HMC5883L的工作原理和注意事项,有助于更好地应用和使用该设备。

使用HMC5883L-3轴数字罗盘传感器计算航向角

使用HMC5883L-3轴数字罗盘传感器计算航向角

使用HMC5883L -3轴数字罗盘传感器计算航向角——中北大学:马政贵图1 HMC5883L 的电路图HMC5883L -3轴数字罗盘采用IIC 总线接口,内含12位AD 转换器,能在8Ga 的磁场中实现5mGa 的分辨率。

1. HMC5883L 的初始化:HMC5883L 的磁场默认测量范围为 1.3Ga ,由于地磁场强度大约是0.5-0.6Ga ,故使用默认的量程即可,此外还需进行采样平均数、数据输出速率、测量模式的初始化配置即可。

/******************************************************************************* 功能:对HMC5883L 进行初始化参数:无返回值:无*******************************************************************************/ void HMC5883_Init(void){HMC_GPIO_Config(); //GPIO 配置HMC_I2C_Write(0x00,0x78); //(配置寄存器A )采样平均数8;数据输出速率75Hz ;正常测量配置模式 HMC_I2C_Write(0x02,0x00); //(模式寄存器)连续测量模式}备注:void HMC_I2C_Write(u8 address,u8 data)为寄存器写入函数,第一个参数address ±±为要写入的寄存器地址,第二个参数data 为要写入寄存器的值。

2. HMC5883L 自测:HMC5883L -3轴数字罗盘内含自测模式。

HMC_I2C_Write(0x00,0x79); //(配置寄存器A )采样平均数8;数据输出速率75Hz ;正偏压自测模式 HMC_I2C_Write(0x02,0x01); //(模式寄存器)单一测量模式通过将配置寄存器A 的最低位(MS1和MS0)从00更改为01,然后再配置为单一测量模式,即可进入自测模式。

hmc5883l工作原理

hmc5883l工作原理

hmc5883l工作原理HMC5883L是一种磁场传感器,可以测量周围的磁场强度。

它采用了哈尔效应传感器技术,可精确测量三个轴向上的磁场强度,包括X轴、Y轴和Z轴。

HMC5883L工作原理主要涉及到磁场感应原理和哈尔效应。

磁场感应原理是指当磁场通过导体时,会在导体内产生感应电动势。

这是由于磁场力的作用导致自由电子在导体中向一侧偏移,形成感应电流,进而产生感应电动势。

相应地,哈尔效应是一种磁场感应现象,指当导体中有电子流通过时,磁场会引起电子在垂直于磁场方向的平面上发生偏移,形成电压差。

哈尔元件利用了这种效应。

HMC5883L包括三个哈尔元件,它们分别位于X、Y和Z轴上,用于测量磁场在这些方向上的强度。

在工作时,HMC5883L通过和外部磁场接触,感应到磁场引起的电压差。

具体来说,当外部磁场作用于HMC5883L时,磁场会使哈尔元件X轴和Y轴的电流发生偏移,导致在这两个轴上产生电压差。

这个电压差可以通过内部电路进行处理,转化为数字信号。

同时,HMC5883L还通过内部的I2C或SPI总线与控制器进行通信,以发送和接收数据。

在测量过程中,HMC5883L会根据哈尔元件的输出电压和校准系数进行计算,得到三个轴向上的磁场强度值。

这些值可以通过计算得到不同方向上的磁场强度向量,以及总体的磁场强度。

为了确保准确测量,HMC5883L还具有磁场校准功能。

在校准过程中,可以通过特定的算法和方法对原始数据进行处理,消除由于硬件和环境因素引起的误差。

这些误差可能来自于传感器内部以及外部磁场干扰。

校准可以提高测量的精确度,并保证磁场强度的准确性。

总的来说,HMC5883L的工作原理主要基于磁场感应和哈尔效应的原理。

通过感知和处理磁场引起的电压差,它可以精确测量周围的磁场强度,并提供相关的磁场向量数据。

它在导航、航空航天、地理勘探和科学研究等领域具有广泛的应用。

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

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

hmc5883l三轴电子罗盘传感器连接arduinoHMC5883L器件简介(1)器件介绍名称:HMC5883L电子指南针罗盘模块(三轴磁场传感器)型号:GY-271(2)主要技术参数使用芯片:HMCL5883L供电电源:3-5V通信方式:IIC通信协议测试范围:±1.3-8高斯(3)工作原理传统罗盘用一根被磁化的磁针来感应地球磁场,地球磁场与磁针之间的磁力时磁针转动,直至磁针的两端分别指向地球的磁南极与磁北极。

电子罗盘也一样,只不过把磁针换成了磁阻传感器,然后将感受到的地磁信息转换为数字信号输出给用户使用。

(4)产品应用领域手机、笔记本电脑、消费类电子、汽车导航系统和个人导航系统等。

(5)器件尺寸图hmc5883l三轴电子罗盘传感器连接arduino连接方法:只要连接VCC,GND,SDA,SCL四条线。

ArduinoGND-》HMC5883LGNDArduino3.3V-》HMC5883LVCCArduinoA4(SDA)-》HMC5883LSDAArduinoA5(SCL)-》HMC5883LSCL (注意,接线是A4,A5,不是D4,D5)程序编写:1、下载HMC5883L库文件。

下载地址:http://soft2.wmzhe/download/AnsifaArduino/HMC5883L.zip2、解压HMC5883L库文件到arduino文件夹:arduino-0022\libraries下面。

3、编写以下程序,下载下面测试程序到arduino:#include《Wire.h》#include《HMC5883L.h》HMC5883Lcompass;voidsetup(){。

HMC5883L

HMC5883L

PIN CONFIGURATIONS
Pin 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Name SCL VDD NC S1 NC NC NC SETP GND C1 GND SETC VDDIO NC DRDY SDA
2
Description Serial Clock – I C Master/Slave Clock Power Supply (2.16V to 3.6V) Not to be Connected Tie to VDDIO Not to be Connected Not to be Connected Not to be Connected Set/Reset Strap Positive – S/R Capacitor (C2) Connection Supply Ground Reservoir Capacitor (C1) Connection Supply Ground S/R Capacitor (C2) Connection – Driver Side IO Power Supply (1.71V to VDD) Not to be Connected Data Ready, Interrupt Pin. Internally pulled high. Optional connection. Low for 250 µsec when data is placed in the data output registers. 2 Serial Data – I C Master/Slave Data Table 1: Pin Configurations
FEATURES
3-Axis Magnetoresistive Sensors and ASIC in a 3.0x3.0x0.9mm LCC Surface Mount Package 12-Bit ADC Coupled with Low Noise AMR Sensors Achieves 5 milli-gauss Resolution in ±8 Gauss Fields Built-In Self Test Low Voltage Operations (2.16 to 3.6V) and Low Power Consumption (100 μA) Built-In Strap Drive Circuits I C Digital Interface Lead Free Package Construction Wide Magnetic Field Range (+/-8 Oe) Software and Algorithm Support Available Fast 160 Hz Maximum Output Rate

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

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

hmc5883l三轴电子罗盘传感器连接arduinohmc5883l三轴电子罗盘传感器连接arduinoHMC5883L器件简介(1)器件介绍名称:HMC5883L电子指南针罗盘模块(三轴磁场传感器)型号:GY-271(2)主要技术参数使用芯片:HMCL5883L供电电源:3-5V通信方式:IIC通信协议测试范围:±1.3-8高斯(3)工作原理传统罗盘用一根被磁化的磁针来感应地球磁场,地球磁场与磁针之间的磁力时磁针转动,直至磁针的两端分别指向地球的磁南极与磁北极。

电子罗盘也一样,只不过把磁针换成了磁阻传感器,然后将感受到的地磁信息转换为数字信号输出给用户使用。

(4)产品应用领域手机、笔记本电脑、消费类电子、汽车导航系统和个人导航系统等。

(5)器件尺寸图hmc5883l三轴电子罗盘传感器连接arduino连接方法:只要连接VCC,GND,SDA,SCL四条线。

ArduinoGND-》HMC5883LGNDArduino3.3V-》HMC5883LVCCArduinoA4(SDA)-》HMC5883LSDAArduinoA5(SCL)-》HMC5883LSCL (注意,接线是A4,A5,不是D4,D5)程序编写:1、下载HMC5883L库文件。

下载地址:http://soft2.wmzhe/download/AnsifaArduino/HMC5883L.zip2、解压HMC5883L库文件到arduino文件夹:arduino-0022\libraries下面。

3、编写以下程序,下载下面测试程序到arduino:#include《Wire.h》#include《HMC5883L.h》HMC5883Lcompass;voidsetup(){。

HMC5883L常见问题解答

HMC5883L常见问题解答

2. 使用HMC5883L能不能不用加速度传感器就能计算出航向?是的,不用加速度传感器就可以计算出航向。

但是,传感器必须保证是水平的,也就是,俯仰角与滚转角都为零。

这样,在水平面上的的三个轴中只有两个会被用到。

3.如何通过软件设置来识别板上应用的传感器是为HMC5843还是HMC5883L?我们不能通过其相同的识别寄存次来识别传感器的类型,但是可以通过下述方式进行识别:1)向配置寄存器A写入“01100000”;然后再进行读取;2)如果其反馈值还是为“01100000”,则该传感器为HMC5883L,反之.4. 为什么需要加速度传感器?如果罗盘不是水平的,就需要加速度传感器来纠正由于倾斜引起的误差。

或者,Honeywell提供了一体化解决方案HMC6343作为另外一种选择。

HMC6343内置3轴加速度传感器,具备倾斜补偿的航向输出,封装在9×9×1.9mm的芯片中。

5.HMC5883L Set/Reset回路所起到的作用是什么?该回路是Honeywell的专利设计,其在每次数据测量之前能够进行一个自动消磁的作用,以消除设备本身存在的offset,从而实现传感器在一个“纯净”的磁场进行测试.6.HMC5883L能够降低“噪音”干扰吗?是的,该款产品内部有取点取平均值的功能-它能够取值2,4,8个点的读数进行平均后再输出从而降低“噪音”的影响并且不会对高频率的信号识别产生影响;如下图分析所示:CONFIDENTIAL | Navigation Hong Kong Limited. All Rights Reserved7.如何判定传感器的好坏?可以通过设置HMC5883L的寄存器以启动传感器self-test的功能从而实现对于传感器好坏的判定.设置自测条件:Gain=5,正偏置模式,单一测量状态;获得数据结果:三轴所读取数据在243到575.8.如果未设置self-test模块的启动,如何判定传感器的好坏?如果未进行自测,那么可以从传感器所采集的数据来进行分析但首先要将各个轴的Gain值进行调整测试采集,如果传感器一直所采集的数据接近为零,则说明该传感器已经损坏或者焊锡出现虚焊和假焊现象.9.如何判定HMC5883L在PCB板上的位置是否可行的?将已经布局在板上的传感器采集到的原始数据转换为十进制的数据进行分析,看各轴数据的分布形状是否呈椭圆或者近似圆的分布.10.PCB layout时应该注意的方面有哪些?在传感器周围不应该有比较大的带磁物质或者通过大电流的线路,对于蜂鸣器以及含铁物件尽量保持比较远的距离.对于线宽间距设计建议如下:1. Bottom Layer –a. Increase the distance between HMC5883 and the adjacentcomponents. If possible, keep at least 2~3 mm away.b. Route pin 2 VDD trace away from the sensor (>1mm away).c. Increase pin 10 to C1 cap trace width (~0.3 mm).d. Increase pin 8 and 12 to C2 trace width (~0.3 mm).2. Layer 9 –a. Re-route traces for VDDIO and Set/Reset to go around thesensor. There should be no current carrying trace directlyunder the sensor in any layer.b. If this is power or ground plane, remove copper area directlyunder the sensor. This is to reduce any possible currentgenerated magnetic noise.CONFIDENTIAL | Navigation Hong Kong Limited. All Rights Reserveddirectly the sensor. This is to reduce any possible currentgenerated magnetic noise.3. Layer 5~8 – If this is power or ground plane, remove copperarea directly under the sensor. This is to reduce any possiblecurrent generated magnetic noise.4. Layer 4 –Re-route traces to go around the sensor. Same reasonas9a.5. Layer 2~3 – Same as layer 5~8.6. Top Layer – Remove components and traces directly under thesensor. There should be no ferrous material and currentcarrying traces directly under the sensor in any layer.11. HMC5883L是否支持手动焊接?HMC5883L并不推荐手工焊接,如必须使用,需注意下述两方面:1)锡膏最高温度不能超过315℃,IC不能加热时间过长;2)如果IC未保持在持续的干燥环境下,那么在封装之前必须进行烘烤,因为IC对湿度比较灵敏(MSL3)建议使用最高温度为260℃的Reflow流程进行焊接。

数字式电子罗盘毕业设计

数字式电子罗盘毕业设计

毕业设计说明书数字式电子罗盘设计学生姓名:孔垂礼学号: ********** 学院:计算机与控制工程专业:电气工程及其自动化指导教师:***2015 年 06 月数字式电子罗盘设计摘要数字式电子罗盘具有很多优点,例如:体积比较小、启动非常迅速、功率损耗较低、制造成本低廉等,当今社会测控技术对测向传感器提出了非常高的要求;为了提高数字罗盘的测量精度,特意设计了一种基于HMC5883L三轴磁阻传感器[1]的数字电子罗盘;在分析相关类似产品的基础上,特别强调对电源、器件选型、信号调理电路、软件设计等方面进行了分析研究,设计出了数字罗盘并且研制了试验的样机;为验证设计效果,在双轴陀螺测试转台上进行了测试,试验结果初步验证了该设计方案的可行性;论文的研究工作可以为研究和改良数字式磁罗盘的测量准确度提供可靠的资料.关键词:地磁场,数字罗盘,HMC5883L三轴磁阻传感器,重力加速度计Here is the translation of your chinese paper’s titleAbstractDigital electronic compass, has small volume, quick start, low power consumption, and low cost, the modern measurement and control technology puts forward higher requirements on sensor of direction finding; In order to improve the precision of the digital compass, we design a HMC5883L triaxial magnetic resistance sensor based digital electronic compass; On the basis of the analysis of related products, focuses on the power supply, device selection, signal conditioning circuit and software design are analyzed in aspects of research, design the digital compass and test prototype was developed; To verify the design effect, on the two-axis gyro testing table was tested, experimental results verify the feasibility of the design scheme of; Thesis research work could be used to research and provide reference for improving the measuring accuracy of digital magnetic compass.Key words : Earth's magnetic field, digital compass, HMC5883L three-axis magnetic resistance sensor, the gravity accelerometer目录摘要 (2)Abstract (3)目录...........................................................................................................................................错误!未定义书签。

HMC5883L标定补偿-4页文档资料

HMC5883L标定补偿-4页文档资料

this calibration will correct or compensate for thehard iron effects.hard iron effects are magnetic filed superimpositions on the earth's magnetic field that are fixed in magnitude and which do not depend on the orientation of the compass.the compass calibration shall be initiated by a user command that put the compass into the calibration mode. once in that mode the compass shall be rotated through 360 degrees abouth the forward or left direction followed by a 360 rotation about the up-down direction. that is, there are two full rotations required to complete the physical movement required. at the end of the rotations a command to end the calibration process shall be issued by the user to the compass.it is important to keep the forward (or left ) axis level during the first rotation and to keep the up-down axis vertical during the second calibration and until the flu calibration is complete. Failure to follow these process will result in less than optimal calibration and heading errors are likely.#define calthreshold 0int Xmax,Xmin,Ymax,Ymin,Zmax,Zmin;viod Intialize_Cal_Variables(int MagX, int MagY, int MagZ)void Calibrate(int MagX, int MagY, int MagZ)void Compute_and_Save(void)void Hard_Iron_correction(int Xoff, int Yoff, int Zoff)viod Intialize_Cal_Variables(int MagX, int MagY, int MagZ)//set Max and Min values of the mag output to the current values Xmax = MagX;Xmin = MagX;Ymax = MagY;Ymin = MagY;Zmax = MagZ;Zmin = MagZ;void Calibrate(int MagX, int MagY, int MagZ)//this routine will capture the max and min values of the magX,Y,Z data while the//compass is being rotated 360 degrees through the level plane and the upright plane.//i.e. horizontal and vertical circles.//This function should be invoked while making continuous measurements//on the magnetometersint MagXreading,int MagYreading,int MagZreading;MagXreading = MagX;MagYreading = MagY;MagZreading = MagZ;if(MagXreading > Xmax) Xmax = MagXreading;if(MagXreading < Xmin) Xmin = MagXreading;if(MagYreading > Ymax) Ymax = MagYreading;if(MagXreading < Ymin) Ymin = MagXreading;if(MagZreading > Zmax) Zmax = MagZreading;if(MagXreading < Zmin) Zmin = MagXreading;void Compute_and_Save(void)if(abs(Xmax - Xmin) > CalThreshold)Mag_UserCal_offset_X = (Xmax + Xmin)/2;//save parameters in EEif(abs(Ymax - Ymin) > CalThreshold)Mag_UserCal_offset_Y = (Ymax + Ymin)/2;//save parameters in EEif(abs(Zmax - Zmin) > CalThreshold)Mag_UserCal_offset_Z = (Zmax + Zmin)/2;//save parameters in EEvoid Hard_Iron_correction(int Xoff, int Yoff, int Zoff) //call this function for correctionMagX -= Mag_UserCal_Offset_X;MagY -= Mag_UserCal_Offset_Y;MagZ -= Mag_UserCal_Offset_Z;希望以上资料对你有所帮助,附励志名3条:1、积金遗于子孙,子孙未必能守;积书于子孙,子孙未必能读。

3轴数字罗盘IC HMC5883L介绍

3轴数字罗盘IC HMC5883L介绍

3轴数字罗盘IC HMC5883L介绍3轴数字罗盘IC HMC5883L简介霍尼韦尔 HMC5883L 是一种表面贴装的高集成模块,并带有数字接口的弱磁传感器芯片,应用于低成本罗盘和磁场检测领域。

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

HMC5883L 是采用无铅表面封装技术,带有16 引脚,尺寸为3.0X3.0X0.9mm。

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

3轴数字罗盘IC HMC5883L特点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。

3轴数字罗盘IC HMC5883L优点1、是体积小高集成产品。

只需添加一个微处理器接口,外加两个外部SMT 电容。

专为大批量、成本敏感的OEM 生产而设计,易于装配并与高速SMT 装配件兼容。

2、能让罗盘航向精度精确到1°~2°。

3、产品组装后能进行低成本功能性测试。

4、适用于电池供电的应用场合。

5、带置位/复位和偏置驱动器用于消磁、自测和偏移补偿。

6、适用于消费类电子设备应用中通用双线串行数据接口。

7、符合RoHS 标准。

8、传感器能在强磁场环境中罗盘航向精度达到1°~2°。

9、可获得罗盘航向、硬磁、软磁以及自动校准库。

HMC5883导航系统

HMC5883导航系统

智能小车小范围导航系统李学林严小波摘要:我们的作品是以实现无线下载PC机已有的地图来完成特定的路线为目的,以完成规定地方数据的采集。

我们是以罗盘指南针来解决精确定位角度的问题。

然后测其速度,便能知道小车当前的行驶状况。

在我们的上位机程序中,以虚拟北的方式来完成对地图的描绘。

这样的方式形成了与地球北方形成了对应,绘图1°的精确度形象而现实的反应了地面的360个方向。

而下位机的导航系统与运算系统形成了与上位机的360个方向的对应。

这样形成了对地面基本全部方位的对应。

虽然由于小车机械特性造成了不能实现在1°的范围转动,但是基本上能实现对路线的绘制。

关键字:HMC5883 虚拟北大量数据传输上位机绘图导航系统Xuelinli XiaoboyanAbstract: we work with wireless download PC existing map to accomplish a specific route for the purpose to complete the specified place data collection. We took a compass a compass to solve the precise positioning Angle. Then measured the speed, can know car driving conditions current. In our PC program, the way to virtual north to finish on the map describe. This way and has formed the earth northern formed correspondence, drawing 1 ° precision image and realistic reaction to the ground 360 direction. And the lower level computer navigation system and computing system formed and superordination machine in the direction of the 360 corresponding. This forms a basic on the ground all orientation of the correspondence. Although the car mechanical properties caused cannot achieve the range in 1 ° turns, but basically can realize the rendering of route.一、背景鉴于各个领域对智能化系统的需求在不断的上升,在很多危险的领域更是不用说。

3轴电子罗盘HM5883应用

3轴电子罗盘HM5883应用

1.原理图2.程序[1] 头文件1/****************************************Copyright (c)************************************************** **** ****--------------File Info-------------------------------------------------------------------------------** File name: 24C02.h** Descriptions: 24C02 操作函数库****------------------------------------------------------------------------------------------------------** Created by: A VRman** Created date: 2010-10-29** V ersion: 1.0** Descriptions: The original version****------------------------------------------------------------------------------------------------------** Modified by:** Modified date:** V ersion:** Descriptions:********************************************************************************************************/ #ifndef __HMC5883L_H#define __HMC5883L_H/* Includes ------------------------------------------------------------------*/#include "stm32f10x_lib.h"#include "GrobalV ariable.h"/* Private define ------------------------------------------------------------*/#define A T24C01A /* 24C01A,I2C时序和往后的24C02一样*///#define A T24C01 /* 24C01,I2C的时序和普通的有点不同*/#define ADDR_24LC02 0xA0#define I2C_P AGESIZE 4 /* 24C01/01A页缓冲是4个*//* Private function prototypes -----------------------------------------------*/void I2C_Configuration(void);u8 I2C_Read(I2C_TypeDef *I2Cx,u8 I2C_Addr,u8 addr,u8 *buf,u16 num);u8 I2C_Write(I2C_TypeDef *I2Cx,u8 I2C_Addr,u8 addr,u8 *buf,u16 num);///void HMC5883L_test(void);void Axia3AngInit(void) ;void Detect3AxiaAng(void);#endif/********************************************************************************************************* END FILE*********************************************************************************************************/ [2] 头文件2/******************** (C) COPYRIGHT 2008 STMicroelectronics ********************* File Name : stm32f10x_i2c.h* Author : MCD Application T eam* V ersion : V2.0.1* Date : 06/13/2008* Description : This file contains all the functions prototypes for the* I2C firmware library.********************************************************************************* THE PRESENT FIRMW ARE WHICH IS FOR GUIDANCE ONL Y AIMS A T PROVIDING CUSTOMERS* WITH CODING INFORMA TION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SA VE TIME.* AS A RESUL T, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE* CONTENT OF SUCH FIRMW ARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING* INFORMA TION CONT AINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.*******************************************************************************//* Define to prevent recursive inclusion -------------------------------------*/#ifndef __STM32F10x_I2C_H#define __STM32F10x_I2C_H/* Includes ------------------------------------------------------------------*/#include "stm32f10x_map.h"/* Exported types ------------------------------------------------------------*//* I2C Init structure definition */typedef struct{u16 I2C_Mode;u16 I2C_DutyCycle;u16 I2C_OwnAddress1;u16 I2C_Ack;u16 I2C_AcknowledgedAddress;u32 I2C_ClockSpeed;}I2C_InitTypeDef;/* Exported constants --------------------------------------------------------*/#define IS_I2C_ALL_PERIPH(PERIPH) (((*(u32*)&(PERIPH)) == I2C1_BASE) || \((*(u32*)&(PERIPH)) == I2C2_BASE))/* I2C modes */#define I2C_Mode_I2C ((u16)0x0000)#define I2C_Mode_SMBusDevice ((u16)0x0002)#define I2C_Mode_SMBusHost ((u16)0x000A)#define IS_I2C_MODE(MODE) (((MODE) == I2C_Mode_I2C) || \((MODE) == I2C_Mode_SMBusDevice) || \((MODE) == I2C_Mode_SMBusHost))/* I2C duty cycle in fast mode */#define I2C_DutyCycle_16_9 ((u16)0x4000)#define I2C_DutyCycle_2 ((u16)0xBFFF)#define IS_I2C_DUTY_CYCLE(CYCLE) (((CYCLE) == I2C_DutyCycle_16_9) || \((CYCLE) == I2C_DutyCycle_2))/* I2C cknowledgementy */#define I2C_Ack_Enable ((u16)0x0400)#define I2C_Ack_Disable ((u16)0x0000)#define IS_I2C_ACK_ST A TE(ST A TE) (((ST A TE) == I2C_Ack_Enable) || \((ST A TE) == I2C_Ack_Disable))/* I2C transfer direction */#define I2C_Direction_Transmitter ((u8)0x00)#define I2C_Direction_Receiver ((u8)0x01)#define IS_I2C_DIRECTION(DIRECTION) (((DIRECTION) == I2C_Direction_Transmitter) || \((DIRECTION) == I2C_Direction_Receiver))/* I2C acknowledged address defines */#define I2C_AcknowledgedAddress_7bit ((u16)0x4000)#define I2C_AcknowledgedAddress_10bit ((u16)0xC000)#define IS_I2C_ACKNOWLEDGE_ADDRESS(ADDRESS) (((ADDRESS) == I2C_AcknowledgedAddress_7bit) || \((ADDRESS) == I2C_AcknowledgedAddress_10bit))/* I2C registers */#define I2C_Register_CR1 ((u8)0x00)#define I2C_Register_CR2 ((u8)0x04)#define I2C_Register_OAR1 ((u8)0x08)#define I2C_Register_OAR2 ((u8)0x0C)#define I2C_Register_DR ((u8)0x10)#define I2C_Register_SR1 ((u8)0x14)#define I2C_Register_SR2 ((u8)0x18)#define I2C_Register_CCR ((u8)0x1C)#define I2C_Register_TRISE ((u8)0x20)#define IS_I2C_REGISTER(REGISTER) (((REGISTER) == I2C_Register_CR1) || \((REGISTER) == I2C_Register_CR2) || \((REGISTER) == I2C_Register_OAR1) || \((REGISTER) == I2C_Register_OAR2) || \((REGISTER) == I2C_Register_DR) || \((REGISTER) == I2C_Register_SR1) || \((REGISTER) == I2C_Register_SR2) || \((REGISTER) == I2C_Register_CCR) || \((REGISTER) == I2C_Register_TRISE))/* I2C SMBus alert pin level */#define I2C_SMBusAlert_Low ((u16)0x2000)#define I2C_SMBusAlert_High ((u16)0xDFFF)#define IS_I2C_SMBUS_ALERT(ALERT) (((ALERT) == I2C_SMBusAlert_Low) || \((ALERT) == I2C_SMBusAlert_High))/* I2C PEC position */#define I2C_PECPosition_Next ((u16)0x0800)#define I2C_PECPosition_Current ((u16)0xF7FF)#define IS_I2C_PEC_POSITION(POSITION) (((POSITION) == I2C_PECPosition_Next) || \((POSITION) == I2C_PECPosition_Current))/* I2C interrupts definition */#define I2C_IT_BUF ((u16)0x0400)#define I2C_IT_EVT ((u16)0x0200)#define I2C_IT_ERR ((u16)0x0100)#define IS_I2C_CONFIG_IT(IT) ((((IT) & (u16)0xF8FF) == 0x00) && ((IT) != 0x00))/* I2C interrupts definition */#define I2C_IT_SMBALERT ((u32)0x10008000)#define I2C_IT_TIMEOUT ((u32)0x10004000)#define I2C_IT_PECERR ((u32)0x10001000)#define I2C_IT_OVR ((u32)0x10000800)#define I2C_IT_AF ((u32)0x10000400)#define I2C_IT_ARLO ((u32)0x10000200)#define I2C_IT_BERR ((u32)0x10000100)#define I2C_IT_TXE ((u32)0x00000080)#define I2C_IT_RXNE ((u32)0x00000040)#define I2C_IT_STOPF ((u32)0x60000010)#define I2C_IT_ADD10 ((u32)0x20000008)#define I2C_IT_BTF ((u32)0x60000004)#define I2C_IT_ADDR ((u32)0xA0000002)#define I2C_IT_SB ((u32)0x20000001)#define IS_I2C_CLEAR_IT(IT) (((IT) == I2C_IT_SMBALERT) || ((IT) == I2C_IT_TIMEOUT) || \((IT) == I2C_IT_PECERR) || ((IT) == I2C_IT_OVR) || \((IT) == I2C_IT_AF) || ((IT) == I2C_IT_ARLO) || \((IT) == I2C_IT_BERR) || ((IT) == I2C_IT_STOPF) || \((IT) == I2C_IT_ADD10) || ((IT) == I2C_IT_BTF) || \((IT) == I2C_IT_ADDR) || ((IT) == I2C_IT_SB))#define IS_I2C_GET_IT(IT) (((IT) == I2C_IT_SMBALERT) || ((IT) == I2C_IT_TIMEOUT) || \((IT) == I2C_IT_PECERR) || ((IT) == I2C_IT_OVR) || \((IT) == I2C_IT_AF) || ((IT) == I2C_IT_ARLO) || \((IT) == I2C_IT_BERR) || ((IT) == I2C_IT_TXE) || \((IT) == I2C_IT_RXNE) || ((IT) == I2C_IT_STOPF) || \((IT) == I2C_IT_ADD10) || ((IT) == I2C_IT_BTF) || \((IT) == I2C_IT_ADDR) || ((IT) == I2C_IT_SB))/* I2C flags definition */#define I2C_FLAG_DUALF ((u32)0x00800000)#define I2C_FLAG_SMBHOST ((u32)0x00400000)#define I2C_FLAG_SMBDEF AUL T ((u32)0x00200000)#define I2C_FLAG_GENCALL ((u32)0x00100000)#define I2C_FLAG_TRA ((u32)0x00040000)#define I2C_FLAG_BUSY ((u32)0x00020000)#define I2C_FLAG_MSL ((u32)0x00010000)#define I2C_FLAG_SMBALERT ((u32)0x10008000)#define I2C_FLAG_TIMEOUT ((u32)0x10004000)#define I2C_FLAG_PECERR ((u32)0x10001000)#define I2C_FLAG_OVR ((u32)0x10000800)#define I2C_FLAG_AF ((u32)0x10000400)#define I2C_FLAG_ARLO ((u32)0x10000200)#define I2C_FLAG_BERR ((u32)0x10000100)#define I2C_FLAG_TXE ((u32)0x00000080)#define I2C_FLAG_RXNE ((u32)0x00000040)#define I2C_FLAG_STOPF ((u32)0x60000010)#define I2C_FLAG_ADD10 ((u32)0x20000008)#define I2C_FLAG_BTF ((u32)0x60000004)#define I2C_FLAG_ADDR ((u32)0xA0000002)#define I2C_FLAG_SB ((u32)0x20000001)#define IS_I2C_CLEAR_FLAG(FLAG) (((FLAG) == I2C_FLAG_SMBALERT) || ((FLAG) == I2C_FLAG_TIMEOUT) || \((FLAG) == I2C_FLAG_PECERR) || ((FLAG) == I2C_FLAG_OVR) || \((FLAG) == I2C_FLAG_AF) || ((FLAG) == I2C_FLAG_ARLO) || \((FLAG) == I2C_FLAG_BERR) || ((FLAG) == I2C_FLAG_STOPF) || \((FLAG) == I2C_FLAG_ADD10) || ((FLAG) == I2C_FLAG_BTF) || \((FLAG) == I2C_FLAG_ADDR) || ((FLAG) == I2C_FLAG_SB))#define IS_I2C_GET_FLAG(FLAG) (((FLAG) == I2C_FLAG_DUALF) || ((FLAG) == I2C_FLAG_SMBHOST) || \((FLAG) == I2C_FLAG_SMBDEF AUL T) || ((FLAG) == I2C_FLAG_GENCALL) || \((FLAG) == I2C_FLAG_TRA) || ((FLAG) == I2C_FLAG_BUSY) || \((FLAG) == I2C_FLAG_MSL) || ((FLAG) == I2C_FLAG_SMBALERT) || \((FLAG) == I2C_FLAG_TIMEOUT) || ((FLAG) == I2C_FLAG_PECERR) || \((FLAG) == I2C_FLAG_OVR) || ((FLAG) == I2C_FLAG_AF) || \((FLAG) == I2C_FLAG_ARLO) || ((FLAG) == I2C_FLAG_BERR) || \((FLAG) == I2C_FLAG_TXE) || ((FLAG) == I2C_FLAG_RXNE) || \((FLAG) == I2C_FLAG_STOPF) || ((FLAG) == I2C_FLAG_ADD10) || \((FLAG) == I2C_FLAG_BTF) || ((FLAG) == I2C_FLAG_ADDR) || \((FLAG) == I2C_FLAG_SB))/* I2C Events *//* EV1 */#define I2C_EVENT_SLA VE_TRANSMITTER_ADDRESS_MA TCHED ((u32)0x00060082) /* TRA, BUSY, TXE and ADDR flags */#define I2C_EVENT_SLA VE_RECEIVER_ADDRESS_MA TCHED ((u32)0x00020002) /* BUSY and ADDR flags */#define I2C_EVENT_SLA VE_TRANSMITTER_SECONDADDRESS_MA TCHED ((u32)0x00860080) /* DUALF, TRA, BUSY and TXE flags */#define I2C_EVENT_SLA VE_RECEIVER_SECONDADDRESS_MA TCHED ((u32)0x00820000) /* DUALF and BUSY flags */#define I2C_EVENT_SLA VE_GENERALCALLADDRESS_MA TCHED ((u32)0x00120000) /* GENCALL and BUSY flags *//* EV2 */#define I2C_EVENT_SLA VE_BYTE_RECEIVED ((u32)0x00020040) /* BUSY and RXNE flags *//* EV3 */#define I2C_EVENT_SLA VE_BYTE_TRANSMITTED ((u32)0x00060084) /* TRA, BUSY, TXE and BTF flags *//* EV4 */#define I2C_EVENT_SLA VE_STOP_DETECTED ((u32)0x00000010) /* STOPF flag *//* EV5 */#define I2C_EVENT_MASTER_MODE_SELECT ((u32)0x00030001) /* BUSY, MSL and SB flag *//* EV6 */#define I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED ((u32)0x00070082) /* BUSY, MSL, ADDR, TXE and TRA flags */#define I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED ((u32)0x00030002) /* BUSY, MSL and ADDR flags *//* EV7 */#define I2C_EVENT_MASTER_BYTE_RECEIVED ((u32)0x00030040) /* BUSY, MSL and RXNE flags *//* EV8 */#define I2C_EVENT_MASTER_BYTE_TRANSMITTED ((u32)0x00070084) /* TRA, BUSY, MSL, TXE and BTF flags *//* EV9 */#define I2C_EVENT_MASTER_MODE_ADDRESS10 ((u32)0x00030008) /* BUSY, MSL and ADD10 flags *//* EV3_2 */#define I2C_EVENT_SLA VE_ACK_F AILURE ((u32)0x00000400) /* AF flag */#define IS_I2C_EVENT(EVENT) (((EVENT) == I2C_EVENT_SLA VE_TRANSMITTER_ADDRESS_MA TCHED) || \((EVENT) == I2C_EVENT_SLA VE_RECEIVER_ADDRESS_MA TCHED) || \((EVENT) == I2C_EVENT_SLA VE_TRANSMITTER_SECONDADDRESS_MA TCHED) || \((EVENT) == I2C_EVENT_SLA VE_RECEIVER_SECONDADDRESS_MA TCHED) || \((EVENT) == I2C_EVENT_SLA VE_GENERALCALLADDRESS_MA TCHED) || \((EVENT) == I2C_EVENT_SLA VE_BYTE_RECEIVED) || \((EVENT) == (I2C_EVENT_SLA VE_BYTE_RECEIVED | I2C_FLAG_DUALF)) || \((EVENT) == (I2C_EVENT_SLA VE_BYTE_RECEIVED | I2C_FLAG_GENCALL)) || \((EVENT) == I2C_EVENT_SLA VE_BYTE_TRANSMITTED) || \((EVENT) == (I2C_EVENT_SLA VE_BYTE_TRANSMITTED | I2C_FLAG_DUALF)) || \((EVENT) == (I2C_EVENT_SLA VE_BYTE_TRANSMITTED | I2C_FLAG_GENCALL)) || \((EVENT) == I2C_EVENT_SLA VE_STOP_DETECTED) || \((EVENT) == I2C_EVENT_MASTER_MODE_SELECT) || \((EVENT) == I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED) || \((EVENT) == I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED) || \((EVENT) == I2C_EVENT_MASTER_BYTE_RECEIVED) || \((EVENT) == I2C_EVENT_MASTER_BYTE_TRANSMITTED) || \((EVENT) == I2C_EVENT_MASTER_MODE_ADDRESS10) || \((EVENT) == I2C_EVENT_SLA VE_ACK_F AILURE))/* I2C own address1 -----------------------------------------------------------*/#define IS_I2C_OWN_ADDRESS1(ADDRESS1) ((ADDRESS1) <= 0x3FF)/* I2C clock speed ------------------------------------------------------------*/#define IS_I2C_CLOCK_SPEED(SPEED) (((SPEED) >= 0x1) && ((SPEED) <= 400000))/* Exported macro ------------------------------------------------------------*//* Exported functions ------------------------------------------------------- */void I2C_DeInit(I2C_TypeDef* I2Cx);void I2C_Init(I2C_TypeDef* I2Cx, I2C_InitTypeDef* I2C_InitStruct);void I2C_StructInit(I2C_InitTypeDef* I2C_InitStruct);void I2C_Cmd(I2C_TypeDef* I2Cx, FunctionalState NewState);void I2C_DMACmd(I2C_TypeDef* I2Cx, FunctionalState NewState);void I2C_DMALastTransferCmd(I2C_TypeDef* I2Cx, FunctionalState NewState);void I2C_GenerateST ART(I2C_TypeDef* I2Cx, FunctionalState NewState);void I2C_GenerateSTOP(I2C_T ypeDef* I2Cx, FunctionalState NewState);void I2C_AcknowledgeConfig(I2C_TypeDef* I2Cx, FunctionalState NewState);void I2C_OwnAddress2Config(I2C_TypeDef* I2Cx, u8 Address);void I2C_DualAddressCmd(I2C_TypeDef* I2Cx, FunctionalState NewState);void I2C_GeneralCallCmd(I2C_TypeDef* I2Cx, FunctionalState NewState);void I2C_ITConfig(I2C_TypeDef* I2Cx, u16 I2C_IT, FunctionalState NewState);void I2C_SendData(I2C_TypeDef* I2Cx, u8 Data);u8 I2C_ReceiveData(I2C_TypeDef* I2Cx);void I2C_Send7bitAddress(I2C_TypeDef* I2Cx, u8 Address, u8 I2C_Direction);u16 I2C_ReadRegister(I2C_TypeDef* I2Cx, u8 I2C_Register);void I2C_SoftwareResetCmd(I2C_TypeDef* I2Cx, FunctionalState NewState);void I2C_SMBusAlertConfig(I2C_TypeDef* I2Cx, u16 I2C_SMBusAlert);void I2C_TransmitPEC(I2C_TypeDef* I2Cx, FunctionalState NewState);void I2C_PECPositionConfig(I2C_TypeDef* I2Cx, u16 I2C_PECPosition);void I2C_CalculatePEC(I2C_TypeDef* I2Cx, FunctionalState NewState);u8 I2C_GetPEC(I2C_TypeDef* I2Cx);void I2C_ARPCmd(I2C_TypeDef* I2Cx, FunctionalState NewState);void I2C_StretchClockCmd(I2C_TypeDef* I2Cx, FunctionalState NewState);void I2C_FastModeDutyCycleConfig(I2C_TypeDef* I2Cx, u16 I2C_DutyCycle);u32 I2C_GetLastEvent(I2C_TypeDef* I2Cx);ErrorStatus I2C_CheckEvent(I2C_TypeDef* I2Cx, u32 I2C_EVENT);FlagStatus I2C_GetFlagStatus(I2C_TypeDef* I2Cx, u32 I2C_FLAG);void I2C_ClearFlag(I2C_TypeDef* I2Cx, u32 I2C_FLAG);ITStatus I2C_GetITStatus(I2C_TypeDef* I2Cx, u32 I2C_IT);void I2C_ClearITPendingBit(I2C_TypeDef* I2Cx, u32 I2C_IT);#endif /*__STM32F10x_I2C_H *//******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/[3] 源文件1/****************************************Copyright (c)****************************************************** ****--------------File Info-------------------------------------------------------------------------------** File name: 24C02.c** Descriptions: 24C02 操作函数库****------------------------------------------------------------------------------------------------------** Created by: A VRman** Created date: 2010-10-29** V ersion: 1.0** Descriptions: The original version****------------------------------------------------------------------------------------------------------** Modified by:** Modified date:** V ersion:** Descriptions:********************************************************************************************************//* Includes ------------------------------------------------------------------*/#include "HMC5883L.h"#include "Grobalfunction.h"/******************************************************************************** Function Name : I2C_Configuration* Description : EEPROM管脚配置* Input : None* Output : None* Return : None* Attention : None*******************************************************************************/void I2C_Configuration(void){I2C_InitTypeDef I2C_InitStructure;GPIO_InitTypeDef GPIO_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO , ENABLE);/* Configure I2C1 pins: PB6->SCL and PB7->SDA */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;///6,7->8,9GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;GPIO_Init(GPIOB, &GPIO_InitStructure);I2C_DeInit(I2C1);I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;I2C_InitStructure.I2C_OwnAddress1 = 0x30;I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;I2C_InitStructure.I2C_ClockSpeed = 100000; /* 100K速度*/I2C_Cmd(I2C1, ENABLE);I2C_Init(I2C1, &I2C_InitStructure);/*允许1字节1应答模式*/I2C_AcknowledgeConfig(I2C1, ENABLE);}/******************************************************************************* * Function Name : I2C_delay* Description : 延迟时间* Input : None* Output : None* Return : None* Attention : None*******************************************************************************/ static void I2C_delay(u16 cnt){while(cnt--);}/******************************************************************************* * Function Name : I2C_AcknowledgePolling* Description : 等待获取I2C总线控制权判断忙状态* Input : - I2Cx:I2C寄存器基址* - I2C_Addr:从器件地址* Output : None* Return : None* Attention : None*******************************************************************************/ static void I2C_AcknowledgePolling(I2C_TypeDef *I2Cx,u8 I2C_Addr){vu16 SR1_Tmp;do{I2C_GenerateST ART(I2Cx, ENABLE); /*起始位*//*读SR1*/SR1_Tmp = I2C_ReadRegister(I2Cx, I2C_Register_SR1);/*器件地址(写)*/#ifdef A T24C01AI2C_Send7bitAddress(I2Cx, I2C_Addr, I2C_Direction_Transmitter);#elseI2C_Send7bitAddress(I2Cx, 0, I2C_Direction_Transmitter);#endif}while(!(I2C_ReadRegister(I2Cx, I2C_Register_SR1) & 0x0002));I2C_ClearFlag(I2Cx, I2C_FLAG_AF);I2C_GenerateSTOP(I2Cx, ENABLE); /*停止位*/}/******************************************************************************** Function Name : I2C_Read* Description : 通过指定I2C接口读取多个字节数据* Input : - I2Cx:I2C寄存器基址* - I2C_Addr:从器件地址* - addr:预读取字节存储位置* - *buf:读取数据的存储位置* - num:读取字节数* Output : None* Return : 成功返回0* Attention : None*******************************************************************************/u8 I2C_Read(I2C_TypeDef *I2Cx,u8 I2C_Addr,u8 addr,u8 *buf,u16 num){///u16 angle;if(num==0)return 1;while(I2C_GetFlagStatus(I2Cx, I2C_FLAG_BUSY));/*允许1字节1应答模式*/I2C_AcknowledgeConfig(I2Cx, ENABLE);/* 发送起始位*/I2C_GenerateST ART(I2Cx, ENABLE);while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_MODE_SELECT));/*EV5,主模式*////#ifdef A T24C01A/*发送器件地址(写)*/I2C_Send7bitAddress(I2Cx, I2C_Addr, I2C_Direction_Transmitter);while (!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));/*发送地址*/I2C_SendData(I2Cx, addr);while (!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_BYTE_TRANSMITTED));/*数据已发送*/ /*起始位*/I2C_GenerateST ART(I2Cx, ENABLE);while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_MODE_SELECT));/*器件读*/I2C_Send7bitAddress(I2Cx, I2C_Addr, I2C_Direction_Receiver);/// while(1);while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));///#else/*发送器件地址(读)24C01*//// I2C_Send7bitAddress(I2Cx, addr<<1, I2C_Direction_Receiver);/// while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));///#endifwhile (num){if(num==1){I2C_AcknowledgeConfig(I2Cx, DISABLE); /* 最后一位后要关闭应答的*/ I2C_GenerateSTOP(I2Cx, ENABLE); /* 发送停止位*/return 0;}/*器件读*//// I2C_Send7bitAddress(I2Cx, I2C_Addr, I2C_Direction_Receiver);while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_BYTE_RECEIVED)); /* EV7 */*buf = I2C_ReceiveData(I2Cx);buf++;/* Decrement the read bytes counter */num--;/// I2C_Send7bitAddress(I2Cx, I2C_Addr, I2C_Direction_Receiver);/// while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));}/* 再次允许应答模式*/I2C_AcknowledgeConfig(I2Cx, ENABLE);return 0;}/******************************************************************************** Function Name : I2C_WriteOneByte* Description : 通过指定I2C接口写入一个字节数据* Input : - I2Cx:I2C寄存器基址* - I2C_Addr:从器件地址* - addr:预写入字节地址* - value:写入数据* Output : None* Return : 成功返回0* Attention : None*******************************************************************************/u8 I2C_WriteOneByte(I2C_TypeDef *I2Cx,u8 I2C_Addr,u8 addr,u8 value){/* 起始位*/I2C_GenerateST ART(I2Cx, ENABLE);while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_MODE_SELECT));///#ifdef A T24C01A/* 发送器件地址(写)*/I2C_Send7bitAddress(I2Cx, I2C_Addr, I2C_Direction_Transmitter);while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));/*发送地址*/I2C_SendData(I2Cx, addr);while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_BYTE_TRANSMITTED));///#else/// I2C_Send7bitAddress(I2Cx, addr<<1, I2C_Direction_Transmitter);/// while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)); ///#endif/* 写一个字节*/I2C_SendData(I2Cx, value);while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_BYTE_TRANSMITTED));/* 停止位*/I2C_GenerateSTOP(I2Cx, ENABLE);I2C_AcknowledgePolling(I2Cx,I2C_Addr);I2C_delay(1000);return 0;}/******************************************************************************** Function Name : I2C_Write* Description : 通过指定I2C接口写入多个字节数据* Input : - I2Cx:I2C寄存器基址* - I2C_Addr:从器件地址* - addr:预写入字节地址* - *buf:预写入数据存储位置* - num:写入字节数* Output : None* Return : 成功返回0* Attention : None*******************************************************************************/u8 I2C_Write(I2C_TypeDef *I2Cx,u8 I2C_Addr,u8 addr,u8 *buf,u16 num){u8 err=0;while(num--){if(I2C_WriteOneByte(I2Cx, I2C_Addr,addr++,*buf++)){err++;}}if(err)return 1;elsereturn 0;}//初始化HMC5883,根据需要请参考pdf进行修改****void Init_HMC5883(){///Single_Write_HMC5883(0x02,0x00); //I2C_WriteOneByte(I2C1,0x3c,0x02,0);}/************************************************************************************************************/ /******************************************************************************** Function Name : void Axia3AngInit(void).* Description : Read 3 axia angle data from HMC5883 then process the data.* Input : - I2Cx:I2C寄存器基址* - I2C_Addr:从器件地址* - addr:预写入字节地址* - value:写入数据* Output : None* Return : 成功返回0* Attention : None*******************************************************************************/void Axia3AngInit(void){I2C_Configuration();Init_HMC5883();}/************************************************************************************************************//************************************************************************************************************/ /******************************************************************************** Function Name : Detect3AxiaAng();* Description : Read 3 axia angle data from HMC5883 then process the data.* Input : - I2Cx:I2C寄存器基址* - I2C_Addr:从器件地址* - addr:预写入字节地址* - value:写入数据* Output : None* Return : 成功返回0* Attention : None*******************************************************************************/void Detect3AxiaAng(void){I2C_Read(I2C1,0x3C,0x03,BUF,7);//Axia3Ang_x=BUF[0] << 8 | BUF[1]; //Combine MSB and LSB of X Data output registerAxia3Ang_z=BUF[2] << 8 | BUF[3]; //Combine MSB and LSB of Z Data output registerAxia3Ang_y=BUF[4] << 8 | BUF[5]; //Combine MSB and LSB of Y Data output register/*//Get float dataAxia3Ang_xF=Axia3Ang_x*0.0 BUF[0] << 8 | BUF[1]; //Combine MSB and LSB of X Data output registerAxia3Ang_zF=Axia3Ang_x* BUF[2] << 8 | BUF[3]; //Combine MSB and LSB of Z Data output registerAxia3Ang_yF=Axia3Ang_x* BUF[4] << 8 | BUF[5]; //Combine MSB and LSB of Y Data output register// delay_ms(500);*/}//*********************************************************//主程序********//*********************************************************void HMC5883L_test(void ){ // bit sign_bit;///unsigned int i;///int x,y,z;///double angle;I2C_Configuration();Init_HMC5883();while(1) //循环{///// Multiple_Read_HMC5883(); //连续读出数据,存储在BUF中///loop1:I2C_Read(I2C1,0x3C,0x03,BUF,7);////---------显示X轴delay_ms(10);/// goto loop1;/// while(1);Axia3Ang_x=BUF[0] << 8 | BUF[1]; //Combine MSB and LSB of X Data output registerAxia3Ang_z=BUF[2] << 8 | BUF[3]; //Combine MSB and LSB of Z Data output registerAxia3Ang_y=BUF[4] << 8 | BUF[5]; //Combine MSB and LSB of Y Data output registerdelay_ms(500);/// angle= atan2((double)y,(double)x) * (180 / 3.14159265) + 180; // angle in degrees/// angle*=10;///conversion(angle); //计算数据和显示///for (i=0;i<10000;i++); //延时}}/********************************************************************************************************* END FILE*********************************************************************************************************/[4] 源文件4/******************** (C) COPYRIGHT 2008 STMicroelectronics ********************* File Name : stm32f10x_i2c.c* Author : MCD Application T eam* V ersion : V2.0.1* Date : 06/13/2008* Description : This file provides all the I2C firmware functions.********************************************************************************* THE PRESENT FIRMW ARE WHICH IS FOR GUIDANCE ONL Y AIMS A T PROVIDING CUSTOMERS* WITH CODING INFORMA TION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SA VE TIME. * AS A RESUL T, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE * CONTENT OF SUCH FIRMW ARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING* INFORMA TION CONT AINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.*******************************************************************************//* Includes ------------------------------------------------------------------*/#include "stm32f10x_i2c.h"#include "stm32f10x_rcc.h"/* Private typedef -----------------------------------------------------------*//* Private define ------------------------------------------------------------*//* I2C SPE mask */#define CR1_PE_Set ((u16)0x0001)#define CR1_PE_Reset ((u16)0xFFFE)/* I2C ST ART mask */#define CR1_ST ART_Set ((u16)0x0100)#define CR1_ST ART_Reset ((u16)0xFEFF)/* I2C STOP mask */#define CR1_STOP_Set ((u16)0x0200)#define CR1_STOP_Reset ((u16)0xFDFF)/* I2C ACK mask */#define CR1_ACK_Set ((u16)0x0400)#define CR1_ACK_Reset ((u16)0xFBFF)/* I2C ENGC mask */#define CR1_ENGC_Set ((u16)0x0040)#define CR1_ENGC_Reset ((u16)0xFFBF)/* I2C SWRST mask */#define CR1_SWRST_Set ((u16)0x8000)#define CR1_SWRST_Reset ((u16)0x7FFF)/* I2C PEC mask */#define CR1_PEC_Set ((u16)0x1000)#define CR1_PEC_Reset ((u16)0xEFFF)/* I2C ENPEC mask */#define CR1_ENPEC_Set ((u16)0x0020)#define CR1_ENPEC_Reset ((u16)0xFFDF)/* I2C ENARP mask */#define CR1_ENARP_Set ((u16)0x0010)#define CR1_ENARP_Reset ((u16)0xFFEF)/* I2C NOSTRETCH mask */#define CR1_NOSTRETCH_Set ((u16)0x0080)。

HMC5883L标定补偿

HMC5883L标定补偿

this calibration will correct or compensate for the hard iron effects.hard iron effects are magnetic filed superimpositions on the earth's magnetic field that are fixed in magnitude and which do not depend on the orientation of the compass.the compass calibration shall be initiated by a user command that put the compass into the calibration mode. once in that mode the compass shall be rotated through 360 degrees abouth the forward or left direction followed by a 360 rotation about the up-down direction. that is, there are two full rotations required to complete the physical movement required. at the end of the rotations a command to end the calibration process shall be issued by the user to the compass.it is important to keep the forward (or left ) axis level during the first rotation and to keep the up-down axis vertical during the second calibration and until the flu calibration is complete. Failure to follow these process will result in less than optimal calibration and heading errors are likely.#define calthreshold 0int Xmax,Xmin,Ymax,Ymin,Zmax,Zmin;viod Intialize_Cal_Variables(int MagX, int MagY, int MagZ)void Calibrate(int MagX, int MagY, int MagZ)void Compute_and_Save(void)void Hard_Iron_correction(int Xoff, int Yoff, int Zoff)viod Intialize_Cal_Variables(int MagX, int MagY, int MagZ){//set Max and Min values of the mag output to the current valuesXmax = MagX;Xmin = MagX;Ymax = MagY;Ymin = MagY;Zmax = MagZ;Zmin = MagZ;}void Calibrate(int MagX, int MagY, int MagZ){//this routine will capture the max and min values of the magX,Y,Z data while the //compass is being rotated 360 degrees through the level plane and the upright plane.//i.e. horizontal and vertical circles.//This function should be invoked while making continuous measurements//on the magnetometersint MagXreading,int MagYreading,int MagZreading;MagXreading = MagX;MagYreading = MagY;MagZreading = MagZ;if(MagXreading > Xmax) Xmax = MagXreading;if(MagXreading < Xmin) Xmin = MagXreading;if(MagYreading > Ymax) Ymax = MagYreading;if(MagXreading < Ymin) Ymin = MagXreading;if(MagZreading > Zmax) Zmax = MagZreading;if(MagXreading < Zmin) Zmin = MagXreading;}void Compute_and_Save(void){if(abs(Xmax - Xmin) > CalThreshold){Mag_UserCal_offset_X = (Xmax + Xmin)/2;//save parameters in EE}if(abs(Ymax - Ymin) > CalThreshold){Mag_UserCal_offset_Y = (Ymax + Ymin)/2;//save parameters in EE}if(abs(Zmax - Zmin) > CalThreshold){Mag_UserCal_offset_Z = (Zmax + Zmin)/2;//save parameters in EE}}void Hard_Iron_correction(int Xoff, int Yoff, int Zoff) {//call this function for correctionMagX -= Mag_UserCal_Offset_X;MagY -= Mag_UserCal_Offset_Y;MagZ -= Mag_UserCal_Offset_Z;}。

HMC5883资料整理

HMC5883资料整理

HMC5883L3轴数字罗盘IC--采用霍尼韦尔各向异性磁阻(AMR)技术物质在磁场中电阻率发生变化的现象称为磁阻效应,磁阻传感器利用磁阻效应制成。

磁场的测量可利用电磁效应,霍尔效应,磁阻效应等各种效应。

其中磁阻效应法发展最快,测量灵敏度最高。

磁阻传感器可用于直接测量磁场或磁场变化,如弱磁场测量,地磁场测量,各种导航系统中的罗盘,计算机中的磁盘驱动器,各种磁卡机等等。

也可以通过磁场变化测量其他物理量,如利用磁阻效应已制成各种位移、角度、转速传感器,各种接近开关,隔离开关,广泛用于汽车、家电及各类需要自动检测与控制的领域。

磁阻元件的发展经历了半导体磁阻(MR),各向异性磁阻(AMR),巨磁阻(GMR),庞磁阻(CMR)等阶段。

各向异性磁阻传感器AMR(Anisotropic Magneto-Resistive sensors)由沉积在硅片上的坡莫合金薄膜形成电阻,沉积时外加磁场,形成易磁化轴方向。

铁磁材料的电阻与电流方向和磁化方向的夹角有关,电流与磁化方向平行是电阻Rmax最大,电流与磁化方向垂直是电阻Rmin最小,电流与磁化方向成θ角时,电阻可表示为:在磁阻传感器中,为消除温度等外界因素对输出的影响,有4个相同的磁阻元件构成惠斯通电桥。

AMR各向异性磁电阻效应指铁磁金属或合金中,磁场平行电流和垂直电流方向电阻率发生变化的效应。

AMR各向异性传感器的基本单元是用一种长而薄的坡莫(Ni-Fe)合金用半导体工艺沉积在以硅衬底上制成的,沉积的时候薄膜以条带的形式排布,形成一个平面的线阵以增加磁阻的感知磁场的面积。

外加磁场使得磁阻内部的磁畴指向发生变化,进而与电流的夹角θ发生变化,就表现为磁阻电阻各向异性的变化。

(1)服从式(1)中:Rmin为电流方向与磁化方向垂直时的电阻值;Rmax为电流方向与磁化方向平行时的电流值。

从图1可以清楚地看到,当电流方向与磁化方向平行时,传感器最敏感。

而一般磁阻都工作于图中45°线性区附近,这样可以实现输出的线性特性。

飞控系统中最常用的传感器芯片,ADXL345、HMC5883、ITG3200是应用

飞控系统中最常用的传感器芯片,ADXL345、HMC5883、ITG3200是应用

飞控系统中最常用的传感器芯片,ADXL345、HMC5883、ITG3200是应用飞控系统中最常用的传感器芯片,ADXL345、HMC5883、ITG3200 是应用最为广泛的。

•ADXL345,为加速度感应芯片,常用于测量设备倾角。

•HMC5883L,为电子罗盘,俗称电子指南针。

•ITG3200/ITG3205,为角速度传感器/电子陀螺仪。

三种传感器,都与物体的空间位置和角度有关,在理解其读数意义前,需要首先建立直空间三维坐标系,由右手法则确定。

ADXL345,是加速度感应芯片,可以测量正交三轴的加速度,好像有点玄乎。

其实,换一个角度来看,因为F=ma,(牛顿第一定律),其中质量m为定值,所以测量了加速度a,也就得出了当前物体所受的力。

其物理模型,可以理解为在无重力环境下的空心立方体中悬浮的小球。

在经典物理学静止的状态下,这个小球无疑受到重力的作用,所以,这个小球是悬浮不起来的。

所以它就落在“地上”。

而“地面”感应到了来自于小球的压力,进而测量出小球的重力。

而测出了重力,就测得了当前的重力加速度。

再扩展一下,这个加速度可以来自于重力,当然也可以来自于其它力,比方说引擎的推力,刹车的摩擦力,等等。

由于在经典环境下重力加速度始终存在,所以加速度传感器时刻感应到的是重力,以及外界合力,共同作用下所得到的加速度。

换句话说,加速度传感器始终能测量到重力加速度,所以在静止状态下,根据重力加速度在x、y、z三轴的分量,可以测得传感器当前的倾斜角度。

所以ADXL345常被用作倾斜传感器来使用。

以右手定则,建立直角坐标系以后,注需要加速度的方向坐标系是“反向”的关系。

也就说,在静止平放的状态下。

Z轴正方向朝上,重力角速度方向朝下,而此时传感器的Z轴读数却是“正数”。

或者说,虽然是传感器内部的小球受的加速度影响,但是我们是通过小球对其周边各个作用面的影响,来获取读数的。

根据《牛顿第三运动定律》,我们实际测得是这个”方向相反、大小相同”的力。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Absolute Maximum Ratings (* Tested at 25°C except stated otherwise.)
Characteristics Supply Voltage VDD Supply Voltage VDDIO Min -0.3 -0.3 Max 4.8 4.8 Units Volts Volts
2
2
Controlled by I C Master Hysteresis of Schmitt trigger inputs on SCL and SDA - Fall (VDDIO=1.8V) Rise (VDDIO=1.8V) 0.2*VDDIO 0.8*VDDIO ±1.16 ±1.08 440
2
Advanced Information
The HMC5883L utilizes Honeywell’s Anisotropic Magnetoresistive (AMR) technology th at provides advantages over other magnetic sensor technologies. These anisotropic, directional sensors feature precision in-axis sensitivity and linearity. These sensors’ solid-state construction with very low cross-axis sensitivity is designed to measure both the direction and the magnitude of Earth’s magnetic fields, from milli-gauss to 8 gauss. Honeywell’s Magnetic Sensors are among the most sensitive and reliable low-field sensors in the industry.
-8 ±1 5
+8 ±8 0.1 ±25 ±0.2%
gauss gauss milli-gauss ±% FS ppm %FS/gauss
0.75 6 200 ±5 0x1E 0x3D 0x3C
75 160
Hz Hz msec μs % hex hex hex
I C Rate I C Hysteresis
2
BENEFITS
Size for Highly Integrated Products. Just Add a Micro Small Controller Interface, Plus Two External SMT Capacitors Designed for High Volume, Cost Sensitive OEM Designs Easy to Assemble & Compatible with High Speed SMT Assembly
Can Be Used in Strong Magnetic Field Environments with a Sensors 1° to 2° Degree Compass Heading Accuracy Heading, Hard Iron, Soft Iron, and Auto Calibration Compassing Libraries Available
and Offset Strap Drivers for Degaussing, Self Test, and Set/Reset Offset Compensation
Popular Two-Wire Serial Data Interface for Consumer Electronics RoHS Compliance

Enables 1° to 2° Degree Compass Heading Accuracy Enables Low-Cost Functionality Test after Assembly in Production Compatible for Battery Powered Applications
2
Conditions*
Min 2.16 1.71 -
Typ
Max 3.6
Units Volts Volts μA μA
1.8 2 100
VDD+0.1 6 -
Full scale (FS) – total applied field (Typical) 3-bit gain control VDD=3.0V, GN=2 ±2.0 gauss input range ±2.0 gauss input range Test Conditions: Cross field = 0.5 gauss, Happlied = ±3 gauss Continuous Measurment Mode Single Measurement Mode From receiving command to data ready Ready for I2C commands All gain/dynamic range settings 7-bit address 8-bit read address 8-bit write address
PIN CONFIGURATIONS
Pin 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Name SCL VDD NC S1 NC NC NC SETP GND C1 GND SETC VDDIO NC DRDY SDA
2
Description Serial Clock – I C Master/Slave Clock Power Supply (2.16V to 3.6V) Not to be Connected Tie to VDDIO Not to be Connected Not to be Connected Not to be Connected Set/Reset Strap Positive – S/R Capacitor (C2) Connection Supply Ground Reservoir Capacitor (C1) Connection Supply Ground S/R Capacitor (C2) Connection – Driver Side IO Power Supply (1.71V to VDD) Not to be Connected Data Ready, Interrupt Pin. Internally pulled high. Optional connection. Low for 250 µsec when data is placed in the data output registers. 2 Serial Data – I C Master/Slave Data Table 1: Pin Configurations
FEATURES
Three-Axis Magnetoresistive Sensors and ASIC in a 3.0x3.0x0.9mm LCC Surface Mount Package 12-Bit ADC Coupled with Low Noise AMR Sensors Achieves 5 milli-gauss Resolution in ±8 Gauss Fields Built-In Self Test Low Voltage Operations (2.16 to 3.6V) and Low Power Consumption (100 μA) Built-In Strap Drive Circuits I C Digital Interface Lead Free Package Construction Wide Magnetic Field Range (+/-8 Oe) Software and Algorithm Support Available Fast 160 Hz Maximum Output Rate
Enables Pedestrian Navigation and LBS Applications
HMC5883L
SPECIFICATIONS (* Tested and specified at 25°C except stated otherwise.)
Characteristics Power Supply Supply Voltage Average Current Draw VDD Referenced to AGND VDDIO Referenced to DGND Idle Mode Measurement Mode (7.5 Hz ODR; No measurement average, MA1:MA0 = 00) Specified at: VDD = 2.5V, VDDIO = 1.8V Performance Field Range Mag Dynamic Range Resolution Linearity Hysteresis Cross-Axis Sensitivity Output Rate (ODR) Measurement Period Turn-on Time Gain Tolerance I C Address
2
400
kHz Volts Volts gauss LSb
Self Test
X & Y Axes Z Axis X & Y Axes (GN=100) Z Axis (GN=100)
General ESD Voltage Operating Temperature Storage Temperature Reflow Classification Package Size Package Height Package Weight Human Body Model (all pins) CDM Ambient Ambient, unbiased MSL 3, 260 C Peak Temperature Length and Width 2.85 0.8 3.00 0.9 18 3.15 1.0 mm mm mg -30 -40 2000 750 85 125 °C °C Volts
相关文档
最新文档