一 模块介绍
型号:ST公司的LPS22HB和LPS33HW两款,其中LPS33HW是防水的,整体尺寸大一些,其它几乎无区别。下图为两个模块,左边的防水的。气压传感器的主要功能是将气压转化为数字信号,并且提供了SPI或I2C两种串行通信接口;此外芯片还集成了温度传感器。
芯片PIN脚
二 电路连接
模块与MCU的连接关系:
三 正常模式以查询方式读传感器数据
I2C地址为0x5D(7位)
官方提供了简单的示例,查询方式读出气压值和温度值。
1 先读ID,确认芯片通信正常
2 配置采样的频率,有单次,1Hz到75Hz多种,在控制寄存器1中设置,比如我设置为10Hz
3 接下来就可以读取气压和温度了,需要注意的事,读的频率不要太高(不要超过设置的频率)
气压值以二进制补码形式保存在连续3个寄存器地址(0x28~0x2A)中,温度值以二进制补码形式保存在连续两个寄存器地址(0x2B~0x2C)中,在读寄存器之前,先把状态寄存器值读出来,看看是否有数据。
读回来24位气压数据和16位温度数据,这个数据跟实际的气压值、温度值差别很大,需要再做转换,
寄存器数据转化为气压值(百帕)
实际气压值 = (读到的24位数据 *100)/4096,单位为帕Pa
实际温度值 = 读到的16位数据 / 100,单位为℃, 如果不需要太高精度就取整数,否则转化为浮点数计算。
打印气压值和温度
用吸管对着传感器面板,吹气时气压增大,吸气时气压减小。
四 气压发生变化时中断 唤醒MCU
我开发的都是锂电池供电的产品,所以必须要在休眠后,能够吸气唤醒,这个地方卡了一天,因为代理商给的LPS22HB手册不是最新的,里面并没有详细介绍中断配置寄存器的每个位的具体使用,后来在LPS33HW手册中找到了,万幸!我大概讲下我的配置。
1 上电后第一次配置,依然是10Hz频率采样,然后配置中断时的压差临界值,比如当前气压为1016hPa(百帕),压差为32hPa,那么超过1048hPa或者低于984hPa时满足中断条件。
阀值设置
2 在进入休眠前的中断寄存器配置
在控制寄存器3中 设置中断引脚INT_DRDY在未触发中断时为高电平,触发时为低电平,也就是下降沿唤醒MCU
在中断寄存器中,设置使能中断,并且为气压低于下限时触发;同时将下一次采样值作为参考气压值,这句话怎么理解呢,我们是以压差达到条件才唤醒,那么这个压差的参考线就是进入休眠前的一次采样值,AUTO_ZERO位使能后,就自动保存下一次采样值到REF_P寄存器中(只生效一次),看下面代码,我增加了一段延迟(不低于采样周期),保证完成一次采样并且数据拷贝到REF_P寄存器中。
休眠前配置中断代码
3中断触发唤醒后,回到正常模式,把中断关闭。
唤醒后关闭中断代码
下面是在休眠后对着传感器探测面板 吸一口气的LOG