当前位置:文档之家› 基于气压传感器的高度测量系统设计

基于气压传感器的高度测量系统设计

基于气压传感器的高度测量系统设计摘要:本文介绍了一种基于气压传感器的高度测量系统设计。

系统通过Arduino微控制器读取传感器BMP085的温度、气压值及温度补偿校正参数;利用温度、气压和海拔高度的关系结合软件编程及插值优化计算出海拔高度或相对海拔高度;在LED屏上显示当前温度、气压、海拔高度或相对海拔高度值。

整个系统集传感器和微控制器一体,具有结构精简、灵敏度高、低功耗、体积小、智能化、操作简单等特点。

关键词:气压传感器、线性插值、高度测量0 引言当前对海拔高度的测量主要的方式有利用GPS的测量,采用仪器的测量和基于气压的海拔高度测量三种方式。

GPS精度能达到要求但成本较高;仪器的测量因体积大携带不方便;相比较而言,采用微控制器的基于气压传感器高度测量系统在灵敏度、体积、成本、智能性等方面更符合实用要求。

该系统采用Arduino微控制器利用温度、气压值等传输参数经过处理后将大气压值转换成海拔高度值。

经实验得出该系统得到的数据能够满足实际需求,在便携气象仪系统、低空飞行器系统、气象控制系统等诸多领域有广泛的应用前景。

1 系统硬件设计系统硬件部分由Arduino微控制器、供电模块、LED显示模块、数字气压传感器BMP085以及外围电路组成。

如图1所示:图1 气压高度计硬件系统框图气压传感器BMP085通过IIC总线接口和微控制器Arduino相连,从而将温度、气压数据传送到微控制器,经过软件编程将微控制器获得的数据处理得到当前海拔高值或相对海拔高度值,将处理后相对精确的数据值再由显示器输出。

系统的硬件接口布线如下:1.BMP085:Vcc-3.3v,GND-GND,SDA-Arduinno SDA,SCL-Arduino SCL 2.1602:Vcc-3.3v,Vss-GND,VL-R(<10KΩ)-GND,RS-Arduino D12,R/W-Arduino D11,E-Arduino D2,D0~D7-Arduino D3~D10,BLA-3.3V, BLK-GND1.1Arduino mega2560微控制器微控制器是整个系统的控制核心,负责操作按键、传感器数据的采集、数据运算处理、显示器驱动等。

本气压高度计系统选用Arduino mega2560微控制器芯片,该芯片由意大利Arduino公司出品一个开放源代码的硬件组成。

兼容ATmega168/328/2560系列内核,带有54个数字I/O口(其中14个提供PWM输出),16个模拟I/O口,4对串行数据通信(UART),8KB SRAM存储,4KB EEPROM存储,256KB 闪存(其中8KB用于引导程序),支持3.3V和5V供电以及IIC总线通信和增强型SPI串行接口,能很方便地与外围设备进行通信。

外围供电电压在5V-12V之间,本系统采用9V电源。

1.1数字气压传感器BMP085数字气压传感器BMP085是一款高精度、超低能耗的压力传感器,可以应用在移动设备中。

它内部由控制单元、A/D转换模块、数据存储单元、8-pin陶瓷无引线芯片承载(LCC)超薄封装。

传感器通过A/D转换模块以最高128次/s的速率对温度气压的模拟值采样转换成数字信号,控制单元读取存储器EEPROM中的11个补偿参数和温度系数等。

完成采样后将数据通过IIC总线传送给微控制器,经过计算得到当前的温度值和气压值。

数字气压传感器的主要特点:压力范围:300——1100hPa(海拔-500米到9000米);电源电压:1.8V——3.6V (VDDA)1.62V——3.6V(VDDD);高精度:低功耗模式下,分辨率为0.06hPa(0.5米);高线性模式下,分辨率为0.03hPa(0.25米)。

1.3输出显示器输出电路部分采用标准的1602液晶显示器。

它是一种将液晶显示器、控制集成电路、PCB板、背光源、结构件装备在一起的集合。

如图2所示:图2 标准1602液晶模块主要参数:D0—D7数据口、R/W读写选择、RS数据/命令寄存器选择、BLA/BLK背光正/负极、VDD电源、VSS电源地、VL液晶显示偏压。

2系统软件设计系统模块化结构,主要有微控制上的复位按键,系统初始化,读EEPROM中的数据温度和气压值,软件滤波处理,气压海拔高度转换,输出到显示器等程序,主程序是循环方式工作。

系统流程图如图3所示:图3 系统软件设计流程图2.1 系统初始化首先系统进行微控制器启动,对系统I/O口、波特率、时钟等进行设置;系统初始化完成之后,Arduino mega2560 微控制器按照IIC 协议读取BMP085气压传感器中存放在EEPROM中的11个16位数据组成的温度补偿校正参数,每只传感器有着唯一的温度补偿校正参数;经过温度补偿校正参数和软件插值优化以后得到当前温度、大气压值,进而计算得出所对应的海拔高度值或相对海拔高度值,并将温度、海高度值有效信息送入显示器输出。

