磁力计LIS2MDL开发(2)----电子罗盘

2023-12-16 21:04

本文主要是介绍磁力计LIS2MDL开发(2)----电子罗盘,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

磁力计LIS2MDL开发.2--电子罗盘

  • 概述
  • 视频教学
  • 样品申请
  • 源码下载
  • 环境磁场建模
  • 消除硬铁误差
  • 软铁干扰
  • 主程序

概述

本文将介绍如何使用 LIS2MDL 传感器来读取数据来转化为指南针。
地磁场强度范围约为 23,000 至 66,000 nT ,并且可以建模为磁偶极子,其场线起源于地球地理南部附近的点,并终止于磁场附近的点。磁场具有七个分量,如图 所示。x,y和z分别表示北分量,东分量和垂直分量的磁场强度。H代表总水平强度,F代表磁场的总强度,而D和I分别代表磁偏角和磁倾角。

最近在弄ST和瑞萨RA的课程,需要样片的可以加群申请:615061293 。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

视频教学

https://www.bilibili.com/video/BV1xG411a7cs/

磁力计LIS2MDL开发(2)----电子罗盘

样品申请

https://www.wjx.top/vm/OhcKxJk.aspx#

源码下载

环境磁场建模

尽管可以选择七个不同的元素来处理给定点的磁场,但并非所有元素都是进行定位的理想选择。X,Y 和 Z 的三个元素是从磁力计获得的基本值,而其他四个元素是使用这些元素来计算的。前三个元素随移动设备方位角的改变而偏离,因此,对于许多基于磁场的室内定位系统通常假设以固定方位工作,行人可以更改方向,但不能更改设备方位。
在大地坐标系的水平面上,假设磁北和x轴的夹角为a, x方向的磁分量是Mx,y方向的分量是My,则
ɑ=arctan(My/Mx)
这是电子罗盘定向的基本原理。实际应用中,电子罗盘不能总是保持在水平面上,如下图所示一样存在俯仰角和横滚角。将罗盘坐标系下的 z轴向下, 3个轴的磁分量投影到水平面上可以得到Xh,Yh,相应的磁感应值:
Xh=Xcosф+Ysinфsinθ - Zsinфcosθ
Yh=Ycosθ + Zsinθ
相应的
ɑ=arctan(Yh/Xh)

在这里插入图片描述

				Angle_XY=atan2( (magnetic_mG[1]-Xoffset),(magnetic_mG[0]-Yoffset) ) * (180/3.14159265)+180;//计算角度Angle_XZ=atan2( (magnetic_mG[2]-Zoffset),(magnetic_mG[0]-Yoffset) ) * (180/3.14159265)+180;//计算角度Angle_YZ=atan2( (magnetic_mG[2]-Zoffset),(magnetic_mG[1]-Yoffset) ) * (180/3.14159265)+180;//计算角度

消除硬铁误差

电子罗盘有两种工作模式,一种是正常工作模式,另一种是出厂设置模式,这种出场设置模式就是为了消除硬铁干扰。硬铁干扰产生于永久磁铁,和被磁化的金属,或罗盘平台上的钢。这些干扰会保持大小恒定,与罗盘的相对位置固定,而与罗盘指向无关。所以当罗盘安装好后,它周围的硬铁干扰就几乎不会改变了,只要对罗盘做一次准确的标定,就能很轻松的消除这项干扰。
硬铁干扰在罗盘输出的每个轴向加了一个定值,输出曲线图的圆心被移动了,对于航向的影响则是一个周期性的误差,如下图所示在理想状态时,在 360 度范围内,传感器输出极值分别为 ymax ymin xmax xmin 坐标原点为O,受到硬铁干扰后,极值变为 y’max ,y’min , x’max , x’max , 坐标原点变为O’ 。要消除硬铁干扰,可以将罗盘和平台旋转一周,得
到圆上的足够的点再得到圆心偏移。

在这里插入图片描述

具体操作过程如下:接通电源后,将罗盘匀速旋转,使微控制器采集 360 °范围内的数据,通过数值比较,找出 x 、 y 方向的极值,得出偏移坐标 O’, 即电桥的偏置电压,并将此电压值保存,每次罗盘读数时都会减去此偏移。实际上,本设计在方位角的计算过程就是此过程,所以在计算方位角的同时已经消除了硬铁干扰。这种方法也可以消除由于温度漂移产生的误差。

