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

  • 格式:docx
  • 大小:146.79 KB
  • 文档页数:8

下载文档原格式

  / 8
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

摘要:本文介绍了一种基于气压传感器的高度测量系统设计。系统通过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-GND

1.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 below

x1=(b2*(b6*b6)>>12)>>11;

x2=(ac2*b6)>>11;

x3=x1+x2;

b3=(((((long)ac1)*4+x3)<>2; //Calculate B4 below

x1=(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;