1. 程式人生 > >輸入IO、輸出IO

輸入IO、輸出IO

輸入IO
這裡所說的輸入IO,指的是隻作為輸入,不具有輸出功能。此時對於input引腳的要求就是高阻(高阻與三態是同一個概念)。基本輸入電路的型別大致可以分為3類:基本輸入IO電路、施密特觸發輸入電路以及弱上拉輸入電路。

先從最基本的基本輸入IO電路說起,其電路如圖 1所示。

圖 1

其中的緩衝器U1是具有控制輸入端,且具有高阻抗特性的三態緩衝器。通俗地說就是這個緩衝器對外來說是高阻的,相當於在控制輸入端不使能的情況下,物理引腳與內部匯流排之間是完全隔離的,完全不會影響內部電路。而控制輸入端的作用就是可以發出讀Pin狀態的操作指令。其過程如圖 2所示。

圖 2

這種基本電路的一個缺點是在讀取外部訊號的跳變沿時會出現抖動,如下圖所示。

圖 3

於是施密特觸發輸入電路就是解決了上述這種抖動的問題,其經過施密特觸發器後的訊號如圖 4所示。

圖 4

對於輸入電路還存在另外一個問題,就是當輸入引腳懸空的時候,輸入端檢測到的電平是高還是低?當輸入訊號沒有被驅動,即懸空(Floating)時,輸入引腳上任何的噪聲都會改變輸入端檢測到的電平,如圖 5所示。

圖 5

為了解決這個問題,可以在輸入引腳處加一個弱上拉電阻,如圖 6所示。

圖 6

這樣,當輸入引腳懸空時,會被RP上拉到高電平,在內部總線上就有確定的狀態了。

但是這種結構是有一定問題的。首先很明顯的一點是,當輸入引腳懸空時讀到的是1,當輸入引腳被高電平驅動時讀到的也是1,只有當輸入引腳被低電平驅動時讀到的才是0。也就是對於讀1採取的方式是"讀取非零"的方式。

另一個問題是該電路對外呈現的不是高阻,某種意義上說也在向外輸出,當外部驅動電路不同時可能出現錯誤的檢測結果。例如外部驅動電路是如圖 7所示的結構,該電路結構中通過K打到不同端可以輸出高電平或者低電平。

圖 7

如果將如圖 7所示的電路輸出低電平,連線到帶有弱上拉電阻的輸入引腳,其結構如下所示。

圖 8

由歐姆定律知,測試點處的電平是,於是CPU測得的輸入訊號為高,而外部驅動電路希望輸出的電平為低。這種錯誤的原因就在於這種結構的輸入電路並不是真正的高阻,或者說這個輸入IO其實也在輸出,而且影響了外部輸入電路。

這種情況的發生也說明了:訊號前後兩級傳遞,為什麼需要輸出阻抗小,輸入阻抗大的原因。在這個例子中,外圍驅動電路的輸出阻抗很大,達到了100Kohm;而輸入端的阻抗又不夠大,只有10Kohm,於是就出現了問題。如果輸入端的輸入阻抗真正做到高阻(無窮大),如下所示,就不會出現問題。

圖 9

上面提到的這個帶弱上拉的輸入電路,也就是在後續章節會提到的準雙向埠的情況。

輸出IO
IO輸出電路最主要的兩種模式分別是推輓輸出(Push-Pull Output)和開漏輸出(Open Drain Output)。

推輓輸出(Push-Pull Output)
推輓輸出的結構是由兩個三極體或者MOS管受到互補訊號的控制,兩個管子始終保持一個處於截止,另一個處於導通的狀態。如圖 10所示。

圖 10

推輓輸出的最大特點是可以真正能真正的輸出高電平和低電平,在兩種電平下都具有驅動能力。

補充說明:所謂的驅動能力,就是指輸出電流的能力。對於驅動大負載(即負載內阻越小,負載越大)時,例如IO輸出為5V,驅動的負載內阻為10ohm,於是根據歐姆定律可以正常情況下負載上的電流為0.5A(推算出功率為2.5W)。顯然一般的IO不可能有這麼大的驅動能力,也就是沒有辦法輸出這麼大的電流。於是造成的結果就是輸出電壓會被拉下來,達不到標稱的5V。

