摘 要:设计了一种基于气压传感器BMP085的高度测量系统。该系统以STM32F103RCT6嵌入式芯片为主控制器,采用I2C硬件接口的方式读取BMP085测量的气压值,并用温度值对气压值进行补偿,然后根据大气压强与海拔高度的关系,利用线性插值法计算绝对高度,进而获取相对高度。实验结果表明,该系统测量的相对高度误差为0.4 m,能够达到高精度的要求。
关键词:BMP085;气压传感器;线性插值法;高度测量
近年来,全球定位系统GPS(Global Positioning System)在定位领域的应用越来越广泛。在GPS信号接收状况良好时,能够实现全球范围内的实时定位,但是在封闭的高楼内以及高架桥下等环境中,GPS卫星的信号容易被遮挡,导致定位精度大大降低[1-2]。随着传感器技术的不断发展,利用基于微机电系统MEMS(Micro Electromechanical System)技术的传感器实现高度测算已经成为一种研究趋势,采用这种方法可以弥补GPS定位时信号被遮挡的缺点。本文提出了一种基于BMP085数字气压传感器的高度测量方法,设计了一种通过STM32F103RCT6微处理器控制的高度测量系统。该系统具有体积小、精度高、功耗低等优点,可以应用于室内外导航、天气预测、飞行高度测量等多种场合。
1 系统硬件设计
本系统硬件由BMP085气压传感器模块、STM32F103-
RCT6微处理器、电源等部分组成。BMP085气压传感器模块通过I2C(Inter-Integrated Circuit)总线将未经补偿的气压值和温度值传送给STM32F103RCT6微处理器,微处理器对数据进行补偿后,再将气压、高度等数据通过串口输出到PC上,并在PC上显示。系统硬件框图如图1所示。
1.1 BMP085数字气压传感器
BMP085是德国BOSCH公司生产的一款低功耗、高精度的MEMS数字气压传感器。BMP085的供电电压为1.8 V~3.6 V,典型值为2.5 V。它由电阻式压力传感器、A/D转换器和带有E2PROM的控制单元组成,控制单元通过I2C总线与移动设备的微处理器连接[3]。E2PROM中存储了11个校准参数,这11个校准参数涉及到参考温度下的零点漂移、零点漂移的温度系数以及灵敏度的温度系数等[4],用于对气压值进行温度补偿。BMP085的气压测量范围为300 hPa~1 100 hPa(海拔高度-500 m~9 000 m),温度测量范围为-40 ℃~+85 ℃。在低功耗模式下,BMP085精度为0.06 hPa(0.5 m),在高精度模式下其精度可以达到0.03 hPa(0.25 m),转换速率可以达到128次/s,能够满足系统对速度和精度的要求。
1.2 接口电路设计
STM32F103RCT6是一款基于32位ARM CortexTM-M3 RISC内核的增强型微控制器[5],包含2个I2C接口,便于与外围设备之间进行通信,其中I2C1的串行数据(SDA)线和串行时钟(SCL)线对应的引脚分别为PB6、PB7,而I2C2的SDA和SCL对应的引脚分别为PB10、PB11。本系统采用I2C1接口进行通信,BMP085的SCL和SDA分别与STM32F103RCT6的PB6、PB7引脚相连。STM32F103-RCT6微处理器采用8 MHz的外部晶振,通过锁相环产生最大的72 MHz主时钟频率。另外,一般具有I2C总线的器件其SDA和SCL管脚都是漏极开路(或集电极开路)输出结构,因此实际使用时,SDA和SCL信号线都必须加上拉电阻Rp(Pull-Up Resistor),上拉电阻一般取值为3 kΩ~10 kΩ,本系统采用4.7 kΩ的上拉电阻。
同时,测量所得的气压和高度等数据通过USART1串口输出到PC。BMP085与STM32F103RCT6的接口电路连接如图2所示,图中U1为电压转换芯片,将5 V电压转换为3.3 V电压,U2为气压传感器BMP085,U3为SP3232电平转换芯片,通过串行端口(COM)与PC机相连,U4为本系统的核心芯片STM32F103RCT6微处理器。
2 单片机软件设计
单片机软件设计流程如图3所示。首先进行系统初始化,包括系统时钟(RCC)配置、中断向量(NVIC)配置、GPIO配置、USART串口配置以及I2C接口初始化。接着从BMP085的E2PROM中读取11个校准参数。然后每隔10 ms从寄存器中读取未经补偿的温度和气压值,用校准参数对其进行补偿,并采用线性插值法计算海拔高度,再将温度、气压、高度等数据一起传送给PC,并在PC上显示一行数据。
下面对I2C读写方式、数据补偿以及线性插值法计算海拔高度部分进行重点介绍。
2.1 硬件方式实现I2C接口
本系统的BMP085和STM32F103RCT6之间通过I2C总线进行通信。I2C接口有两种实现方式,一种是使用I/O口模拟I2C接口,另外一种是硬件中断方式。本系统采用硬件方式实现I2C接口通信。虽然硬件实现I2C接口较复杂,但是相对于用I/O口模拟I2C接口的方法,硬件I2C方式在实时性和传输速度上有很大的优势。
对I2C口进行初始化时,配置I2C为7位地址模式,时钟频率为100 kHz,开启IT_
ERR、IT_EVT和IT_BUF中断。在产生I2C起始位后,第一个字节由7位的传输地址和1位的数据方向位组成。数据方向位为“1”表示主接收模式(主机请求从机数据),为“0”表示主传输模式(主机向从机输出数据)[5]。当采用单字节读写方式时,主传输模式与主接收模式序列图分别如图4、图5所示。图中S为起始条件,P为停止条件,A为应答,NA为非应答;EV5表示已发送起始条件,EV6_1表示从机地址已发送,EV6_2表示收到匹配的地址数据,EV7表示收到数据,EV8表示数据已发送。
2.2 数据补偿
由于海拔高度和大气压强的关系受温度的影响,因此需要用温度值对气压值进行补偿。BMP085气压传感器的E2PROM中有原厂自带的11个校准参数,每一个传感器的校准参数都不同。在第一次读取气压和温度值之前,必须先读取E2PROM中的校准参数,再从指定的寄存器中将未经补偿的温度和气压值读取出来,然后采用BMP085数据手册提供的补偿算法对温度值和气压值进行补偿。该算法中,需要根据所设置的过采样参数OSS(Oversampling Setting)的值来选择BMP085的工作模式,OSS的值决定了测量精度和转换时间,BMP085的4种工作模式如表1所示[3]。本系统的单片机软件中将OSS的值设置为“0”,即选择低功耗工作模式。
后的气压值,p0为标准大气压,即p0=101 325 Pa。从式(3)可以看出,大气压每下降1 hPa,海拔高度就升高8.43 m。同时,可以发现大气压强与实际海拔高度之间存在非线性关系。如果直接用单片机微处理器计算此式,则程序较复杂、占用内存空间较大,影响了运算速度。因此需要采用一种算法将气压和高度两者之间的非线性关系转换为线性关系,以便于通过STM32F103RCT6微处理器对高度进行实际的测算[7]。
2.3.2 线性插值法计算海拔高度
线性插值法的基本思路为:系统的静态输入/输出数据表格中相邻两个数据点之间客观地存在着某种变化规律,在相邻的各已知点间构造一个简单的近似函数,近似函数的值取离散数据,然后根据己知点的函数值求出所要点的函数值[7]。本文采用线性插值法来计算海拔高度,假设系统输入为x,并且xi
国际标准大气压数据表中记录了-100 m~20 000 m间每隔一段高度所对应的气压值。每个气压数据点为xi,其对应的高度数据点为yi,P(x)即为系统所要测量的海拔高度值。在实际应用中,首先判断传感器所读取的气压值对应的高度范围,然后采用线性插值法进行高度计算,这样在很大程度上避免了乘方运算的复杂性[8]。
3 实验结果及分析
3.1 实验测试结果
下面给出对一幢大楼进行高度测试实验的记录情况。分为两次实验,两次实验在同一时间段内进行,首先测量大楼楼顶的海拔高度,然后测量地面的海拔高度,两者相减得到相对高度,即大楼的高度。
实际测量海拔高度时,每隔2 min测量一次,每次记录30行数据的平均值,记录下10组测量数据。两次实验结果如图6所示,大楼相对高度与实际高度的对比如图7所示。
对图7中的数据进行分析,计算得到10组相对高度数据的平均值为17.3 m。经实地测量,大楼的实际高度为16.9 m。因此本系统测量的相对高度误差为0.4 m,达到了预期的精度要求。
3.2 误差分析
由于大气压强易受天气、温度等因素影响而发生变化,导致计算得出的绝对海拔高度值不稳定,变化范围较大,本实验计算得到的相对高度值可以抵消由此产生的误差。
本文提出的基于气压传感器BMP085的高度测量系统,借助于大气压与海拔高度之间的关系,采用线性插值法计算海拔高度,减小了运算的复杂性。同时,利用硬件方式实现I2C接口,保证了较快的传输速率。经实验验证,该系统的相对高度误差为0.4 m,具有一定的适用性。本系统具有体积小、精度高、便于携带等优点,适合安装在移动设备中,实用性较强,可以应用于军事、工业和商业等多个领域,有着广泛的应用前景。
参考文献
[1] 庞晗.基于MEMS惯性器件的徒步个人导航仪设计与实现[D].哈尔滨:哈尔滨工程大学,2012.
[2] 姜西瑞.基于GPS和GSM/GPRS的定位系统的设计与实现[D].北京:中国科学院计算技术研究所,2006.
[3] BOSCH Sensortec.BMP085 digital pressure sensor data sheet[EB/OL].[2013-08-10].http://www.bosch-sensortec.com.
[4] 王俊彩,王福平,侯瑞峰,等.基于BMP085的一种便携式海拔高度测量系统设计[J].传感器与微系统,2011,30(12):123-125.
[5] 蒙博宇.STM32自学笔记[M].北京:北京航空航天大学出版社,2012.
[6] 曲国福.高精度智能高度传感器设计[J].计量与测试技术,2003,30(6):4-6.
[7] 孟炜.高度测量数据处理及算法的研究[D].西安:西北工业大学,2005.
[8] Skyteacher.基于线性插值算法与BMP085气压传感器的数字电子高度计设计[EB/OL].[2013-09-06].http://www.docin.com/p-471155660.html.