基于SHT71的温湿度计的设计与实现
2018-10-20周江
周江
Abstract: In view of the demand for measurement of temperature and humidity in industrial and agricultural production and daily life, a design scheme and realization method of digital hygrothermograph based on single chip microcomputer, SHT71 and eight-segment LED digital tube are proposed. The interface method between SHT71 and MCU is introduced in detail, and the calculation method of temperature and humidity data is also given.
引言
在现代工农业生产中,温度和湿度是环境的2个重要参数[1],通过对温度、湿度数据的采集和分析,可以外界环境因素进行实时监控,保证工农业生产顺利、高效地实现可持续快速发展。因此,温度、湿度的采集至关重要[2]。目前,仅温度的测量方法已经多达数十种,本文以51单片机和数字温湿度传感器SHT71为基础,研究数字显示的温湿度计的设计方法。
1SHT71简介
SHT71是瑞士Sensirion(盛思锐)公司生产的温度和湿度传感器,其引脚图和引脚说明则如图1所示。SHT71是SHT7x系列的标准版本,其高端版本是SHT75。同样的器件也有贴片封装的SHT1x系列,其标准版本是SHT11,高端版本是SHT15。
电源与地之间已经连接了100 nF的退耦电容,不需要外接。
SHT71采取互补金属氧化物半导体材质进行电压放大,通过电容体监测环境湿度,利用能量间隙体监测环境温度[3]。由于在其内部传感器、放大器、A/D转换器及串行接口电路都设计集成在同一芯片上,就使得SHT71的抗干扰能力更强、性能更加稳定可靠[4]。
SHT71的主要技术指标可参见表1[5]。
1.1SHT71的通信协议
SHT71上电后需要11 ms进入休眠状态,在此之前不允许对传感器发送任何命令。这里,将分为2部分给出阐释分析,具体内容如下。
(1)SHT71的通讯指令分析。休眠过后,启用传输开始(Transmission Start)时序,来完成数据传输的初始化。传输开始的时序图见图2。
后续命令包含3个地址位(目前只支持“000”)和5个命令位。SHT71会以下述方式表示已正确地接收到指令:在第8个SCK的下降沿之后,将DATA下拉为低电平(ACK位)作为回答,在第9个SCK的下降沿之后,释放DATA(恢复高电平)。5个命令位的定义见表2。表2中,软件复位意指通信接口和状态寄存器复位,在发送下一个命令前,至少等待11 ms。并且,状态寄存器复位后,其内容恢复成初始状态。状态寄存器的定义可见表3。
(2)单片机与SHT71的通讯时序分析。以单片机给SHT71发送湿度测量命令为例,命令字为00000101,图3给出了单片机与SHT71通信的时序图,其中前半部分是发送传输开始时序,后半部分是输出湿度测量命令00000101。图3中,DATA线中加粗的部分是SHT71输出的ACK信号,DATA线的其它部分是由单片机输出的。
单片机发送测量命令后,需要等待测量结束,这个过程大约需要20 ms/80 ms/320 ms,分别对应8 bit/12 bit/14 bit的测量数据分辨率。SHT71通过下拉DATA线至低电平(这实际上是SHT71輸出的测量数据的最高位)表示测量结束,单片机必须等待这个信号到来之后,才能读取数据。在测量与通信结束后,SHT71自动转入休眠模式,以降低自身能耗[6]。
单片机查询到测量结束信号后,可以读取2字节的测量数据和1字节的CRC校验码。数据是高位在前、右端对齐的(比如,对于14 bit的温度数据,2字节的测量数据中最高的2 bit是不用的,这2 bit的数据是2个0)。对于8 bit的湿度数据,第一个字节是不用的,但SHT71仍然会发送2个字节数据,只是第一个字节发送的是全0。
单片机收到1个字节的数据后,应该通过下拉DATA线为低电平(ACK)以确认收到数据,在收到CRC校验码后,则无须拉低DATA线,而让DATA线保持高电平(NACK),以表示结束本次通信。如果不需要CRC校验码,也可在收到第二个字节数据后,不拉低DATA线以结束通信。SHT71在SCK的下降沿输出1 bit数据,单片机在输出SCK的上升沿后读取数据,以保证读到稳定的数据。
如果单片机与SHT71的通信中断,可通过如图4所示的时序复位通信接口。
在保持DATA线为高电平的情况下,输出至少9个时钟脉冲,接着发送一个传输开始时序。这个过程只复位通信接口,状态寄存器内容仍然保留。
1.2温度信号转换
可以根据下面的温度计算公式和系数表,将单片机从SHT71读取的2字节温度数据SOT转换为温度值T。温度计算公式可表述为:T= d1 + d2 × SOT(1)其中,当SOT为14 bit时,d2取0.01 ℃、当SOT为12 bit时,d2取0.04 ℃,关于d1运算系数的取值可参见表4。
1.3湿度信号转换
将单片机从SHT71读取的湿度数据SORH转换为相对湿度可分为2个步骤,可概括描述为:
(1)进行非线性补偿,得到相对湿度的线性值RHlinear,相对湿度非线性补偿的运算系数可见表5。补偿公式则如下所示:RHlinear = c1 + c2×SORH + c3×SORH2 (2)其中,RHlinear的单位为%RH。
2電路设计
设计要求运用SHT71制作一个数字温湿度计,通过一个自锁开关,选择在4位数码管上显示温度或湿度,并用2只LED作为温度或湿度显示的指示灯。研究中,温度的测量范围是-40 ℃ ~ +123.8 ℃,湿度的测量范围是0 ~ 100%RH,因此结果显示可以精确到小数点后一位。当温度为负温时,最高位显示负号‘-。应用电路的原理设计可如图5所示。
图5中,SHT71的时钟线SCK和数据线DATA分别选接单片机的P1.0和P1.1;SW是温度/湿度测量和显示的切换开关,选接单片机的P1.7;D1、D2分别是温度和湿度显示的指示灯,实接单片机的P1.2和P1.3;R1、R2是D1、D2的限流电阻。4位数码管是共阴的,8位段选线实接单片机的P3口,从左至右的4位位选线分别连接至单片机的P0.4 ~ P0.7。
3软件设计
软件设计中,主要包括复位SHT71通信接口、发送温度/湿度测量命令、计算温度/湿度值和4位数码管的显示等。除显示在中断程序中启用运行外,其它功能均在主程序中设计实现。4位数码管的动态显示尤为常见,请参照文献[7],限于篇幅本文不再赘述。
主程序的设计流程如图6所示。
由图6可知,首先进行定时器的初始化和开中断,延时20 ms后(SHT71手册要求,上电11 ms后才能对其发送命令),复位SHT71的通信接口。此后根据温度/湿度切换开关SW的状态,选择发送温度测量命令或湿度测量命令。命令发送后,在等待中进行测量超时判断,如果超时,则延时500 ms后再次复位SHT71的通信接口;否则,将读取测量数据,并根据SW的状态,选择计算温度或湿度值,同时改变温度或湿度的指示灯状态。其中涉及的关键功能为:复位SHT71的通信接口、发送测量命令、读取测量数据和计算温度或湿度值等。这里,针对其功能设计将逐一展开研究分述如下。
3.1复位SHT71通信接口
如前文图4所示的复位SHT71通信接口时序图,已经清晰展示了整个复位过程。依据该图,即可归纳写出实现该功能的函数。程序中,将先行输出9个时钟脉冲,接着发送传输开始时序。
3.2发送温度/湿度测量命令
参考图3的湿度测量命令时序图,其中的前半部分是发送传输开始时序,该时序在复位SHT71通信接口中已经发送,这里就不再发送了。发送温度或湿度测量的命令实际上是向SHT71写一个字节,在程序设计中将其整合为一个函数,该函数不仅只是适用于发送温度/湿度测量命令,也可用于读/写状态寄存器、软件复位等,只要函数设定不同的入口参数,就可以转换为不同的命令。SHT71的命令表可详见表2。
3.3读取测量数据
在SCK的下降沿后,SHT71更新从DATA输出的数据,在SCK的上升沿后,数据有效。测量完成后,SHT71自动从DATA线输出第一位数据,所以读取第一个字节的第一位数据时,SCK不需要输出下降沿。在第8个SCK的下降沿后,单片机输出应答信号ACK(低电平);在第9个SCK的下降沿后,SHT71输出第二个字节的第一位数据。也就是说,单片机在读取任何一个字节的第一位数据时,均不(下转封三)需要从SCK输出下降沿,这点与很多芯片的通信协议有所不同,因而需要特别的关注和重视。
本设计中并未使用CRC校验码,所以程序在读取第二个字节后,输出应答信号NACK(高电平)以结束通信。如果需要校验码,则应在读取第二个字节后,输出ACK,读取校验码后,再输出NACK结束通信。
3.4温度的计算
根据表4中的运算系数、以及公式(1)可知,当电源电压为+5 V、温度数据选择14 bit时,温度的计算公式是:T=-40.1+0.01×SOT(4)其中,T的单位是℃。
为尽量采用整数运算,上式将可写作如下形式:T=-4010+SOT(5)其中,T的单位是0.01 ℃
在此基础上,判断温度的符号。如果是正数,符号位将置0;如果是负数,符号位将置1,再将补码变成原码(相当于取绝对值)。此后,将计算结果除以10(因为显示的精度是0.1 ℃),并做四舍五入运算即可得到结果。
3.5湿度的计算
综上可知,这种系数无法采用整数计算,程序设计中应采用浮点数的运算。将式(6)右边乘以10,将湿度的单位变换成0.1%(因为显示的精度是0.1%),并做四舍五入的运算即可得到结果。
4结束语
本文设计提出的数字显示的温湿度计在单片机和传感器类的项目教学课程中作为实际的教学项目使用,取得了比较好的教学效果。只是,在本次研发设计中并未考虑当温度数据选择12 bit和湿度数据选择8 bit时的计算方法,也没有深度探讨湿度的温度补偿研究,后续工作中可对此提供进一步的实践应用讨论与分析。
参考文献
[1] 陈洁,王恩亮. 粮食科技物流中心温湿度监控系统的设计[J]. 微型机与应用,2014,33(14): 88-90, 94.
[2] 明廷日,邓鹏,马雪芬. 基于MSP430单片机的温度采集系统设计[J]. 仪器仪表用户,2018,25(3): 5-7, 76.
[3] 李丽芬,云彩霞,陈晓芳. 基于嵌入式系统的环境监测与控制系统[J]. 现代电子技术,2017,40(19): 126-128.
[4] 曹会国,姜文育. 基于SHT-11的单片机的智能花卉浇灌器的设计[J]. 电子世界,2016(12): 57.
[5] Sensirion Inc. Datasheet SHT7x humidity and temperature sensor IC[EB/OL]. [2018-02-19]. https://www.sensirion.com/fileadmin/user_upload/customers/sensirion/Dokumente/0_Datasheets/Humidity/Sensirion_Humidity_Sensors_SHT7x_Datasheet.pdf.
[6] 李树丹,张从松,覃章健,等. 基于ZigBee协议的温湿度监测系统设计与实现[J]. 电子科技,2014,27(12): 37-40
[7] 崔承毅,王开宇,高庆华,等. 数码管显示虚拟仿真实验设计[J]. 工业和信息化教育,2018(1): 38-41.