当前位置: 首页 > news >正文

嵌入式开发--温度、湿度、气压传感器BME280

1、芯片介绍

在这里插入图片描述

BME280是BOSCH的一颗低功耗的温度、湿度、气压传感器芯片,尺寸是2.5 mm x 2.5 mm x 0.93 mm,非常的小巧,同时支持I2C和SPI接口,

支持3种工作模式转换

上电之后是休眠状态。
对Mode[1:0]写入11,可以进入正常测量模式,芯片进行连续测量和读取测量数据。写入00可以返回休眠模式。
对Mode[1:0]写入01,则设置为强制模式,芯片进行一次测量,测量完成后进入休眠模式,可以通过数据接口读取寄存器,获取测量数据。
在这里插入图片描述

湿度测量的设置

对osrs_h[2:0]写入相关的数值,可以设置禁止测量或过采样,如下表
在这里插入图片描述
对osrs_h[2:0]写入000,会禁止湿度测量,或按上图测量过采样的值。

温度测量

对osrs_t[2:0]进行设置,与湿度类似

气压测量

对osrs_p[2:0]进行设置,与湿度类似

复位

对0xe0地址的寄存器写入0xb6,可以对芯片进行软复位。

读取ID

读取0xd0地址的寄存器可以获得芯片ID,应当为0x60。可以做为芯片通讯是否正常的判断依据。

测量状态指示status

measuring位,当自动转换进行时,该位自动置1。测量完成后,数据传输到寄存器后,该位置0。
可以通过读取该位,获得传感器状态,当为0时,可以正常读取传感器数据。

寄存器映射

全部寄存器的映射如下图,方框的颜色表示了不同的读写属性,具体含义可以阅读手册。
在这里插入图片描述

2 MCU的设置

我使用的是SPI2,SPI的参数设置如下:
在这里插入图片描述

3 软件编写

软件编写需要按照以下流程进行:

3.1 芯片复位

上电后发送reset指令

u8 BME280_Reset(void)
{bme280_tx_data[0] = BME280_REG_RESET;bme280_tx_data[1] = 0xb6;SPI2_CS(0);HAL_SPI_Transmit(&BME280_SPI, bme280_tx_data, 2, 100);
//  HAL_SPI_Transmit(&BME280_SPI, (u8*)(0xb6), 1, 100);SPI2_CS(1);delay_us(100);return 0;
}

3.2 读取ID

以判断芯片是否工作正常

u8 BME280_Read_ID(void)
{bme280_tx_data[0] = BME280_REG_ID;SPI2_CS(0);//  HAL_SPI_Transmit(&BME280_SPI, bme280_tx_data, 1, 100);
//  HAL_SPI_Receive(&BME280_SPI, bme280_rx_data, 1, 100);HAL_SPI_TransmitReceive(&BME280_SPI, bme280_tx_data, bme280_rx_data, 2, 10);SPI2_CS(1);return bme280_rx_data[1];
}

3.3 读取补偿寄存器的数值,并转换为相应的补偿参数

Bosch在出厂时对每一个传感器都进行过校准,所以每一颗芯片的补偿参数都不一样,需要自行从芯片中读取。补偿的计算方法,在芯片手册中已经给出。
补偿寄存器共42个,位于2个连续的数据段中,
calib00~25,起始地址为0x88,终止地址为0xa1,共26个
calib26~41,起始地址为0xe1,终止地址为0xf0,共16个
当读取完全部的补偿寄存器后,需要将其组合成若干个校准参数
在这里插入图片描述
在这里插入图片描述
其中温度补偿有3个参数,T1~T3
气压补偿是9个,P1~P9
湿度补偿6个,H1~H6
注意最后一栏,有些是有符号数,有些是无符号数,不要弄错了

3.4设置功能寄存器

