SHT3x-DIS是Sensirion新一代的温湿度传感器,精度为±2%RH和±0.3℃,输入电压范围从2.4V到5.5V,采用IIC总线接口,速率可达1MHz。测量温湿度范围分别为是-40℃ ~ 125℃和0 ~ 100%。
一、电路组成
从下图可以看到SHT3x内部集成了湿度传感器和温度传感器,通过ADC采样输入到数据处理和线性化单元,同时带有校正储存器,处理环境对器件测量的影响。通过数字接口IIC读取数据。带警报引脚,可通过修改寄存器的值设定阈值,当测量的温湿度超过阈值时它会被置位。
引脚分布如下,1和4号脚是IIC总线接口;2号脚是决定地址的引脚,当ADDR接VSS时芯片地址为0x44,接VCC时芯片地址为0x45;3号脚警报引脚(当不使用时浮空),当温湿度超过设定的阈值则该脚会被置位;5号和8号脚是电源引脚;6号引脚是复位引脚(当不使用时接VDD),低电平有效;7号脚是为了封装而保留的引脚。
下图是设备地址分配情况。
典型电路如下,由于SCL和SDA为开漏输出,驱动能力不足,需要接上拉电阻。VDD和VSS之间接一个小电容滤除高频杂波,另外nRESET和ALERT根据情况进行选择,若不需要使用,nRESET接高电平,ALERT浮空。Die Pad接地即可。
二、通讯指令说明
写好IIC驱动程序后,便可以开始和SHT3x进行通讯了,下面是SHT3x的所有指令说明。
(一)、单次获取数据指令
单次获取数据指令的详细数据格式如下图。首先从表格最上面开始,Repeatability指的是重复性,Clock Stretching指的是时钟延伸,它们的作用下面再讲述。数据流动过程如下:
1,发送起始信号以及由高7位的器件地址和最低位的写信号(WR=0) 组成的一字节地址,等待应答信号。(注意地址位于高7位,所以传址的时候需要将地址左移一位并加上读1/写0信号,如ADDR<<1 | WR)2,发送指令的高字节并等待应答信号。3,发送指令的低字节并等待应答信号,之后发送停止信号。4,等待一段时间(测量正在进行)。5,发送起始信号以及由高7位的器件地址和最低位的读信号(RD=1) 组成的一字节地址,然后根据选择的Clock Stretching从两个方向选择。假如失能了时钟延长功能,则等待非应答信号,发送停止信号,延迟一段时间(这步很重要!!延迟时间大约为50ms左右)等待转换结束,然后发送八位的应答信号并等待应答信号,之后便是逐字节分别读取温度和湿度的高字节、低字节以及CRC校验字节,每字节接收完都要发送应答信号,最后发送停止信号即可。而如果使能了是时钟延长功能,则总线的SCL由SHT3x控制,我们只需要通过while(SCL==0)阻塞程序,等待其释放总线然后MCU读取数据即可。
(二)、周期获取数据指令
周期获取数据指令的详细数据格式如下图。周期获取数据需要先配置读取模式然后再进行读取。
1、配置模式
周期读取数据的配置主要是配置重复性和每秒测量次数。数据发送的方式同上。
2、读取数据
读取的步骤和上述单次读取数据指令的流程类似,下面大概说一下。
发送起始信号,发送写地址,等待应答信号,注意如果传感器没有测量完,它只会返回非应答信号。发送16位命令0xE000。读取初始数据。
(三)、加快响应时间指令
加快响应时间指令,用于周期读取数据指令,开启后传感器开始采集频率为4Hz的数据。它的使用方法跟上述配置模式相同,在读取之前配置好就可以了。
发送起始信号,发送写地址,等待应答信号。发送16位命令0x2B32,等待应答信号。接着继续配置或者读取数据。
(四)、停止周期读取数据指令
停止周期读取数据指令,有时为了实现低功耗或暂时不需要传感器测量数据,可以通过该指令进行关闭。
发送起始信号,发送写地址,等待应答信号。发送16位命令0x3093,等待应答信号,发送停止信号。
(五)、复位
复位(RESET)的方式有很多种。
1、IIC接口复位
当通讯设备丢失时,在接下来的信号序列将会复位串口接口,此序列仅重置接口。状态寄存器保留其内容。SDA线置位,翻转SCL线的电平9次以上。接下来必须在下一个命令之前执行传输开始序列。
2、软复位/重新初始化
软复位/重新初始化的指令格式如下。
发送起始信号,发送写地址,等待应答信号。发送16位命令0x30A2,等待应答信号,发送停止信号。
3、一般呼叫复位指令
发送起始信号,发送通用呼叫地址0x00,等待应答信号。发送第二个字节0x06,等待应答信号。
4、通过nRESET引脚复位
拉低nRESET引脚的电平(至少350ns)将会产生硬复位信号重置传感器。
5、硬复位
重新上电。
(六)、加热器开启/关闭指令
该指令的用法同上,至于该加热器的作用是什么我也不清楚,明明是测温用的还要加热?!大概是想在温度很低的环境但想要它还能正常工作所以才设置这功能吧。
(七)、读取状态寄存器
状态寄存器包含有关加热器运行状态、警报模式以及最后一个命令的执行状态和最后一个写序列的信息。
发送起始信号,发送写地址,发送16位命令。发送起始信号,发送读地址,依次接收状态寄存器的高字节、低字节和CRC校验,每次接收都需要发送应答信号,直到接收的最后一个字节发送非应答信号,发送停止信号。状态寄存器每一位代表的含义如下所示。
我们试一下读取状态寄存器看返回什么。可以发现二进制数1000 0000 0001 0000 1110 0001都为上面表格的默认值,至于CRC校验要根据给定公式对前两字节进行计算和比较。下面来讲CRC校验。
(八)、CRC校验
循环冗余校验(CRC)其实就是一种异或计算(模2运算)。获取的CRC校验码就是模2运算后的余数。
全部0条评论
快来发表一下你的评论吧 !