谁用过HMC5883L这个传感器?对MPU6050的yaw进行校正

没用过

hmc5883l原理图 hmc588lc4bhmc5883l原理图 hmc588lc4b


hmc5883l原理图 hmc588lc4b


hmc5883l原理图 hmc588lc4b


校正一般用电脑板配合复位。

传感器是一种检测装置,能感受到被测量的信息,并能将感受到的信息,按一定规律变换成为电信号或其他所需形式的信息输出,以满足信息的传输、处理、存储、显示、记录和控制等要求。

传感器的特点包括:化、数字化、智能化、多功能化、系统化、网络化。它是实现自动检测和自动控制的首要环节。传感器的存在和发展,让物体有了触觉、味觉和嗅觉等感官,让物体慢慢变得活了起来。通常根据其基本感知功能分为热敏元件、光敏元件、气敏元件、力敏元件、磁敏元件、湿敏元件、声敏元件、放射线敏感元件、色敏元件和味敏元件等十大类。

STM32读取HMC5883L的偏航角数据

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

地磁传感器HMC5883应用方法

地磁传感器(HMC5883) 在一些运动系统中,有时需要进行的方向控制,虽然测量方向的方法 有多种,但最便利、通用性最强的还是测量地球的磁场。

利用地磁作为参考, 通过传感器测量出与地磁线之间的夹角就可以得到方位角的数据,从而实现的方向控制。这里就来讨论一下地磁传感器(又称为数字罗盘或电子罗盘) 及其使用方法。

常用的地磁传感器主要有FreeScale(飞思卡尔)的MAG 系列和 Honeywell(霍尼韦尔)的HMC 系列,下面就以市场上常见的Honeywell 的 HMC5883 的地磁传感器来进行讨论。

HMC5883 是一种表面贴装的高集成度、带有IIC 数字接口的弱磁传感器芯 片。它内含有的高分辨率HMC118X 系列磁阻传感器,并附带霍尼韦尔 专利的集成电路(包括有放大器、自动消磁驱动器和偏校准等),具有12 位 模数转换器能使罗盘精度控制在1°~2°之间。霍尼韦尔的磁传感器在低磁场 传感器行业中是灵敏度和可靠性的传感器。其测量范围能从毫高斯到 8 高斯(gauss)。

HMC5883 的工作电压在2.16V~3.6V 之间,典型为3.3V。虽然工作电压为 低电压方式,但数据端口的电压可通过VDDIO 口来指定,因此它与单片机的 接口有两种方式,一种是单片机为5V 方式,一种是单片机为3.3V 方式,。

对于HMC5883 的电气参数及特性请参看其管方的数据手册,这里只讨论如何应用HMC5883 来获取地磁数据。由于对模块的控制一般都是通过写相应的寄存器来实现的,所以先来了解一下HMC5883 的寄存器情况。在HMC5883 的内部一共有12 组寄存器,其中用于存放X、Y 、Z三轴数据的寄存器有6 个,余下的6 个是控制类寄存器。

