简介
BMP280 - 气压传感器

背面

通信模式
- I2C
- SPI
Features
- 单位写
- 多位写
- 单位读
- 多位读
通讯模式选择
根据片选(CSB)引脚决定,如果CSB拉低,则采用SPI模式。注意,一旦CSB引脚被拉低后,SPI模式会一直开启,直到下一次重启硬件。
I2C通讯模式
- SCL --> 时钟线
- SDI --> 数据线
- SDO --> 片地址的LSB(最低加权位)
- CSB --> Vdd 拉高
写模式
写模式,通过Master写入从机地址开始0b111011x0(x时SDO决定的LSB)。
读模式
读模式的前提,需要通过写模式写入要读取的寄存器地址,然后通过0b111011x1读取输出的数据。
SPI通讯模式
SPI模式下,存在两种形式4线模式和3线模式。两种模式的协议是相同的。在寄存器spi3w_en设置为1的状态下,采用了3线模式,这种模式下SDI用于数据通讯。
- SCL --> 时钟线
- SDI --> 数据输入线;三线模式下为双向数据线
- SDO --> 数据输出线; 3线模式下无用
- CSB --> 片选引脚,拉低后启用
spi状态下,与i2c有些不同,因为无法通过地址位指定读写模式,因此,只能采用把读写模式放置在寄存器地址位中的模式来进行读写操作。
写模式
把寄存器地址为的bit7设定为0。如要写地址0b11110100 则把bit 7 转为 0,也就指定了写模式,这时候spi写入的寄存器地址为0b01110100,变换的就是bit 7 为,用它指定RW模式。
读模式
和写模式相同,只要把寄存器地址写入设备,就可以读取到寄存器的数据。
数据采集注意
微调参数
每一个BMP280设备都存在一定的微调参数,这些微调参数在设备生产过程中,就已经被写入到设备的NVM中,并且不支持客户进行修改,在计算采集的温度数据时,都应该通过微调参数的调整。
| 寄存器LSB/MSB | 寄存器内容 | 数据类型 |
|---|---|---|
| 0x88/0x89 | dig_T1 | unsigned short |
| 0x8A/0x8B | dig_T2 | signed short |
| 0x8C/0x8D | dig_T2 | signed short |
| 0x8E/0x8F | dig_P1 | unsigned short |
| 0x90/0x91 | dig_P2 | signed short |
| 0x92/0x93 | dig_P3 | signed short |
| 0x94/0x95 | dig_P4 | signed short |
| 0x96/0x97 | dig_P5 | signed short |
| 0x98/0x99 | dig_P6 | signed short |
| 0x9A/0x9B | dig_P7 | signed short |
| 0x9C/0x9D | dig_P8 | signed short |
| 0x9E/0x9F | dig_P9 | signed short |
| 0xA0/0xA1 | reserved | reserved |
计算样例
| 采集到的微调数据 | |||
|---|---|---|---|
| 寄存器地址 | 命名 | 数据 | 数据类型 |
| 0x88/0x89 | dig_T1 | 27504 | unsigned short |
| 0x8A/0x8B | dig_T2 | 26435 | short |
| 0x8C/0x8D | dig_T3 | -1000 | short |
| 0x8E/0x8F | dig_P1 | 36477 | unsigned short |
| 0x90/0x91 | dig_P2 | -10686 | short |
| 0x92/0x93 | dig_P3 | 3024 | short |
| 0x94/0x95 | dig_P4 | 2855 | short |
| 0x96/0x97 | dig_P5 | 140 | short |
| 0x98/0x99 | dig_P6 | -7 | short |
| 0x9A/0x9B | dig_P7 | 15500 | short |
| 0x9C/0x9D | dig_P8 | -14600 | short |
| 0x9E/0x9F | dig_P9 | 6000 | short |
| 采集到的测量数据 | |||
| 寄存器地址(MSB/LSB/XLSB) | 名称 | 数值 | 类型 |
| 0xF7/0xF8/0xF9(7:4) | UT[20 bit] | 519888 | signed long |
| 0xFA/0xFB/0xFC(7:4) | UP[20 bit] | 415148 | signed long |
int32_t var1, var2, T;
var1 = (((adc_T >> 3) - ((int32_t)dig_T1 << 1)) * ((int32_t)dig_T2)) >> 11;
var2 = (((((adc_T >> 4) - ((int32_t)dig_T1)) * ((adc_T >> 4) - ((int32_t)dig_T1))) >> 12) * ((int32_t)dig_T3)) >> 14;
t_fine = var1 + var2;
T = (t_fine * 5 + 128) >> 8;
| 变量名 | 变量值 | 描述 | 算法 |
|---|---|---|---|
| var1 | 128793.1787 | var1 = … | |
| var2 | -370.8917052 | var2 = … | |
| t_fine | 128422 | t_fine = … | |
| T | 25.08 | 温度数据 | T = … |
int32_t var1, var2, p;
var1 = ((double)t_fine) - 128000;
var2 = var1 * var1 * (double)dig_P6;
var2 = var2 + ((var1 * (double)dig_P5) << 17);
var2 = var2 + (((double)dig_P4) << 35);
var1 = ((var * var1 * (double)dig_P3) >> 8)
本文是BMP280气压传感器的使用指南,详细介绍了其通信模式,包括I2C和SPI,以及数据采集注意事项,如微调参数、计算样例。此外,还涵盖了传感器的功能、测量流程、功耗模式和寄存器操作等关键信息。
最低0.47元/天 解锁文章

5537

被折叠的 条评论
为什么被折叠?



