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





