從硬件方面理解GPIO的開漏輸出和推輓輸出

最近在學STM32,看正點原子視頻中對開漏輸出和推輓輸出的講解視頻時,發現原子哥對電路的講解有一些錯誤,主要說關於MOS管的開關問題,查了一晚上資料,終於想明白了,特意發個文章分享一下。
這是STM32F4XX中文參考手冊中GPIO口的結構圖。輸出部分的電路是在下方。

先簡單介紹一下MOS管吧。MOS管其實是和三極管差不多的,有三個極:柵極(G),源極(S)和漏極(D)。三極管通過放大基極的電流變化來控制集電極的電流輸出,而MOS管通過柵極和漏極的電壓控制電流。MOS管是通過場效應實現這種控制的,實際沒有電流通過,因此不會被燒壞,而且輸入阻抗也比較大。

MOS管可以分爲PMOS管和NMOS管。簡單來說,當用作開關電路時,對於PMOS管,當Ug < Us並且電壓差達到閾值的時候,PMOS管就是導通的,對於NMOS管,當Ug > Us並且電壓差達到閾值的時候,NMOS管就是導通的

該電路圖中,PMOS管源極接Vdd,應此當珊極給低電平時,Ug < Us,PMOS管導通,漏極與源極與Vdd接通,輸出高電平,當柵極給高電平時,PMOS管關閉。NMOS管源極接地,應此當柵極給高電平時,Ug > Us,NMOS管導通,漏極與源極與Vss接通,輸出低電平;當柵極給低電平時,NMOS管關閉。

需要注意的是這個輸出控制器,內部電路也沒有給,如果輸入是1,輸出不一定是1的,原子哥就是這裏講錯了,導致後面的PMOS管,NMOS管的導通條件都對不上。

開漏輸出時,PMOS管是開路的狀態,也就是說只用到NMOS管。如果寄存器給到輸入0,通過輸出控制器,輸出到NMOS管的柵極爲1,此時NMOS管導通,IO口輸出爲0;如果寄存器給到輸入1,通過輸出控制器,輸出到NMOS管的柵極爲0,此時NMOS管關閉,IO口的輸出取決於接上拉電阻還是下拉電阻。開漏輸出以MOS管的漏極爲輸出,所以叫開漏輸出。

推輓輸出時,PMOS管和NMOS管都會用到。如果寄存器給到輸入0,通過輸出控制器,輸出到PMOS管的柵極爲1,輸出到NMOS管的柵極爲1,此時PMOS管關閉,NMOS管導通,IO口輸出爲0;如果寄存器給到輸入1,通過輸出控制器,輸出到PMOS管的柵極爲0,輸出到NMOS管爲0,此時PMOS管導通,NMOS管關閉,IO口輸出爲1。

關於推輓輸出,個人是這樣理解的(看看就行,大概率是不對的…)可以看到,兩個MOS管只有一個是導通的,另一個則是高阻抗的關閉狀態。當PMOS管導通,NMOS管關閉的時候是這樣的:相當於"推"
在這裏插入圖片描述
當NMOS管導通,PMOS管關閉的時候,則是這樣的,相當於“挽”:
在這裏插入圖片描述
這裏插一個眼,是我看到一個博主通過三極管來解釋推輓和開漏的,至於MOS管嘛…我這個小白也不是很懂。

https://blog.csdn.net/lostand/article/details/70052918

可以看到推輓輸出的時候,寄存器設爲0就輸出0,寄存器設爲1就輸出1,很適合做數字的輸入輸出,一般我用推輓輸出用的也比較多開漏輸出寄存器設爲0是輸出0,寄存器設爲1的話,輸出不一定是1,還要取決於外面接了上拉電阻還是下拉電阻,相當於是一般只能輸出低電平吧。開漏輸出沒怎麼用過,不過據說驅動能力比較強,可能是因爲高電平時通過外部的上拉電阻實現的,拉電流可能相對內部驅動的電流會大一點?

總結一下就是這個表:

輸出類型 寄存器輸入 PMOS管柵極輸入 NMOS管柵極輸入 PMOS管狀態 NMOS管狀態 最終輸出
開漏輸出 0 開路 1 未使用 導通 0
開漏輸出 1 開路 0 未使用 高阻抗 1
推輓輸出 0 1 1 高阻抗 導通 0
推輓輸出 1 0 0 導通 高阻抗 1

翹了fb課來寫的這篇博文,碼字不易,轉載請註明出處!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章