單片機小白學步(23) IO口原理知識補充:雙向IO口 互補推挽

2020-12-05 電子產品世界
由於之前考慮不周,本篇在IO口原理知識的基礎上,進一步補充一些知識。

=================================================

本文引用地址:http://www.eepw.com.cn/article/201611/317591.htm

雙向IO口的輸出:互補推挽

51單片機的P0口工作在普通IO口模式下,為準雙向IO口。而工作在第二功能狀態下時,則為標準的雙向IO口。由於雙向IO口的輸出,要求能輸出高低電平,通常會採用互補推挽電路。

在第二功能狀態下,51單片機P0口採用的是互補推挽的輸出方式。何為互補推挽呢?下面是它的等效電路圖。

當P0第二功能作為輸出時,K1和K2兩個開關輪流打開。K2閉合K1打開,就會輸出高電平,並且其驅動能力很大,因為電子開關的阻值小(不像上拉電阻的值那麼大)。反之K2打開,K1閉合,就會輸出低電平。

兩個開關交替導通,互為補充,「挽」是「拉」的意思,兩個電子開關分別負責在IO口輸出處「推」和「拉」電流,所以稱為互補推挽。

這種IO口結構的優點很明顯,驅動能力強,穩定可靠。缺點在於實現起來比較困難。在切換輸出電平的過程中,例如從低電平切換到高電平,當K1斷開時,要求儘可能快的輸出高電平,也就是K2應該立即閉合;同時,如果K1還沒斷開,K2就提前閉合了,相同於兩個開關同時導通,會直接短路,後果又會很嚴重。所以需要用電路控制好兩個開關的協調工作。

雙向IO口的輸入:高阻態、輸入電阻

雙向IO口的輸出,只要求能輸出高低電平,因此並不是必須採用互補推挽電路。而採用互補推挽電路的好處在於,這種電路同時又可以實現高阻態的輸入,從而實現標準雙向IO口。

當圖中的K1和K2同時斷開時,IO口就可以工作在高阻態的輸入狀態下。高阻態到底是什麼樣的一個概念呢?

當IO口處於高阻態時,也將其稱為浮空輸入狀態,其電平是懸浮不定的,既不是高電平也不是低電平。我們可以想像單片機在檢測IO口的電平高低時,相當於在CPU裡面有一個類似電壓表的東西,並且這個電壓表內阻很大,例如圖中給出的100MΩ。在這裡,我們可以把這個電壓表的內阻稱為P0.0口此時的輸入電阻(也可以近似認為是輸出阻抗,電阻是對直流電而言,而阻抗是對交流電來說的。這是模擬電路的知識,這裡不做細說)。

現在試想,如果我不小心用手碰到了P0.0埠,而由於人體本身就是阻值很大的導體,周圍有很多電磁波幹擾,手上可能存在一些很微弱的電流,這個時候,電壓表的讀數就會發生變化,單片機讀取的電平高低就會變。高阻態表現出來的結果就是外界很小的幹擾,都可能導致讀取的電平變化,甚至即使沒有碰這個IO口,它每次讀取的結果也可能不一樣,因為外界的電磁波等可能會干擾到IO口。稍後我們會利用51單片機做個實驗,來體驗P0口的高阻態。

高阻態的意義、輸出電阻

為什麼雙向IO口輸入的時候要求是高阻態呢?

我們假設有一種裝置,等效電路如下圖。開關上下切換,它就會輸出高低電平,通過電壓表可以檢測出來。但是其驅動能力很弱,連LED也驅動不了。裝置裡的100kΩ,可以叫做裝置的輸出電阻(同樣也可以近似認為是輸出阻抗)。

讓這個裝置輸出低電平,然後連接51單片機的P1.0口。這時,VCC經過10kΩ上拉電阻到達IO口,再到裝置內部的100kΩ電阻,通過開關K接到GND。根據分壓原理,P1.0上的電壓值大概是4.55V,於是單片機讀取的是高電平。而事實是,裝置想輸出低電平告知51單片機。這裡單片機管腳作為輸入功能,卻幹擾了外界裝置的輸出值,相當於單片機的這個IO口也在輸出。

當單片機的P0口工作在第二功能的輸入狀態,或者工作在普通IO口的輸入狀態,且沒有外界上下拉電阻,內部的兩個電子開關都是斷開的,對外部呈現高阻態。從圖中可以看出,裝置輸出的電平能被準確的讀取到單片機中。之所以能準確讀取,就是因為裝置輸出電阻比單片機IO口的輸入電阻要小。

有人可能會說,如果把裝置中的電阻換成1000MΩ,這個時候這個單片機又不能準確讀取電平了。但是一般情況下,我們不需要考慮這麼極端。如果是理想的高阻態,其輸入阻抗應該是無窮大,而這有點像超導體一樣比較特殊。一般情況下認為導線電阻幾乎為0,同樣也認為高阻態輸入電阻是無窮大。

