磁力计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 */        

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

10天玩转Python第8天:python 文件和异常 全面详解与代码示例

今日内容 文件操作 普通文件的操作json 文件的操作[重点] 异常处理(程序代码运行时的报错) 文件介绍 计算机的 文件&#xff0c;就是存储在某种 长期储存设备 上的一段 数据 作用: 将数据长期保存下来&#xff0c;在需要的时候使用 ​ 1.计算机只认识 二进制(0 1) 2.文件中…

CMA、CNAS软件检测公司分享:压力测试应关注的指标和面临的问题

软件压力测试是容易被传统企业忽视的测试点&#xff0c;用户人数一旦超过预期&#xff0c;极易造成软件产品卡顿、崩溃的情况&#xff0c;不利于用户正常使用&#xff0c;严重影响企业公信力和盈利水平。今天卓码软件测评小编来聊聊压力测试过程中应该关注的指标和会面临的问题…

Mysql存储引擎-InnoDB

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码、Kafka原理、分布式技术原理、数据库技术&#x1f525;如果感觉博主的文章还不错的…

电商平台如何选择分账系统

电商平台尤其是多用户商城系统&#xff0c;它属于资源整合型平台&#xff0c;随着商户的入驻&#xff0c;它会面临一个问题&#xff1a;钱要分给谁、分多少、怎么分的问题&#xff0c;今天&#xff0c;商淘云小编与您分享如何选择分账系统。 第一种是银行的分账系统&#xff0c…

1850_emacs_org-download在Windows上的使用

Grey 全部学习内容汇总&#xff1a; https://github.com/greyzhang/g_org 1850_emacs_org-download在Windows上的使用 对我来说&#xff0c;使用emacs很大的一个挑战是在Windows上&#xff0c;emacs的配置会比Linux上麻烦一些。而且&#xff0c;通常来说Windows上的体验会差…

详细了解云堡垒机的作用,提高企业数据信息安全

随着上云企业的不断增加&#xff0c;云上数据安全性成为企业面临的重要问题。为了保障企业的核心数据安全&#xff0c;越来越多的企业采购了云堡垒机来提升数据安全性。今天我们就来详细了解一下云堡垒机的作用&#xff0c;以及如何提高企业数据安全。 一、云堡垒机定义 云堡垒…

【精选】计算机网络教程(第2章网络层)

目录 前言 第2章网络层 1、编码与调制 2、传输方式 前言 总结计算机网络教程课程期末必记知识点。 第2章网络层 1、编码与调制 信道可以分成传送模拟信号的模拟信道和传送数字信号的数字信道两大类。通常人们将数字数据转换成数字信号的过程称为编码&#xff0c;而将数字…

探索 HBase GUI 工具,助您轻松驾驭大数据世界!

你是否曾为 HBase 数据管理而苦恼&#xff1f;别担心&#xff0c;这一款超级好用的 HBase GUI &#xff08;HBase Assistant&#xff09;工具&#xff0c;让您在大数据世界中游刃有余。不再需要繁琐的命令行操作&#xff0c;也不再为复杂的配置感到头疼。 主要功能 直观和设计…

matlab面向对象编程入门笔记

文章目录 1. 类和结构2. 定义类3. 属性3.1 private/protected/public属性3.2 constant属性3.3 hidden属性 4. 方法4.1 private/protected/public方法4.2 static方法4.3 外部方法 5. 动态调用6. 继承-超类6.1 handle超类6.2 dynamicprops 和 hgsetget子类 7. 封闭(sealed)类、方…

STM32_通过Ymodem协议进行蓝牙OTA升级固件教程

目录标题 前言1、OTA升级的重要性和应用场景2、理论基础2.1、单片机的启动流程2.2、什么是IAP&#xff1f;2.3、什么是OTA&#xff1f;2.4、什么是BootLoader&#xff1f;2.5、Ymodem协议是什么&#xff1f;2.6、IAP是如何实现的&#xff1f; 3、具体操作3.1、软硬件工具准备3.…

类加载机制