软铁干扰

软铁干扰来源于地球磁场和罗盘附近的任何磁性材料之间的相互作用,同硬铁材料一样,软金属也干扰地球的磁力线,不同点是,软磁的干扰程度,与罗盘的方向有关。对软铁干扰的校正,比较复杂,下面讨论采用霍尼韦尔公司的 Michal.J.Caruso 提出椭圆假设的误差补偿原理进行误差补偿的方法 。

在这里插入图片描述

根据 Michal.J.Caruso 的研究,罗盘在理想的没有任何干扰的磁场水平面里作圆形旋转时,磁力计的显示应该呈现上图的状态,其中圆中心在 0,0 点处,每个计数代表 67微高斯,在 X 和 Y 平面中的地球磁场强度值读到 2800 个计数,约为 190 毫高斯,根据下面公式可以对每个读数确定一个方位角。

在这里插入图片描述

如果将磁力计安装在有发动机或者其他铁磁材料的环境中,圆形旋转时,磁力计的显示应该下图的状态。

在这里插入图片描述

这里的图形不是一个圆 ( 有点椭圆 ) ,而它偏移 0,0 点为 -480 和 -795 个计数,这偏移和椭圆效应是干扰磁场对地球磁场作用的结果。通过确定两个定标因数 Xsf 和 Ysf 可以将椭圆改为圆。随后计算偏移值 Xoff 和 Yoff, 将圆中心定在 0,0 原点,用下面公式来计算 Y,X 值。

X 值 =Xsf×X 读数 +Xoff
Y 值 =Ysf×Y 读数 +Yoff

这里的定标因数 Xsf 和 Ysf 可由下述方法获得。
①将罗盘在水平面做旋转运动
②找出 X 和 Y 读数的最大值和最小值
③用这四个数值确定 X 和 Y 定标因数 (Xsf , Ysf) ,以及零偏移值 (Xoff , Yoff)

Xsf=1 或 (Y 最大 -Y 最小 )/2(X 最大 -Y 最小 )

以较大的数值为准

Ysf=1 或 (X 最大 -Y 最小 )/2(Y 最大 -Y 最小 )

以较大的数值为准

Xoff=[(X 最大 -X 最小 ) /2-X 最大 ]×Xsf
Yoff=[(Y 最大 -Y 最小 ) /2-Y 最大 ]×Ysf

主程序

