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