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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

使用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,然后再配置为单一测量模式,即可进入自测模式。自测模式下会在内部创建一个标准的自测磁场,从而支持传感器的比例因子校准。标准磁场的理论值与实际测量值的比值,即可得出传感器的比例因子: calibration[0] = fabs(951.0 / Compass_Data[0]);

calibration[1] = fabs(951.0 / Compass_Data[1]);

calibration[2] = fabs(886.0 / Compass_Data[2]);

其中,calibration[n]为比例因子,Compass_Data[n]为罗盘的原始数据,951是自测模式下在X 、Y 轴的标准输出值,886是自测模式下在Z 轴的标准输出值。

3. HMC5883L 的硬磁失真校正及倾角补偿:

HMC5883L -3轴数字罗盘在工作过程中,由于不可避免的受周围电磁场的干扰,如电路走线、其他电子器件工作时的电磁干扰等,从而造成罗盘XYZ 轴测得的地磁场强度发生不同程度的偏移变形。一般我们将干扰的影响分为硬磁失真和软磁失真两类,从影响效果上来看,硬磁失真会造成磁场输出曲线图的圆心偏移,而软磁失真会把理论上为圆形的地磁场拉伸为椭圆。前期的标定过程中,只对硬磁失真进行了校正,通过分别绕每个轴旋转360°,求另外两个轴的最大值和最小值的和的平均值作为零点偏移量,从而使圆心回到原点: offset[n] = -(max[n]+min[n])/2; // calculate offsets

MagVec[n] = (Compass_Data[n]*calibration[n]+offset[n]);

其中,offset[n]为零点偏移量,MagVec[n]为最终用于计算的罗盘数据。

图2 电子罗盘三维数学模型

此外,由于罗盘不是一直处于水平位置,因此需要使用姿态角(横滚角和俯仰角)对罗盘进行倾角补偿,根据矢量三角形,有:

Head_X = Head_X*cos(pitch)+Head_Y*sin(roll)*sin(pitch)-Head_Z*cos(roll)*sin(pitch);

Head_Y = Head_Y*cos(roll)+Head_Z*sin(roll);

4. 航向角计算:

可使用反三角函数atanf()进行航向角度的计算,需要注意的是,因为角度的4个象限(atanf()返回值为),为了使航向角的范围为0~360°,需要进行不同象限下的相应转换处理。

±2/π

由于地磁北和地理北存在大约11.5°的偏差角度,因此在解算出来的航向角上,还需要进行该偏差角度的补偿作为最终的航向角。

if(Head_X>0 && Head_Y<0)

{

Heading = - atanf(Head_Y/Head_X) * 180/M_PI;

}

if(Head_X<0.05 && Head_X>-0.05 && Head_Y<0)

{

Heading=90;

}

if(Head_X<0)

{

Heading=180 - atanf(Head_Y/Head_X) * 180/M_PI;

}

if(Head_X<0.05 && Head_X>-0.05 && Head_Y>0)

{

Heading=270;

}

if(Head_X>0 && Head_Y>0)

{

Heading=360 - atanf(Head_Y/Head_X) * 180/M_PI;

}

Heading = Heading - 11.5; //地磁北和地理北的偏差角度:11.5

if(Heading < 0)

{

Heading = 360 + Heading;

}

参看:

1、Honeywell-《3-Axis Digital Compass IC HMC5883L》

2、范寒柏,陈邵权,王涛,王磊-《电子罗盘倾角补偿和干扰补偿的理论分析及实验验证》

相关文档
最新文档