和所有的IIC 总线器件一样,HMC5883 也有一个器件的固定地址,根据其数据手册,出厂时默认HMC5883 的从机地址为 0x3C(写入方向),或0x3D(读出方向)。 同时,为了尽量减少与单片机之间的通信,HMC5883 可在无主机干预下自动更新其地址指针。指针更新有两条原则,一是若访问的地址是12(即识别寄存器C)或以上的地址时,指针会更新至地址00(即自动返回到开头),二是若访问的地址达到8(即Y 的LSB 寄存器)时,指针会回滚到地址03(即X 的MSB 寄存器)。这要做的好处显而易见,因为地址03~0 8 存放的是要反复读取的数据测量值,所以读取时地址指针自动在此循环,就可减小大量的重新设定地址的代码,提高访问效率。 同其它IIC 器件一样,要让地址指针移动到一个指定的寄存器地址,首先要对该寄存器地址发出写的指令,之后再跟一个地址位。例如要让地址指针指向寄存器10,发出的指令为0 x3C(写入方向)0 x0A(即地址10 )。 配置寄存器A(地址 00)主要是用来设置输出采样平均数、输出速率和测量配置位等相关参数,对于常规应用可取其默认值(采样平均数8,输出速率15Hz,正常测量配置),不用去改动它。若实在要改,可详细参阅管方的数据手册。 配置寄存器B(地址01 )主要是用来设置增益的,对于常规应用也可取其默认值,不用去改动它。若实在要改,可详细参阅管方的数据手册。 模式寄存器(地址0 2)是用来选择HMC5883 的工作模式的,它一共有三种工作模式,即连续测量模式(两位为00)、单次测量模式(两位为01)和空闲模式(两位为1 0 或11)。默认是单次测量模式,一般需要把它改为连续测量模式。更改时只需要把该寄存器的两位改为 00 即可。 状态寄存器(地址0 9)主要是用来提供器件当前的状态。它只有两位有效,一位是准备就绪位,只有在准备就绪置位后才能对器件进行作。倒数第二位是数据输出寄存器锁存位,当该位被置位时,任何的测量数据都不会被更新,直到测量数据被读取。一般常规应用可通过适当的延时来进行读取, 而不必读取该寄存器的状态,除非在读取的频率很高时才考虑读取此寄存器的状态。 识别寄存器A(地址 10)到识别寄存器C(地址12)这里用不到,就不讨论了,需要的请自行阅读数据手册。 其时HMC5883 还有其它一些实用的功能,比如能够进行自我检测,它自身配备了自测功能模块,利用激励传感器偏移带产生一个待测的标称磁场强度来进行自我检测,以证明其好坏。此外还有比例因数的校准功能,它可以补偿周围磁场产生的干扰,以得到的地磁测量值。 下面就以一个例子来看一下HMC5883 的具体应用。

例子:利用单片机读取来自HMC5883 的地磁数据,并把它转换为与正南方的夹角数据,通过LCD16 02 显示出来。 单片机用ATMega16,与HMC5883 的接法采用5V 的方式。HMC5883 的SDA、SCL端分别接到ATMega16 的 TWI 端(PC1、PC0),LCD1602 的接法与前面的一致。

HMC5883地磁传感器

HMC5883地磁传感器可用于检测车辆的存在和车型识别。

数据采集系统在交通系统中起着非常重要的作用,地磁传感器是数据采集系统的关键部分,传感器的性能对数据采集系统的准确性起决定作用。

各向异性磁阻传感器由薄膜合金( 透磁合金) 制成,利用载流磁性材料在外部磁场存在时电阻特性将会改变的基本原理进行磁场变化的测量。

当传感器接通以后,设没有任何外部磁场,薄膜合金会有一个平行于电流方向的内部磁化矢量。

“地磁传感器”的工作原理是当驾驶员将车辆停在车位上,“地磁传感器”将自动感应车辆的停车时间,将时间传送到中继站进行计费,市民直接用在POS机上缴费。

同时利用该设备摄像功能,不交费的车辆进行拍照,并将这些车辆信息录入有关网站,对逃费车辆采取一定措施。

扩展资料:

一、地磁传感器的优点

1、安装、维修方便,不必封闭车道、对路面破坏小,当在检测点吊架或侧面安装时不用破坏路面,维修时只需检查地磁传感器即可;检测点不易遭到破坏,不受路面移动影响;

2、地磁传感器是利用地球磁场在铁磁物体通过时的变化来检测,所以它不受气候的影响;

3、通过对灵敏度的设置可以识别铁磁性物体的大小,可以大致判断出车辆的类型;

4、对非铁磁性物体没有反应,因此可以有效地减少误检。

二、地磁传感器的功能

地磁传感器的功能是相当强大的:当驾驶员把车辆停在车位上,地磁传感器能自动感应车辆的到来并开始计时;待车辆要离开时,传感器会自动把停车时间传送到中继站进行计费。

