freertos吧 关注:448贴子:726
  • 1回复贴,共1

[寻道014] SHT31温湿度传感器I2C总线调试纪实

只看楼主收藏回复

原创2018-03-25Liuzhong寻道电子
摘要:SHT31温湿度传感器挂在I2C总线上,一直没有响应,本文介绍如何使用逻辑分析仪,一步步去寻找真相,并顺利解决问题。虽然过程很曲折,但是结局很完美。
关键字:温湿度传感器, SHT31,I2C总线,逻辑分析仪
1.前言
一个项目需要检测环境温湿度,本来想用DHT11、DHT21老的传感器,因为以前用过DS1621温度传感器,都是单总线传输协议,开发起来快。但是看SHT3x系列温湿度传感器测量精度很高,±0.1℃和±1.5%RH的典型精度实在是太好,而且尺寸很小,所以最终选择了SHT31-DIS,为了方便调试,在x宝上买了几个模块。所谓模块,就是把传感器焊接在一个小板子上,引出VCC,VSS,SCL和SDA四个引脚,然后为I2C总线加了两个上拉电阻,外加一个100NF的去耦电容,如图1所示。

图1 SHT31温湿度传感器模块
四根杜邦线把传感器挂到正点原子STM32F4探索者开发板上,因为开发板上有一块EEPROM芯片24C02挂在I2C1上面(PB8和PB9),所以,直接把SHT31挂在I2C1上面,如图2所示:

图2温湿度传感器连接开发板
关于I2C总线,我一直喜欢直接调用ST公司的HAL库函数HAL_I2C_Mem_Read()和HAL_I2C_Mem_Write(),在很多项目上运行过:
(1)红外传感器MLX90614
(2)24LCxx系列EEPROM芯片
(3)FM24Cxx系列铁电存储器
我粗略看过SHT31的数据手册,读温湿度的时序和铁电存储器(16位地址长度)一模一样,只不过16位长度的地址在SHT31技术手册上叫控制命令,本质上是一回事,只不过把地址映射为控制命令,就像Modbus通讯里面的逻辑地址,映射为输入寄存器或者保持寄存器。
但是,SHT31挂在I2C1总线上,传感器一直没有响应!


IP属地:安徽来自Android客户端1楼2018-03-25 13:14回复


    IP属地:四川来自Android客户端5楼2018-03-31 16:31
    回复