總的來說,就是高阻態情況下,IO口輸入電阻很大,而不容易幹擾那些輸出電阻較大、驅動能力弱的裝置輸出到IO口上的電平。

用51單片機體驗高阻態

編寫程序如下:

#include reg52.h

sbit TOUCH = P0^0;

sbit LED = P1^0;

void main()

{

TOUCH = 1;

while(1) {

LED = TOUCH;

}

}

電路方面,LED接在P1.0埠,仍然是採用灌電流的方式,低電平有效。P0.0什麼都不要接。特別注意,這個實驗必須在P0.0什麼都沒接的情況下才能進行。很多成品開發板上,P0.0都連接了外部上拉電阻,沒法做這個實驗,建議自己搭建麵包板。

程序燒寫好之後,理論上來說,TOUCH管腳作為高阻態輸入,電平是不確定的,因此LED的亮滅也是不定的。我在實際實驗時,P0.0懸空的情況下,LED是一直點亮的,這可能是因為51單片機的高阻態和理想的高阻態還有一點差距,讀取P0.0的電平為低。

當把手指或很大的電阻放在P0.0和VCC之間,就會發現LED熄滅了,或者變暗了(變暗了說明LED在閃爍,只是閃爍的很快所以看不出來,就像交流電驅動的白熾燈一樣)。手指的電阻很大,如果是P1.0口,或者在P0.0上外接了上拉或下拉電阻,這時通過手指很難改變其電平狀態。而由於是高阻態,所以P0.0原先的低電平,通過手指從VCC傳過來的很微弱的電流就變成了高電平。

備註1:考慮到不同人的皮膚電阻不一樣,不能保證用手指接觸都能實現LED亮滅變化。如果沒有效果,可以嘗試用較大電阻(例如100kΩ)代替手指進行實驗。

備註2:如果你通電的時候發現LED原先是熄滅的,說明P0.0讀取到的是高電平,則應該用兩個手指分別放在P0.0和GND上,使得電平變化,LED點亮。當然LED不亮還有一種可能是,你的程序沒有被執行,可能是單片機最小系統電路出現了問題,或者程序寫錯了。

=======================================================

《單片機小白學步》系列教程(原名《單片機入門指南》)介紹

本系列教程從最基本的入門知識開始,逐步深入介紹單片機系統設計,內容包括:
1、入門篇:單片機等基本概念、各種電子設計基本知識
2、思想篇:單片機/計算機系統設計的工程思想
3、學習篇:單片機學習過程、方法和技巧,以51單片機為例介紹,並推廣到其他單片機
4、應用篇:遵循規範的工程方法,設計單片機系統實例(計劃設計的系統有:計算器、電子表、密碼鎖、簡易手機,具體看有沒有時間再確定)
5、原理篇:從模擬電路、數字電路開始,逐步深入介紹單片機/計算機系統原理,並自行設計簡易的CPU(由於個人水平有限,這部分沒有把握寫好,具體內容視情況而定)

教程特點

1、技術知識點全面,從入門到精通

包含了各種基本知識,尤其是對單片機基本概念的介紹、為什麼要用單片機等,在很多同類書籍教程中都被忽略了。同時也包含了一些深入的知識,包括原理篇考慮對單片機的基本原理進行介紹,有助於深入理解單片機。

本系列教程以51單片機為例進行介紹。通過51介紹完單片機的基本知識,我會再把430進行簡要介紹,尤其是對比兩者之間的優缺點,讓大家很快感受到430的巨大優勢,而學習51正好為快速了解430打下了堅實的基礎。

2、除了單片機知識,還有思想、方法、技巧的介紹

本系列教程中,介紹單片機各種模塊編程知識的主要是學習篇,而學習篇只是整個教程的一部分。在學習篇中我會貫穿各種方法技巧,如何理解一些模塊功能,怎麼看時序圖,嚴格遵守工程思想進行編程,程序發生了錯誤怎麼調試等等。而在思想篇中會總體介紹很多重要的思想,為後面的學習做好準備工作。

3、知識先後順序的設計

單片機學習過程中,涉及大量的知識,而且很多知識之間相互依賴,關聯很強。

本系列教程對知識的先後順序進行比較明確的規劃,盡最大可能符合人的認知過程。但是實際規劃時發現,無論怎麼調整知識的順序,總有一些知識之間相互依賴,關係複雜。例如開始講IO口的時候肯定會提到寄存器,而寄存器這個詞的理解,需要深厚的背景知識。但是這些背景知識在沒有進行實踐的時候也很難理解。