當然如果只是數字訊號的傳遞,下一級的輸入阻抗理論上最好是高阻,也就是隻需要傳電壓,基本沒有電流,也就沒有功率,於是就不需要很大的驅動能力。

對於推輓輸出,輸出高、低電平時電流的流向如圖 11所示。所以相比於後面介紹的開漏輸出,輸出高電平時的驅動能力強很多。

圖 11

但推輓輸出的一個缺點是,如果當兩個推輓輸出結構相連在一起,一個輸出高電平,即上面的MOS導通,下面的MOS閉合時;同時另一個輸出低電平,即上面的MOS閉合,下面的MOS導通時。電流會從第一個引腳的VCC通過上端MOS再經過第二個引腳的下端MOS直接流向GND。整個通路上電阻很小,會發生短路,進而可能造成埠的損害。這也是為什麼推輓輸出不能實現" 線與"的原因。

開漏輸出(Open Drain Output)
常說的與推輓輸出相對的就是開漏輸出,對於開漏輸出和推輓輸出的區別最普遍的說法就是開漏輸出無法真正輸出高電平,即高電平時沒有驅動能力,需要藉助外部上拉電阻完成對外驅動。下面就從內部結構和原理上說明為什麼開漏輸出輸出高電平時沒有驅動能力,以及進一步比較與推輓輸出的區別。

首先需要介紹一些開漏輸出和開集輸出。這兩種輸出的原理和特性基本是類似的,區別在於一個是使用MOS管,其中的"漏"指的就是MOS管的漏極;另一個使用三極體,其中的"集"指的就是MOS三極體的集電極。這兩者其實都是和推輓輸出相對應的輸出模式,由於使用MOS管的情況較多,很多時候就用"開漏輸出"這個詞代替了開漏輸出和開集輸出。

介紹就先從開集輸出開始,其原理電路結如圖 12所示。

圖 12

圖 12左邊的電路是開集(OC)輸出最基本的電路,當輸入為高電平時,NPN三極體導通,Output被拉到GND,輸出為低電平;當輸入為低電平時,NPN三極體閉合,Output相當於開路(輸出高阻)。高電平時輸出高阻(高阻、三態以及floating說的都是一個意思),此時對外沒有任何的驅動能力。這就是開漏和開集輸出最大的特點,如何利用該特點完成各種功能稍後介紹。這個電路雖然完成了開集輸出的功能,但是會出現input為高,輸出為低;input為低,輸出為高的情況。

圖 12右邊的電路中多使用了一個三極體完成了"反相"。當輸入為高電平時,第一個三極體導通,此時第二個三極體的輸入端會被拉到GND,於是第二個三極體閉合,輸出高阻;當輸入為低電平時,第一個三極體閉合,此時第二個三極體的輸入端會被上拉電阻拉到高電平,於是第二個三極體導通,輸出被拉到GND。這樣,這個電路的輸入與輸出是同相的了。

接下來介紹開漏輸出的電路,如圖 13所示。原理與開集輸出基本相同,只是將三極體換成了MOS而已。

圖 13

接著說說開漏、開集輸出的特點以及應用,由於兩者相似,後文中若無特殊說明,則用開漏表示開漏和開集輸出電路。

開漏輸出最主要的特性就是高電平沒有驅動能力,需要藉助外部上拉電阻才能真正輸出高電平,其電路如圖 14所示。


圖 14

    當MOS管斷開時,開漏輸出電路輸出高電平,且連線著負載時,電流流向是從外部電源,流經上來電阻RPU,流進負載,最後進入GND。

開漏輸出的這一特性一個明顯的優勢就是可以很方便的調節輸出的電平,因為輸出電平完全由上拉電阻連線的電源電平決定。所以在需要進行電平轉換的地方,非常適合使用開漏輸出。
開漏輸出的這一特性另一個好處在於可以實現"線與"功能,所謂的"線與"指的是多個訊號線直接連線在一起,只有當所有訊號全部為高電平時,合在一起的匯流排為高電平;只要有任意一個或者多個訊號為低電平,則匯流排為低電平。而推輓輸出就不行,如果高電平和低電平連在一起,會出現電流倒灌,損壞器件。
推輓與開漏輸出的區別


圖 15