1.类加载的生命周期 其中类加载的过程包括了加载、验证、准备、解析、初始化五个阶段。在这五个阶段中&#xff0c;加载、验证、准备和初始化这四个阶段发生的顺序是确定的&#xff0c;而解析阶段则不一定&#xff0c;它在某些情况下可以在初始化阶段之后开始&#xff0c;这是为…

计算机中msvcr120.dll丢失怎样修复,这5个方法可以搞定

几乎在所有操作系统中&#xff0c;可分为两种库&#xff0c;一种是静态库&#xff08;.lib&#xff09;&#xff0c;另一种是动态库&#xff08;.dll&#xff09;。 为什么很多小伙伴在打开软件的时候会弹出“由于找不到XXX.dll文件&#xff0c;无法继续执行代码、、、、、、”…

大数据技术之 Kettle(PDI)

Kettle 第一章 Kettle概述1.1、ETL简介1.2、Kettle简介1.3、作业 和 转换 概念1.4、核心组件1.5、下载安装 第二章 控件使用2.1、初体验&#xff1a;csv 转换 excel 示例2.2、转换2.2.1、输入控件2.2.1.1、表输入 2.2.2、输出控件2.2.2.1、表输出2.2.2.2、更新&插入/更新2.…

分享66个Java源码总有一个是你想要的

分享66个Java源码总有一个是你想要的 学习知识费力气&#xff0c;收集整理更不易。 知识付费甚欢喜&#xff0c;为咱码农谋福利。 链接&#xff1a;https://pan.baidu.com/s/1hKlZJB3KrHcOuKWyV1xjKw?pwd6666 提取码&#xff1a;6666 项目名称 ava web个人网站项目 ea…

【C++11特性篇】C++11中の【override】【final】关键字——帮助用户检测是否重写

前言 大家好吖&#xff0c;欢迎来到 YY 滴C系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; 目录 一.【override】【final】关键字——帮…

软件测试之鲁棒性测试

文章目录 前言一、鲁棒性测试是什么&#xff1f;二、鲁棒性测试的目的三、测试原理3.1 错误数据处理3.2 异常情况处理 前言 Bootloader软件刷写鲁棒性(Robustness)测试是指对Bootloader软件进行连续多次的刷写测试&#xff0c;且一次Fail都没发生&#xff0c;以此验证Bootload…

基于java+swing+mysq学生成绩管理系统(含课程报告)

基于javaswingmysq学生成绩管理系统_含课程报告 一、系统介绍二、功能展示三、项目相关3.1 乱码问题3.2 如何将GBK编码系统修改为UTF-8编码的系统&#xff1f; 四、其它1.其他系统实现 五、源码下载 一、系统介绍 本系统使用 Swing MySQL IntelliJ IDEA 开发。为管理人员提供…

【精选】计算机网络教程(第3章数据链路层)

目录 前言 第3章数据链路层 1、差错检测&#xff08;CRC&#xff09; 2、点对点协议&#xff08;了解应用场景&#xff09; 3、什么是碰撞域&#xff0c;什么是广播域 碰撞域&#xff08;Collision Domain&#xff09;&#xff1a; 广播域&#xff08;Broadcast Domain&a…

Linux驱动开发学习笔记4《设备树下的LED驱动实验》

目录 一、设备树LED驱动原理 二、硬件原理图分析 三、实验程序编写 1.修改设备树文件 2.LED 灯驱动程序编写 3.编写测试APP 四、运行测试 1. 编译驱动程序和测试APP &#xff08;1&#xff09; 编译驱动程序 &#xff08;2&#xff09; 编译测试APP ​ 2.运行测试 一、…

【Hive_03】单行函数、聚合函数、窗口函数、自定义函数、炸裂函数

1、函数简介2、单行函数2.1 算术运算函数2.2 数值函数2.3 字符串函数&#xff08;1&#xff09;substring 截取字符串&#xff08;2&#xff09;replace 替换&#xff08;3&#xff09;regexp_replace 正则替换&#xff08;4&#xff09;regexp 正则匹配&#xff08;5&#xff…