我們都知道單片機的雙向IO口既能輸入也能做輸出,推挽輸出時IO口能通過內(nèi)部上下MOS管開關(guān)切換能輸出高低電平,高阻態(tài)輸入時,IO口內(nèi)部上下MOS管都關(guān)閉,IO口工作在高阻態(tài)的輸入模式下,那么高阻態(tài)是個什么樣的概念呢?下圖是常見的IO的內(nèi)部框圖。
當(dāng)IO口處于高阻態(tài)時,我們也將其稱為浮空輸入狀態(tài),此時其電平是不確定的,既不是高電平也不是低電平。我們可以想象成,單片機在檢測IO口的電平高低時,相當(dāng)于在CPU里面有一個類似電壓表的東西,并且這個電壓表內(nèi)阻很大,假設(shè)內(nèi)阻為100MΩ(示意圖如下)。在這里,我們可以把這個電壓表的內(nèi)阻稱為這個IO口此時的輸入電阻。
現(xiàn)在設(shè)想,當(dāng)我不小心用手碰到了IO端口,而由于人體本身就是阻值很大的導(dǎo)體,周圍有很多電磁波干擾,手上可能存在一些很微弱的電流,這個時候,電壓表的讀數(shù)就會發(fā)生變化,單片機讀取的電平高低就會變。高阻態(tài)表現(xiàn)出來的結(jié)果就是外界很小的干擾,都可能導(dǎo)致讀取的電平變化,甚至即使沒有碰這個IO口,它每次讀取的結(jié)果也可能不一樣,因為外界的電磁波等可能會干擾到IO口。IO口輸入端不使用時,可通過電阻單獨連接到 VDD或 VSS。
為什么雙向IO口輸入的時候要求是高阻態(tài)呢?
我們假設(shè)現(xiàn)在有一種輸入設(shè)備,等效電路如下圖。內(nèi)部開關(guān)上下切換,它就會輸出高低電平給到單片機的IO口,IO口通過引腳內(nèi)部電壓表可以檢測出來輸入的是高電平還是低電平。但是這個設(shè)備驅(qū)動能力很弱,連LED也驅(qū)動不了。設(shè)備里的100kΩ,可以叫做設(shè)備的輸出電阻(同樣也可以近似認(rèn)為是輸出阻抗)。
如果我們采用內(nèi)部上拉的方式做輸入檢測的話,如下圖,讓這個設(shè)備輸出低電平,然后連接單片機的IO口。這時,5V經(jīng)過IO口內(nèi)部10kΩ上拉電阻到達(dá)IO口,再到裝置內(nèi)部的100kΩ電阻,通過開關(guān)接到GND。根據(jù)分壓原理,IO口上讀到的電壓值大概是4.55V,于是單片機讀取的是高電平。而事實上,設(shè)備是想輸出低電平告知單片機。這里單片機管腳作為輸入功能,卻干擾了外界裝置的輸出值,相當(dāng)于單片機的這個IO口也在輸出。
如果我們將IO口的輸入狀態(tài)設(shè)置為高阻狀態(tài),且沒有外接上下拉電阻,內(nèi)部的兩個上下MOS管都是斷開的,對外部呈現(xiàn)高阻態(tài)。從下圖中可以看出,裝置輸出的電平能被準(zhǔn)確的讀取到單片機中。之所以能準(zhǔn)確讀取,就是因為設(shè)備輸出電阻比單片機IO口的輸入電阻要小。有人可能會說,如果把設(shè)備中的電阻換成1000MΩ,這個時候這個單片機又不能準(zhǔn)確讀取電平了。但是一般情況下,我們不需要考慮這么極端。如果是理想的高阻態(tài),其輸入阻抗應(yīng)該是無窮大,而這有點像超導(dǎo)體一樣比較特殊。一般情況下認(rèn)為導(dǎo)線電阻幾乎為0,所以同樣也認(rèn)為高阻態(tài)輸入電阻是無窮大。
總的來說,就是高阻態(tài)情況下,IO口輸入電阻很大,而不容易干擾那些輸出電阻較大、驅(qū)動能力弱的裝置輸出到IO口上的電平。
編輯:lyn
-
單片機
+關(guān)注
關(guān)注
6035文章
44554瀏覽量
634620 -
IO口
+關(guān)注
關(guān)注
3文章
170瀏覽量
24023 -
高阻態(tài)
+關(guān)注
關(guān)注
0文章
18瀏覽量
15499
原文標(biāo)題:單片機IO口輸入的高阻態(tài)是啥概念?
文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論