上拉電阻(Pull-upResistors)
英文原文地址:
介紹:
上拉電阻在使用微控制器(MCUs)或者其他數字邏輯器件的時候很常見。本教程會解釋什麼時候和什麼地方會用到上拉電阻,然後我們會通過一個簡單的計算來展示為什麼上拉電阻很重要。
什麼是上拉電阻
我們設想你有一個MCU,它有一個配置成輸入的引腳。如果沒有東西連線在該引腳上,並且你的程式要讀這個引腳的狀態,這個狀態是高(拉到VCC)還是低(接地)?這很難說。這種情況叫做懸空。為了防止這種未知狀態,就需要一個上拉或者下拉電阻來保證引腳處於高電平還是低電平狀態,同時需要流過少部分電流。
簡單起見,我們將把注意力放在上拉電阻上,因為它們比下拉電阻更常見。它們使用相同的概念,除了上拉電阻連線到高電平(通常3.3V或者5V,並且作為VCC),而下拉電阻連線到地。
上拉電阻經常和按鍵以及開關在一起使用。
通過使用上拉電阻,輸入引腳將在按鍵按下時讀到高電平。換句話說,VCC和輸入引腳(不是和地)之間會有小電流流過,輸入引腳讀出的電壓接近VCC。按鍵按下時,輸入引腳直接接地。電流通過電阻流入地,輸入引腳讀出低電平。記住,如果這裡沒有這個電阻,你的按鍵將使VCC接地,這是很糟糕的,就是我們說的短路。
那麼怎麼選擇電阻值呢?
簡短的答案就是你需要一個近似10kΩ的電阻來上拉。
小電阻值叫做強上拉(更多電流),高電阻值叫做弱上拉(小電流)。
選擇上拉電阻的阻值需要滿足兩個條件:
1、按鍵按下,引腳電平拉低。R1的阻值控制你希望VCC流出多少電流通過按鍵到地。
2、按鍵未按下,引腳電平拉高。上拉電阻控制引腳的電平。
對於條件1,你不希望電阻值過低。電阻值越低,按鍵按下的時候就會消耗更多的能量。一般你希望電阻值稍大一些(10KΩ),但是你不希望阻值過大,以免和條件2衝突。一個4MΩ的電阻可以作為上拉電阻,但是它的阻值太大(太弱)以至於不能在所有情況下正常工作。
條件2的一般規則是使用一個近似小於輸入引腳阻抗(R2)1/10數量級的上拉電阻(R1)。微控制器的輸入引腳阻抗範圍在100K-1MΩ。這裡,阻抗只是電阻值的另一種說法,在上圖中用R2表示。因為,按鍵按下時,小電流就會從VCC流過R1進入引腳。上拉電阻R1和輸入引腳阻抗R2分得電壓,這個電壓需要足夠高來使得輸入引腳讀出高電平狀態。
舉個例子,如果你使用一個1MΩ的電阻來上拉,輸入引腳阻抗約為1MΩ(構成一個分壓器),輸入引腳上的電壓將是VCC的一半,微控制器引腳可能不是高電平狀態。在一個5V系統中,MCU讀出引腳狀態電壓是2.5V會是什麼狀況?是高還是低?MCU不知道結果,你可能讀出高或者低狀態。而10K到100KΩ可以避免大部分的問題。
既然上拉電阻需求這麼廣泛,很多MCU,比如Arduino平臺上的ATmega328 微控制器,有可以開啟和禁用的內部上拉電阻。啟用Arduino的內部上拉電阻,你可以在你的setup函式中使用下面一行程式碼:
pinMode(5,INPUT_PULLUP); // Enable internal pull-up resistor on pin 5
需要指出的另外一點事上拉電阻阻值越大,引腳響應電壓變化也就越慢。這是因為系統提供的引腳實際上是一個電容和一個上拉電阻的組合,因此組成一個RC濾波器,並且RC濾波器需要時間充電和放電。如果你有一個快速變化的訊號(比如USB),高阻值上拉電阻可能限制引腳真實的狀態轉變速度。這就是為什麼你經常看到USB訊號線上電阻值為1K到4.7KΩ的原因。
所有這些因素都會影響決定使用多大的上拉電阻。
計算上拉電阻阻值
我們考慮你在上面的電路中按鍵按下時,希望限制電流到1mA左右。其中Vcc=5V,你需要使用多大的電阻。
使用歐姆定理很容易計算上拉電阻的阻值:
根據上面的電路圖,歐姆定理公式變成:
整理上面的方程並求解電阻值:
記住在計算前將所有單位轉換成伏特、安培和歐姆(比如1mA=0.001A),接出電阻為5KΩ