因此,解决停车收费效率低下,曾经是地磁传感器的优势之一。

停车场路边竖立着3个类似天线的装置来接收、传导传感器的信息,据介绍,这3个感应装置能够覆盖整个停车点的占地区域。美国PNI磁传感器就是应用在停车场里的一个磁传感器。

现在,随着磁传感器的的发展,越来越多的领域用到磁传感器了。

从防、航空航天到国民经济各个部门,从医疗卫生到类日常生活的诸多方面,都用到了这种磁传感器。

参考资料来源:

谁用过HMC5883L这个传感器?对MPU6050的yaw进行校正

/实现函数

函数原型: void IMU_AHRSupdate

功能: 更新AHRS 更新四元数

输入参数: 当前的测量值。

输出参数:没有

/

#define Kp 2.0f // proportional gain governs rate of convergence to accelerometer/magnetometer

#define Ki 0.01f // integral gain governs rate of convergence of gyroscope biases

void IMU_AHRSupdate(float gx, float gy, float gz, float ax, float ay, float az, float mx, float my, float mz) {

float norm;

float hx, hy, hz, bx, bz;

float vx, vy, vz, wx, wy, wz;

float ex, ey, ez,halfT;

float tempq0,tempq1,tempq2,tempq3;

// 先把这些用得到的值算好

float q0q0 = q0q0;

float q0q1 = q0q1;

float q0q2 = q0q2;

float q0q3 = q0q3;

float q1q1 = q1q1;

float q1q2 = q1q2;

float q1q3 = q1q3;

float q2q2 = q2q2;

float q2q3 = q2q3;

float q3q3 = q3q3;

now = micros(); //读取时间

if(now

halfT = ((float)(now + (0xffff- lastUpdate)) / 2000000.0f);

}else {

halfT = ((float)(now - lastUpdate) / 2000000.0f);

}lastUpdate = now; //更新时间

norm = invSqrt(axax + ayay + azaz);

ax = ax norm;

ay = ay norm;

az = az norm;

//把加计的三维向量转成单位向量。

norm = invSqrt(mxmx + mymy + mzmz);

mx = mx norm;

my = my norm;

mz = mz norm;

/

这是把四元数换算成《方向余弦矩阵》中的第三列的三个元素。

根据余弦矩阵和欧拉角的定义,地理坐标系的重力向量,转到机体坐标系,正好是这三个元素。

所以这里的vxyz,其实就是当前的欧拉角(即四元数)的机体坐标参照系上,换算出来的重力单位向量。

/

// com reference direction of flux

hx = 2mx(0.5f - q2q2 - q3q3) + 2my(q1q2 - q0q3) + 2mz(q1q3 + q0q2);

hy = 2mx(q1q2 + q0q3) + 2my(0.5f - q1q1 - q3q3) + 2mz(q2q3 - q0q1);

hz = 2mx(q1q3 - q0q2) + 2my(q2q3 + q0q1) + 2mz(0.5f - q1q1 - q2q2);

bx = sqrt((hxhx) + (hyhy));

bz = hz;

// estimated direction of grity and flux (v and w)

vx = 2(q1q3 - q0q2);

vy = 2(q0q1 + q2q3);

vz = q0q0 - q1q1 - q2q2 + q3q3;

wx = 2bx(0.5 - q2q2 - q3q3) + 2bz(q1q3 - q0q2);

wy = 2bx(q1q2 - q0q3) + 2bz(q0q1 + q2q3);

wz = 2bx(q0q2 + q1q3) + 2bz(0.5 - q1q1 - q2q2);

// error is sum of cross product between reference direction of fields and direction measured by sensors

ex = (ayvz - azvy) + (mywz - mzwy);

ey = (azvx - axvz) + (mzwx - mxwz);

ez = (axvy - ayvx) + (mxwy - mywx);

/

axyz是机体坐标参照系上,加速度计测出来的重力向量,也就是实际测出来的重力向量。

axyz是测量得到的重力向量,vxyz是陀螺积分后的姿态来推算出的重力向量,它们都是机体坐标参照系上的重力向量。

那它们之间的误向量,就是陀螺积分后的姿态和加计测出来的姿态之间的误。

向量间的误,可以用向量叉积(也叫向量外积、叉乘)来表示,exyz就是两个重力向量的叉积。

这个叉积向量仍旧是位于机体坐标系上的,而陀螺积分误也是在机体坐标系,而且叉积的大小与陀螺积分误成正比,正好拿来纠正陀螺。(你可以自己拿东西想象一下)由于陀螺是对机体直接积分,所以对陀螺的纠正量会直接体现在对机体坐标系的纠正。

/

if(ex != 0.0f && ey != 0.0f && ez != 0.0f){

exInt = exInt + ex Ki halfT;

eyInt = eyInt + ey Ki halfT;

ezInt = ezInt + ez Ki halfT;

// 用叉积误来做PI修正陀螺零偏

gx = gx + Kpex + exInt;

gy = gy + Kpey + eyInt;

gz = gz + Kpez + ezInt;

}// 四元数微分方程

tempq0 = q0 + (-q1gx - q2gy - q3gz)halfT;

tempq1 = q1 + (q0gx + q2gz - q3gy)halfT;

tempq2 = q2 + (q0gy - q1gz + q3gx)halfT;

tempq3 = q3 + (q0gz + q1gy - q2gx)halfT;

// 四元数规范化

norm = invSqrt(tempq0tempq0 + tempq1tempq1 + tempq2tempq2 + tempq3tempq3);

q0 = tempq0 norm;

q1 = tempq1 norm;

q2 = tempq2 norm;

q3 = tempq3 norm;

}/实现函数