在主程序中添加开机校准。

  /* Infinite loop *//* USER CODE BEGIN WHILE */while (1){uint8_t reg;/* Read output only if new value is available */lis2mdl_mag_data_ready_get(&dev_ctx, &reg);if (reg) {/* Read magnetic field data */memset(data_raw_magnetic, 0x00, 3 * sizeof(int16_t));lis2mdl_magnetic_raw_get(&dev_ctx, data_raw_magnetic);magnetic_mG[0] = lis2mdl_from_lsb_to_mgauss(data_raw_magnetic[0]);magnetic_mG[1] = lis2mdl_from_lsb_to_mgauss(data_raw_magnetic[1]);magnetic_mG[2] = lis2mdl_from_lsb_to_mgauss(data_raw_magnetic[2]);printf("i=%d,Magnetic field [mG]:%4.2f\t%4.2f\t%4.2f\r\n",i,magnetic_mG[0], magnetic_mG[1], magnetic_mG[2]);if(i<500){i++;if(magnetic_mG[0]<Xmin)Xmin=magnetic_mG[0];else if(magnetic_mG[0]>Xmax)Xmax=magnetic_mG[0];if(magnetic_mG[1]<Ymin)Ymin=magnetic_mG[1];else if(magnetic_mG[1]>Ymax)Ymax=magnetic_mG[1];				if(magnetic_mG[2]<Zmin)Zmin=magnetic_mG[2];else if(magnetic_mG[2]>Zmax)Zmax=magnetic_mG[2];			}else if(i==500){i++;Xsf = (Ymax - Ymin) / (Xmax - Xmin);Ysf = (Xmax - Xmin) / (Ymax - Ymin);		if (Xsf < 1)Xsf = 1;if (Ysf < 1)Ysf = 1;		Xoffset=( (Xmax-Xmin)/2 - Xmax) *Xsf;Yoffset=( (Ymax-Ymin)/2	- Ymax)	*Ysf;
//				Zoffset=( (Zmax-Zmin)/2	- Zmax)	*Xsf;				}else{Angle_XY=atan2( (magnetic_mG[1]-Yoffset),(magnetic_mG[0]-Xoffset) ) * (180/3.14159265)+180;//计算角度printf("Angle_XY=%3.2f\n",Angle_XY);
//				Angle_XZ=atan2( (magnetic_mG[2]-Zoffset),(magnetic_mG[0]-Xoffset) ) * (180/3.14159265)+180;//计算角度
//				Angle_YZ=atan2( (magnetic_mG[2]-Zoffset),(magnetic_mG[1]-Yoffset) ) * (180/3.14159265)+180;//计算角度		
//				printf("Angle_XY=%3.2f,Angle_XZ=%3.2f,Angle_YZ=%3.2f\n",Angle_XY,Angle_XZ,Angle_YZ);				}}		HAL_Delay(10);/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */        

这篇关于磁力计LIS2MDL开发(2)----电子罗盘的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/501878

相关文章

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

基于Java开发一个极简版敏感词检测工具

《基于Java开发一个极简版敏感词检测工具》这篇文章主要为大家详细介绍了如何基于Java开发一个极简版敏感词检测工具,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录你是否还在为敏感词检测头疼一、极简版Java敏感词检测工具的3大核心优势1.1 优势1:DFA算法驱动,效率提升10

Python开发简易网络服务器的示例详解(新手入门)

《Python开发简易网络服务器的示例详解(新手入门)》网络服务器是互联网基础设施的核心组件,它本质上是一个持续运行的程序,负责监听特定端口,本文将使用Python开发一个简单的网络服务器,感兴趣的小... 目录网络服务器基础概念python内置服务器模块1. HTTP服务器模块2. Socket服务器模块

Java 与 LibreOffice 集成开发指南(环境搭建及代码示例)

《Java与LibreOffice集成开发指南(环境搭建及代码示例)》本文介绍Java与LibreOffice的集成方法,涵盖环境配置、API调用、文档转换、UNO桥接及REST接口等技术,提供... 目录1. 引言2. 环境搭建2.1 安装 LibreOffice2.2 配置 Java 开发环境2.3 配

Python38个游戏开发库整理汇总

《Python38个游戏开发库整理汇总》文章介绍了多种Python游戏开发库,涵盖2D/3D游戏开发、多人游戏框架及视觉小说引擎,适合不同需求的开发者入门,强调跨平台支持与易用性,并鼓励读者交流反馈以... 目录PyGameCocos2dPySoyPyOgrepygletPanda3DBlenderFife

使用Python开发一个Ditto剪贴板数据导出工具

《使用Python开发一个Ditto剪贴板数据导出工具》在日常工作中,我们经常需要处理大量的剪贴板数据,下面将介绍如何使用Python的wxPython库开发一个图形化工具,实现从Ditto数据库中读... 目录前言运行结果项目需求分析技术选型核心功能实现1. Ditto数据库结构分析2. 数据库自动定位3

Django开发时如何避免频繁发送短信验证码(python图文代码)

《Django开发时如何避免频繁发送短信验证码(python图文代码)》Django开发时,为防止频繁发送验证码,后端需用Redis限制请求频率,结合管道技术提升效率,通过生产者消费者模式解耦业务逻辑... 目录避免频繁发送 验证码1. www.chinasem.cn避免频繁发送 验证码逻辑分析2. 避免频繁

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

PyQt5 GUI 开发的基础知识

《PyQt5GUI开发的基础知识》Qt是一个跨平台的C++图形用户界面开发框架,支持GUI和非GUI程序开发,本文介绍了使用PyQt5进行界面开发的基础知识,包括创建简单窗口、常用控件、窗口属性设... 目录简介第一个PyQt程序最常用的三个功能模块控件QPushButton(按钮)控件QLable(纯文本

基于Python开发一个图像水印批量添加工具

《基于Python开发一个图像水印批量添加工具》在当今数字化内容爆炸式增长的时代,图像版权保护已成为创作者和企业的核心需求,本方案将详细介绍一个基于PythonPIL库的工业级图像水印解决方案,有需要... 目录一、系统架构设计1.1 整体处理流程1.2 类结构设计(扩展版本)二、核心算法深入解析2.1 自