匿名
未登录
登录
丢石头百科
搜索
查看“LSM303DLHC-APP01”的源代码
来自丢石头百科
名字空间
页面
讨论
更多
更多
页面选项
查看
查看源代码
历史
←
LSM303DLHC-APP01
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
{{DISPLAYTITLE:罗盘校准}} ==='''概述'''=== 该应用笔记以LSM303DLHC为例子,简单讲解了磁力计的校准方式并简要进行代码讲解。 ==='''预备知识'''=== 如果没有了解过磁力计校准的,可以先看这两篇文章: http://blog.sina.com.cn/s/blog_8240cbef0101i7gn.html http://www.dzsc.com/data/html/2010-11-29/87454.html 如果磁力计在含有附加的局部磁场的环境中进行操作,磁力计的输出做附加的修正将是必要的。 在没有任何本地磁场的影响下 ,下图1可以通过旋转设备360°产生的平面 ,图2为引入本地磁场。 [[File:LSM303DLHC-APP01.jpeg|400px]] [[File:LSM303DLHC-APP02.jpeg|400px]] 一. 修正的输出可以根据下面的方法来计算: 1)在磁场干扰的条件下进行,数据收集设备被旋转360°。 2)数据进行分析,以产生偏差的偏移和灵敏度的比例因子,以补偿所述干扰。 例子: 从数据中发现的X和Y磁强计的最大输出: [[File:LSM303DLHC-APP19.png]] 从中可以看出X轴的数据,X具有更大的反应,我们设置其比例系数为1 [[File:LSM303DLHC-APP20.png]] 再计算其他比例系数: [[File:LSM303DLHC-APP21.png]] 对于偏置补偿: [[File:LSM303DLHC-APP22.png]] 正确的输出: [[File:LSM303DLHC-APP23.png]] 二. 1)水平匀速旋转,收集XY轴数据 2)转动器材90度(Z轴)匀速转动以收集Z轴数据 [[File:LSM303DLHC-APP24.png]] 将磁力计读到的裸值减去offset,得到用做角度计算的Heading值 [[File:LSM303DLHC-APP25.png]] 水平测试,得到的方位角 = arctanYH/XH 非水平测试,需要使用加速计进行倾角补偿,先计算出翻滚角Roll和俯仰角Pitch,然后计算Heading值: [[File:LSM303DLHC-APP26.png]] ==='''实例讲解'''=== 这里以Open103Z+ LSM303DLHC Board + FT232 USB UART Board 为例 ===='''步骤0'''==== 硬件连接如下: [[File:LSM303DLHC-APP27.png]] 下载[https://{{SERVERNAME}}/w/upload/5/5c/LSM303DLHC-Board-code.7z 示例程序],打开Magnetic calibration工程 ===='''步骤1'''==== *修改STEP注释,编译STEP1部分代码,下载并运行程序。 [[File:LSM303DLHC-APP03.png]] *打开[[:File:串口调试助手.zip|串口调试助手]](波特率:115200),正常可以看到串口输出相应的方位角。 [[File:LSM303DLHC-APP04.png]] 一般情况下,此时输出的角度误差比较大,因为一方面受到了环境中的磁干扰,另一方面是由于本身传感器制造工艺导致。 [[File:LSM303DLHC-APP05.png]] 这里为了简化代码,只使用了水平测试方位角的计算公式。由于没有把加速度计数据耦合进去,所以在非水平条件下输出误差会比较大。 方位角 = arctanYH/XH (其中YH为磁力计Y轴输出,XH为X轴输出) 注:这一步骤对于磁力计校准来说不是必须的,仅为了与校准后的角度进行对比。 ===='''步骤2'''==== *修改STEP注释,编译STEP2部分代码,下载并运行程序。 [[File:LSM303DLHC-APP06.png]] *打开串口工具(波特率:115200),正常可以看到串口输出XYZ三个方向的原始数据。 [[File:LSM303DLHC-APP07.png]] *先点击清除窗口,将串口助手中原来的数据清空,在对XYZ三轴分别缓慢旋转模块几周(为了得到足够的样本),点击关闭串口,在将串口助手里的内容复制到一个TXT文件,如下: [[File:LSM303DLHC-APP08.png]] *新建一个Excel表格:MagData.xlsx,选择 数据 -》 自文本,选择刚新建的data.txt -》按提示操作(注意选择分格符为逗号) -》保存文件 [[File:LSM303DLHC-APP09.png]] [[File:LSM303DLHC-APP10.png]] [[File:LSM303DLHC-APP11.png]] [[File:LSM303DLHC-APP12.png]] [[File:LSM303DLHC-APP13.png]] *打开[https://{{SERVERNAME}}/w/upload/4/4d/AntMag_v1.0.1.zip AntMag_v1.0.1] (该软件由WalkAnt提供),选择 加载数据文件-》选择刚新建的MagData.xlsx,最终可以得到校准后的相关参数。 [[File:LSM303DLHC-APP14.png]] [[File:LSM303DLHC-APP15.png]] ===='''步骤3'''==== *修改STEP注释,编译STEP3部分代码。 [[File:LSM303DLHC-APP16.png]] *将步骤2得到的参数填入到相应该的位置: [[File:LSM303DLHC-APP17.png]] *下载并运行程序。 *打开串口工具(波特率:115200),正常可以看到串口输出校准后的数据和校准后的角度。 [[File: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部分代码。 [[File:LSM303DLHC-APP28.png]] ·把传感器水平放置,绕Z轴旋转一周后,将可以得到3轴的修正值,通过将原始数据减去修正值,在计算角度,可以得到比步骤1要精确一些的方位角。
返回至
LSM303DLHC-APP01
。
导航
导航
首页
最近更改
随机页面
MediaWiki帮助
首页
首页
树莓派
主机
配件包
外壳
键鼠
电源
扩展板
显示屏
墨水屏
摄像模块
通信模块
继电器
电机驱动板
游戏机
产品分类
树莓派
Arduino
micro:bit
STM32
Espressif
WiFi模块
蓝牙模块
无线模块
LoRa模块
4G模块
GSM
GPRS
以太网
导航模块
北斗卫星
GPS
LCD
墨水屏
OLED
摄像头
USB模块
串口模块
RS232
RS485
CAN
传感器
温度模块
湿度模块
气压模块
继电器
电机模块
指纹模块
电平转换
音频模块
编程器
Wiki工具
Wiki工具
特殊页面
页面工具
页面工具
用户页面工具
更多
链入页面
相关更改
页面信息
页面日志