[STM32WB]

【STM32WB09KE测评】WB0 I2C驱动AHT30温度传感器

[复制链接]
794|1
手机看帖
扫描二维码
随时随地手机跟帖
dvacos|  楼主 | 2024-11-15 18:02 | 显示全部楼层 |阅读模式
I2C驱动AHT30

一、WB0 I2C引脚确认
2020c89933a4472c34c4fc0b14417667


参照上图找到Arduino的D14 D15 找到对应的Arduino接口图。WB0实际对应的IO是PB6 PB7
36d724a586874e72b2cd04b8844f019e
找到D14 D15接口,甚至非常贴心的放上了电源 和 地。

二、温度传感器

1、简介
AHT30是一款全新的温湿度传感器,具有功耗低、精度高的优点,它嵌入了适于回流焊的双列扁平无引脚SMD封装,拥有坚固的外壳和微小的尺寸。
AHT30配有一个全新优化的ASIC专用芯片、一个经过改进的MEMS半导体电容式湿度传感元件和一个标准的片上温度传感元件,其性能已获得显著的提升,即使在恶劣的环境下也能保持稳定性能。

● 完全标定
● 数字输出,I 2C接口
● 优异的长期稳定性
● 响应迅速、抗干扰能力强
● 宽电压支持2.2-5.5 VDC


2、驱动编写要点

该传感器使用标准I2C,不需要魔改,所以直接使用默认的I2C即可。

参考规格书 与 WB0本身的I2C速率,选择I2C速率为100KHz。PCBA上的建议传感器周围镂空就没办法了,因为是购买成品模块
1742ee68ff36f6cd86366b1a1e2ab657

这个传感器的驱动流程比较简单,但是流程图画的特别坑,容易让人误解。
16ff0f4aff77a18a9a72454fbb84b746
上图的0X70 与 0X71是传感器的写、读地址,而0xAC是写的目标寄存器,0x33,0x00则是要写入的数据。

读取到值后要转化为实际的温度又有坑,按照规格书给的公式,代码运行后都是0,所以要该乘除的顺序。
44fed0b2be97052625c4ba38745ce759


综上驱动传感器的流程是:

①地址0X70 寄存器0xAC 写0x33,0x00
②等待80ms
③地址0X71 读7字节
④取处温度值,温度值是由第5字节、4字节、3的低四位字节,组成
⑤按照公式换算出实际温度

三、Cube MX 配置 I2C

选择I2C引脚
c66cc7c2040c842cc90f1968911130e4

使能I2C接口,使用默认的100KHz即可
4adc042bfa0ec34ed4679ebf325dc83f

以上就完成初始化了。

四、实验

1、验证I2C波形

先不接传感器直接驱动WB0发出I2C的写命令,但是由于没有接传感器,肯定是NACK的,但是能证明I2C初始化成功了。
79a9584e34e531dbfe93e1e5edfd0929

2、编写驱动

按照之前的逻辑编写实际的驱动后的逻辑分析仪捕捉的数据
2d9384e4de6b7ac44d2d8a17d2da9ac6

dabec2488cfd9466ea87fa2218957ba4

采集的原始数据 与 转化的温度
b9606406fec47cb639d89d8a8aae28fb

GIF
8834067371beb738b9.gif

总结
AHT30这个传感器不错,但是规格书很多小坑 或 模糊的点 需要花时间去排错。

使用特权

评论回复
21mengnan| | 2024-11-28 17:24 | 显示全部楼层
STM32的I2C非常好用,提供的库函数直接就用

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

23

主题

113

帖子

2

粉丝