徐錦鋼 鄢妍
摘 要:本文論述了SHT11溫濕度傳感器的工作原理,使用Proteus仿真軟件設(shè)計(jì)了SHT11的濕度測(cè)量電路圖,并通過(guò)1602液晶顯示SHT11測(cè)得的濕度值,驗(yàn)證了濕度測(cè)量電路及其程序編寫(xiě)的正確性。
關(guān)鍵詞:SHT11溫濕度傳感器;工作原理;程序編寫(xiě)
中圖分類號(hào):TP274 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1003-5168(2019)28-0070-03
Analysis on the Working Principle of SHT11
Temperature and Humidity Sensor
XU Jin’gang1 YAN Yan2
(1.College of Science and Technology, Jiangxi Normal University,Nanchang Jiangxi 330032;2.Jiangxi Institute of Mechanical and Electrical Technology,Nanchang Jiangxi 330032)
Abstract: This paper discussed the working principle of SHT11 temperature and humidity sensor, designed the circuit diagram of SHT11 humidity measurement using proteus simulation software, and verified the correctness of the humidity measurement circuit and its programming by 1602 liquid crystal display SHT11 measured humidity value.
Keywords: SHT11 temperature and humidity sensor;working principle;programming
1 SHT11溫濕度傳感器簡(jiǎn)介
SHT11是瑞士Sensirion公司生產(chǎn)的一種溫濕度傳感器芯片,具有精度高、體積小、可自校準(zhǔn)、體積小等優(yōu)點(diǎn)。該芯片內(nèi)部還集成有放大器、RAM、冗余校驗(yàn)寄存器、加熱器、A/D模數(shù)轉(zhuǎn)換器等部件,通過(guò)二線制串行接口和單片機(jī)通信[1]。
2 硬件連接
SHT11溫濕度傳感器的硬件連接如圖1所示。SHT11溫濕度傳感器主要包括AT89C52單片機(jī)、SHT11和1個(gè)1602液晶屏。SHT11構(gòu)成的溫濕度測(cè)量系統(tǒng)電路簡(jiǎn)單,只需要2個(gè)接口即可實(shí)現(xiàn)SHT11數(shù)據(jù)的讀和寫(xiě)操作。圖中SHT11的第2腳(DATA)為數(shù)據(jù)端,接至單片機(jī)的P3.1口,傳輸溫濕度數(shù)據(jù)信號(hào);SHT11的第3腳(SCK)為時(shí)鐘端,接至單片機(jī)的P3.0口,為數(shù)據(jù)傳輸提供時(shí)鐘脈沖;SHT11的第1腳(GND)接地;第4腳(VCC)接+5V電源。1602液晶屏數(shù)據(jù)端(D7-D0)接至單片機(jī)P0口,控制端(EN、RW、RS)分別接至單片機(jī)P2.2、P2.1、P2.0口。
3 SHT11內(nèi)部構(gòu)造
SHT11溫濕度傳感器將溫度測(cè)量、濕度測(cè)量、信號(hào)轉(zhuǎn)換、A/D模數(shù)轉(zhuǎn)換和加熱等功能集成在一個(gè)芯片里,其內(nèi)部結(jié)構(gòu)如圖2所示。
該芯片包含一個(gè)用能隙材料制成的溫度傳感器和一個(gè)用電容性聚合體制成的濕度傳感器。這兩個(gè)傳感器分別將濕度和溫度轉(zhuǎn)換成電信號(hào),電信號(hào)進(jìn)入運(yùn)算放大器做放大處理;之后進(jìn)入A/D模數(shù)轉(zhuǎn)換器;最后經(jīng)過(guò)二線串行數(shù)字接口將數(shù)字信號(hào)輸出。在出廠前,SHT11會(huì)在恒濕或恒溫環(huán)境中進(jìn)行校準(zhǔn),并且將校準(zhǔn)系數(shù)存放在校準(zhǔn)寄存器中;校準(zhǔn)時(shí),校準(zhǔn)系數(shù)會(huì)自動(dòng)校準(zhǔn)來(lái)自SHT11的信號(hào)。另外,SHT11內(nèi)部還集成了一個(gè)加熱單元,加熱單元接通后可以將SHT11的溫度提升5℃,但功耗也會(huì)相應(yīng)增加。安裝加熱單元主要是為了比較加熱前后的溫度和濕度值,以此來(lái)綜合驗(yàn)證兩個(gè)傳感器元件的性能。在高濕(濕度>95%時(shí))環(huán)境中,加熱功能可防止傳感器結(jié)露,同時(shí)可縮短傳感器響應(yīng)時(shí)間,從而提高測(cè)量精度[2]。
4 SHT11溫濕度傳感器程序設(shè)計(jì)
4.1 SHT11濕度測(cè)量時(shí)序及其步驟介紹
SHT11濕度測(cè)量時(shí)序如圖3所示。通信時(shí),單片機(jī)作為主機(jī),SHT11作為從機(jī)。通信協(xié)議規(guī)定,DATA線上的數(shù)據(jù)只有在SCK=0時(shí)才可以更新。首先單片機(jī)發(fā)出起始信號(hào),然后向SHT11發(fā)送地址位和相應(yīng)的命令字,SHT11接收后向單片機(jī)返回ACK響應(yīng)信號(hào)。接著,SHT11開(kāi)始測(cè)量濕度值,然后將測(cè)得的高位數(shù)據(jù)先發(fā)出去,等待單片機(jī)返回的ACK響應(yīng)信號(hào),接著將測(cè)得的低位數(shù)據(jù)發(fā)出去,等待單片機(jī)返回的ACK響應(yīng)信號(hào)。之后進(jìn)行CRC數(shù)據(jù)校驗(yàn),至此完成一次濕度值得測(cè)量。
4.1.1 啟動(dòng)。SHT11啟動(dòng)時(shí)序如圖4所示。SHT11的啟動(dòng)方式是當(dāng)SCK為高電平時(shí),單片機(jī)控制DATA線電平由高變?yōu)榈汀=?jīng)過(guò)1個(gè)SCK周期后,電平再?gòu)牡妥優(yōu)楦摺V?,SHT11開(kāi)始正常工作。否則,SHT11將一直處于休眠狀態(tài),以節(jié)省功耗。
4.1.2 向SHT11寫(xiě)入控制字。啟動(dòng)之后,單片機(jī)控制DATA數(shù)據(jù)線對(duì)SHT11發(fā)出8位測(cè)量命令字。測(cè)量命令字中的前3位為地址位,固定為000,后5位表示命令代碼位。
在發(fā)送8位數(shù)據(jù)之后,SHT11在第9個(gè)時(shí)鐘脈沖上升沿到來(lái)之前將DATA線電平拉低,表示SHT11已經(jīng)接收到了測(cè)量命令。在第9個(gè)時(shí)鐘過(guò)去之后,SHT11開(kāi)始測(cè)量,測(cè)量時(shí)間視具體情況而定。對(duì)于8位、12位、14位測(cè)量分辨率,所需測(cè)量時(shí)間分別為20、80ms和320ms。本設(shè)計(jì)采用默認(rèn)測(cè)量分辨率。
4.1.3 讀出測(cè)量結(jié)果。在測(cè)量結(jié)束后,SHT11會(huì)將DATA線電平拉低,接著向單片機(jī)發(fā)送2字節(jié)的測(cè)量數(shù)據(jù)和1字節(jié)的CRC奇偶校驗(yàn)碼。每讀到1個(gè)字節(jié),單片機(jī)需要將DATA線電平下拉,表示成功接收到該字節(jié)。所有數(shù)據(jù)都從MSB開(kāi)始,右值有效。比如,對(duì)于測(cè)量濕度默認(rèn)的12位分辨率方式,前4位為無(wú)用數(shù)據(jù),從第5個(gè)SCK時(shí)鐘開(kāi)始算作MSB,而對(duì)于8位分辨率測(cè)量方式,首字節(jié)則無(wú)意義。
如若不需要校驗(yàn),可以在第2個(gè)字節(jié)之后的應(yīng)答時(shí)鐘前將DATA線電平拉高,以結(jié)束本次通信。隨后SHT11進(jìn)入休眠狀態(tài),以節(jié)省功耗。
4.1.4 溫濕度數(shù)據(jù)計(jì)算及溫度補(bǔ)償。本設(shè)計(jì)以默認(rèn)12位分辨率測(cè)量時(shí)的濕度測(cè)量計(jì)算方法為例進(jìn)行說(shuō)明。當(dāng)環(huán)境溫度為25℃時(shí),如果單片機(jī)讀取的12位數(shù)字結(jié)果為RH_Val,則其對(duì)應(yīng)的濕度數(shù)據(jù)可根據(jù)以公式(1)進(jìn)行擬合:
RH%=-4.0+0.040 5×RH_Val-RH_Val2×2.8×10-6? (1)
比如:測(cè)量RH_Val=2 353,代入式(1)計(jì)算得到濕度值為75.79%。
當(dāng)環(huán)境溫度為[T]時(shí),需要對(duì)擬合公式做溫度修正,修正公式如下:
RH%=RH%+([T]-25)×(0.01+0.000 08×RH_Val)? ? ?(2)
4.2 程序設(shè)計(jì)
本文編寫(xiě)了一個(gè)完整的SHT11測(cè)量濕度程序,主要包括SHT11啟動(dòng)函數(shù)、SHT11讀字節(jié)函數(shù)、向SHT11寫(xiě)命令字函數(shù)、顯示測(cè)量結(jié)果函數(shù)等。下面給出相應(yīng)代碼,并作出注釋。
4.2.1 SHT11啟動(dòng)函數(shù)。SHT11啟動(dòng)函數(shù)的相應(yīng)代碼和注釋如下。
void start()
{
DATA=1;
SCK=0;//狀態(tài)初始化
delay(4);//延時(shí)4微秒
SCK=1;//SCK為1時(shí),DATA翻轉(zhuǎn)為低電平
delay(4);
DATA=0;
_nop_();//短暫延時(shí)
SCK=0;//接著SCK變?yōu)榈碗娖?/p>
delay(4);
SCK=1;//在SCK重回高電平期間,DATA翻轉(zhuǎn)為高電平,則啟動(dòng)SHT11
delay(4);
DATA=1;
delay(4);
SCK=0;
}
4.2.2 SHT11讀字節(jié)函數(shù)。SHT11讀字節(jié)函數(shù)的相應(yīng)代碼和注釋如下。
char read_byte()//從SHT11讀1個(gè)字節(jié)數(shù)據(jù)
{
uchar i;
uchar x=0;//存儲(chǔ)讀取的1個(gè)字節(jié)測(cè)量結(jié)果
DATA=1;//釋放DATA,SHT11控制其數(shù)據(jù)變化
delay(4);
for(i=0;i<8;i++)//讀8位數(shù)據(jù)
{
x<<=1;
SCK=1;
if(DATA==1)
{
x|=0x01;//從SHT11中讀1
}
SCK=0;
}
DATA=0;//每讀1個(gè)字節(jié),需拉低DATA
delay(4);
SCK=1;//第9個(gè)時(shí)鐘到來(lái)
delay(4);
SCK=0;
delay(4);
DATA=1;//釋放DATA,為讀下一字節(jié)做準(zhǔn)備
return x;
}
4.2.3 向SHT11寫(xiě)命令字函數(shù)。向SHT11寫(xiě)命令字函數(shù)的相應(yīng)代碼和注釋如下。
void write_com(uchar command)
{
uchar i;
start();
for(i=0;i<8;i++)//每個(gè)命令字包含8個(gè)數(shù)據(jù)位
{
if((command&0x80)==0x80)//先寫(xiě)命令字的高位
DATA=1;//通過(guò)數(shù)據(jù)總線向SHT11寫(xiě)'1'
else
DATA=0;//通過(guò)數(shù)據(jù)總線向SHT11寫(xiě)'0'
command<<=1;//命令字左移1位,
delay(4);//保持一段延時(shí)
SCK=1;
delay(4);
SCK=0;
delay(4);
}
DATA=1;//拉高DATA
delay(4);
SCK=1;//第9個(gè)時(shí)鐘,等待應(yīng)答ACK
while(DATA==1);//DATA=0,表示傳感器成功收到寫(xiě)入命令
SCK=0;//第9個(gè)時(shí)鐘下降沿,需將DATA釋放(上拉為高電平)
DATA=1;
delay_ms(80);//12位測(cè)量需等待80ms以上
while(DATA==1);//等待DATA被傳感器拉低(測(cè)量結(jié)束)
}
4.2.4 顯示測(cè)量結(jié)果函數(shù)。顯示測(cè)量結(jié)果函數(shù)的相應(yīng)代碼和注釋如下。
void DisplayResult(float x)
{
uchar INT,DEC;
INT=x;
DEC=x*100-INT*100;
write_com(0x80+9);//指定顯示地址
write_data(0x30+INT/10);//顯示十位數(shù)字
write_data(0x30+INT%10);//顯示個(gè)位數(shù)字
write_com(0x80+12);
write_data(0x30+DEC/10);//顯示十分位
write_data(0x30+DEC%10);//顯示百分位
}
5 電路功能測(cè)試
按圖1連接好電路后,按下SHT11上的濕度增減按鍵,模擬外界濕度變化,單片機(jī)在讀取濕度值后,將濕度值顯示在1602液晶顯示屏上。比如,圖中測(cè)得濕度為80%時(shí),液晶顯示為82.52%,誤差比較?。ㄓ捎?jì)算和數(shù)值轉(zhuǎn)換導(dǎo)致),說(shuō)明該電路連接及程序編寫(xiě)均正確無(wú)誤。
6 結(jié)語(yǔ)
本文采用單片機(jī)作為控制器,設(shè)計(jì)了基于SHT11的濕度測(cè)量電路,并論述了SHT11的工作原理,給出了部分程序代碼并注解。通過(guò)測(cè)試,SHT11能正常測(cè)量濕度值,電路工作正常。
參考文獻(xiàn):
[1]百度文庫(kù).SHT11傳感器特性及設(shè)定[DB/OL].(2018-07-01)[2019-08-20]. https://wenku.baidu.com/view/02e555086c85ec3a87c2c5df.html.
[2]楊欣.實(shí)例解讀51單片機(jī)完全學(xué)習(xí)與應(yīng)用[M].北京:電子工業(yè)出版社,2010.