周江
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.
引言
在現(xiàn)代工農(nóng)業(yè)生產(chǎn)中,溫度和濕度是環(huán)境的2個(gè)重要參數(shù)[1],通過(guò)對(duì)溫度、濕度數(shù)據(jù)的采集和分析,可以外界環(huán)境因素進(jìn)行實(shí)時(shí)監(jiān)控,保證工農(nóng)業(yè)生產(chǎn)順利、高效地實(shí)現(xiàn)可持續(xù)快速發(fā)展。因此,溫度、濕度的采集至關(guān)重要[2]。目前,僅溫度的測(cè)量方法已經(jīng)多達(dá)數(shù)十種,本文以51單片機(jī)和數(shù)字溫濕度傳感器SHT71為基礎(chǔ),研究數(shù)字顯示的溫濕度計(jì)的設(shè)計(jì)方法。
1SHT71簡(jiǎn)介
SHT71是瑞士Sensirion(盛思銳)公司生產(chǎn)的溫度和濕度傳感器,其引腳圖和引腳說(shuō)明則如圖1所示。SHT71是SHT7x系列的標(biāo)準(zhǔn)版本,其高端版本是SHT75。同樣的器件也有貼片封裝的SHT1x系列,其標(biāo)準(zhǔn)版本是SHT11,高端版本是SHT15。
電源與地之間已經(jīng)連接了100 nF的退耦電容,不需要外接。
SHT71采取互補(bǔ)金屬氧化物半導(dǎo)體材質(zhì)進(jìn)行電壓放大,通過(guò)電容體監(jiān)測(cè)環(huán)境濕度,利用能量間隙體監(jiān)測(cè)環(huán)境溫度[3]。由于在其內(nèi)部傳感器、放大器、A/D轉(zhuǎn)換器及串行接口電路都設(shè)計(jì)集成在同一芯片上,就使得SHT71的抗干擾能力更強(qiáng)、性能更加穩(wěn)定可靠[4]。
SHT71的主要技術(shù)指標(biāo)可參見(jiàn)表1[5]。
1.1SHT71的通信協(xié)議
SHT71上電后需要11 ms進(jìn)入休眠狀態(tài),在此之前不允許對(duì)傳感器發(fā)送任何命令。這里,將分為2部分給出闡釋分析,具體內(nèi)容如下。
(1)SHT71的通訊指令分析。休眠過(guò)后,啟用傳輸開(kāi)始(Transmission Start)時(shí)序,來(lái)完成數(shù)據(jù)傳輸?shù)某跏蓟?。傳輸開(kāi)始的時(shí)序圖見(jiàn)圖2。
后續(xù)命令包含3個(gè)地址位(目前只支持“000”)和5個(gè)命令位。SHT71會(huì)以下述方式表示已正確地接收到指令:在第8個(gè)SCK的下降沿之后,將DATA下拉為低電平(ACK位)作為回答,在第9個(gè)SCK的下降沿之后,釋放DATA(恢復(fù)高電平)。5個(gè)命令位的定義見(jiàn)表2。表2中,軟件復(fù)位意指通信接口和狀態(tài)寄存器復(fù)位,在發(fā)送下一個(gè)命令前,至少等待11 ms。并且,狀態(tài)寄存器復(fù)位后,其內(nèi)容恢復(fù)成初始狀態(tài)。狀態(tài)寄存器的定義可見(jiàn)表3。
(2)單片機(jī)與SHT71的通訊時(shí)序分析。以單片機(jī)給SHT71發(fā)送濕度測(cè)量命令為例,命令字為00000101,圖3給出了單片機(jī)與SHT71通信的時(shí)序圖,其中前半部分是發(fā)送傳輸開(kāi)始時(shí)序,后半部分是輸出濕度測(cè)量命令00000101。圖3中,DATA線(xiàn)中加粗的部分是SHT71輸出的ACK信號(hào),DATA線(xiàn)的其它部分是由單片機(jī)輸出的。
單片機(jī)發(fā)送測(cè)量命令后,需要等待測(cè)量結(jié)束,這個(gè)過(guò)程大約需要20 ms/80 ms/320 ms,分別對(duì)應(yīng)8 bit/12 bit/14 bit的測(cè)量數(shù)據(jù)分辨率。SHT71通過(guò)下拉DATA線(xiàn)至低電平(這實(shí)際上是SHT71輸出的測(cè)量數(shù)據(jù)的最高位)表示測(cè)量結(jié)束,單片機(jī)必須等待這個(gè)信號(hào)到來(lái)之后,才能讀取數(shù)據(jù)。在測(cè)量與通信結(jié)束后,SHT71自動(dòng)轉(zhuǎn)入休眠模式,以降低自身能耗[6]。
單片機(jī)查詢(xún)到測(cè)量結(jié)束信號(hào)后,可以讀取2字節(jié)的測(cè)量數(shù)據(jù)和1字節(jié)的CRC校驗(yàn)碼。數(shù)據(jù)是高位在前、右端對(duì)齊的(比如,對(duì)于14 bit的溫度數(shù)據(jù),2字節(jié)的測(cè)量數(shù)據(jù)中最高的2 bit是不用的,這2 bit的數(shù)據(jù)是2個(gè)0)。對(duì)于8 bit的濕度數(shù)據(jù),第一個(gè)字節(jié)是不用的,但SHT71仍然會(huì)發(fā)送2個(gè)字節(jié)數(shù)據(jù),只是第一個(gè)字節(jié)發(fā)送的是全0。
單片機(jī)收到1個(gè)字節(jié)的數(shù)據(jù)后,應(yīng)該通過(guò)下拉DATA線(xiàn)為低電平(ACK)以確認(rèn)收到數(shù)據(jù),在收到CRC校驗(yàn)碼后,則無(wú)須拉低DATA線(xiàn),而讓DATA線(xiàn)保持高電平(NACK),以表示結(jié)束本次通信。如果不需要CRC校驗(yàn)碼,也可在收到第二個(gè)字節(jié)數(shù)據(jù)后,不拉低DATA線(xiàn)以結(jié)束通信。SHT71在SCK的下降沿輸出1 bit數(shù)據(jù),單片機(jī)在輸出SCK的上升沿后讀取數(shù)據(jù),以保證讀到穩(wěn)定的數(shù)據(jù)。
如果單片機(jī)與SHT71的通信中斷,可通過(guò)如圖4所示的時(shí)序復(fù)位通信接口。
在保持DATA線(xiàn)為高電平的情況下,輸出至少9個(gè)時(shí)鐘脈沖,接著發(fā)送一個(gè)傳輸開(kāi)始時(shí)序。這個(gè)過(guò)程只復(fù)位通信接口,狀態(tài)寄存器內(nèi)容仍然保留。
1.2溫度信號(hào)轉(zhuǎn)換
可以根據(jù)下面的溫度計(jì)算公式和系數(shù)表,將單片機(jī)從SHT71讀取的2字節(jié)溫度數(shù)據(jù)SOT轉(zhuǎn)換為溫度值T。溫度計(jì)算公式可表述為:T= d1 + d2 × SOT(1)其中,當(dāng)SOT為14 bit時(shí),d2取0.01 ℃、當(dāng)SOT為12 bit時(shí),d2取0.04 ℃,關(guān)于d1運(yùn)算系數(shù)的取值可參見(jiàn)表4。
1.3濕度信號(hào)轉(zhuǎn)換
將單片機(jī)從SHT71讀取的濕度數(shù)據(jù)SORH轉(zhuǎn)換為相對(duì)濕度可分為2個(gè)步驟,可概括描述為:
(1)進(jìn)行非線(xiàn)性補(bǔ)償,得到相對(duì)濕度的線(xiàn)性值RHlinear,相對(duì)濕度非線(xiàn)性補(bǔ)償?shù)倪\(yùn)算系數(shù)可見(jiàn)表5。補(bǔ)償公式則如下所示:RHlinear = c1 + c2×SORH + c3×SORH2 (2)其中,RHlinear的單位為%RH。
2電路設(shè)計(jì)
設(shè)計(jì)要求運(yùn)用SHT71制作一個(gè)數(shù)字溫濕度計(jì),通過(guò)一個(gè)自鎖開(kāi)關(guān),選擇在4位數(shù)碼管上顯示溫度或濕度,并用2只LED作為溫度或濕度顯示的指示燈。研究中,溫度的測(cè)量范圍是-40 ℃ ~ +123.8 ℃,濕度的測(cè)量范圍是0 ~ 100%RH,因此結(jié)果顯示可以精確到小數(shù)點(diǎn)后一位。當(dāng)溫度為負(fù)溫時(shí),最高位顯示負(fù)號(hào)‘-。應(yīng)用電路的原理設(shè)計(jì)可如圖5所示。
圖5中,SHT71的時(shí)鐘線(xiàn)SCK和數(shù)據(jù)線(xiàn)DATA分別選接單片機(jī)的P1.0和P1.1;SW是溫度/濕度測(cè)量和顯示的切換開(kāi)關(guān),選接單片機(jī)的P1.7;D1、D2分別是溫度和濕度顯示的指示燈,實(shí)接單片機(jī)的P1.2和P1.3;R1、R2是D1、D2的限流電阻。4位數(shù)碼管是共陰的,8位段選線(xiàn)實(shí)接單片機(jī)的P3口,從左至右的4位位選線(xiàn)分別連接至單片機(jī)的P0.4 ~ P0.7。
3軟件設(shè)計(jì)
軟件設(shè)計(jì)中,主要包括復(fù)位SHT71通信接口、發(fā)送溫度/濕度測(cè)量命令、計(jì)算溫度/濕度值和4位數(shù)碼管的顯示等。除顯示在中斷程序中啟用運(yùn)行外,其它功能均在主程序中設(shè)計(jì)實(shí)現(xiàn)。4位數(shù)碼管的動(dòng)態(tài)顯示尤為常見(jiàn),請(qǐng)參照文獻(xiàn)[7],限于篇幅本文不再贅述。
主程序的設(shè)計(jì)流程如圖6所示。
由圖6可知,首先進(jìn)行定時(shí)器的初始化和開(kāi)中斷,延時(shí)20 ms后(SHT71手冊(cè)要求,上電11 ms后才能對(duì)其發(fā)送命令),復(fù)位SHT71的通信接口。此后根據(jù)溫度/濕度切換開(kāi)關(guān)SW的狀態(tài),選擇發(fā)送溫度測(cè)量命令或濕度測(cè)量命令。命令發(fā)送后,在等待中進(jìn)行測(cè)量超時(shí)判斷,如果超時(shí),則延時(shí)500 ms后再次復(fù)位SHT71的通信接口;否則,將讀取測(cè)量數(shù)據(jù),并根據(jù)SW的狀態(tài),選擇計(jì)算溫度或濕度值,同時(shí)改變溫度或濕度的指示燈狀態(tài)。其中涉及的關(guān)鍵功能為:復(fù)位SHT71的通信接口、發(fā)送測(cè)量命令、讀取測(cè)量數(shù)據(jù)和計(jì)算溫度或濕度值等。這里,針對(duì)其功能設(shè)計(jì)將逐一展開(kāi)研究分述如下。
3.1復(fù)位SHT71通信接口
如前文圖4所示的復(fù)位SHT71通信接口時(shí)序圖,已經(jīng)清晰展示了整個(gè)復(fù)位過(guò)程。依據(jù)該圖,即可歸納寫(xiě)出實(shí)現(xiàn)該功能的函數(shù)。程序中,將先行輸出9個(gè)時(shí)鐘脈沖,接著發(fā)送傳輸開(kāi)始時(shí)序。
3.2發(fā)送溫度/濕度測(cè)量命令
參考圖3的濕度測(cè)量命令時(shí)序圖,其中的前半部分是發(fā)送傳輸開(kāi)始時(shí)序,該時(shí)序在復(fù)位SHT71通信接口中已經(jīng)發(fā)送,這里就不再發(fā)送了。發(fā)送溫度或濕度測(cè)量的命令實(shí)際上是向SHT71寫(xiě)一個(gè)字節(jié),在程序設(shè)計(jì)中將其整合為一個(gè)函數(shù),該函數(shù)不僅只是適用于發(fā)送溫度/濕度測(cè)量命令,也可用于讀/寫(xiě)狀態(tài)寄存器、軟件復(fù)位等,只要函數(shù)設(shè)定不同的入口參數(shù),就可以轉(zhuǎn)換為不同的命令。SHT71的命令表可詳見(jiàn)表2。
3.3讀取測(cè)量數(shù)據(jù)
在SCK的下降沿后,SHT71更新從DATA輸出的數(shù)據(jù),在SCK的上升沿后,數(shù)據(jù)有效。測(cè)量完成后,SHT71自動(dòng)從DATA線(xiàn)輸出第一位數(shù)據(jù),所以讀取第一個(gè)字節(jié)的第一位數(shù)據(jù)時(shí),SCK不需要輸出下降沿。在第8個(gè)SCK的下降沿后,單片機(jī)輸出應(yīng)答信號(hào)ACK(低電平);在第9個(gè)SCK的下降沿后,SHT71輸出第二個(gè)字節(jié)的第一位數(shù)據(jù)。也就是說(shuō),單片機(jī)在讀取任何一個(gè)字節(jié)的第一位數(shù)據(jù)時(shí),均不(下轉(zhuǎn)封三)需要從SCK輸出下降沿,這點(diǎn)與很多芯片的通信協(xié)議有所不同,因而需要特別的關(guān)注和重視。
本設(shè)計(jì)中并未使用CRC校驗(yàn)碼,所以程序在讀取第二個(gè)字節(jié)后,輸出應(yīng)答信號(hào)NACK(高電平)以結(jié)束通信。如果需要校驗(yàn)碼,則應(yīng)在讀取第二個(gè)字節(jié)后,輸出ACK,讀取校驗(yàn)碼后,再輸出NACK結(jié)束通信。
3.4溫度的計(jì)算
根據(jù)表4中的運(yùn)算系數(shù)、以及公式(1)可知,當(dāng)電源電壓為+5 V、溫度數(shù)據(jù)選擇14 bit時(shí),溫度的計(jì)算公式是:T=-40.1+0.01×SOT(4)其中,T的單位是℃。
為盡量采用整數(shù)運(yùn)算,上式將可寫(xiě)作如下形式:T=-4010+SOT(5)其中,T的單位是0.01 ℃
在此基礎(chǔ)上,判斷溫度的符號(hào)。如果是正數(shù),符號(hào)位將置0;如果是負(fù)數(shù),符號(hào)位將置1,再將補(bǔ)碼變成原碼(相當(dāng)于取絕對(duì)值)。此后,將計(jì)算結(jié)果除以10(因?yàn)轱@示的精度是0.1 ℃),并做四舍五入運(yùn)算即可得到結(jié)果。
3.5濕度的計(jì)算
綜上可知,這種系數(shù)無(wú)法采用整數(shù)計(jì)算,程序設(shè)計(jì)中應(yīng)采用浮點(diǎn)數(shù)的運(yùn)算。將式(6)右邊乘以10,將濕度的單位變換成0.1%(因?yàn)轱@示的精度是0.1%),并做四舍五入的運(yùn)算即可得到結(jié)果。
4結(jié)束語(yǔ)
本文設(shè)計(jì)提出的數(shù)字顯示的溫濕度計(jì)在單片機(jī)和傳感器類(lèi)的項(xiàng)目教學(xué)課程中作為實(shí)際的教學(xué)項(xiàng)目使用,取得了比較好的教學(xué)效果。只是,在本次研發(fā)設(shè)計(jì)中并未考慮當(dāng)溫度數(shù)據(jù)選擇12 bit和濕度數(shù)據(jù)選擇8 bit時(shí)的計(jì)算方法,也沒(méi)有深度探討濕度的溫度補(bǔ)償研究,后續(xù)工作中可對(duì)此提供進(jìn)一步的實(shí)踐應(yīng)用討論與分析。
參考文獻(xiàn)
[1] 陳潔,王恩亮. 糧食科技物流中心溫濕度監(jiān)控系統(tǒng)的設(shè)計(jì)[J]. 微型機(jī)與應(yīng)用,2014,33(14): 88-90, 94.
[2] 明廷日,鄧鵬,馬雪芬. 基于MSP430單片機(jī)的溫度采集系統(tǒng)設(shè)計(jì)[J]. 儀器儀表用戶(hù),2018,25(3): 5-7, 76.
[3] 李麗芬,云彩霞,陳曉芳. 基于嵌入式系統(tǒng)的環(huán)境監(jiān)測(cè)與控制系統(tǒng)[J]. 現(xiàn)代電子技術(shù),2017,40(19): 126-128.
[4] 曹會(huì)國(guó),姜文育. 基于SHT-11的單片機(jī)的智能花卉澆灌器的設(shè)計(jì)[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] 李樹(shù)丹,張從松,覃章健,等. 基于ZigBee協(xié)議的溫濕度監(jiān)測(cè)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J]. 電子科技,2014,27(12): 37-40
[7] 崔承毅,王開(kāi)宇,高慶華,等. 數(shù)碼管顯示虛擬仿真實(shí)驗(yàn)設(shè)計(jì)[J]. 工業(yè)和信息化教育,2018(1): 38-41.