2.2 温度和气压的补偿系统初始化后对气压传感器BMP085进行操作,微控制器Arduino mega2560将传感器EEPROM中的11个16位数据组成的补偿参数,ac1,ac2,ac3,ac4,ac5,ac6,b1,b2,mb,mc,md分别读取出来为温度补偿准备。

此时,再对当前传感器采样模式为OSS=0进行原始未补偿温度数据(UT)和原始未补偿的大气压力数据(UP)的读取操作。

再利用数字气压芯片的补偿算法对大气压值进行温度补偿,得到当前温度值(temp)和大气压力值(p)。

主要算法程序流程如下:float bmp085GetTemperature(unsigned long ut){float x1,x2;x1=(((long)ut-ac6)*ac5)>>15;x2=((long)mc<<11)/(x1+md);b5=x1+x2;float temp=((b5+8)>>4);temp=temp/10;return temp;}float bmp085GetPressure(unsigned long up){long x1,x2,x3,b3,b6,p;unsigned long b4,b7;b6=b5-4000;//Calculate B3 belowx1=(b2*(b6*b6)>>12)>>11;x2=(ac2*b6)>>11;x3=x1+x2;b3=(((((long)ac1)*4+x3)<<OSS)+2)>>2; //Calculate B4 belowx1=(ac3*b6)>>13;x2=(b1*((b6*b6)>>12))>>16;x3=((x1+x2)+2)>>2;b4=(ac4*(unsigned long)(x3+32768))>>15;b7=((unsigned long)(up-b3)*(50000>>OSS));if(b7<0x80000000)p=(b7<<1)/b4;elsep=(b7/b4)<<1;x1=(p>>8)*(p>>8);x1=(x1*3038)>>16;x2=(-7357*p)>>16;p+=(x1+x2+3791)>>4;return p;}2.3海拔高度计算数字气压传感器BMP085对气压海拔高度提供了参考公式,利用该公式配合传感器采集到的气压值以及温度补偿值较好地得出海拔高度,公式如下Altitude=44330*[1-(p/P0)^(1/5.255)] (1) 式中Altitude是以米(m)为单位的海拔高度值;p以Pa为单位的当前某一高度的大气压值;P0为15 ℃时101325Pa海平面标准大气压值。

将其值代入方程计算得到相应海拔高度(纵坐标m)和大气压(横坐标Pa)关系曲线。

如图4所示:图4 大气压和海拔高度曲线关系图从图4中可以看出:大气压和海拔高度在0到6000米之间几乎成线性关系,但随着变化关系比较复杂,微处理器直接计算算法程序复杂、速度慢、资源占用较多。

因此,在实际设计过程中,在系统允许误差范围内对原始数据进行插值优化处理,假设系统输入为p,并且p(i)<p<p(i+1)时,在此区间内可近似认为系统的输入/输出的关系为线性关系P(p)=a0+a1*p,其插值公式为:P(p)=y(i)+(y(i+1)-y(i))/(p(i+1)-p(i)) (2) 国际标准大气压数据表记录了-100~20000m之间每隔一段高度所对应的气压值。

每个气压数据p(i)和所对应高度数据点y(i),P(p)为系统要测量的高度值。

将数据离散化制作成一个大气压值和海拔高度值对应查询表,并放入到微控制器内存中,再根据测量得到的大气压值进行查表,从而确定对应的海拔高度值。

3实验结果基于该系统于14年11月12让下午5时对某楼层楼层高度测量,并多次测量取海拔高度值并计算得出相对海拔高度值并与实际值比较,实验所得数据结果如下表1所示。

表1 实验数据结果由上表1可看出楼层相对地面海拔高度平均误差为0.2699m。

实验测量结果表明该系统测量值和真实值差距在误差范围(0.25m-0.5m)内,效果良好,基本满足了测量要求。

4 结束语实验结果表明本文设计实现了计算海拔高度或相对海拔高度的测量。

基于气压传感器BMP085及微控制器通过简单的电路和有效的软件算法技术处理,具有较高的灵敏度和稳定性,适用于精度比较高,体积小,成本低,操作简单的设备中。

本文研究结果在实际生活中具有广泛的应用前景。

参考文献:[1]U.S;Simon Monk;《30 Arduino Projects for the Evil Genius》;2010 by The McGraw-Hill Companies。

[2]U.S;Michael McRoberts;《Beginning Arduino》;2010 by Michael McRoberts。

[3]程晨,《Arduino开发实战指南》,机械工业出版社。

[4]殷希梅,杨维,程洪涛;基于BMP085数字气压传感器的弹上高度测量系统设计;弹箭与制导学报2013年8月。

[5]王俊彩,王福平,候瑞锋,王成;基于BMP085的一种便携式海拔高度测量系统设计;传感器与微系统2011年12月。

[6]孙凯,张中平,秦明,黄庆安;基于C8051F310的智能便携式气压高度测量系统;电子器件2005年9月。

[7]张金燕,刘高平,杨如祥;基于气压传感器BMP085的高度测量系统实现;技术与方法2014年6月。

相关主题