I2C驱动AHT30
一、WB0 I2C引脚确认
参照上图找到Arduino的D14 D15 找到对应的Arduino接口图。WB0实际对应的IO是PB6 PB7
找到D14 D15接口,甚至非常贴心的放上了电源 和 地。
二、温度传感器
1、简介
AHT30是一款全新的温湿度传感器,具有功耗低、精度高的优点,它嵌入了适于回流焊的双列扁平无引脚SMD封装,拥有坚固的外壳和微小的尺寸。
AHT30配有一个全新优化的ASIC专用芯片、一个经过改进的MEMS半导体电容式湿度传感元件和一个标准的片上温度传感元件,其性能已获得显著的提升,即使在恶劣的环境下也能保持稳定性能。
● 完全标定
● 数字输出,I 2C接口
● 优异的长期稳定性
● 响应迅速、抗干扰能力强
● 宽电压支持2.2-5.5 VDC
2、驱动编写要点
该传感器使用标准I2C,不需要魔改,所以直接使用默认的I2C即可。
参考规格书 与 WB0本身的I2C速率,选择I2C速率为100KHz。PCBA上的建议传感器周围镂空就没办法了,因为是购买成品模块
这个传感器的驱动流程比较简单,但是流程图画的特别坑,容易让人误解。
上图的0X70 与 0X71是传感器的写、读地址,而0xAC是写的目标寄存器,0x33,0x00则是要写入的数据。
读取到值后要转化为实际的温度又有坑,按照规格书给的公式,代码运行后都是0,所以要该乘除的顺序。
综上驱动传感器的流程是:
①地址0X70 寄存器0xAC 写0x33,0x00
②等待80ms
③地址0X71 读7字节
④取处温度值,温度值是由第5字节、4字节、3的低四位字节,组成
⑤按照公式换算出实际温度
三、Cube MX 配置 I2C
选择I2C引脚
使能I2C接口,使用默认的100KHz即可
以上就完成初始化了。
四、实验
1、验证I2C波形
先不接传感器直接驱动WB0发出I2C的写命令,但是由于没有接传感器,肯定是NACK的,但是能证明I2C初始化成功了。
2、编写驱动
按照之前的逻辑编写实际的驱动后的逻辑分析仪捕捉的数据
采集的原始数据 与 转化的温度
GIF
总结
AHT30这个传感器不错,但是规格书很多小坑 或 模糊的点 需要花时间去排错。
|