推輓輸出、開漏輸出和上拉輸入或浮空輸入的區別(以一個IO口控制兩個LED燈爲例)

 在進行1個IO口控制兩個LED燈的實驗前,先了解一下GPIO的特性(以STM32爲例)

一、推輓輸出與開漏輸出的區別

      1.推輓輸出

     推輓輸出,顧名思義就是既可以輸出高電平,又可以輸出低電平。以stm32爲例,stm32官方手冊的GPIO電路圖如下:

 當輸出寄存器爲1時(高電平),控制輸出爲1,此時P-MOS管導通,N-MOS管不導通,這時候輸出電壓就以VDD爲基準;

 控制輸出爲0時,P-MOS不導通,N-MOS管導通,這時候電壓就以VSS爲基準。

PS:(MOS知識自己去百度學習學習,MOS管是電壓驅動型的,和電流驅動型的三極管不一樣,如若不清楚,在這裏可以將P-MOS管假想爲NPN,N-MOS假想爲PNP,這樣就比較好去理解這個電路)

           VDD ,D==device器件的意思,指的是器件內部的工作電壓

           VSS, S==series公共端的意思,通常電路中的公共端接地,即爲地端電壓

            VCC,C==Circuit電路的意思,指整個供電迴路的電壓,(接入電路的電壓)

            VBAT,BAT==battery電池的意思,一般指電池電壓。

注意:從上面電路圖來看,輸出的同時,也可以通過輸入數據寄存器查看端口的電平變化,但是該電平不一定是你當前輸出的電平值

 

      2.開漏輸出

         開漏輸出,即只能輸出低電平,輸出高電平時需要外接上拉電阻。(在stm32F4中,大部分GPIO口都配置了弱上拉和下拉),但在使用其他芯片的時候,在設計電路的時候就要得注意了。

         從上圖可以看出,輸出寄存器中的“0”,可以激活N-MOS管,而輸出"1"時,P-MOS管不導通,會使端口保持高阻態(PS:高阻態顧名思義就是電阻很大,或者說是趨向無窮大。在上面說的推輓輸出中,一個門電路中通過上拉管和下拉管來輸出高低電平,如果當上拉管和下拉管都截止時,輸出端就相當於浮空(沒有電流流動),其電平隨外部電平高低而定,即該門電路放棄對輸出端電路的控制,這樣的話,外接上拉電阻,則輸出高電平時,其電平由VCC直接供給)。

         由於內部VDD的電壓是要比VCC的電壓要低(可能低很多),推輓輸出時,其輸出高電平電流值是比較小的,而接了上拉電阻的開漏輸出高電平時,其輸出電流是比較大的,因而開漏輸出比較適合用來做大電流控制。

 

    二、輸入模式

           stm32中輸入模式有四種,即浮空輸入、上拉輸入、下拉輸入、模擬輸入,在本文中,只講解浮空輸入和上拉輸入這兩種模式。

          1.浮空輸入

             浮空輸入顧名思義就是無上下拉,從下面原理圖進行分析

            

             浮空輸入時,輸入的電壓通過TTL施密特觸發器轉換爲0或1的數字電平存入寄存器中。由於該電壓是外部提供的,所以會有很多不穩定的因素,那麼stm32如何判斷該輸入電壓是高電平還是低電平呢?

下圖示從stm32f407的芯片手冊中截取到的圖,是使用外部時鐘源(一般都使用外部時鐘源)所測出的值,其判斷輸入高電平信號的電壓爲0.7VDD~VDD(差不多是2.1~3.3V),低電平信號輸入電壓是VSS~0.3VDD(0~~0.9V)。 那麼0.3~0.7VDD這一部分輸入電壓怎麼辦???顧名思義,這一部分是屬於浮空的,即無任何信號產生(所以在寫浮空輸入的程序時,注意if~else了)

     2. 上拉輸入

         上面我們講到浮空輸入中,0.3VDD~0.7VDD這一部分輸入電壓會被認爲是無信號產生,那麼在配置成上拉輸入模式後(上拉電阻開啓),其這一部分被認爲無信號的輸入電壓,就會被拉高到0.7VDD+,這樣就會產生一個結果,就是符合低電平的輸入電壓產生的低電平信號,剩下的電壓產生的是高電平信號。(當然要注意電壓勿超過設定值導致被擊穿)。

 

三、一個IO口控制兩個燈的亮滅

      爲了加深對上面的理解,下面進行一個小實驗,即設計一個電路,只用一個IO口同時控制兩個LED(單獨亮滅,同時亮滅)

                                    

電路分析:這是一個簡單的控制電路,其IO口控制的原理是,RC0輸入低電平時,LED6亮,輸入高電平時,LED7亮,將RC0配置成輸入  模式後(高阻態),兩個燈都是滅的狀態。給1ms左右(這個值根據不同LED的特性來判斷)的高低電平交互,可以達到一個同時亮的效果。(二極管是防止電壓過高而被擊穿)。

          當然,這樣結果的成立條件是該IO能配置成推輓輸出模式(或者開漏模式+外接上拉電阻),這樣當要單獨使LED7亮時,纔能有一個高電平輸出(如果芯片電流輸出能力過弱,建議外接一個上拉電阻,保證LED7的亮度)

 

 

 

 

 

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