http://blog.sina.com.cn/s/blog_14e0394720102vewa.html
1,開漏輸出(Open-Drain)
首先講一下集電極開路輸出(Open-Collector),單片機I/O常用的輸出方式的開漏輸出(Open-Drain),漏極開路電路概念中提到的“漏”是指 MOSFET的漏極。同理,集電極開路電路中的“集”就是指三極管的集電極。在數字電路中,分別簡稱OD門和OC門。
典型的集電極開路電路如圖所示。電路中右側的三極管集電極什么都不接,所以叫做集電極開路,左側的三極管用於反相作用,即左側輸入“0”時左側三極管截止,VCC通過電阻加到右側三極管基極,右側三極管導通,右側輸出端連接到地,輸出“0”。
從圖中電路可以看出集電極開路是無法輸出高電平的,如果要想輸出高電平可以在輸出端加上上拉電阻。因此集電極開路輸出可以用做電平轉換,通過上拉電阻上拉至不同的電壓,來實現不同的電平轉換。
用做驅動器,由於OC門電路的輸出管的集電極懸空,使用時需外接一個上拉電阻Rp到電源VCC。OC門使用上拉電阻以輸出高電平,此外為了加大輸出引腳的驅動能力,上拉電阻阻值的選擇原則:從降低功耗及芯片的灌電流能力考慮應當足夠大;從確保足夠的驅動電流考慮應當足夠小。
將OC門輸出連在一起時,再通過一個電阻接外電源,可以實現“線與”邏輯關系。只要電阻的阻值和外電源電壓的數值選擇得當,就能做到既保證輸出的高、低電平符合要求,而且輸出三極管的負載電流又不至於過大。
集電極開路輸出除了可以實現多門的線與邏輯關系外,通過使用大功率的三極管還可用於直接驅動較大電流的負載,如繼電器、脈沖變壓器、指示燈等。
由於現在MOS管用普遍,而且性能要比晶體管要好,所以很多開漏輸出電路,和后面要講的推挽輸出電路都用MOS管實現。
再來就是開漏輸出電路,和集電極開路一樣,顧名思義,開漏電路就是指從MOSFET的漏極輸出的電路。典型的用法是在漏極外部的電路添加上拉電阻到電源如圖所示。完整的開漏電路應由開漏器件和開漏上拉電阻組成。這里的上拉電阻R的阻值決定了邏輯電平轉換的上升/下降沿的速度。阻值越大,速度越低,功耗越小。因此在選擇上拉電阻時要兼顧功耗和速度。標准的開漏腳一般只有輸出的能力。添加其它的判斷電路,才能具備雙向輸入、輸出的能力。
很多單片機等器件的I/O就是漏極開路形式,或者可以配置成漏極開路輸出形式,如51單片機的P0口就為漏極開路輸出。在實際應用中可以將多個開漏輸出的引腳連接到一條線上,這樣就形成“線與邏輯”關系。注意這個公共點必須接一個上拉電阻。當這些引腳的任一路變為邏輯0后,開漏線上的邏輯就為0了。在I2C等接口總線中就用此法判斷總線占用狀態。
同集電極開路一樣,利用外部電路的驅動能力(驅動能力相對集電極開路要強一點),減少IC內部的驅動。當IC內部MOSFET導通時,驅動電流是從外部的VCC流經上拉電阻,再經MOSFET到GND。IC內部僅需很下的柵極驅動電流,因此漏極開路也常用於驅動電路中。
2,推挽輸出(Push-Pull)
在功率放大器電路中經常采用推挽放大器電路,這種電路中用兩只三極管構成一級放大器電路,如圖所示。兩只三極管分別放大輸入信號的正半周和負半周,即用一只三極管放大信號的正半周,用另一只三極管放大信號的負半周,兩只三極管輸出的半周信號在放大器負載上合並后得到一個完整周期的輸出信號。
推挽放大器電路中,一只三極管工作在導通、放大狀態時,另一只三極管處於截止狀態,當輸入信號變化到另一個半周后,原先導通、放大的三極管進入截止,而原先截止的三極管進入導通、放大狀態,兩只三極管在不斷地交替導通放大和截止變化,所以稱為推挽放大器。輸出既可以向負載灌電流,也可以從負載抽取電流.
4,特點總結
開漏輸出:實現電平轉換,實現”線與“邏輯(I2C等接口總線應用中),利用外電路提高驅動能力,利用上拉電阻提供高電平,顯然,沒有上拉電阻只能輸出低電平。
推挽輸出:可以吸電流也可以灌電流,相對於開漏,輸出電平取決於IC電源。然而,一條總線上只能有一個推挽輸出期間。
如果你想要電平轉換速度快的話,那么就選push-pull,但是缺點是功耗相對會大些。
如果你想要功耗低,且同時具有“線與”的功能,那么就用open-drain的模式。
STM32F103端口位的基本結構如圖所示,從圖中可以看到典型的推挽輸出電路與上下拉電阻,當N-MOS被激活時就變成了典型的開漏輸出模式,當N-MOS和P-MOS同時被激活時就變成了典型的推挽輸出模式,通過上拉電阻和下拉電阻的開關控制可以使端口處於上拉或者下拉輸入模式。
根據開漏輸出和推挽輸出的特點,可以很容易判斷在以下應用中應當工作在推挽輸出模式(或者復用推挽輸出):
驅動應用中,驅動LED、蜂鳴器等
USART_TX、USART_CK、USART_RTS、MOSI、SPI主模式SCK、CAN_TX等需要較強驅動能力的場合
而在I2C等接口總線應用中,由於需要“線與”判斷總線占用狀態,以及需要使用電平轉換的場合需要將I/O配置成開漏輸出的模式。