Pull - up Resistors
簡介
上拉電阻非常普遍地被使用在微控制器(MCU)或任何數位裝置上。此篇教學會解釋該在甚麼時間或地點使用上拉電阻,然後我們會做簡單的計算去展示為甚麼上拉電阻這麼重要。
上拉電阻是什麼?
當你使用微處理器其中的接腳當作輸入時,假如你沒有連接任何東西到此接腳時,當你的程式碼開始讀取此接腳時,那他會讀到高電為還是低電位呢?這非常難以去分辨,此現象我們稱為浮動。為了去避免此現象,我們將會使用上拉或下拉電阻去確保接腳空接時保持高電位或低電為,同時還使用少量電流。簡單來說,我們將討論上拉電阻,因為此比下拉電阻還普遍使用,他們使用的觀念都一樣,除了上拉電阻被連接到電源端(通常為3.3V或5V, VCC),下拉電阻被連接到接地端。
上拉電阻最常被使用在button跟switch
當使用上拉電阻時,開關沒有被按壓時,input pin將會讀到高電位,換言之,會有少量的電流流經VCC跟input pin之間,因此input pin讀到高電位,當開關被按壓時,input pin會直接被連接到接地端,電流從上拉電阻流到接地端,因此input pin讀到低電位,記住,假如沒有使用電阻時,開關將直接連接VCC到GND端,會導致短路。
那麼你應該使用多少阻值得電阻呢?
最簡單的答案就是使用10k歐姆以上電阻。
阻值太低的電阻稱為strong pull-up(電流量多),相反地,阻值太高的電阻稱為weak pull-up(電流量少)。
該選用多少的阻值的電阻,需要滿足以下兩種條件
- 當開關被按壓時,input pin將會讀到低電位,R1的阻值會決定有多少的電流從VCC流經BUTTON,然後流到接地端。
- 當開關未被按壓時,input pin將會讀到高電位,R1的阻值會決定有多少電流從VCC流經到input pin。
對於條件一來講,妳不要想要電阻的阻值太低,較低的阻值會導致更多電流流經BUTTON到接地端,你通常會想要較大的阻值的電阻(10KΩ),但是你不想要太大的阻值,這樣可能會引響到條件二。一個阻值為4MΩ的電阻可能不太適合當作上拉電阻,因為它的阻值太大導致電流量太小,可能沒辦法確保此電路100%能運作。
條件二的一般規則是使用比input pin的輸入阻抗小1/10的阻值的上拉電阻。微控制器上的input pin的輸入阻抗可以從100k~1MΩ不等,阻抗只是一種很奇特方式去把表達R2的阻值,所以當開關沒有被按壓時,會有少量的電流從VCC流經R1在進入到input pin,R1的阻值跟R2的阻抗被用來分割電壓,使得電壓水平可以達到讓input pin讀到高電位。
舉的例子,假如你使用1MΩ的pull-up跟阻抗為1MΩ的R2,則開關未被按壓時,則input pin的分割電壓為VCC的一半,微控制器可能不會認為這是高電位。假設VCC為5V,則在input pin上的分割電壓為VCC/2=2.5V,微控制器根本不曉得這是高電位還是低電位,使用10KΩ~100KΩ應該可以避免大多數這種問題。
PS.分壓電路
因為上拉電阻這麼普遍被使用,像是ATmega328微控制器(Arduino 平台),有內部上拉電阻可供使用,假設你要在Arduino IDE啟用內部上拉電阻,妳可以把以下code放在setup() function。
pinMode(5, INPUT_PULLUP); // Enable internal pull-up resistor on pin 5
有一點要說的是,太大的阻值的上拉電阻,引腳響應電壓變化的速度就越慢。這是因為饋入輸入引腳的系統本質上是一個與上拉電阻耦合的電容器,因此形成了一個RC濾波器,而RC濾波器需要一些時間來充電和放電。如果您的信號變化非常快(如USB),則高值上拉電阻會限制引腳可以可靠更改狀態的速度。這就是為什麼你會經常在USB信號線上看到1k到4.7KΩ的電阻。
如何計算Pull-up 電阻的阻值?
讓我們像你說明如何去限制電流為1mA當開關被按壓時,此時的VCC為5V,那麼你該使用多少的電阻?
它可以透過歐姆定律去計算
由以上式子推導,你需要使用5kΩ的電阻,記住,在開始計算時,確保V的單位為伏特、I的單位為安培、R的單位為歐姆。