初學者常常就會在這樣的地方感覺疑惑不解,不知所措。而每次遇到類似這樣的知識,我會向初學者指出,應該如何對待。這個知識是應該自己去學習補充,還是等到學完原理篇再做理解,而現在又應該怎麼去看待這個名詞。

另外,在整個教程的學習前,需要掌握一定的C語言等基礎知識,具體可參考教程第〇篇《序》中的相關說明
http://www.paincker.com/mcu-primer-0

4、語言通俗易懂

本系列教程力求語言通俗易懂,而不會用一堆新手不懂的詞語去解釋另一個不懂的詞語。但是受限於個人語言表達能力,可能有些地方表述的比較繁瑣,或者不清楚,希望大家能夠幫忙指出。

相關焦點

  • 單片機IO口科普:推輓輸出、開漏輸出詳解
    在學單片機和選用邏輯器件的時候我們常別人說這款晶片是推輓輸出驅動能力強,這個引腳是開漏輸出需要加上拉電阻。是不是有時候感覺一頭霧水?
  • stc單片機IO口輸入輸出方式
    以下是轉載的正文:傳統51單片機IO接口只可以作為標準雙向IO接口,如果用其來驅動LED只能用灌電流的方式或是用三極體外擴驅動電路。推挽工作方式:LED正負極分別接在兩個IO口上,然後設置正極IO接口為推輓輸出,負極IO接口為標準雙向灌電流輸入。推挽方式具有強上拉能力,可以實現高電平驅動LED。
  • 單片機小白學步(22) IO口:蜂鳴器的使用/三極體的工作原理
    三極體的原理和很詳細的工作情況分析,需要不少的計算過程,有興趣的讀者可以查看模擬電路相關的書籍資料。文章末尾也會簡單分析三極體工作機制,有興趣的同學可以看看。如果覺得難以理解,學習單片機過程中,可以不做深入研究。
  • 單片機IO口結構及上拉電阻
    MCS-51有4組8位I/O口:P0、P1、P2和P3口,P1、P2和P3為準雙向口,P0口則為雙向三態輸入輸出口,下面我們分別介紹這幾個口線。圖2 單片機P0口內部一位結構圖 P2口作為外部數據存儲器或程序存儲器的地址總線的高8位輸出口AB8-AB15,P0口由ALE選通作為地址總線的低8位輸出口AB0-AB7。
  • STM32的IO口輸入輸出模式的理解
    (7)GPIO_Mode_AF_OD 復用開漏輸出(8)GPIO_Mode_AF_PP 復用推輓輸出一、推輓輸出:可以輸出高、,連接數字器件;推挽結構一般是指兩個分別受兩個互補信號的控制,總是在一個三極體導通的時候另一個截止。
  • STM32的IO口灌入電流和輸出驅動電流最大是多少?
    剛開始學習一款單片機的時候一般都是從操作IO口開始的,所以我也一樣,先是弄個流水燈。   剛開始我對STM32的認識不夠,以為是跟51單片機類似,可以直接操作埠,可是LED燈卻沒反應,於是乎,仔細查看資料發現,原來對於ARM,不管你要操作哪個IO口,都要先配置IO口。
  • AVR單片機IO口結構和上拉和下拉電阻的作用
    )  3、為加大輸出管腳的驅動能力,單片機的引腳常接入上拉電阻,(AVR單片機可配置是否接上拉,51單片機P1 P2 P3均帶上拉,P0口不帶,所以用P0口做按鍵,液晶等應用時要自己加上上拉電阻,否則無法使用切記)  4、CMOS晶片上為防止靜電破壞,不用的管腳不能懸空,需要接上拉電阻降低輸入阻抗,提供洩荷通路。
  • 51單片機IO埠基礎知識及應用
    本文就來說下89C51單片機的引腳IO埠及應用,學習單片機的IO口的應用也是入門單片機的第一步。上圖是89C51單片機的封裝引腳圖,89C51單片機有4個IO埠為P0~P3,每個埠有8個引腳,分別對應8個位0~7,每個埠的引腳都可以作為輸入輸出使用。
  • 單片機一個IO口如何控制兩顆發光二極體(LED)
    單片機一個IO口如何控制兩顆發光二極體LED單片機工程師在面試的過程中,經常會碰到一些相同的問題,筆者總結了十個提問率較高的問題,供大家參考。現在我們來分析單片機工程師常遇面試問題之一:一個單片機IO口如何控制兩顆LED?
  • STM32的GPIO口的輸出:開漏輸出和推輓輸出
    很多晶片的供電電壓不一樣,有3.3v和5.0v,需要把幾種IC的不同口連接在一起,是不是直接連接就可以了?這也是I2C,SMBus等總線判斷總線佔用狀態的原理。  3. 可以利用改變上拉電源的電壓,改變傳輸電平。如圖2, IC的邏輯電平由電源Vcc1決定,而輸出高電平則由Vcc2決定。這樣我們就可以用低電平邏輯控制輸出高電平邏輯了。  4.
  • STC8單片機之深入理解輸入/輸出口的工作模式
    1、引言STC8系列單片機的輸入/輸出口(英文是:Input/Output Interface,下文簡稱為:I/O口)有4種可以通過軟體配置的工作模式。其分別是:準雙向口、推輓輸出、開漏輸出和高阻輸入這4種工作模式,或者稱之為:I/O口的4種可配置電路結構。
  • 關於ARM的GPIO口的四種方式解說
    從I/O口的特性上看,標準80C51的P0口在作為I/O口使用時,是開漏結構,在實際應用中通常要添加上拉電阻;P1、P2、P3都是準雙向I /O,內部有上拉電阻,既可作為輸入又可以作為輸出
  • 推挽全橋雙向直流變換器的研究
    越來越多的雙向直流變換器拓撲也被提出,不隔離的雙向直流變換器有Bi Buck/Boost、Bi Buck-Boost、Bi Cuk、 Bi Sepic-Zeta;隔離式的雙向直流變換器有正激、反激、推挽和橋式等拓撲結構。不同的拓撲對應於不同的應用場合,各有其優缺點。推挽全橋雙向直流變換器是由全橋拓撲加全波整流演變而來。推挽側為電流型,輸入由蓄電池供給,全橋側為電壓型,輸入接在直流高壓母線上。
  • 亞派科技新視野:IO口驅動電平欠壓的簡易檢測電路
    背景技術IO口驅動電路廣泛應用於電力電子技術領域中,常用的可以控制指示燈、接觸器、複合開關、晶閘管等,而在IO口控制器件的負荷常用於可控整流、投切無功補償裝置中的電容器、無觸點電子開關、逆變及變頻等電子電路中,是典型的小電流控制大電流的設備。
  • MCU引腳輸出模式中推輓輸出與開漏輸出電路原理區別
    本文引用地址:http://www.eepw.com.cn/article/282173.htm  推挽結構一般是指兩個三極體分別受兩互補信號的控制,總是在一個三極體導通的時候另一個截止.  我們先來說說集電極開路輸出的結構。
  • 單片機控制步進電機的原理
    本資料詳細介紹鄧步進電機的工作原理以及單片機控制步進電機的特點。步進電機是數字控制電機,它將脈衝信號轉變成角位移,即給一個脈衝信號,步進電機就轉動一個角度,因此非常適合於單片機控制。    步進電機可分為反應式步進電機、永磁式步進電機和混合式步進電機。
  • 英文域名swipe.io以47萬元交易價成最貴.io域名!
    西部數碼(west.cn)6月12日消息,據外媒報導,英文域名swipe.io在國外park.io平臺以68000美元結拍,約合人民幣47萬元,是目前為止交易價最高的.io域名。主體「swipe」是通用英文單詞,有「揮擊、批評、抨擊」等意思;後綴.io原是英屬印度洋領地的簡寫,後因對應有io遊戲,多用於遊戲領域,同時也在物聯網領域被廣泛使用。整體說來,域名swipe.io比較適合搭建體育、娛樂、遊戲等終端平臺。據了解,域名Swipe.io是目前公開交易中價格最貴的.io域名,超越了此前交易價排在第一的lucky.io(67000美元)。
  • io遊戲一年簡史:勝者和英雄
    但你可能不知道《球球大作戰》背後的《Agar.io》,不知道前者的玩法完全照搬自後者,也不知道《Agar.io》被騰訊以《全民星球》的名字引入國內但毫無成績,更不知道《Agar.io》已經開創了一個名為io遊戲的時代。
  • 單片機STCl2C2052AD的比例遙控系統
    1 比例遙控設備的基本原理 一般比例遙控系統的功能框圖如圖1所示。本文引用地址:http://www.eepw.com.cn/article/173869.htm 遙控設備的基本工作原理是:操縱者通過手中的遙控發射機(撥動發射機上的旋鈕或者搖杆)將控制模型前進、後退、加速或減速的指令變成電信號並將其發射到空中;模型上裝載的遙控接收機收到這些電信號並由伺服舵機轉換成相應的機械運動,從而實現對模型的遙控。
  • 推輓輸出、開漏輸出、復用開漏輸出的區別
    因此,在這裡做一個總結:推輓輸出:可以輸出高,低電平,連接數字器件; 推挽結構一般是指兩個三極體分別受兩互補信號的控制,總是在一個三極體導通的時候另一個截止。高低電平由IC的電源低定。推挽電路是兩個參數相同的三極體或MOSFET,以推挽方式存在於電路中,各負責正負半周的波形放大任務,電路工作時,兩隻對稱的功率開關管每次只有一個導通,所以導通損耗小、效率高。