MEMS加速度计测倾角系统.docx
《MEMS加速度计测倾角系统.docx》由会员分享,可在线阅读,更多相关《MEMS加速度计测倾角系统.docx(25页珍藏版)》请在冰点文库上搜索。
![MEMS加速度计测倾角系统.docx](https://file1.bingdoc.com/fileroot1/2023-4/30/d326e72f-961c-4518-9351-c9cffbfe5fe0/d326e72f-961c-4518-9351-c9cffbfe5fe01.gif)
MEMS加速度计测倾角系统
编号:
传感器综合设计实训
说明书
题目:
MEMS加速度计测倾角系统
学院:
信息与通信学院
专业:
电子信息工程
学生姓名:
学号:
指导教师:
2015年7月10日
摘要
设计由MEMS3DM-E10A加速度计与由VisualStudio2010编写的上位机组合而成的一种新型数字倾角测量系统,通过对MEMS加速度计的输出信号进行调理和串口数据读取并转换,并且在获得数字信号后进行误差补偿,解算出倾角值并通过上位机软件显示。
该倾角测量仪具有体积小、重量轻、精度高的特性,可广泛应用于建筑、机械、道路、桥梁和地质勘探等重力参考系下测量倾角的场合。
基于微机电系统(MEMS)技术的电子罗盘具有价格低廉、尺寸小、质量轻、集成度高、适合大批量生产等优点,在军事及民用领域起着越来越重要的作用。
以PC上位机为核心,采用单一模块内集成了三轴加速度传感器的MEMS数字集成芯片3DM-E10A作为航向测量模块的测倾角系统。
在此系统结构中,PC上位机通过串口通信协议采集航向测量模块的三轴加速度传感器测量输出,通过分析加速度传感器测量输出的主要误差来源,建立相应的误差校正模型对传感器测量输出进行误差补偿后进行姿态解算,并把姿态解算得到的到的倾角通过RS232传送到PC应用程序进行实时数据显示。
该系统设计结构最大化地减少了外围器件的使用,结构简单,降低了成本、体积和功耗。
关键词:
MEMS加速度计;倾角测量仪;上位机;误差补偿
Abstract
DesignacombinationofMEMS3DM-E10AaccelerometerandVisualStudio2010writtenbythehostcomputerfromanewdigitalanglemeasurementsystembyMEMSaccelerometeroutputsignalconditioningandserialdatareadandconverted,andgetdigitalsignalaftererrorcompensation,itiscalculatedbythetiltvalueanddisplayedthroughthePCsoftware.Theanglemeasurementinstrumenthasasmallsize,lightweight,highprecisioncharacteristics,canbewidelyusedatconstruction,machinery,roads,bridgesandgeologicalexplorationgravityreferencesystemmeasuringtheinclinationoftheoccasion.(MEMS)electroniccompasstechnologywithlowcost,smallsize,lightweight,highintegration,suitableformassproductionbasedonmicro-electromechanicalsystems,etc.,playanincreasinglyimportantroleinmilitaryandcivilianfields.PCtoPCasthecore,theuseofasinglemoduleintegratesthree-axisaccelerometerMEMSdigitalintegratedchip3DM-E10Aasheadinganglemeasuringmodulemeasuringsystem.Afterthissystemconfiguration,PCPCacquisitionheadingmeasurementmodulesthroughtheserialcommunicationprotocoltriaxialaccelerationsensoroutput,throughtheanalysisofthemainsourcesoferrortomeasuretheoutputoftheaccelerationsensor,theestablishmentofappropriateerrorcorrectionmodeltomeasuretheoutputofthesensorerrorcompensationsolvingthepostureandtheattitudesolutiontotheinclinationwastransferredtothePCviaRS232applicationsforreal-timedatadisplay.Thesystemisdesignedtoreducetheuseofarchitecturetomaximizeperipheraldevices,simplestructure,reducingthecost,sizeandpowerconsumption.
Keywords:
MEMSAccelerometers;Anglemeasurementinstrument;ErrorCompensation
PC
引言
许多应用领域中经常需要测量某个平面是否处于水平位置,或测量该平面相对于水平面的夹角。
目前的倾角测量工具主要是传统的水泡式水平尺,无法准确得到倾斜角度,由于加速度计的输出经处理可得到一个与倾斜角成正比的直流电压,因此可以利用加速度计测量物体相对于水平面的倾斜角。
新兴的加速度计传感器体积小、重量轻、功耗小、启动快、成本低、可靠性高、易于实现数字化和智能化而新兴的SoC型单片机也因其高度集成化的优点得到广泛应用。
基于MEMS加速度传感器以及上位机的倾角测量系统,与传统的水泡式测量仪相比具有测量精度高、测量范围大、使用及携带方便等特点。
1.MEMS加速度计测倾角系统设计方案
1.1MEMS加速度计测倾角系统的参数及要求
微型航姿参考系统(MAHRS)3DM-E10A系列是一款微型的全姿态测量传感装置,它由三轴MEMS陀螺、三轴MEMS加速度计、三轴磁阻型磁强计等三种类型的传感器构成。
三轴陀螺用于测量载体三个方向的绝对角速率,三轴加速度计用于测量载体三个方向的加速度,在系统工作中,主要作用是感知系统的水平方向的倾斜,并用于修正陀螺在俯仰和滚动方向的漂移,三轴磁阻型磁强计测量三维地磁强度,用于提供方向角的初始对准以及修正航向角漂移。
微型航姿参考系统3DM-E10A系列,可提供的输出数据有:
原始数据、四元数、姿态数据等。
本次系统设计的是用PC机编写上位机,通过上位机在电脑显示出MEMS加速度计的XYZ轴的数据,并显示各倾角数值。
1.2MEMS加速度计测倾角系统设计思路
从陀螺仪、加速度计、磁力计以及内部温度传感器得到的数据,全部被传输到嵌入式系统-数字信号处理器(DSP)中。
数字信号处理器(DSP)依据特定的算法以及存储在Flash存储器中的标定数据处理来自传感器的原始数据,作为其基本算法,微型航姿参考系统(MAHRS)3DM-E10A系列采用自适应卡尔曼滤波算法,该算法能够自动调整并适应不断变化的动态条件,而无需外部人为的干预。
微型航姿参考系统(MAHRS)3DM-E10A系列产品均在特定的环境实验条件下,并参考已知温度下的加速度、角速率和磁场进行全面的标定,并将标定数据输入每个产品中。
用户可以通过串口收发接口接收航姿信息及原始数据,同时也可以通过命令方式进行交互操作(详见微型航姿参考系统(MAHRS)3DM-E10A系列通信协议)。
微型航姿参考系统(MAHRS)3DM-E10A系列的供电电源标准值为DC+5.0V,数据线和电源线整合在一个接插装置中,方便使用。
电脑上位机部分,用MicrosoftVisualStudio2010编写串口部分,通过命令AHRS1命令使传感器连续输出处理数据,读加速度计的X,Y,Z三轴数据和滚动角,俯仰角,方位角的数据,然后通过程序将串口传输过来的无符号四字节数据转换成浮点型数据。
分别显示X,Y,Z轴的数据和滚动角,俯仰角,方位角的数据。
通过移动传感器来测出倾角。
2.系统主要器件选择及其参数
2.1MEMSMAHRS3DM-E10A传感器
微型航姿参考系统(MAHRS)3DM-E10A系列采用陀螺来测量载体的绝对角速率,然后载体的姿态角(航向角、俯仰角和滚动角)就可以通过陀螺输出数据的特定的解算方法来获得。
加速度计用于确定3DM-E10A系列初始姿态角,并修正并确定陀螺在水平方向(俯仰角和滚动角)的漂移。
三轴磁阻型磁强计用于提供方位角的初始对准以及修正陀螺的航向角漂移。
微型航姿参考系统(MAHRS)3DM-E10A系列内部的嵌入式处理器中设计有传感器融合算法,重力测量值(通过加速度计)和磁北向测量值(通过磁力计)有机融合并对漂移进行补偿,避免了因为角速率数据的积分运算带来的误差的无限累积。
而微型航姿参考系统(MAHRS)3DM-E10A系列相比无陀螺的电子罗盘具有很大的优势,在动态情况下它能够精确解算航姿,而一般的电子罗盘只能在静态条件下运用,在动态情况下无法得到精确的航姿信息。
微型航姿参考系统(MAHRS)3DM-E10A系列可
以可靠提供全姿态信息和原始数据,数据更新率可达到100Hz以上。
图2.1微型航姿参考系统(MAHRS)3DM-E10A系列硬件框图
图2.2微型航姿参考系统(MAHRS)3DM-E10A系列软件框图
2.2MEMSMAHRS3DM-E10A传感器规格
表2.13DM-E10A绝对最大额定值
表2.23DM-E10A性能指标
表2.33DM-E10A电气特性
表2.43DM-E10A物理特性
表2.53DM-E10A引脚定义
2.3MEMSMAHRS3DM-E10A传感器机械尺寸
图2.1微型航姿参考系统(MAHRS)3DM-E10A系列尺寸
2.4通讯协议及使用
2.4.1通讯接口及设置参数
微型航姿参考系统(MAHRS)3DM-E10A系列接口采用标准RS232串行接口,系统加电后序在处理器中运行,并通过串行接口连接通讯,启动时间小于1秒。
接口参数设置如表2.6
表2.6
波特率
115200
数据位数
8
校验位
无
停止位
1
2.5通信协议结构
微型航姿参考系统(MAHRS)3DM-E10A系列的通讯协议采用统一的报文包结构形式,有效传输数据长度为0-255字节,总长度为5-260字节。
其结构形式如下:
PRE
BID
MID
LEN
DATA
CS
表2.7通信字节表
3.MEMS加速度计测倾角系统设计与分析
3.1系统硬件电路的设计
硬件电路大致上可以分成MEMSMAHRS3DM-E10A传感器及SY2303ZJHUSBTORS232传输连接数据线、PC显示上位机三部分。
模块采集数据
滤波
RS232通信
上位机显示
图3.1硬件实现图
3.2上位机系统设计---串口通信
3.2.1串口发送指令代码
voidCMAHRS3DME10ASoftwareV10Dlg:
:
OnBnClickedButtonSend()
{
//TODO:
在此添加控件通知处理程序代码
inti,Count,m_TxData[5]={0xfa,0x01,0x82,0x00,0x79};
UpdateData(true);//更新控件数据
//m_mscom.put_Output(COleVariant(m_Editsend));//把发送编辑框的数据发送出去
//Count=m_strSend.GetLength();//m_strSend是关联发送编辑框的CString变量
Count=5;
CByteArraym_Array;
m_Array.RemoveAll();
m_Array.SetSize(Count);
for(i=0;im_Array.SetAt(i,m_TxData[i]);
m_mscom.put_Output(COleVariant(m_Array));//通过串口发送数据
}
输入报文格式
本次设计的系统使用的是AHRS1命令,具体输入报文格式如下
AHRS1命令-完全数据输出方式(处理数据),连续输出MID=0x82,单步输出MID=0x83;在收到输入报文后,微型航姿参考系统(MAHRS)3DM-E10A将立即响应,并执行相应的命令,连续或单步输出相应报文信息。
AHRS1命令–完全数据输出方式;
输出报文:
0xFA0x010x820x000x79
输出报文:
0xFA0x010x820x40LLLHHLHH…………LLLHHLHHCS
\________(数据区64字节)________/
输出的报文前三个字节和输入报文相同,表示设备连接正常。
第4字节为数据长度0x40,
表示数据区有64个字节的有效数据,末尾字节CS为前面所有字节的异或(XOR)。
3.2.2串口接收代码
voidCMAHRS3DME10ASoftwareV10Dlg:
:
OnCommMscomm1()//串口控件程序(接收部分)
{
//TODO:
在此处添加消息处理程序代码
VARIANTvariant_inp;
COleSafeArraysafearray_inp;
LONGlen,k;
BYTErxdata[2048];//设置BYTE数组An8-bitintegerthatisnotsigned.
unsignedcharstr[2048]={0};//保存下位机发送到上位机的数据,以字节形式保存
unsignedcharypr[4]={0};//保存姿态4字节数据
unsignedchargxyz[4]={0};//保存陀螺仪4字节数据
unsignedcharhxyz[4]={0};//保存磁力计4字节数据
unsignedcharaxyz[4]={0};//保存加速度4字节数据
floattemp=0.0;//保存浮点型数据(即无符号4字节数据转换后的浮点型数据)
CStringstrtemp;
if(m_mscom.get_CommEvent()==2)//事件值为2表示接收缓冲区内有字符
{
variant_inp=m_mscom.get_Input();//读缓冲区
safearray_inp=variant_inp;//VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize();//得到有效数据长度
for(k=0;ksafearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
for(k=0;k{
BYTEbt=*(char*)(rxdata+k);//字符型
if(k>=0&&k<=2)str[k]=bt;
if(str[0]==0xfa)
{
if(str[1]==0x01)
{
if(str[2]==0x82)
str[k]=bt;
}
}
设置Groupbox
设置Statictext
设置Edittext
设置Editcontrol
设置Combobox
设置Button
图3.2程序设置图
3.3上位机系统设计----数据转换
voidCMAHRS3DME10ASoftwareV10Dlg:
:
DoDataExchange(CDataExchange*pDX)
{
CDialogEx:
:
DoDataExchange(pDX);
DDX_Text(pDX,IDC_EDIT_Yaw1,m_EditYaw);//方位角数据
DDX_Text(pDX,IDC_EDIT_Pitch1,m_EditPitch);//俯仰角数据
DDX_Text(pDX,IDC_EDIT_Roll1,m_EditRoll);//翻滚角数据
DDX_Text(pDX,IDC_EDIT_AX1,m_EditAX);//加速度计X轴数据
DDX_Text(pDX,IDC_EDIT_AY1,m_EditAY);//加速度计Y轴数据
DDX_Text(pDX,IDC_EDIT_AZ1,m_EditAZ);//加速度计Z轴数据
DDX_Control(pDX,IDC_COMBO1,m_comb1);
DDX_Control(pDX,IDC_COMBO2,m_comb2);
DDX_Control(pDX,IDC_MSCOMM1,m_mscom);
}
floatBuffer_To_Float(unsignedchar*pBuffer,floatt)//无符号四字节数据-->浮点数
{
unsignedchari;
unsignedchar*s;
s=(unsignedchar*)(&t);
for(i=0;i<4;i++)
{
*s=pBuffer[i];
s++;
}
returnt;
}
3.4上位机系统设计----数据解析显示
if(str[0]==0xfa&&str[1]==0x01&&str[2]==0x82)
{
////////////姿态解算/////////////
ypr[0]=str[64];//Yaw
ypr[1]=str[65];
ypr[2]=str[66];
ypr[3]=str[67];
temp=Buffer_To_Float(ypr,temp);
strtemp.Format(_T("%.4f"),temp);//将浮点型变量转换为字符串
m_EditYaw=strtemp;//把转换后的字符串加入接收编辑框
ypr[0]=str[60];//Pitch
ypr[1]=str[61];
ypr[2]=str[62];
ypr[3]=str[63];
temp=Buffer_To_Float(ypr,temp);
strtemp.Format(_T("%.4f"),temp);
m_EditPitch=strtemp;
ypr[0]=str[56];//Roll
ypr[1]=str[57];
ypr[2]=str[58];
ypr[3]=str[59];
temp=Buffer_To_Float(ypr,temp);
strtemp.Format(_T("%.4f"),temp);
m_EditRoll=strtemp;
//////////////加速度////////////
axyz[0]=str[16];//AX
axyz[1]=str[17];
axyz[2]=str[18];
axyz[3]=str[19];
temp=Buffer_To_Float(axyz,temp);
strtemp.Format(_T("%.4f"),temp);
m_EditAX=strtemp;
axyz[0]=str[20];//AY
axyz[1]=str[21];
axyz[2]=str[22];
axyz[3]=str[23];
temp=Buffer_To_Float(axyz,temp);
strtemp.Format(_T("%.4f"),temp);
m_EditAY=strtemp;
axyz[0]=str[24];//AZ
axyz[1]=str[25];
axyz[2]=str[26];
axyz[3]=str[27];
temp=Buffer_To_Float(axyz,temp);
strtemp.Format(_T("%.4f"),temp);
m_EditAZ=strtemp;
图3.3程序流程图
开始
读取加速度和磁强数据
由加速度数据解算出俯仰角和横滚角
由磁强数据解算出航向角
上位机刷新姿态角
结束
3.5上位机系统设计----软件界面设计
图3.4软件界面图
相关代码
BOOLCMAHRS3DME10ASoftwareV10Dlg:
:
OnInitDialog()
{CDialogEx:
:
OnInitDialog();
//将“关于...”菜单项添加到系统菜单中。
//IDM_ABOUTBOX必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX<0xF000);
CMenu*pSysMenu=GetSystemMenu(FALSE);
if(pSysMenu!
=NULL)
{
BOOLbNameValid;
CStringstrAboutMenu;
bNameValid=strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if(!
strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);
}
}
/