不僅僅stm32有這種配置,實際上,這兩種已經廣泛應用在很多場合。
推挽,又叫做推拉,是個很形象的名字,一般是指兩個三極管(MOS管)分別受兩互補信號(或者一個信號,但是用互補對管)的控制,總是在一個三極管導通的時候另一個截止,這樣的電路被稱為推挽式(互補式):

這種電路在放大中通常被用作輸出級,在STM32中,推挽配置就是這種,如圖:

在相應位置1時,P-MOS導,通N-MOS截止,輸出電壓為VDD;在相應位置0時,N-MOS導通,P-MOS截止,輸出電壓為VSS,這就是所謂的推挽。是比較簡單的。
而所謂的開漏(對三極管而言是開集,一樣的原理),則要巧妙一些。所謂開漏電路概念中提到的“漏”就是指MOSFET的漏極。同理,開集電路中的“集”就是指三極管的集電極。開漏電路就是指以MOSFET的漏極為輸出的電路。一般的用法是會在漏極外部的電路添加上拉電阻。完整的開漏電路應該由開漏器件和開漏上拉電阻組成。
對于stm32,開漏就是失能了P-MOS,這樣,當相應位置1時,引腳實際上是處在了浮空的狀態,而通過外接的上拉電阻,將其拉高。
這么做有如下的好處:
1、可以將多個開漏輸出的引腳,連接到一條線上。形成“與邏輯”關系。當多個引腳任意一個變低后,開漏線上的邏輯就為0了。這也是I2C,SMBus等總線判斷總線占用狀態的原理。
2、 可以利用改變上拉電源的電壓,改變傳輸電平。這樣我們就可以用低電平邏輯控制輸出高電平邏輯了。想想當初認為stm32輸出3.3v電壓帶不動IRF540,就直接斷定要重新選型,是錯誤的想法,只要將推挽輸出變為開漏,再加上上拉到5v的電阻,就能解決這個問題。
順便一提,上拉電阻的阻值決定了邏輯電平轉換的沿的速度。阻值越大,速度越低功耗越小。反之亦然。
|