基于磁阻式传感器的电子罗盘的设计大学论文.docx
- 文档编号:1679752
- 上传时间:2023-05-01
- 格式:DOCX
- 页数:18
- 大小:210.36KB
基于磁阻式传感器的电子罗盘的设计大学论文.docx
《基于磁阻式传感器的电子罗盘的设计大学论文.docx》由会员分享,可在线阅读,更多相关《基于磁阻式传感器的电子罗盘的设计大学论文.docx(18页珍藏版)》请在冰点文库上搜索。
基于磁阻式传感器的电子罗盘的设计大学论文
本科毕业论文
便携式电子罗盘软件设计与校准
学生姓名:
学号:
学院:
机电工程学院
专业:
机械设计制造及其自动化(机电一体化)
指导教师:
2016年5月9日
目录
引言4
第一章.电子罗盘的测量与倾角补偿原理5
1.1电子罗盘的测量原理5
1.2倾角补偿原理6
第二章电子罗盘的硬件设计与实现7
2.1系统框架7
2.2传感器的选择7
2.3.单片机开发环境8
第三章.电子罗盘误差分析与补偿9
3.1误差来源9
3.2误差的补偿10
3.2.1漂移补偿10
3.2.2椭球化补偿10
第四章.校正及其程序设计12
4.18字型校准12
4.28字型校准的程序设计12
4.3倾斜补偿的程序设计与实现13
4.4滤波算法14
第五章.结论与展望15
致谢16
参考文献17
便携式电子罗盘软件设计与校准
摘要本设计采用了STM32F103C8T6高速单片机为控制核心,连接了采用IIC总线通讯方式的磁阻传感器HMC5883L集成模块和加速度传感器MMA8452集成模块,通过磁阻传感器测量大地磁场,但是测量的数据仅仅在水平面内有效。
在倾斜时侧需要使用加速度计进行补偿。
在经过加速度传感器的姿态数据采集后使用单片机进行数据整理、运算,经过加速度计得到的X、Y、Z三轴姿态信息进行分别计算出俯仰角PITCH和横滚角ROLL。
磁阻传感器采集的大地磁场的X、Y、Z三轴数据经过单片机进行俯仰角和横滚角的倾斜度补偿。
在经过补偿之后,通过SPI连接的OLED显示屏输出磁阻传感器的大地磁场角度信息。
关键词:
STM32单片机磁阻传感器加速度计电子罗盘
Thedesignandcalibrationofportableelectroniccompasssystem
AbstractThisdesignadoptsthestm32f103c8t6high-speedmicrocontrollerascontrolcore,connectingtheIICbuscommunicationhmc5883lmagnetoresistivesensorintegratedmoduleandaccelerationsensorMMA8452integratedmodule,bymagnetoresistivesensortomeasurethemagneticfieldoftheearth,butthemeasurementdataonlyinthehorizontalplaneeffectively.Accelerometerisusedtocompensatefortheinclinationoftheside.InafteraccelerationsensorattitudedataacquisitionSCMdataarrangement,calculation,afteraccelerationmeterisobtainedtheX,y,Zthree-axisattitudeinformationarerespectivelytocalculatethepitchingangleofpitchandtransverserollangle,roll.TheX,YandZthreeaxisdataofthemagneticfieldofthemagneticfieldofthemagneticfieldofthemagneticfieldofthemagneticresistancesensorarecarriedoutbythesinglechipmicrocomputertocarryonthepitchangleandrollangleoftherollanglecompensation.Aftercompensation,theearth'smagneticfieldangleinformationoftheOLEDdisplayisconnectedwiththeSPIdisplayscreen.
KeywordsSTM32MCU;magnetoresistivesensor;accelerationsensor;electroniccompass
引言
本课题所使用的电子罗盘属于磁罗盘,它是一种根据大地磁场各个方向的矢量的大小计算出方向的装置。
很久很久以前,人们就意识到方向的重要性,并在战国时代发明了指南针,又叫“司南”。
早在宋代,人们便发现了地磁偏角。
等到大地磁场的有关知识与研究传到欧洲的时候已经到了12世纪。
现如今伴随着科技的发展与进步,分析与利用空间里地磁场的分布来辅助定位导航已成为世界上导航与定位的潮流。
到了现在,世界上的导航技术发展越来越快,陀螺仪、无线电、GPS等更加先进的技术问世使得罗盘的地位逐渐降低。
但是磁阻传感器的问世使得数字式电子罗盘作为一种导航手段重新进入人们的生活。
机械式陀螺仪成本很高并且结构复杂难以操作;无线电易受各种电磁波的干扰;GPS却会因为地形等的影响使得工作状态不稳定甚至不工作。
而电子罗盘则是弥补了这些缺点,使得其重新被人们所接受。
电子罗盘一般采用磁阻传感器以及加速度计来做导航系统的信号来源。
经过信号处理便可以为人们提供实时的地磁方位数据以及姿态数据。
对比简单的磁铁式罗盘,磁阻式电子罗盘拥有着无可比拟的优点。
例如抗一定程度的物理冲击,随时可以矫正弥补周围零散的磁场干扰。
又因为是电子式的罗盘,输出信号可以和其他电子设备复合组成更加复杂的系统。
当然,磁阻式电子罗盘并不是没有缺点。
因为磁阻方位角测量时仅采用XY两轴的水平面内的数据进行磁场方位角的计算,使得在传感器不在水平面内时测量的偏差较大。
实际使用时,罗盘的平面根本无法时刻保持水平,所以我们需要对这个误差产生的原理进行分析以及修正补偿。
第一章.电子罗盘的测量与倾角补偿原理
1.1电子罗盘的测量原理
我们可以把大地磁场看做在空间内一个不变的矢量,所以这一个矢量我们可以把它分成基于磁阻传感器的相互垂直的X、Y、Z三轴磁场分量,分别标记为hx、hy、hz。
Hx为磁阻传感器的正前方,hy为磁阻传感器的正右方,hz为磁阻传感器的正上方。
至此,关于磁场的坐标系建立完成。
而三轴磁阻传感器测量大地磁场的信息即为大地磁场X、Y、Z的三轴分量。
在传感器平面处于水平面时,我们只需X、Y两轴即可通过公式计算出当前方向和磁场北极的夹角。
如图2所示。
图2水平面内XY两轴测量出的磁场分量及计算航向角
我们使用反正切角函数来计算出航向角即当前方向与地磁北极的夹角。
反正切函数的表达式为
angle=arctan(hy/hx)(1.1.1)
反正切角即射线(x,y)和x轴正向间的夹角。
但是由于arctan的定义域以及值域的局限性,我们采用了atan2()函数来计算航向角。
atan2()函数的定义域为-π到π,而值域为-π到π,完全满足使用要求。
因为航向角没有负数,所以我们采用如下公式:
angle=atan2(hy,hx)+π(1.1.2)
这样便使得值域变成了0到2π,即0°-360°。
因为磁阻传感器测量出的三轴分量一般为弧度单位,所以我们在计算航向角时变使用如下公式:
angle=atan2(hy,hx)*(180°/3.1415926)+180°(1.1.3)
1.2倾角补偿原理
上面我们讲述了在水平面内即电子罗盘的磁阻传感器处于水平状态下如何通过磁阻传感器的度数计算出方位角。
但是在实际使用的过程中,根本无法保证电子罗盘始终为水平。
而在电子罗盘平面倾斜时,则会产生横滚角Roll和俯仰角Pitch,使得测量的磁场分量hx、hy与水平面时的磁场矢量大小产生偏差。
经过测试在x轴方向大约10度的倾角便会引起大约7-8°的误差。
这是我们就需要引入加速度传感器来测量传感器平面与水平面之间的夹角,即倾角。
倾角分为两种Pitch和Roll,Pitch定义为x轴和水平面的夹角,Roll定义为y轴和水平面的夹角。
加速度计传感器测量所产生的数据一样为三轴加速度分量分别标记为ax、ay、az,方向与磁阻传感器三轴方向一致。
可以这么说,三轴磁阻传感器与三轴加速度计的坐标轴保持一致。
这样加速度计所测量并计算出的倾角信息即为磁传感器所在平面与水平面的夹角信息。
在静止状态下,加速度计所测量的加速度即为重力在三轴的分量。
所以我们可以根据三轴分量的大小计算出加速度计所在平面与水平面的夹角Pitch与Roll。
公式如下:
(1.2.1)
(1.2.2)
经过矩阵变换推导我们可以得出倾斜角的补偿公式为:
Xh=hx*cos(Pitch)+hy*sin(Pitch)*sin(Roll)-hz*cos(Roll)*sin(Pitch)
(1.2.3)
Yh=hy*cos(Roll)+hz*sin(Roll)(1.2.4)
在得出经过倾斜补偿之后的地磁场的X、Y分量之后我们在代入之前得出的计算公式可以得到最终的方位角计算公式为:
angle=atan2(Yh,Xh)*(180°/3.1415926)+180°(1.2.5)
第二章电子罗盘的硬件设计与实现
2.1系统框架
本系统采用STM32F103C8T6单片机为主控芯片。
该单片机时钟频率最高可达72M,完全符合本系统的工作需求。
传感器选用霍尼韦尔公司的高集成三轴磁阻传感器HMC5883L,以及飞思卡尔公司的MMA8452三轴加速度传感器。
在经过传感器的测量之后,把数据通过IIC串行总线传输到单片机内进行数据处理以及运算。
在得出方位角以及姿态信息之后,通过SPI串口把信息输出到0.96寸的OLED显示屏上。
供电方面采用普通标准USB接口供电,因为STM32单片机供电要求是3.3V,所以我们采用电源稳压芯片AMS1117-3.3V,将USB提供的5V的直流电压转换成3.3V。
另外,在硬件完成之后我们需要数据采集以及调试,所以引出STM32单片机的USART1串口1的RX、TX两根引脚。
因为HMC5883L与MMA8452的封装较小,不适合手工焊接,所以采用了已经将传感器外围电路配置好的传感器集成模块。
安装时需注意传感器模块的垂直度和水平度都要求较高。
另外,传感器模块之间的相对位置与坐标轴也有较高的要求。
整个系统框图如下图所示:
图3电子罗盘系统框架
2.2传感器的选择
因为电子罗盘的核心传感器需要测量大地磁场,所以我们需要选择一个合适的磁阻传感器测量大地磁场。
尽管我们需要的是水平面内的X、Y两轴的磁场数据,但是在倾斜补偿时时需要第三轴Z轴的数据进行补偿的,所以我们需要使用三轴的磁阻传感器。
霍尼韦尔Honeywell公司推出的高集成度的磁阻传感器HMC5883L刚好符合我们的要求。
该传感器集成了模数/数模转换、低通滤波、温度补偿等往往需要我们考虑的数字处理电路,并且价格便宜、精度高,是最理想的选择。
正是因为电子罗盘没有办法保证罗盘平面即磁阻传感器的平面与水平面重合,所以我们需要用到加速度传感器来测量罗盘平面与水平面的夹角。
因为需要测量横滚角Roll与俯仰角Pitch,所以我们需要用到三轴加速度传感器。
因为磁阻传感器使用了IIC串行总线的方式与STM32单片机通讯,正好飞思卡尔公司的三轴加速度MMA8452也采用了IIC的串行通讯方式,不需要另外配置其他的通信协议,所以便采用了MMA8452作为本系统的加速度传感器测量倾角。
2.3.单片机开发环境
我们使用STM32单片机做为控制核心,因此需要配置开发环境。
我们使用了KEILMDKuvision5作为开发环境。
配置意法半导体公司提供的STM32开发函数库,版本V3.5。
作为程序调试接口,我们使用了20pin的标准JTAG接口。
它可以在线仿真,单步调试,十分方便实用。
第三章.电子罗盘误差分析与补偿
3.1误差来源
误差来源有好几种。
一般来说,可分为三种,分别为漂移、椭球化以及倾斜误差。
在未经过任何误差校正之前我们可以通过采集磁阻传感器的X、Y两轴几乎在水平面时转动的数据。
之后将数据导入MATLAB进行数据处理,绘制成关于X、Y两轴磁场大小数据的坐标图。
将硬件制作完成的电子罗盘放在水平的桌子上,每隔20ms读取一次磁阻传感器的X、Y、Z三轴磁场强度,通过串口TX引脚发送,缓慢转动一周,将TX引出到电脑串口助手上,电脑接收三轴数据。
之后将接收到的数据保存成txt格式导入MATLAB进行处理及绘图。
图片如下所示:
图6原始X、Y两轴磁场图
由上图可以看出,在未经过任何校准的情况下,X、Y两轴数据形成的图形是一个偏离0点的椭圆。
偏移零点的现象叫做零点漂移,而椭圆的现象叫做椭圆化。
零点漂移的原因是周围有铁质物质对传感器检测磁场存在干扰,使得零点发生漂移。
椭圆化的原因是周围具有带有磁性的物质使磁场发生变化,使得本来应该是圆的图形椭圆化。
而倾斜误差在图像上的表现形式也是椭圆化,但是因为本图是在近似水平面上采集的数据,所以倾斜误差将在下一节讲述。
3.2误差的补偿
3.2.1漂移补偿
因为是简单的漂移,图形并没有产生形变,所以只需要将图形的圆点移回零点即可。
即求出它的X、Y两轴的偏移量,在每个X、Y的值构成的点加上偏移的量即可将图形补偿成圆心为零点的圆。
3.2.2椭球化补偿
上面的图形因为是在近乎平面的状态下采集的数据,所以只有两个轴,为平面图形。
在实际使用中,三轴都可能会不同,所以我们需要补偿椭球化的形变。
将磁阻传感器在空中任意转动,让其充分采集三轴数据,使得其采集的数据可以图形化成一个椭球。
如图所示:
图7未经校准的椭球
根据数据可以使用椭球拟合的方法将椭球的表达式计算出来。
但是因为椭球化不是十分严重,可以使用简单的方法普通的进行补偿。
将X、Y、Z三轴的最大值最小值分别找出,分别记为Xmax、Xmin、Ymax、Ymin、Zmax、Zmin。
则椭球三轴直径分别为
Xd=Xmax-Xmin(3.2.1)
Yd=Ymax-Ymin(3.2.2)
Zd=Zmax-Zmin(3.2.3)
知道了三轴直径之后,可以将其中一轴看做比例为1,另外两轴按比例缩放即:
X=x*1(3.2.4)
Y=y*Xd/Yd(3.2.5)
Z=z*Xd/Zd(3.2.6)
在经过这个步骤之后我们即可得到补偿过得图形。
如图所示:
·
图8补偿过后的磁场
第四章.校正及其程序设计
4.18字型校准
目前关于磁阻式电子罗盘的校正有很多方法。
大部分手机中内置的电子罗盘即指南针所采用的校准方法一般采用十面校准法和8字型校准。
十面校准法需要用户将手机各个方向放置来采集磁场数据。
但是由于步骤复杂,难以记忆,所以自从8字型校准这种校正方法问世,十面校准的方法也已经逐渐趋于淘汰。
所谓的8字型校准就是将手机握持,在空中挥动,挥动的轨迹为“横躺的着的8字”,如图4.1所示。
这样的校正方法相比十面校准法简单方便许多,并且校正效果更加完美。
图4.18字型校准轨迹
8字形校准的目的和十面校准法相同,即尽可能多的采集到磁场各个方向上的数据。
因为只有采集到各个方向上的尽可能多的数据,才能保证校正的有效性。
智能手机采用的这种校正方法手持便携式电子罗盘同样可以使用。
所以,本文采用这种8字型校准的办法来校准电子罗盘。
4.28字型校准的程序设计
上面已经讲述过系统框架,采用STM32单片机与KEILMDK的编译环境。
因为C语言的方便开发、可移植性好等各种优点,所以本文采用C语言编程实现电子罗盘的各个功能。
在程序中,本文采用的设计流程是:
在正常使用过程中,如果发现航向角偏差不准的情况,即可将电子罗盘正面向下放置10s左右以进入校准过程。
进入校准过程时,OLED显示屏显示“Calibrating...About30seconds.”此时电子罗盘内部启动采集磁场程序,需要手持电子罗盘在空中“画8字”进行数据采集。
在经过1500组的数据采集大约30秒之后,电子罗盘会将采集到的数据进行处理,误差补偿。
此时进行校正的误差即为漂移误差以及椭球化误差。
之后在主程序中将得到的误差数据进行补偿即可得到较为准确的航向角数据。
下面是电子罗盘进行8字型校准时的子程序:
voidcalibrate_mag()
{
OLED_ShowString(8,16,"Calibrating...");
OLED_ShowString(8,32,"About30seconds.");
//OLED需要显示的内容放入Gram字符串数组
OLED_Refresh_Gram();//将OLED需要显示的内容刷新至OLED屏幕上
read_hmc5883l();//读取磁阻传感器HMC5883L的磁场数据
xmax=xmin=x;
ymax=ymin=y;
zmax=zmin=z;//分别给三轴最大最小值赋初值
for(i=0;i<1500;i++)//采集1500组数据,大约30秒
{
read_hmc5883l();//读取磁阻传感器HMC5883L的磁场数据
if(x>xmax)
xmax=x;
if(x xmin=x; if(y>ymax) ymax=y; if(y ymin=y; if(z>zmax) zmax=z; if(z zmin=z;//依次比较将1500组数据中三轴最大值最小值找出 } if(fabs(xmax-xmin)>0) Xoffset=(xmax+xmin)/2; if(fabs(ymax-ymin)>0) Yoffset=(ymax+ymin)/2; if(fabs(zmax-zmin)>0) Zoffset=(zmax+zmin)/2;//计算出三轴的0点漂移值 Xs=xmax-xmin; Ys=ymax-ymin; Zs=zmax-zmin;//计算出三轴的椭球化比例系数 } 4.3倾斜补偿的程序设计与实现 上面介绍了倾斜补偿的原理,并且已经实现了8字型校准,在校准完之后的X、Y、Z三轴数据即可进行倾斜补偿。 倾斜补偿的公式如下: Xh=hx*cos(Pitch)+hy*sin(Pitch)*sin(Roll)-hz*cos(Roll)*sin(Pitch) Yh=hy*cos(Roll)+hz*sin(Roll)(4.3.1) 即在进入主程序时先执行calibrate_mag()子程序将校准量offset算出,之后在每一组读取的X、Y、Z三轴磁场数据时候分别减去对应的offset值,在乘以三轴对应的比例系数之后,在进入倾斜补偿的校准。 将经过前面两部校正的hx、hy、hz以及三轴加速度得到的Pitch和Roll带入上述公式即可得到经过倾斜补偿之后的数据Xh、Yh。 之后带入航向角计算公式进行计算,即可求出较为精准的航向角。 航向角计算公式如下: angle=atan2(hy,hx)*(180°/3.1415926)+180°(4.3.2) 计算航向角子程序如下: Voidangle() { read_hmc5883l();//读取磁阻传感器三轴数据 X=x-Xoffset; Y=y-Yoffset; Z=z-Zoffset;//零点漂移补偿 Y=Y*Ys/Xs; Z=Z*Zs/Xs;//椭球化补偿 get8452data();//读取加速度计三轴数据计算姿态角 Xh=X*cos(Pitch)+Y*sin(Pitch)*sin(Roll)-Z*cos(Roll)*sin(Pitch); Yh=Y*cos(Roll)+Z*sin(Roll);//倾斜补偿 ANGLE=atan2(Yh,Xh)*(180/3.141592653)+180; //将补偿后的数据带入计算出航向角 oled_display();//将航向角以及各种补偿数据显示 delay_ms(10); } 4.4滤波算法 在数据采集过程中,数据很容易受到各种波动的干扰,令我们无法直接获取到所需要的信息。 所以需要将数据进行滤波处理,将各种影响最终结果的干扰和噪声排除。 因为我们的数据并不复杂,所以只需要简单的滤波就可以得到我们需要的较为准确数据。 滤波可以分为硬件滤波和软件滤波。 我们使用软件滤波即可达到要求。 一般常用的几种简单软件滤波有: 中位值滤波、算术平均数滤波、递推平均滤波等。 另外,卡尔曼滤波对于动态系统的噪声去除效果很好,但是较为繁琐。 我们便使用简化的卡尔曼滤波即可达到较为完美的滤波效果。 我们所使用的简化版卡尔曼滤波公式如下: (4.4.1) 公式中: X(t)为本次显示值,即最终结果;X(t-1)为上次的采集值;X’(t)为本次的采集值;a、b分别为两次采样的校正因子。 在实验中反复测试,a、b分别取0.85和0.15,使得最终结果不会产生较大的变动,保持结果的稳定。 经过上式的滤波,最终我们得到的显示值显示较为稳定,可以看做最终结果,同时不影响航向角的响应速度。 第五章.结论与展望 在经过调试之后,电子罗盘的已经可以正常使用。 经过与10部手机中内置指南针的比对,电子罗盘的精度已经达到1°的要求,并且指向误差在±3°以内。 在±30°以内倾斜时,电子罗盘的指向角度几乎没有变化。 本设备在完成了电子罗盘应有的功能之外,还引出了TX、RX串口引脚,方便设计完成之前的调试,更可以在设计调试完成之后与各种设备、上位机等各种电子系统连接,极大地拓展了本设备的适用范围。 在未来,GPS模块的拓展可以使得电子罗盘的功能更加强大,定位更加精准,完全掌握载体的航向以及定位这一目标得以实现。 另外,本设备再加以拓展通讯模块,比如蓝牙Bluetooth模块或者GSM模块,甚至可以实现载体车辆自动无人驾驶等功能。 可以这么说,本设备在达到设计目标以外,还具有更大的发展潜力与空间。 致谢 本次毕业设计前后经过了3个月的时间,最终才得以完成。 首先需要感谢的便是我的指导老师葛海浪。 没有他的循循善诱、不是他一步一步的引导着我,我相信我的毕业设计会做的一团糟。 不仅在毕业设计中,他对于我生活上的关心也让我十分感动。 回想起在我遇到困难时,他陪我在实验室中一步一步的寻找错误、纠正直到天黑,仿佛历历在目。 最后感谢所有在我大学四年中关心过帮助过我的老师、辅导员、同学们,让我的大学如此的充实与精彩。 参考文献 [1]刘诗斌,冯晓毅.基于椭圆假设的电子罗盘误差补偿方法[J].
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 磁阻 传感器 电子 罗盘 设计 大学 论文