簡介
1-Wire網(wǎng)絡(luò)的可靠性在很大程度上取決于主機(jī)與1-Wire從機(jī)器件之間所采用的通信驅(qū)動電路的性能。本文介紹了一種1-Wire主機(jī)端接口,采用精細(xì)的阻抗匹配和"智能" (軟件控制)強(qiáng)上拉等方法,保證網(wǎng)絡(luò)在輕載到重載范圍內(nèi)均能可靠工作,且通信距離可達(dá)500m。關(guān)于創(chuàng)建可靠的1-Wire網(wǎng)絡(luò)指南,請參見應(yīng)用筆記148。電路描述
網(wǎng)絡(luò)驅(qū)動器(圖1)由下拉部分(Q1,R1,C1,R5)和上拉部分(Q2,R2,C2,R6)組成。晶體管Q3與周圍的元件(C4、R7)組成強(qiáng)上拉電路,可為諸如EEPROM、溫度傳感器等器件提供額外電源。 本文沒有討論"強(qiáng)上拉"的功能。任何時(shí)候,三個(gè)晶體管中最多只有一個(gè)處于導(dǎo)通狀態(tài);當(dāng)1-Wire不進(jìn)行通信("空閑"狀態(tài))時(shí),這三個(gè)晶體管都不導(dǎo)通。圖1. 驅(qū)動器原理圖
R4、R1和R3的串聯(lián)電路提供標(biāo)準(zhǔn)的1-Wire到VCC上拉。在這種電路情況下,總的上拉電阻近似為1kΩ。當(dāng)1-Wire線空閑時(shí),則線上呈現(xiàn)此阻抗。由于R4與Q1的漏極相連,因此Q1導(dǎo)通時(shí)電流會流過該電阻,但不會影響1-Wire總線的低電平電壓。1-Wire總線電壓升至5V的速度是由R4+R1+R3的電阻值和1-Wire網(wǎng)絡(luò)的負(fù)載決定的。不建議減小R4阻值,否則會導(dǎo)致1-Wire總線的低電平電壓升高,而這不是我們所期望的。通過把肖特基二極管D1、D2分別導(dǎo)通至GND和VCC,抑制ESD沖擊以及來自鄰近電纜的耦合信號。電阻R3限制ESD電流,保護(hù)D1和D2。
該驅(qū)動器一個(gè)最明顯的特性就是可以在主機(jī)端實(shí)現(xiàn)與1-Wire電纜之間嚴(yán)格的終端匹配。在1-Wire網(wǎng)絡(luò)中推薦使用5類非屏蔽雙絞數(shù)據(jù)電纜,其特性阻抗約為100Ω。當(dāng)Q1或Q2導(dǎo)通時(shí),總線終端匹配分別通過R3與R1或R2的串聯(lián)來實(shí)現(xiàn)。C3與R1和R3串聯(lián)為在線應(yīng)答脈沖提供一個(gè)交流耦合終端匹配。為了驅(qū)動器適應(yīng)不同的特征阻抗電纜,需要相應(yīng)地調(diào)整R1和R2。
驅(qū)動器的三個(gè)部分在相應(yīng)的晶體管導(dǎo)通時(shí),其壓擺率受到控制。當(dāng)驅(qū)動器將1-Wire總線變?yōu)榈碗娖?例如某個(gè)時(shí)序或復(fù)位脈沖的起始點(diǎn)), R5和C1控制下降斜率;R6和C2限制動態(tài)上拉信號變?yōu)橛行顟B(tài)時(shí)的壓擺率;而R7和C4限制強(qiáng)上拉的壓擺率。這三個(gè)部分的時(shí)間常數(shù)均為0.5μs,壓擺率近似為4V/μs。關(guān)于詳細(xì)資料和示波器波形,請參見性能舉例部分。
電路工作原理
若忽略強(qiáng)上拉電路(Q3, R7, C4),驅(qū)動器要求連接三個(gè)信號至監(jiān)控微控制器,這些信號分別為DRIVE、DPU和SENSE。DRIVE為高電平有效信號,它通過使 Q1導(dǎo)通,來啟動 1-Wire通信。DPU為低電平有效信號,用來激活動態(tài)上拉晶體管Q2。SENSE是1-Wire電路與微控制器輸入口之間的直連信號。1-Wire的地線與驅(qū)動器/微控制器GND共地。為了進(jìn)行1-Wire通信,必須發(fā)出恰當(dāng)?shù)腄RIVE信號和DPU信號,并在適當(dāng)?shù)臅r(shí)間內(nèi)通過SENSE輸入口讀取1-Wire總線信號。1-Wire通信有四種波形,它們是復(fù)位/在線應(yīng)答檢測序列,和三種通信時(shí)隙波形。復(fù)位/在線應(yīng)答脈沖檢測序列
1-Wire通信過程都是從一個(gè)復(fù)位脈沖開始,之后跟隨在線應(yīng)答脈沖,波形如圖2所示。當(dāng)需要發(fā)出復(fù)位脈沖時(shí), DRIVE信號要變?yōu)楦唠娖讲⒈3謴腁到B的時(shí)間(參見圖2)。從A點(diǎn)開始,1-Wire的電壓緩降為0V。在B點(diǎn),DRIVE信號釋放,除非1-Wire器件將總線拉低以產(chǎn)生中斷信號(參見DS1994/DS2404數(shù)據(jù)資料,中斷類型2),否則1-Wire電壓開始上升。為了能正確處理這種中斷,從C點(diǎn)開始就要對1-Wire進(jìn)行重復(fù)采樣,直到D點(diǎn)1-Wire狀態(tài)變?yōu)檫壿嫺唠娖?。在D點(diǎn)之后很短時(shí)間內(nèi),動態(tài)上拉DPU信號變?yōu)橛行顟B(tài)(E點(diǎn)),1-Wire總線將會以更快的速度被拉至5V,動態(tài)上拉在F點(diǎn)結(jié)束。假定總線上存在一個(gè)1-Wire器件,它就會發(fā)出在線應(yīng)答脈沖,從G點(diǎn)開始,到I點(diǎn)結(jié)束。在G與I之間的某個(gè)地方(H點(diǎn)),對1-Wire狀態(tài)進(jìn)行采樣,判定是否存在1-Wire 器件。在線應(yīng)答脈沖結(jié)束后,1-Wire電壓開始升至5V。在J點(diǎn)還要對1-Wire邏輯狀態(tài)再次采樣,判斷是否發(fā)生了1A類中斷信號(參見DS1994/DS2404數(shù)據(jù)資料)。無中斷信號時(shí),邏輯狀態(tài)為高電平,從K點(diǎn)到L點(diǎn)動態(tài)上拉信號再次變?yōu)橛行顟B(tài),以確保1-Wire總線電壓上升到5V,如圖2所示。當(dāng)有中斷信號產(chǎn)生時(shí),J點(diǎn)所檢測到的狀態(tài)將為邏輯0,同時(shí)開始下一輪重復(fù)采樣過程,就像在復(fù)位脈沖結(jié)束那樣(如返回C點(diǎn)繼續(xù)采樣)。如果在總線上還存在其它的1-Wire器件,除發(fā)出中斷的器件外,它們將把此中斷脈沖看作是復(fù)位脈沖,隨后發(fā)出在線應(yīng)答脈沖作為響應(yīng)。(如第二次到達(dá)J點(diǎn)時(shí),1-Wire的邏輯狀態(tài)為高,如圖2所示)。在任何情況下,復(fù)位/在線應(yīng)答脈沖檢測在M點(diǎn)結(jié)束,同時(shí)也是下一個(gè)時(shí)隙的起始。圖2. 復(fù)位與在線應(yīng)答脈沖時(shí)序
表1. 復(fù)位/在線應(yīng)答脈沖檢測序列的時(shí)間建議值
A to B | B to C | D to E | E to F | E to H | H to J | J to K | K to L | L to M |
480μs | 0 to 2μs | 0 to 2μs | 8μs | 72μs | 240μs | 0 to 2μs | 60μs | > 2μs |
采樣點(diǎn)H必須選在應(yīng)答脈沖窗口之內(nèi),在線應(yīng)答脈沖窗口由最快和最慢的1-Wire器件在線應(yīng)答脈沖的時(shí)間決定,數(shù)據(jù)資料中將此窗口時(shí)間長度規(guī)定為tMSP。復(fù)位脈沖結(jié)束后,當(dāng)1-Wire器件檢測到邏輯高電平時(shí),標(biāo)志著tMSP開始,圖2中該參考點(diǎn)近似為E點(diǎn)。A到C之間的時(shí)間長度等于tF (下降時(shí)間)與tRSTL (低電平復(fù)位時(shí)間)之和。當(dāng)發(fā)生2類中斷時(shí),有效的復(fù)位時(shí)間長度就是從A到B的持續(xù)時(shí)間與中斷脈沖(參見DS1994/DS2404數(shù)據(jù)資料)持續(xù)時(shí)間的總和。從E到M的時(shí)間稱為高電平復(fù)位時(shí)間tRSTH。數(shù)據(jù)資料規(guī)定了tRSTL,并說明了如何確定最小的tRSTH值,但對于tRSTH沒有最大值要求。
通信時(shí)隙
寫0時(shí)隙
寫0時(shí)隙用于在1-Wire總線中傳送比特0,對應(yīng)的1-Wire波形如圖3所示。需要進(jìn)行寫0時(shí)隙操作時(shí),DRIVE信號首先要變?yōu)橛行щ娖綘顟B(tài)并持續(xù)一段時(shí)間,圖中對應(yīng)的為A點(diǎn)和B0點(diǎn)。從A點(diǎn)開始,1-Wire總線的電壓緩降至0V。在B0點(diǎn)當(dāng)DRIVE信號釋放時(shí),1-Wire總線電壓開始上升。B0點(diǎn)之后很短時(shí)間內(nèi),動態(tài)上拉DPU變?yōu)橛行?C0點(diǎn)),1-Wire總線將會以更快的速度被拉至5V。動態(tài)上拉信號在D0點(diǎn)結(jié)束,下一個(gè)時(shí)隙或復(fù)位/在線脈沖檢測序列將緊隨在E點(diǎn)之后。圖3. 寫0時(shí)隙
寫0時(shí)隙不需要對數(shù)據(jù)線進(jìn)行采樣,因此圖3未標(biāo)明任何采樣點(diǎn),但是也允許對1-Wire總線按照讀時(shí)隙(圖4或圖5)中相同的時(shí)間點(diǎn)進(jìn)行采樣,不過獲得的采樣邏輯狀態(tài)將始終為0,表明電路正在向1-Wire總線進(jìn)行寫0操作。從A到C0的持續(xù)時(shí)間長度等于tF (下降時(shí)間)與tW0L (寫0低電平時(shí)間)之和,從C0至E0的時(shí)間稱為恢復(fù)時(shí)間tREC。數(shù)據(jù)資料規(guī)定了tW0L和tREC的最小值。A至E0的時(shí)間稱之為時(shí)隙周期tSLOT。
表2. 推薦的寫0時(shí)隙時(shí)間值
A to B0 | B0 to C0 | C0 to D0 | A to E0 |
60μs | 2μs | 16μs | 80μs |
寫1/讀1時(shí)隙
寫1時(shí)隙用于從1-Wire總線上傳送比特1,對應(yīng)的1-Wire波形如圖4所示。實(shí)際上,從1-Wire總線讀取比特1的操作與寫1操作的工作波形是相同的,因此,寫1操作和讀1操作就作為一種情況來討論。若要產(chǎn)生寫1或讀1時(shí)隙,首先在A點(diǎn)將DRIVE信號變?yōu)橛行Р⒊掷m(xù)到BR。從A點(diǎn)開始,1-Wire總線電壓緩降至0V。在BR點(diǎn),DRIVE信號釋放,無論是在進(jìn)行讀1操作還是進(jìn)行寫1操作,1-Wire總線電壓都開始上升。在CR點(diǎn)對1-Wire總線進(jìn)行取樣。由于讀到的比特為1,動態(tài)上拉DPU將立即變?yōu)橛行顟B(tài),并從D1持續(xù)到E1。這將使1-Wire總線電壓以更快的速度升至5V。下一時(shí)隙或復(fù)位/在線應(yīng)答脈沖檢測序列可以從F1點(diǎn)開始。圖4. 寫1/讀時(shí)隙(讀1)
采樣點(diǎn)CR必須落在主機(jī)采樣窗口范圍內(nèi),由最快的1-Wire器件響應(yīng)時(shí)間決定。在數(shù)據(jù)資料中該時(shí)間窗口稱為tMSR。時(shí)隙開始后,1-Wire器件檢測到邏輯低電平時(shí)作為tMSR的開始點(diǎn),圖4中這一參考點(diǎn)近似為A點(diǎn)加上脈沖的下降時(shí)間tF。從A到BR的持續(xù)時(shí)間等于tF (下降時(shí)間)和tRL (讀低電平時(shí)間)之和。數(shù)據(jù)資料中規(guī)定了tRL (等于tW1L)和tMSR,從A到F1的時(shí)間也就是時(shí)隙周期時(shí)間tSLOT。
表3. 推薦的寫1/讀時(shí)隙(讀1)時(shí)間值
A to BR | A to CR | CR to D1 | D1 to E1 | A to F1 |
9μs | 18μs | 0 to 2μs | 60μs | 80μs |
讀時(shí)隙(讀0)
讀0時(shí)隙用于從1-Wire總線上讀取比特0,對應(yīng)的1-Wire波形如圖5所示。需要進(jìn)行讀時(shí)隙操作時(shí),DRIVE信號首先要變?yōu)橛行щ娖綘顟B(tài)并持續(xù)一段時(shí)間,圖中對應(yīng)為A點(diǎn)和BR點(diǎn)。從A點(diǎn)開始,1-Wire總線的電壓緩降至0V。為了發(fā)送比特0, 1-Wire器件需要把1-Wire拉為低電平,從A點(diǎn),到BR點(diǎn)結(jié)束。這樣的話,1-Wire總線在開始時(shí)先由1-Wire主機(jī)將電壓拉低,在BR點(diǎn)時(shí)主機(jī)下拉結(jié)束,隨后由總線上存在的一個(gè)或多個(gè)1-Wire器件繼續(xù)把1-Wire總線電壓維持在邏輯低電平狀態(tài)。在CR點(diǎn)對1-Wire總線進(jìn)行采樣。由于讀到的比特為0,1-Wire總線將被重復(fù)采樣。在D0點(diǎn)1-Wire器件停止下拉, 1-Wire總線電壓開始升高。隨后在E0再次進(jìn)行取樣,判斷總線是否已經(jīng)處于邏輯高電平狀態(tài),同時(shí)動態(tài)上拉DPU變?yōu)橛行顟B(tài),1-Wire總線電壓開始以更快的速度升至5V。動態(tài)上拉DPU的有效狀態(tài)從F0持續(xù)到G0。下一個(gè)時(shí)隙或復(fù)位/在線應(yīng)答脈沖檢測時(shí)序可以從H0開始。圖5. 讀時(shí)隙(讀0)
CR采樣點(diǎn)的選取與寫1/讀時(shí)隙時(shí)相同,隨后的重復(fù)采樣間隔應(yīng)該在微控制器和軟件允許范圍內(nèi)盡可能的短。從A到H0的時(shí)間也就是時(shí)隙周期時(shí)間tSLOT。
表4. 推薦的讀時(shí)隙(讀0)時(shí)間值
A to BR | A to CR | E0 to F0 | CR to G0 | A to H0 |
9μs | 18μs | 0 to 2μs | 60μs | 82μs |
應(yīng)用注意事項(xiàng)
控制這個(gè)高級的1-Wire網(wǎng)絡(luò)驅(qū)動器的信號結(jié)構(gòu)相對來說比較復(fù)雜。然而,算法還是比較直觀,因此這個(gè)驅(qū)動器通常用軟件來實(shí)現(xiàn),采用速度足夠快的微控制器,以產(chǎn)生實(shí)時(shí)信號。下面的流程圖將有助于用戶采用自己熟悉的、任何一款能夠滿足要求的微控制器來實(shí)現(xiàn)該驅(qū)動器。為能產(chǎn)生合適的定時(shí)信號,必須要考慮在選定晶振頻率下每個(gè)命令的執(zhí)行時(shí)間。軟件流程圖
注1: 若僅將定時(shí)器作為計(jì)數(shù)器而不是實(shí)時(shí)定時(shí)器,則必須采用遞減計(jì)數(shù)器。定時(shí)器應(yīng)該在5000μs后終止。
注2:Presence和Short是用來向高級程序報(bào)告復(fù)位/在線應(yīng)答脈沖檢測時(shí)隙結(jié)果的邏輯變量。由于在這里只有一款可產(chǎn)生中斷的1-Wire芯片(DS1994/DS2404),并且使用中斷會大大降低1-Wire網(wǎng)絡(luò)的有效速度,因此中斷不作為變量來進(jìn)行報(bào)告。
在該流程圖,采用一個(gè)邏輯輸入變量來控制是產(chǎn)生寫0時(shí)隙還是產(chǎn)生讀0時(shí)隙。寫1時(shí)隙與讀0時(shí)隙是相同的。位變量BitValue用來向上級程序報(bào)告時(shí)隙執(zhí)行的結(jié)果 。
注1: 若僅將定時(shí)器作為計(jì)數(shù)器而不是實(shí)時(shí)定時(shí)器,則必須采用遞減計(jì)數(shù)器。定時(shí)器應(yīng)該在45μs后終止。
注2:按照此流程圖,在定時(shí)器停止之前,DPU信號會被重復(fù)置為有效狀態(tài)。若信號已處于有效狀態(tài),則激活操作不會對它產(chǎn)生影響,因此允許對已處于有效狀態(tài)的DPU信號進(jìn)行激活。如果需要,也可以進(jìn)行檢測DPU信號是否有效,如果DPU信號有效,則在執(zhí)行程序時(shí)無需再次激活。
性能舉例
本文討論的驅(qū)動器產(chǎn)生的1-Wire信號的示波器波形如下頁所示。當(dāng)對信號進(jìn)行檢驗(yàn)時(shí),尤其是在電纜的最遠(yuǎn)端,必須使用差分探頭,探頭的參考地懸空,否則探頭的地將旁路1-Wire的參考地,從而改變系統(tǒng)的拓?fù)浣Y(jié)構(gòu)。如果不能提供差分探頭,則必須通過變壓器或使用電池供電的示波器,將示波器地同總線地隔離,兩種方法可任選其一,以斷開示波器電源電纜的安全接地。示波器波形
復(fù)位/在線應(yīng)答脈沖檢測時(shí)隙(如圖2)
寫0時(shí)隙(如圖3)
寫1/讀1時(shí)隙(如圖4)
讀0時(shí)隙(如圖5)
在300m電纜末端的下降沿信號
在300m電纜末端附近所看到的相同的下降沿信號
評論
查看更多