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