老规矩,话不多说,先送上代码 https://github.com/Tuya-Community/tuya-iotos-embeded-mcu-demo-wifi-ble-air-pressure-sensor
BMP180 简介
BMP180是一款由BOSCH开发的数字压力传感器,IIC接口,压力测量范围可以从300hPa至1100hPa,测量海拔高度大约从9000m至-500m。
工作电压范围在1.8V~3.6V,满足大部分单片机电平要求。
功耗低,标准模式下单次采样功耗大约5uA。
低噪声,在低功耗模式下,大约只有0.06hPa,超高分辨模式下只有0.02hPa。
内置温度传感器,加上一些算法可以进行温度补偿。
其他性能可以查看数据手册
各模式的配置参数和电气特性如下
校准参数和读取
BMP180传感器有大量的出厂校准参数,利用这些参数和特点算法,可以很精准的得到我们想要的气压值。
参数寄存器表如下
具体读取函数在void bmp180_get_calib_param(void)中
获取好参数后,我们就可以读取温度和压力寄存器,获取当前未补偿的温度和压力值
具体方法请查看
uint16_t bmp180_get_uncomp_temperature(void)和
uint32_t bmp180_get_uncomp_pressure(uint8_t oss_mode)函数
数据补偿
有了校准参数和原始温度压力数据后,接下来就是要进行数据补偿了,
具体算法我已经整理出来给大家。
温度校准
压力校准:
完整补偿算法请查看
** bmp180_get_temperature(uint32_t v_uncomp_temperature_u32)
和
bmp180_get_pressure(uint32_t v_uncomp_pressure_u32)**
这两个函数。
这样,经过上面一系列处理,我们终于获得了我们想要的温度值和压力值。
最后再给大家附上整体流程图
海拔换算
大家都知道,气压和高度存在一定的关系,但是这个关系是怎么样的呢,哈哈,我有答案。
根据上面式子,我们就能很轻易写出算法公式
Altitude =(44330.0 * (1.0-pow((float)(gas_pressure.now) / 101325, 1.0/5.255)));
好啦,至此,大家肯定对BMP180有了比较深刻的认识,快去测试自己的程序吧,有问题,欢迎在评论区留言。