文章目录

  • 前言
  • 一、传感器简介
  • 二、参数设置
    • 1.工作模式
    • 2.采样设置
    • 3.IIR滤波器
    • 4.推荐设置
  • 三、数据采集
  • 四、总结
  • 五、获取源码

前言

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” 获取源码;若有疑问,请在公众号回复“交流群”,进群一起讨论分享!

高精度气压传感器BMP280代码与解析相关推荐

  1. 51单片机实现BMP280气压计海拔高度解析(附代码)

    51单片机解析BMP280气压计数据 BMP280气压计数据解析包含大气压力读取/温度读取/海拔高度计算,例程见文末 本文配套了51单片机BMP280数据解析并用0.96OLED或LCD1602显示屏 ...

  2. 真分数c语言,C语言列出真分数序列代码及解析

    原标题:C语言列出真分数序列代码及解析 按递增顺序依次列出所有分母为60,分子小于60的最简分数. 分子.分母只有公因数1的分数叫做最简分数或者说分子和分母是互质数的分数,叫做最简分数,又称既约分数, ...

  3. 基于分类任务的信号(EEG)处理--代码分步解析

    本文由网友Jon_Snow_Stark授权分享 本篇文章是对作者对另一篇文章<基于分类任务的信号(EEG)处理>的扩展,之前文章是从宏观方面介绍利用EEG信号进行分类任务,本文利用详细的代 ...

  4. 【深度学习】RetinaNet 代码完全解析

    前言 本文就是大名鼎鼎的focalloss中提出的网络,其基本结构backbone+fpn+head也是目前目标检测算法的标准结构.RetinaNet凭借结构精简,清晰明了.可扩展性强.效果优秀,成为 ...

  5. Java打印整数的二进制表示(代码与解析)

    Java打印整数的二进制表示(代码与解析) int a=-99; for(int i=0;i<32;i++){int t=(a & 0x80000000>>>i)> ...

  6. Qt Creator使用Clang代码模型解析C ++文件

    Qt Creator使用Clang代码模型解析C ++文件 使用Clang代码模型解析C ++文件 关于Clang代码模型 配置C语代码模型 lang检查 在项目级别指定Clang代码模型设置 使用编 ...

  7. 如何在golang代码里面解析容器镜像

    简介:容器镜像在我们日常的开发工作中占据着极其重要的位置.通常情况下我们是将应用程序打包到容器镜像并上传到镜像仓库中,在生产环境将其拉取下来.然后用 docker/containerd 等容器运行时将 ...

  8. Vision Transformer(ViT)PyTorch代码全解析(附图解)

    Vision Transformer(ViT)PyTorch代码全解析 最近CV领域的Vision Transformer将在NLP领域的Transormer结果借鉴过来,屠杀了各大CV榜单.本文将根 ...

  9. python代码大全中文注释_零基础小白必看篇:Python代码注释规范代码实例解析操作(收藏)...

    本文内容主要介绍了Python代码注释规范代码实例解析,通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下!!! 一.代码注释介绍 注释就是对代码的解释和说明 ...

最新文章

  1. 解决LiteIDE 中的error process failed to start.
  2. JSP自定义标签 函数,实现生日计算年龄
  3. OpenCV cv :: Mat的串行输出功能的实例(附完整代码)
  4. Hive _练习,更新中
  5. 塞尔达盾反机器人_微软商店惊现《塞尔达传说:旷野之息》!任天堂暗示《喷射战士3》?| Jump简报...
  6. N76E003---看门狗
  7. mysql之select+五种子句的理解
  8. 【ubuntu】查看服务器上的进程占用GPU情况
  9. java 选择排序入门
  10. Java Json xml 格式之间转换(一)
  11. 2021全网最全Activiti7教程04(Activiti7整合篇-欢迎收藏)
  12. 六月我在工作中蜕变,勤奋小人打架终于赢了
  13. TypeError: Object of type xxx is not JSON serializable错误解决
  14. 最新解决谷歌翻译无法使用的教程
  15. Ubuntu18.04安装ntl库
  16. 水晶报表打印出错,未能加载文件或程序集“CrystalDecisions.CrystalReports.Engine, Version=10.5.3700.0
  17. 基于STM32的五子棋游戏
  18. 1. Resnet网络详解
  19. [HR规划]人力资源规划详解(zt)
  20. 科普 | 元宇宙 | 体验完“元宇宙入口”,我有点晕

热门文章

  1. 安装harbor私库
  2. Spring Security(五)
  3. TRUNCATE 使用
  4. Coroutine 基础
  5. Python之小游戏(一) 超级玛丽
  6. VuePress打包后没有样式或者没有图片或者js加载失败
  7. 带你聊透Modbus通信协议
  8. 7-37 统计英文字母和数字字符 (15分)
  9. 如何获取小红书直播推流码并使用obs电脑直播教程
  10. bim 水利枢纽 运维_BIM在项目运营维护阶段的应用