需要设置3个功能寄存器:ctrl_hum, ctrl_meas, config。
至此初始化过程结束,可以进行正常的数据采集了。

  bme280_tx_data[0] = 0x7f & BME280_REG_CTRL_HUM;BME280_Write(bme280_tx_data[0], &ctrl_hum);bme280_tx_data[0] = 0x7f & BME280_REG_CTRL_MEAS;BME280_Write(bme280_tx_data[0], &ctrl_meas);bme280_tx_data[0] = 0x7f & BME280_REG_CONFIG;BME280_Write(bme280_tx_data[0], &config);

代码略,需要的自行下载文末代码。

3.5 读取寄存器

// 读取BME280的温度、湿度、气压数据
void BME280_Get_Temp_Hum_Press(void)
{u8 i;s32 t,h,p;static u8 data[8] = {0};//获取气压,温度,湿度for(i=0; i<8; i++){data[i] = BME280_Read_1_REG(0xf7+i);}//组合为温度湿度气压的原始数据t = data[3]<<12 | data[4]<<4 | data[5]>>4;      h = data[6]<<8  | data[7];                      p = data[0]<<12 | data[1]<<4 | data[2]>>4;    //计算补偿后的温度湿度气压值bme280_temp = BME280_Compensate_s32_T(t);               bme280_humi = (u32)(BME280_Compensate_s32_H(h)/10.24f);bme280_press= BME280_Compensate_s32_P(p); 
}  

3.6 计算补偿

对于STM32来说,可以使用32位定点计算,复杂度不高,速度快。
计算的过程需要使用初始化过程中已经设置好的补偿参数。
需要注意的是t_fine这个参数,它是根据温度值和补偿值计算出来的,不同的温度,对应着不同的t_fine值。所以t_fine需要在每次采集温度后重新计算。
也就是说,温度的测量是必须的,如果将其禁止不测的话,t_fine就无法计算了。

4 完整代码下载
代码是从项目中摘取的,所以不能发完整的工程代码,只提供BSP支持包,其实支持包已经足够使用了。
下载地址:BSP支持包下载

http://www.dtcms.com/a/457581.html

相关文章:

  • 基于ZYNQ FPGA+AI+ARM 的卷积神经网络加速器设计
  • 自助建站之星wordpress图片弹出
  • JavaScript-防抖与节流
  • 广西南宁网站建设哪家好网站调用微信数据
  • 专业手机网站建设公司排名wordpress the7打开速度慢
  • 做网站的主要作用设计师培训学费
  • 【大模型】DeepSeek-V3.2-Exp中的DSA稀疏注意力设计
  • Vue组件通信完整教程
  • 代码随想录 637.二叉树的层平均值
  • Spring前置准备(七)——DefaultListableBeanFactory
  • Linux 进程间通信——System V
  • 【Spring Boot】自定义starter
  • 微网站建设网络温州大军建设有限公司网站
  • 残差特征蒸馏网络(RFDN)探索札记:轻量化图像超分的突破
  • 一般做网站什么价格可以做公众号的网站
  • 优选算法---字符串
  • 任丘网站建设资料查询网站怎么做
  • 华为OD机试C卷 - 流量波峰 - 暴力搜索 - (Java C++ JavaScript Python)
  • 使用CSS3动画属性实现斜线动画 -- 弧线动画 -- 波纹动画 -- 点绕圆旋转动画 -- 浮动动画
  • 打工人日报#20251008
  • 手机网站触摸版萧山中兴建设有限公司网站
  • Python游戏开发入门:从零开始制作贪吃蛇小游戏
  • kanass入门到实战(11) - Kanass如何有效集成sward文档
  • 尚硅谷SpringBoot3零基础教程,课程介绍,笔记01
  • 51网站统计德州网站建设的公司
  • C++23 高级编程 Professional C++, Sixth Edition(一)
  • Verilog和FPGA的自学笔记3——仿真文件Testbench的编写
  • 记录gitee的使用
  • 动态业务流程的案例管理标准(CMMN)
  • 广东门户网站建设哪个网站有适合小学生做的题