[關(guān)鍵詞]溫濕度檢測;FPGA ;DHT11 ;LCD1602
[中圖分類號]TM63 [文獻標志碼]A [文章編號]2095–6487(2024)10–0007–03
1開發(fā)背景
FPGA(Field Programmable Gate Array)是在可編程器件如PAL(可編程陣列邏輯)和GAL(通用陣列邏輯)的基礎(chǔ)上進一步發(fā)展的產(chǎn)物。FPGA是一種可有效解決傳統(tǒng)器件門電路數(shù)量有限問題的可編程邏輯器件,是專用集成電路中的一種半定制電路。FPGA的基本結(jié)構(gòu)包括可編程輸入輸出單元、可重構(gòu)邏輯區(qū)塊、數(shù)字時鐘管理模塊、內(nèi)置區(qū)塊RAM、布線資源、內(nèi)置專用硬核、底層內(nèi)置功能單元。FPGA的設(shè)計流程涵蓋了算法設(shè)計、代碼模擬、設(shè)計實現(xiàn),以及板級調(diào)試等多個環(huán)節(jié)。設(shè)計人員先根據(jù)實際需要確定算法框架,再用EDA工具或使用HD編程語言編寫設(shè)計代碼來制訂設(shè)計方案。利用代碼模擬驗證設(shè)計方案的符合性,然后進行板級調(diào)試,并在FPGA芯片上加載配置電路,最終對實際操作效果進行驗證。
2方案選擇與可行性分析
解決方案1:以FPGA(CycloneⅡ系列)為主控模塊,搭配DS18B20溫度感應(yīng)器和HS1101濕度感應(yīng)器。該顯示屏采用LCD1602液晶顯示屏,報警裝置采用PWM模式的蜂鳴器,而電器裝置則換成開關(guān)。
解決方案2:核心模塊同樣采用FPGA(CycloneⅡ系列),但溫濕度傳感器采用DHT11。使用LCD1602液晶顯示屏顯示探測到的溫度和濕度數(shù)據(jù),同時使用開關(guān)控制電器裝置作為報警裝置,并采用PWM模式的蜂鳴器。
從上述兩種系統(tǒng)方案中可以看到,溫濕度采集模塊有DHT11和DS18B20+HS1101這兩種選擇,DHT11測量范圍20%~90%,0~50℃,測溫精度為±2℃,測濕精度為±5%;DS18B20測量范圍為-55~125℃,-10~85℃,誤差范圍為±0.5℃。最高精度可達0.0625℃;HS1101測量相對濕度范圍為0~100%,誤差為±2%。DS18B20+HS1101的組合精度更高,測量范圍也更大,但由于是兩個元件,設(shè)計更加復雜,功耗也更大。雖然DHT11的精確度沒有另一種組合更高,測量范圍也更小,但仍能滿足應(yīng)用場景的設(shè)計需求,同時設(shè)計簡單且功耗較低,因此采用DHT11的這一設(shè)計的溫濕度收集模組更符合要求。故出于對產(chǎn)品功耗、性能等多方面的考慮,在設(shè)計溫濕度傳感器時選擇了DHT11。
3模塊設(shè)計
3.1溫濕度采集模塊
DHT11傳感器有4個引腳,分別為VDD、DATA、NC和GND。傳感器的工作電壓為3.3~5.5V,如果在供電時選擇3.3V,接線長度應(yīng)盡量縮短,接線過長可能會導致傳感器供電不足,造成測量誤差。
DHT11器件采用簡化的單線通信,即完全依靠這條線路在系統(tǒng)中進行數(shù)據(jù)交換與控制。設(shè)備(Master或Control)可通過1個開路或三態(tài)口連接數(shù)據(jù)線,從而釋放總線而不發(fā)送數(shù)據(jù),以便其他設(shè)備使用。一般單總線上拉電阻需接在4.7kΩ左右。這樣其狀態(tài)就保持了在總線空閑時的高水平狀態(tài)。由于主機必須呼叫從機,從機才會應(yīng)答,因此需要按照單總線的正確順序,才能讓主機訪問設(shè)備。
DHT11傳感器以8位濕度整數(shù)數(shù)據(jù)、8位濕度小數(shù)數(shù)據(jù)、8位溫度整數(shù)數(shù)據(jù)、8位溫度小數(shù)數(shù)據(jù)、8位校驗位為數(shù)據(jù)格式傳輸數(shù)據(jù)。需要說明的是濕度的小數(shù)部分始終為零。
在FPGA與DHT11之間的通信過程中,將FPGA作為主機,DHT11作為從機。DHT11在主機一次發(fā)送起動訊號后,從低功耗模式轉(zhuǎn)換為高速模式,并發(fā)送響應(yīng)訊號,在主機一次發(fā)送起動訊號結(jié)束后發(fā)送40bit資料以觸發(fā)一次資訊收集。
設(shè)置微處理器的I/O為輸出狀態(tài)并輸出低電平,要求不低于18ms(且不超過30ms)的低電平維持時間,之后將微處理器的I/O轉(zhuǎn)換為輸入狀態(tài)。微處理器的輸入輸出引腳(即DHT11的數(shù)據(jù)線)也因為上拉電阻的作用,即為了等待DHT11發(fā)送答案信號,而被拉高了電平。
當DHT11的DATA引腳偵測到外接訊號為低電平時,會進入等待狀態(tài)直到外接訊號的低電平結(jié)束,再延遲一段時間后,DHT11的DATA引腳便會轉(zhuǎn)換成輸出狀態(tài)(double-在微處理器輸入/輸出等待接收數(shù)據(jù)時,發(fā)送83μs的低電平信號,然后發(fā)送87μs的高電平信號,通知外設(shè)準備接收數(shù)據(jù))。在偵測到低電平的I/O訊號(即DHT11的應(yīng)答訊號)后,數(shù)據(jù)接收需要等待高電平訊號87μs。
DHT11的DATA引腳輸出40位數(shù)據(jù),微處理器接收這些數(shù)據(jù)的方式是通過監(jiān)測I/O電平的變化?!?”位數(shù)據(jù)格式為低電平持續(xù)時間為54μs,之后高電平持續(xù)時間為23~27μs;“1”位數(shù)據(jù)格式為低電平持續(xù)時間54μs,之后高電平持續(xù)時間68~74μs。
DHT11的DATA引腳輸出40bit數(shù)據(jù)后,在上拉電阻使其變?yōu)楦唠娖降那闆r下,持續(xù)輸出低電平54μs后將其設(shè)為輸入狀態(tài)。DHT11在準備接收外部信號的同時,會周期性地重新測量環(huán)境的溫濕度數(shù)據(jù)并進行存儲。
為更好地說明DHT11的運行規(guī)則,文章引入“狀態(tài)機”對其進行解釋。本設(shè)計DHT11狀態(tài)如圖1所示,共分為6個狀態(tài),上電穩(wěn)定后運行狀態(tài)只有5個。
(1)WAIT_1S。上電后即進入這個狀態(tài),主要是因為上電后需要1s的時間穩(wěn)定DHT11的狀態(tài)。該狀態(tài)使用計數(shù)器計時,滿足1s就跳轉(zhuǎn)到下一個狀態(tài)START,并且計數(shù)清零,不滿足則停留在這個狀態(tài)一直計數(shù)。
(2)START。在這個狀態(tài)下DHT11進入工作狀態(tài)。主機將總線拉低18~30ms后再拉高。在這個狀態(tài)仍使用計數(shù)器計時,拉低總線后計數(shù)開始,計數(shù)滿足條件后清零并跳轉(zhuǎn)到下一個狀態(tài)DELAY_10μs,不滿足則停留在這個狀態(tài)一直計數(shù)。
(3)DELAY_10μs。在這個狀態(tài)下主機應(yīng)拉高10μs后釋放總線進入等待狀態(tài)等待從機(DHT11)拉低作為回應(yīng)。主機將總線拉低10μs再將總線放出來。在這個狀態(tài)仍使用計數(shù)器,拉低總線后計數(shù)開始,計數(shù)滿足條件后清零并跳轉(zhuǎn)到下一個狀態(tài)DELAY_10μs,不滿足則停留在這個狀態(tài)一直計時。
(4)REPLY。這個狀態(tài)是檢查從機是否回應(yīng)以及回應(yīng)是否符合時序。一旦主機檢測到上升沿且此時計數(shù)器介于70~100μs,則說明從機回應(yīng)了一個70~100μs的低電平信號,從而跳轉(zhuǎn)到下一個狀態(tài)DELAY_75μs;一旦主機檢測到上升沿但此時計數(shù)器大于500μs時仍沒有檢測到上升沿,則說明從機的應(yīng)答不符合時序,那么狀態(tài)機跳轉(zhuǎn)到START狀態(tài)(不跳轉(zhuǎn)到WAIT_1S狀態(tài),因為只有在每次上電后才需要延遲1s)并將計數(shù)器清零,在這個狀態(tài)計數(shù)器一直計數(shù)到跳轉(zhuǎn)至另一個狀態(tài)才清零。
(5)DELAY_75μs。該狀態(tài)為了接收數(shù)據(jù)而向主機輸出87μs高電平。因為后續(xù)發(fā)送數(shù)據(jù)時一定是以低電平開始,所以在這里一定會檢測到數(shù)據(jù)線上的一個下降沿。一旦檢測到下降沿且計數(shù)器大于70μs,那么跳轉(zhuǎn)到下一個狀態(tài)REV_data并將計數(shù)器清零,不然則停留在這個狀態(tài)一直計時。
3.2顯示模塊
本設(shè)計顯示模塊采用LCD1602,共有16根管腳(部分型號只有14根,沒有背光管腳),需要使用的管腳為RS,E和D0-D7。當RS為低電平時,代表輸入命令;當RS為高電平時,代表輸入數(shù)據(jù)。若表示輸入命令,則輸入與設(shè)置模塊相當?shù)臄?shù)列D0-D7;若表示輸入數(shù)據(jù),則將輸入的數(shù)字列成D0-D7,等于寫進了一個字符串,該字符串需要顯示。E端是用來執(zhí)行命令的能量引腳,當LCD模塊執(zhí)行命令時,其由高電平變?yōu)榈碗娖剑ㄏ陆笛兀?。D0-D7是八位雙向并行數(shù)據(jù)線,在文章中僅作輸入端(寫入)。
模塊有CLK時鐘輸入端、_RST低電平有效復位端、LCD_E使能端、LCD_RS數(shù)據(jù)/命令選擇端、LCD_DATA數(shù)據(jù)端5個端口(其中8個數(shù)據(jù)端合為8位寬端口);上電穩(wěn)定是數(shù)據(jù)手冊要求須通電20ms才能進行下一步操作的簡單初始化模塊;RS端通過數(shù)據(jù)或指令對輸入進行控制;字符輸入由FPGA得到溫度和濕度,溫度以第一行表示,濕度以第二行表示。
3.3判斷模塊和報警模塊(信號輸出模塊)
對DHT11傳輸過來的溫度進行判斷,若溫度大于40℃(濕度大于90)以上,則輸出信號為3,代表此時溫度(濕度)過高,同時蜂鳴器開始報警;如果溫度小于15℃(濕度小于40),則輸出信號為2,代表此時溫度(濕度)過低,蜂鳴器同樣進行報警;溫度大于15℃,小于40℃時(濕度大于40,小于90時),輸出信號為0,代表溫度(濕度)正常,蜂鳴器不工作。
蜂鳴器的設(shè)置為外部輸入25MHz的時鐘信號,然后用20位計數(shù)器進行計數(shù),對輸入時鐘信號進行分頻,對應(yīng)的一個周期為25Hz,設(shè)置判斷邏輯,即可得到占空比為50%的蜂鳴器發(fā)出聲響的結(jié)果。同時,在輸入信號大于1點的情況下,喊話器也只會發(fā)出響聲。
4結(jié)束語
文章設(shè)計了以FPGA為核心部件的電氣設(shè)備降溫節(jié)能控制系統(tǒng),利用軟件編程進行驗證,最終基本上實現(xiàn)了各項要求。溫濕度檢測和控制與生產(chǎn)及生活密切聯(lián)系,是熱門研究課題之一。溫濕度的智能控制已成為一種不可避免的趨勢。未來,通過自動化控制技術(shù)的運用,不僅可提高效率,還可節(jié)約人力資源。