高精度气压传感器BMP280代码与解析


前言

BMP280前身是BMP180,具有高精度、线性和长期稳定性的特点。本文将对传感器的使用进行解析,提供了STM32的示例代码,可进行移植,过程简单


一、传感器简介

BMP280可使用I2C和SPI通信方式,在本示例中,采用SPI通信。管脚描述如下:
在这里插入图片描述
BMP280的使用比较简单,进行采集数据前需要进行的参数设置包括:工作模式、IIR滤波器、采样数量和采集频率等

二、参数设置

1.工作模式

BMP280提供了三种工作模式:

  • 休眠模式(Sleep mode) :传感器进入休眠状态,停止采集数据,但寄存器的值不变;
  • 强制模式(Forced mode): 进行一次数据采集,采集完成后返回休眠模式;
  • 普通模式(Normal mode):循环进行多次数据采集。

以下是程序提供的模式设置函数。

/************************************
*	函数功能:工作模式设置推荐
*	参数:mode 0 睡眠模式
*            1 单次测量模式,测量完成后回到休眠模式
*            2 连续测量模式
*	返回值:  0 设置成功
*           1 设置失败
*************************************/
uint8_t bmp280_setMode(uint8_t mode);

2.采样设置

BMP280提供了温度和气压的过采样设置,其意义是一次测量多个数据,将这些数据进行求和平均得到输出值。例如将气压ADC过采样设置为×16,那么一次测量16个数据,将这16个数据进行求和平均得到最终的输出值。其设置函数如下:

/************************************
*	函数功能:过采样设置
*	参数:temp&press 0 禁用
*                  1 过采样×1
*                  2 过采样×2
*                  3 过采样×4
*                  ..  .....
*                  5 过采样×16
*	返回值:  0 设置成功
*           1 设置失败
*************************************/
uint8_t bmp280_setOversampling(uint8_t osrs_p,uint8_t osrs_t);

3.IIR滤波器

BMP280内容自带一个IIR滤波器,关于滤波器的具体笔者不了解太多。但从手册上得知,可以根据具体的应用场景设置滤波器系数(请继续看下文)。可以总结出,在低频率采样中(如环境天气测量)不需要开启滤波器;在连续测量中(如实时高度检测)则需要的滤波器系数更大。
以下是测量时间间隔和滤波器设置的函数。测量时间间隔的示意图如下:
在这里插入图片描述

/************************************
*	函数功能:滤波器系数和采样间隔时间设置
*	参数:Standbyt   0 0.5ms    filter  0 关闭滤波器
*                  1 62.5ms           1 2
*                  2 125ms            2 4
*                  3 250ms            3 8
*                  4 500ms            4 16
*                  5 1000ms
*                  6 2000ms
*                  7 4000ms
*	返回值:  0 设置成功
*           1 设置失败
*************************************/
uint8_t bmp280_setConfig(uint8_t Standbyt,uint8_t filter);

4.推荐设置

从官方的手册上看,推荐了几种常见的应用场景和设置,具体参考如下:
在这里插入图片描述

三、数据采集

BMP280读取到的数据是电压经过AD转换后的数值,并非最终的气压。需要根据气压和电压的曲线进行拟合,拟合系数储存在BMP280的寄存器当中。测量步骤:1、读取拟合系数;2、读取原始AD数据;3、进行拟合最后得出气压。具体如下:

在这里插入图片描述
例程中提供了两个函数直接获取温度和气压:

void bmp280_getTemperature(bmp280_calib *calib,double *temperature,int32_t *t_fine);
void bmp280_getPressure(bmp280_calib *calib,double *pressure,int32_t *t_fine);

四、总结

相比较于BMP180,BMP280的数据非常稳定。因为是MEMS器件,也存在零偏误差(零偏误差是指即使真实值为0,此时传感器测量到的数值为某一特定的数值)。但比例因子误差应该是非常小的,用于测量高度差是可行的。
在这里插入图片描述

五、获取源码

关注下方公众号,回复 “BMP280” 获取源码;若有疑问,请在公众号回复“交流群”,进群一起讨论分享!
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值