Open-Drain&Push-Pull

在配置GPIO(General Purpose Input Output)管腳的時候,常會見到兩種模式:開漏(open-drain,漏極開路)和推輓(push-pull)。對此兩種模式,有何區別和聯繫,下面整理了一些資料,來詳細解釋一下:spa

1、Push-Pull推輓輸出.net

一、原理blog

輸出的器件是指輸出腳內部集成有一對互補的MOSFET:ci

  當Q1導通、Q2截止時輸出高電平;get

  而當Q1截止導通、Q2導通時輸出低電平。it

push-pull

Push-Pull輸出,實際上內部是用了兩個晶體管(transistor):原理

  此處分別稱爲Top-Transistor和Bottom-Transistor。配置

經過開關對應的晶體管,輸出對應的電平:硬件

  Top-Transistor打開,Bottom-Transistor關閉,輸出爲高電平;im

  Bottom-Transistor打開,Top-Transistor關閉,輸出低電平。

Push-pull即可以漏電流(sink current),又能夠集電流(source current)。

其也許有,也許沒有另一個狀態:高阻抗(high impedance)狀態。

除非Push-pull須要支持額外的高阻抗狀態,不然不須要額外的上拉電阻。

二、優勢

(1)能夠吸電流,也能夠貫電流;

(2)push-pull輸出的優點是速度快,由於線路是以兩種方式驅動的;

(3)和開漏輸出相比,push-pull的高低電平由IC的電源決定,不能簡單的作邏輯操做等。

三、缺點

(1)一條總線上只能有一個push-pull輸出的器件;

(2)push-pull每每須要消耗更多的電流,即功耗相對大。

2、Open-Drain開漏輸出

一、原理

開漏電路是指以MOSFET的漏極爲輸出的電路,

在內部輸出和地之間有個N溝道的MOSFET(Q1),這些器件能夠用於電平轉換的應用。輸出電壓由Vcc決定。

  Vcc能夠大於輸入高電平電壓VCC (call UP-Translate),

  也能夠低於輸入高電平電壓VCC(call Down-Translate),

Open-Drain比push-pull少了個top transistor,只有bottom transistor

就像push-pull中那樣,當bottom transistor關閉,則輸出爲高電平,但此處無法輸出高電平。

想要輸出高電平,必須外部再接一個上拉電阻(pull-up resistor)

Open-drain只可以漏電流(sink current),若是想要集電流(source current),則須要加一個上拉電阻。

二、優勢

(1)對於各類電壓節點間的電平轉換很是有用,能夠用於各類電壓節點的Up-translate和Down-translate轉換

(2)能夠將多個開漏輸出的Pin腳,鏈接到一條線上,造成「與邏輯」關係,即「線與」功能,任意一個變低後,開漏線上的邏輯就爲0了。這也是I2C,SMBus等總線判斷總線佔用狀態的原理

(3)利用外部電路的驅動能力,減小IC內部的驅動。當IC內部MOSFET導通時,驅動電流是從外部的VCC流經pull-up resistor,MOSFET到GND。IC內部僅需很小的柵極驅動電流。

(4)能夠改變上拉電源的電壓,改變傳輸電平,如圖所示,IC的邏輯電平由電源Vcc1決定,而輸出高電平則由Vcc2決定。這樣咱們就能夠用低電平邏輯控制輸出高電平邏輯了。

            OD輸出電平的原理

三、缺點

(1)開漏Pin不鏈接外部的上拉電阻,則只能輸出低電平,若是要輸出高電平,必需加上拉電阻。

(2)帶了上拉電阻的線路,即便以最快的速度去提高電壓,最快也要一個常量的R×C的時間。其中R是電阻,C是寄生電容(parasitic capacitance),包括了pin腳的電容和板子的電容。

(3)當輸出電平爲低時,N溝道三極管是導通的,這樣在Vcc和GND之間有一個持續的電流流過上拉電阻R和三極管Q1,這會影響整個系統的功耗。採用較大值的上拉電阻能夠減少電流。可是大的阻值會使輸出信號的上升時間變慢,即上拉電阻的阻值決定了邏輯電平轉換的沿的速度。阻值越大,速度越低功耗越小,反之亦然。但上拉電阻不能過小,由於當輸出爲低電平的時候,須要sink更低的transistor,這意味着更高的功耗。

3、open-drain和push-pull的總結

對於GPIO的模式的設置,在不考慮是否須要額外的上拉電阻的狀況下,是設置爲open-drain仍是push-pull?

說到底,仍是個權衡的問題:

  若是你想要電平轉換速度快的話,那麼就選push-pull,可是缺點是功耗相對會大些。

  若是你想要功耗低,且同時具備「線與」的功能,那麼就用open-drain的模式。

(同時注意GPIO硬件模塊內部是否有上拉電阻,若是沒有,須要硬件電路上添加額外的上拉電阻)

正所謂,轉換速度與功耗,是魚與熊掌,二則不可兼得焉。

本站公眾號
   歡迎關注本站公眾號,獲取更多信息