DHT11時序(上)
DHT11的時序是其單總線(1-Wire)通信協(xié)議的核心支撐,所有溫濕度數(shù)據(jù)的交互都依賴于主機(微控制器MCU)與傳感器之間嚴(yán)格的電平切換節(jié)奏和時長約定。作為一款無獨立時鐘線的數(shù)字傳感器,DHT11的時序設(shè)計既簡化了硬件接線,又對軟件層面的電平控制精度提出了明確要求——任何超出允許范圍的時長偏差,都會導(dǎo)致通信失敗或數(shù)據(jù)誤讀。理解其時序細(xì)節(jié),不僅是正確驅(qū)動傳感器的前提,更是排查通信故障的關(guān)鍵,其整體邏輯可分為“主機啟動信號”“傳感器應(yīng)答信號”“數(shù)據(jù)傳輸信號”三個核心階段,各階段的時序參數(shù)環(huán)環(huán)相扣,共同構(gòu)成完整的通信流程。
在進入具體時序階段前,需明確DHT11的總線基礎(chǔ)狀態(tài):單總線(DATA引腳)通過4.7kΩ~10kΩ的外部上拉電阻連接至電源,空閑狀態(tài)下始終保持高電平。這一設(shè)計確保了總線電平的穩(wěn)定恢復(fù),也為時序判斷提供了基準(zhǔn)——所有有效信號的觸發(fā),均以偏離高電平的電平跳變?yōu)槠瘘c。同時,傳感器上電后需經(jīng)歷約1秒的穩(wěn)定期,在此期間內(nèi)部電路完成初始化與校準(zhǔn)數(shù)據(jù)加載,若未等待穩(wěn)定即發(fā)起通信,時序邏輯會因傳感器未就緒而紊亂,導(dǎo)致啟動信號無法被識別。
主機發(fā)送啟動信號是通信的起點,其核心目的是通過強制總線電平變化,告知傳感器“即將進行數(shù)據(jù)交互”。具體時序流程為:主機首先將DATA引腳配置為輸出模式,主動將總線拉低并保持至少18ms(實際應(yīng)用中通常設(shè)計為20ms,以預(yù)留冗余量)。這一時長必須嚴(yán)格遵守——若拉低時間不足18ms,傳感器內(nèi)部的檢測電路無法確認(rèn)啟動指令,會繼續(xù)保持休眠狀態(tài),不產(chǎn)生任何應(yīng)答;若時長過長(如超過50ms),雖不會導(dǎo)致傳感器故障,但會增加通信延遲,影響數(shù)據(jù)更新效率。拉低時長滿足要求后,主機釋放總線(將DATA引腳切換為輸入模式),此時總線在外部上拉電阻的作用下,從低電平逐漸恢復(fù)為高電平,這一電平跳變成為傳感器檢測啟動信號結(jié)束的標(biāo)志。
傳感器的應(yīng)答信號是對主機啟動指令的回應(yīng),其時序設(shè)計用于確認(rèn)“傳感器已就緒,可傳輸數(shù)據(jù)”。傳感器檢測到總線從低電平恢復(fù)為高電平后,會在20μs~40μs內(nèi)啟動應(yīng)答:首先主動將DATA引腳拉低,保持約80μs(允許±20μs的誤差),隨后釋放總線,讓其在10μs內(nèi)恢復(fù)高電平并保持約80μs。這兩段連續(xù)的“低電平-高電平”組合,構(gòu)成了完整的應(yīng)答信號。主機需在釋放總線后的40μs內(nèi)持續(xù)監(jiān)測總線電平——若先檢測到低電平(對應(yīng)傳感器拉低階段),再檢測到高電平(對應(yīng)傳感器釋放階段),則判定應(yīng)答成功,通信可進入數(shù)據(jù)傳輸階段;若未檢測到完整的應(yīng)答電平變化,或僅檢測到單一電平,則說明傳感器未就緒、總線短路或啟動信號時序錯誤,需重新發(fā)起通信。
數(shù)據(jù)傳輸時序是DHT11時序中最核心的部分,40位溫濕度數(shù)據(jù)(濕度整數(shù)、濕度小數(shù)、溫度整數(shù)、溫度小數(shù)、校驗和)的傳輸,完全依賴于脈沖寬度編碼的時序規(guī)則。每個數(shù)據(jù)位的傳輸均以“低電平起始+高電平編碼”的形式實現(xiàn),主機通過測量高電平的持續(xù)時長,來區(qū)分邏輯“0”和邏輯“1”。具體來說,傳輸邏輯“0”時,傳感器先將DATA引腳拉低約26μs~28μs,隨后釋放總線,讓其恢復(fù)高電平并保持約26μs~28μs,整個位周期約54μs;傳輸邏輯“1”時,低電平起始階段的時長與邏輯“0”一致(26μs~28μs),但高電平保持時長延長至116μs~118μs,整個位周期約144μs。這一設(shè)計的關(guān)鍵在于“起始低電平時長固定”,主機可通過檢測低電平的結(jié)束沿作為計時起點,再通過定時器精確測量后續(xù)高電平的持續(xù)時間——若時長落在20μs~30μs區(qū)間,則判定為邏輯“0”;若落在110μs~120μs區(qū)間,則判定為邏輯“1”。