函数原型: void IMU_getYawPitchRoll(float angles)

功能: 更新四元数 返回当前解算后的姿态数据

输入参数: 将要存放姿态角的数组首地址

输出参数:没有

/

void IMU_getYawPitchRoll(float angles) {

float q[4]; //四元数

volatile float gx=0.0, gy=0.0, gz=0.0; //估计重力方向

IMU_getQ(q); //更新全局四元数

angles[0] = -atan2(2 q[1] q[2] + 2 q[0] q[3], -2 q[2]q[2] - 2 q[3] q[3] + 1) 180/M_PI; // yaw

angles[1] = -asin(-2 q[1] q[3] + 2 q[0] q[2]) 180/M_PI; // pitch

angles[2] = atan2(2 q[2] q[3] + 2 q[0] q[1], -2 q[1] q[1] - 2 q[2] q[2] + 1) 180/M_PI; // roll

//if(angles[0]<0)angles[0]+=360.0f; //将 -+180度 转成0-360度

}

无人机gps双定位模块?

飞机导航定位工作主要由组合定位定向导航系统完成,组合导航系统实时闭环输出位置和姿态信息,为飞机提供的方向基准和位置坐标,同时实时根据姿态信息对飞机飞行状态进行预测。组合导航系统由激光陀螺捷联惯性导航、系统接收机、组合导航计算机、里程计、高度表和基站雷达系统等组成。结合了SAR 图像导航的定位精度、自主性和星敏感器的星光导航系统的姿态测定精度,从而保证了无人飞机的自主飞行。

飞机导航定位工作主要由组合定位定向导航系统完成,组合导航系统实时闭环输出位置和姿态信息,为飞机提供的方向基准和位置坐标,同时实时根据姿态信息对飞机飞行状态进行预测。组合导航系统由激光陀螺捷联惯性导航、系统接收机、组合导航计算机、里程计、高度表和基站雷达系统等组成。结合了SAR 图像导航的定位精度、自主性和星敏感器的星光导航系统的姿态测定精度,从而保证了无人飞机的自主飞行。