罗盘校准

来自Waveshare Wiki
跳转至: 导航搜索

概述

该应用笔记以LSM303DLHC为例子,简单讲解了磁力计的校准方式并简要进行代码讲解。

预备知识

如果没有了解过磁力计校准的,可以先看这两篇文章:

http://blog.sina.com.cn/s/blog_8240cbef0101i7gn.html

http://www.dzsc.com/data/html/2010-11-29/87454.html

如果磁力计在含有附加的局部磁场的环境中进行操作,磁力计的输出做附加的修正将是必要的。

在没有任何本地磁场的影响下 ,下图1可以通过旋转设备360°产生的平面 ,图2为引入本地磁场。

LSM303DLHC-APP01.jpeg LSM303DLHC-APP02.jpeg

一.

修正的输出可以根据下面的方法来计算:

1)在磁场干扰的条件下进行,数据收集设备被旋转360°。

2)数据进行分析,以产生偏差的偏移和灵敏度的比例因子,以补偿所述干扰。


例子:

从数据中发现的X和Y磁强计的最大输出:

LSM303DLHC-APP19.png

从中可以看出X轴的数据,X具有更大的反应,我们设置其比例系数为1

LSM303DLHC-APP20.png

再计算其他比例系数:

LSM303DLHC-APP21.png

对于偏置补偿:

LSM303DLHC-APP22.png

正确的输出:

LSM303DLHC-APP23.png

二.

1)水平匀速旋转,收集XY轴数据

2)转动器材90度(Z轴)匀速转动以收集Z轴数据

LSM303DLHC-APP24.png

将磁力计读到的裸值减去offset,得到用做角度计算的Heading值

LSM303DLHC-APP25.png

水平测试,得到的方位角 = arctanYH/XH 非水平测试,需要使用加速计进行倾角补偿,先计算出翻滚角Roll和俯仰角Pitch,然后计算Heading值:

LSM303DLHC-APP26.png

实例讲解

这里以Open103Z+ LSM303DLHC Board + FT232 USB UART Board 为例

步骤0

硬件连接如下:

LSM303DLHC-APP27.png

下载示例程序,打开Magnetic calibration工程

步骤1

  • 修改STEP注释,编译STEP1部分代码,下载并运行程序。

LSM303DLHC-APP03.png

  • 打开串口调试助手(波特率:115200),正常可以看到串口输出相应的方位角。

LSM303DLHC-APP04.png

一般情况下,此时输出的角度误差比较大,因为一方面受到了环境中的磁干扰,另一方面是由于本身传感器制造工艺导致。

LSM303DLHC-APP05.png

这里为了简化代码,只使用了水平测试方位角的计算公式。由于没有把加速度计数据耦合进去,所以在非水平条件下输出误差会比较大。

  方位角 = arctanYH/XH  (其中YH为磁力计Y轴输出,XH为X轴输出)

注:这一步骤对于磁力计校准来说不是必须的,仅为了与校准后的角度进行对比。

步骤2

  • 修改STEP注释,编译STEP2部分代码,下载并运行程序。

LSM303DLHC-APP06.png

  • 打开串口工具(波特率:115200),正常可以看到串口输出XYZ三个方向的原始数据。

LSM303DLHC-APP07.png

  • 先点击清除窗口,将串口助手中原来的数据清空,在对XYZ三轴分别缓慢旋转模块几周(为了得到足够的样本),点击关闭串口,在将串口助手里的内容复制到一个TXT文件,如下:

LSM303DLHC-APP08.png

  • 新建一个Excel表格:MagData.xlsx,选择 数据 -》 自文本,选择刚新建的data.txt -》按提示操作(注意选择分格符为逗号) -》保存文件

LSM303DLHC-APP09.png

LSM303DLHC-APP10.png

LSM303DLHC-APP11.png

LSM303DLHC-APP12.png

LSM303DLHC-APP13.png

  • 打开AntMag_v1.0.1 (该软件由WalkAnt提供),选择 加载数据文件-》选择刚新建的MagData.xlsx,最终可以得到校准后的相关参数。

LSM303DLHC-APP14.png

LSM303DLHC-APP15.png

步骤3

  • 修改STEP注释,编译STEP3部分代码。

LSM303DLHC-APP16.png

  • 将步骤2得到的参数填入到相应该的位置:

LSM303DLHC-APP17.png

  • 下载并运行程序。
  • 打开串口工具(波特率:115200),正常可以看到串口输出校准后的数据和校准后的角度。

LSM303DLHC-APP18.png

  • 在于步骤1输出的角度进行对比,可以看到输出的精度有所提升。有时如果得到的输出角度偏差还比较大,则重复步骤2。

其它

由于上述方法使用的计算量很大,一般不会将这部分代码添加到MCU的程序中。如果你对这部分的代码实现感兴趣,请自行查阅相关资料。

国外也有很多类似的开源上位机,有兴趣的可自行研究。

http://www.varesano.net/blog/fabio/freeimu-magnetometer-and-accelerometer-calibration-gui-alpha-version-out

https://github.com/mjs513/FreeIMU-Updates/wiki/04.-FreeIMU-Calibration

如果你在使用中,对精度要求不高,可以用以下简单的校准方式。这种方式的优点是可以集成到代码中,只需要很少的计算量就可以得到比较精确的数据。

·修改STEP注释,编译STEP4部分代码。

LSM303DLHC-APP28.png

·把传感器水平放置,绕Z轴旋转一周后,将可以得到3轴的修正值,通过将原始数据减去修正值,在计算角度,可以得到比步骤1要精确一些的方位角。