但是CMOS器件的輸入懸空時,不會被拉向任何一個方向,處于一種浮空的狀態(tài),這樣會造成輸出紊亂,不是我們所希望的結果,這種情況下需要在輸入端接入上拉或者下拉電阻給電路提供一個確定的狀態(tài)。
一般可拔插的對外接口(如JTAG)需要在I/O上加上上下拉電阻,有三態(tài)的總線視工作情況也可能需要上下拉,不過大多數的CMOS電路不需要額外的上下拉電阻。
CMOS器件在使用是一般要加上下來避免輸入懸空
因為CMOS輸入是電壓控制型,輸入阻抗很高,所以上下拉電阻的值可以很大,理論上用MΩ級別的電阻都沒問題。
不過理論歸理論,工程師得認清現(xiàn)實。現(xiàn)實的CMOS輸入結構,為了保護MOS管的柵極,會在柵極上加入ESD二極管,二極管反向偏置的時候是有漏電流的,還會隨溫度的升高還會指數增長!
所以CMOS電路的上下拉電阻一般在100kΩ以下,一些制程比較先進的CPU,I/O口的漏電流或者上下拉電流較大,上下拉電阻一般取在幾kΩ級別。所以設計上下拉電阻前一定要仔細閱讀芯片手冊,查查I/O的輸入電流,看看取什么樣的電阻值才合理。
CMOS輸入有ESD二極管
其他需要上下拉的情況
開集(Open-Collector)和開漏(Open-Drain)的輸出結構往往也需要加上拉電阻。OC和OD輸出結構只有下管,所以只能輸出L和高阻(Hi-Z)兩種狀態(tài),而高阻態(tài)是難以被電路識別的,所以需要合適的上拉電阻把高阻態(tài)轉變?yōu)楦邞B(tài)。
OC(左)和OD(右)輸出結構
雖然OC和OD輸出結構看起來很復古,使用時也需要外接電阻有點麻煩,但這種結構最大的好處就是可以做線與,也就是多個OC或者OD可以接到一起,只要其中一個輸出L,總線就是L,這在多外設中斷和電源時序控制方面很常用。
OC/OD的線與接法
I2C也是OC/OD結構,這樣很輕松就能在一條數據線上雙向傳輸數據而不需要額外的方向控制信號,而CAN總線則巧妙地利用線與特性來實現(xiàn)總線仲裁。
在處理OC或者OD電路的時候,一定要注意評估總線負載電容、上拉電阻與所需速度的關系,負載電容越大,速度越快,所需的上拉電阻要越小。
比如I2C總線,如果只掛載了一片從設備,使用4.75kΩ的上拉電阻可能就滿足400kHz的總線要求了,但如果掛了10片從設備呢,1kΩ的上拉電阻也不一定能搞定100kHz的總線速度,這種時候可能得考慮總線負載隔離或者降低總線速度了。
下圖是在200pF負載電容情況下,上拉電阻為500Ω、1kΩ、2kΩ、4.75kΩ和10kΩ下的波形,可以看到上拉電阻越大,對電容充電速度越慢,所以上升沿也越慢,當上拉電阻不合適時上升沿已經嚴重變形,無法保證正常工作。
OC電路不同上拉電阻對波形的影響
冷知識
邏輯反相器可以當成放大器來用!不是開玩笑,我還真見過產品上用這種騷操作的,只需要把反相器接成反向放大器就可以了,不過邏輯器件當線性器件用,性能嘛...