IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> BMP180气压传感器详解与示例(STM32 附带源码) -> 正文阅读

[嵌入式]BMP180气压传感器详解与示例(STM32 附带源码)

简介

BMP180是一款高精度的气压传感器,具有低功耗、低噪声等特点,广泛使用在气压、海拔测量。其内部附带温度传感器,可对气压测量值进行补偿,使用I2C通信方式。此次用到的器件有:STM32最小系统板、BMP180气压传感器模块
在这里插入图片描述

工作模式

BMP180共有四种工作模式,每种模式有不同的采样数量、转换速度和噪声等参数的不同。可以通过写入ctrl_meas寄存器来设置模式,默认为第一个ultra low power超低功耗。
在这里插入图片描述
在这里插入图片描述

校准数值

BMP180的气压和温度数值并不是可以直接读取的,每个不同的传感器中,都有自己独特的校准数值,存储在内置的E2PROM存储器中。当微处理器读取传感器的原始温度和气压数值后,再根据E2PROM中的校准数值进行转换,才能得到真正的温度、气压数据。每个校准数值的存储位置如下,微处理器通过这些地址读取校准数值。

在这里插入图片描述

测试流程

工程建立非常简单,使用STM32CubeMX直接生成,只用到了I2C通信和串口显示结果。配置图如下
在这里插入图片描述

第一步:微处理器读取校准数值

把16位的校准数值读取到微处理器中,可以看到一共有11个数值。需要注意的是高位存储在MSB地址,低位存储在LSB地址。例如数值AC1,高八位存储在0xAA地址,低八位存储在0xAB地址。
在这里插入图片描述

void bmp180_get_cal_param(){
		bmp_param.AC1 = Reg_Read16(EEPROM_ADDR_MSB[0],EEPROM_ADDR_LSB[0]);
		bmp_param.AC2 = Reg_Read16(EEPROM_ADDR_MSB[1],EEPROM_ADDR_LSB[1]);
		bmp_param.AC3 = Reg_Read16(EEPROM_ADDR_MSB[2],EEPROM_ADDR_LSB[2]);
		bmp_param.AC4 = Reg_Read16(EEPROM_ADDR_MSB[3],EEPROM_ADDR_LSB[3]);
		bmp_param.AC5 = Reg_Read16(EEPROM_ADDR_MSB[4],EEPROM_ADDR_LSB[4]);
		bmp_param.AC6 = Reg_Read16(EEPROM_ADDR_MSB[5],EEPROM_ADDR_LSB[5]);
		bmp_param.B1 = Reg_Read16(EEPROM_ADDR_MSB[6],EEPROM_ADDR_LSB[6]);
		bmp_param.B2 = Reg_Read16(EEPROM_ADDR_MSB[7],EEPROM_ADDR_LSB[7]);
		bmp_param.MB = Reg_Read16(EEPROM_ADDR_MSB[8],EEPROM_ADDR_LSB[8]);
		bmp_param.MC = Reg_Read16(EEPROM_ADDR_MSB[9],EEPROM_ADDR_LSB[9]);
		bmp_param.MD = Reg_Read16(EEPROM_ADDR_MSB[10],EEPROM_ADDR_LSB[10]);
}

第二步:读取温度、气压初始值

温度初始值读取步骤:(1)往寄存器0xf4写入0x2e,等待4、5ms;(2)读0xf6(高八位)和0xf7(低八位)两个寄存器;(3)进行换算: UT=MSB <<8 +LSB。

气压初始值读取步骤:(1)往寄存器0xf4写入0x34(如果不是默认的工作模式,需要加上oss左移六位的结果,oss为设置工作模式的寄存器0xf4的bit7、bit6位),等待4、5ms;(2)读0xf6(16-23位)、0xf7(8-15位)和0xf8(0-7位)三个寄存器;(3)进行换算: UP=MSB <<16 + LSB<<8 + XLSB >> (8-oss(这个同温度初始值读取一样))。
在这里插入图片描述
UT读取

		uint8_t data = 0x2e;
	
		HAL_I2C_Mem_Write (&hi2c1 ,DEVICE_ADDER ,CTRL_MEAS ,1,&data ,1,1000);	
		
		HAL_Delay(10);	
	
		int32_t UT = Reg_Read16(0xf6,0xf7);

UP读取

		data = 0x34;
	
		HAL_I2C_Mem_Write (&hi2c1 ,DEVICE_ADDER ,CTRL_MEAS ,1,&data ,1,1000);
	
		HAL_Delay(10);
	
		int32_t UP = Reg_Read32(0xf6,0xf7,0xf8) >> 8 ;

第三步:计算温度、气压

根据第一步读出来的校准系数和第二步读出来的UT、UP进行换算,最后得出来的T(温度,每个数值代表0.1摄氏度),p(气压,每个数值代表1帕)。具体过程如下图
在这里插入图片描述

温度换算

		int32_t X1 = (UT-bmp_param.AC6)* bmp_param.AC5 >> 15;
	
		int32_t X2 = (bmp_param.MC << 11) / (X1 + bmp_param.MD);
	
		int32_t T = (X1 + X2 +8) >> 4 ;

气压换算(比较复杂)

		int32_t B6 = X1 + X2 - 4000;
		
		X1 = (B6 * B6 >> 12) * bmp_param.B2 >> 11;
		
		X2 = bmp_param.AC2 * B6 >> 11;
		
		int32_t X3 = X1 + X2;
		
		int32_t B3 = (((bmp_param.AC1 << 2) + X3) + 2) >> 2;

		X1 = bmp_param.AC3 * B6 >> 13;
		
		X2 = (B6 * B6 >> 12) * bmp_param.B1 >> 16;
		
		X3 = (X1 + X2 + 2) >> 2; 
		
		uint32_t B4 = bmp_param.AC4 * (uint32_t)(X3 + 32768) >> 15;

		uint32_t B7 = ((uint32_t)UP - B3) * 50000;
		
		int32_t p;
		if(B7 < 0x80000000){
				p = (B7 << 1) / B4;  
		}else{
				p = B7/B4 << 1;
		}
		
		X1 = (p >> 8) * (p >> 8);
		
		X1 = (X1 * 3038) >> 16;
		
		X2 = (-7375 * p) >> 16;
		
		p = p + ((X1 + X2 + 3791) >> 4);

第四步:计算海拔高度

根据手册提供公式,可以根据气压计算出海拔高度,但此式过于复杂。

在3000M范围内,每升高12M,大气压减小1mmHg,大约133Pa。0海拔高度大约是101325 pa,所以据此可以进行简单近似的计算:altitude = (101325 - p) /133 * 12。
在这里插入图片描述

测试结果

在这里插入图片描述
不同楼层的高度
在这里插入图片描述

这是最低功耗,也是精度最低的工作模式。可以看见精度并不是非常的高,但可以满足一般测量。如需要精度高的测量可以试一下其它工作模式。

获取工程源码

关注公众号,查看相关文章获取源码
在这里插入图片描述

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-07-11 16:46:50  更:2021-07-11 16:47:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 18:54:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码