任 静
(兰州石化职业技术大学,甘肃 兰州 730060)
SHT11温湿度传感器是目前在物联网领域应用较广泛的测温器件,它因安装简便、维护方便、可靠性高等特点获得了广泛应用。如在智能家居应用中,SHT11常作为测量家居环境温湿度的传感器件。在本文中,SHT11温湿度传感器插接在以STM32F103VET6为微处理器的单片机开发板上,单片机采集处理SHT11的温湿度信息后通过串口输出,利用串口调试助手工具即可查看温湿度数据。
SHT11温湿度传感器将温度测量、湿度测量、信号变换、A/D转换及加热器功能集成到一个芯片上。湿度测量通过1个电容式聚合体测湿组件实现,温度测量通过1个能隙式测温组件完成。传感器内部有1个14位的A/D转换器,将测温元件和测湿元件转换得到的电信号转换为数字量。
SHT11温湿度传感器的典型工作电路如图1所示,各引脚的功能如下:脚1和4是信号地和电源,其工作电压范围是2.4~5.5 V;脚2和脚3是二线串行数据接口,其中DATA为数据线,SCK为时钟线;脚5~8—未连接。
图1 SHT11温湿度传感器工作电路图Figure 1 SHT11 temperature and humidity sensor working circuit diagram
SHT11通过二线串行数据接口(SCK和DATA线)来进行访问,电路结构较简单。从图1可以看出,二线串行数据接口(SCK和DATA线)和I2C的通讯方式很类似,但该二线串行数据接口的通信协议和I2C协议是不兼容的。因此需要用通用微处理器I/O口仿真该通信时序。
SHT11温湿度传感器的硬件连接测试电路,主要使用了北京新大陆教育有限公司开发的1+X传感网应用开发实训套件中的M3模块开发板,如图2所示。M3模块开发板使用了STM32F103VET6微处理器,集成了传感器通用接口模块、串口等。
图2 M3主控模块开发板Figure 2 M3 main control module development board
SHT11温湿度传感器和STM32F103VET6单片机的硬件连接如图3所示。图中U2A为传感器通用接口模块,使用时将SHT11温湿度传感器插接在此接口模块上即可。传感器通用接口模块和SHT11的具体引脚连接如图3中所示,U2A的7脚和9脚分别和STM32F103VET6的PB6和PB7连接;作为I2C通讯的SCK和DATA信号线,它们分别和SHT11温湿度传感器的3脚(SCK)和2脚(DATA)连接,把温湿度传感器测得的数据通过这两根信号线和微处理器通讯。
图3 SHT11和单片机硬件连接电路图Figure 3 SHT11 and SCM hardware connection circuit diagram
因SHT11的SCK线和DATA线与STM32单片机的PB6和PB7相连接,因此在SHT11的初始化中需将PB6和PB7端口设置为输出端口,并将SCK线拉低,DATA线拉高。相应的程序代码设计如下:
SHT11的启动时序是当SCK为高电平时,DATA由高电平变为低电平。SCK再由低电平变为高电平,正好经过一个周期,此时DATA线变为高电平,此后SHT11便开始启动,正常工作。否则,SHT11便处于休眠状态。相应的启动程序代码为:
命令字包含三个地址位(目前为000)和5个命令位。常用的命令字有:温度测量命令00000011湿度测量命令00000101,读状态寄存器命令00000111,写状态寄存器命令00000110,软件复位命令00011110。各命令代码定义如下:
#define SH1x_MEASURE_T_CMD 0X03
当向传感器发送相应的命令字时,需先将SCK电平拉低,才可以写入DATA的数据,并且命令字总是从最高位开始写起。当写完命令字以后,在下一次时钟脉冲的上升沿到来之后,等待传感器接收到命令字的ACK应答信号。当传感器正确接收到命令字后,应将DATA线电平拉低,在等待ACK应答信号的时间里,SCK应保持高电平。相应的写命令字的程序代码设计如下:
当传感器测量结束,SHT11会将DATA线电平拉低,接着发送2字节的测量数据和1字节的CRC校验数据。每成功读到一个字节,单片机需要将DATA线电平拉低,作为ACK应答信号。读取数据时,总是从最高位开始,右值有效。例如对于默认的12位分辨率湿度测量,前4位为无用数据,从第5个SCK时钟开始算作最高位。当单片机读完数据后,会将DATA线电平拉高,以结束本次通讯,随后SHT11进入休眠状态,等待下次启动时序的到来。相应的读测量结果的程序代码设计如下:
温湿度数据的计算与分辨率、电源电压等参数有关。现给出温湿度数据的计算公式,在默认情况下,SHT11温度测量分辨率为14位,湿度测量分辨率为12位。
3.5.1 湿度信号转换
如果单片机读得的数字结果为signal_out,则humidity计算公式为:
公式中的参数取值如下:
分辨率 C1 C2 C3 12bit -2.0468 0.0367 -1.5955E-6 8bit -2.0468 0.5872 -4.0845E-4
在默认分辨率下,C1=-2.0468,C2=0.0367,C3=-1.5955E-6。
3.5.2 温度信号转换
如果单片机读得的数字结果为signal_out,则temp计算公式为:
公式中的参数取值如下:
VDD d1/(℃) d1/(℉)5V -40.1 -40.2 4V -39.8 -39.6 3.5V -39.7 -39.5 3V -39.6 -39.3 2.5V -39.4 -38.9分辨率 d2/(℃) d2/(℉)14bit 0.01 0.018 12bit 0.04 0.072
在默认分辨率下,d1=-39.7(供电电压3.3V),d2=0.01。
如果出现通讯中断等情况,可以使用复位。复位的发生是当DATA保持高电平时,触发SCK时钟9次或更多,然后发送“传输启动”时序,向SHT11写入复位命令控制字,相应的程序设计如下:
3.7.1 温度测量程序设计
在3.5.2中已经给出了默认分辨率下的温度信号转换公式。根据此公式将单片机从SHT11读得的测量数据进行转换,便得到了正确的温度数据,相应的程序如下:
3.7.2 湿度测量程序设计
在3.5.1中已经给出了默认分辨率下的湿度信号转换公式。根据此公式将单片机从SHT11读得的测量数据进行转换,便得到了正确的湿度数据,相应的程序如下:
在STM32F103VET6单片机开发板的开发程序中,添加SHT11温湿度传感器的测量程序文件,可采集环境的温湿度数据,通过串口调试助手可查看采集到的数据。图4所示为单片机开发板M3主控模块插接SHT11的硬件设备连接;图5所示为通过串口调试助手输出的温湿度数据。
图4 M3主控模块插接SHT11温湿度传感器Figure 4 The M3 main control module is connected to the SHT11
图5 串口助手查看到的温湿度采集数据Figure 5 Temperatureand humidity data obtained by the serial port assistant
本文采用北京新大陆开发教育有限公司1+X传感网应用开发实训套件中的M3主控模块开发板,详细阐述了SHT11温湿度传感器和STM32F103VET6单片机的电路连接以及测量通讯的程序代码。经过验证,本系统能在串口调试助手正确显示采集的温湿度数值。