昨天講完了基本的輸入輸出模式,而事實上輸出有分成兩種,開漏輸出與推挽輸出,我們來實際看一下這兩種模式的區別吧。
電晶體很像水關中的閥門,平時處於關閉狀態,施加微小的力,就可以啟動閥門,使大量的水流通過。
例如:控制馬達時,我們不可以用GPIO腳直接供給馬達,因為單晶片是無法通過那麼大的電流,因此我們可以用電晶體的方式,只要提供微小的電流來控制閥門,就可以讓這個水閥通過大電流,使馬達轉動。
電晶體有三隻接腳,分別為B(基極)、C(集極)、E(射極),另外電晶體又分成NPN與PNP。對於N型半導體來說,當B極輸入高電位時,C、E兩極導通,而P型則相反。
對於數位電路來說,電晶體我們當作開關來使用,也就是導通與不導通,暫且不討論使用小電流驅動大電流的這種方式。
實際上的推挽輸出與開漏輸出是使用MOS場效電晶體來設計,下圖是其等效電路。
當輸出高電位時,上方電晶體導通,下方不導通,此腳位對外輸出高電位;當輸入低電位時,上方不導通,下方導通,腳位對外輸出低店位。兩個電晶體輪流導通,一個負責灌電流一個複雜拉電流。在STM32推挽輸出模式下低電位為0V,高電位為3.3V。
而在開漏輸出模式時,上方的電晶體完全不工作。如果輸出為0,則下方電晶體導通,腳位被下拉到0V;若控制輸出為高電位時,兩個電晶體都關閉,因此腳位不是高電位也不是低電位,為浮動的。因此這種模式下並沒有辦法輸出高電位,需要自己將腳位上拉。
一般在使用時我們都是使用推挽輸出,那開漏輸出既然沒有辦法真正的輸出高電位,有什麼好處呢?
由於開漏輸出的高電位是使用外部上拉的方式,因此你可以上拉至任何你想要的電壓,以符合需求,例如某些晶片需要輸入5V,但STM預設的輸出都是3.3V,此時你就可以使用開漏輸出,將腳位上拉至5V。
實際使用時,可以先將腳位設成GPIO輸出,接著在左側System core底下的GPIO選擇剛剛配置的腳位,底下可以做設定,GPIO mode設為Output Open Drain開漏模式。使用時記得要外部上拉,否則這個腳位是沒辦法輸出高電位的喔!可以做個小實驗,設成開漏模式時,用電表去測量腳位輸出的變化,當程式輸出高電位時,去測量腳位,應當量到0.xxV,而不是3.3V,此時腳位是浮動的。
迄今為止,我們已經可以對腳位做最一般的輸出輸入。而事實上,利用這些功能搭配上L298N我們就可以控制步進馬達了呢!有興趣的可以試試看,不過我們還是等到之後學到了PWM的輸出再來用A4988控制會比較容易一些。
不好意思,我看到推挽的輸出的那張圖有點奇怪,那張圖跟STM32內部的推挽輸出架構不一樣耶,STM32用的是CMOS架構,上面那張圖卻是B類,我不懂為什麼解釋推挽是用那張圖,網路上其他的文章也都是在解釋這個B類輸出級
我剛剛的疑問也打在別人的文章底下
https://ithelp.ithome.com.tw/articles/10284264