為什么要用上拉電阻和下拉電阻?——避免輸入引腳處於“懸空”狀態
下圖是一個沒有使用上拉電阻/下拉電阻的電路圖:
在按鍵沒有按下時,要讀取的輸入引腳沒有連接到任何東西,這種狀態就稱為“懸空”。
由於附近引腳的電氣噪聲,從處於“懸空”狀態的輸入引腳讀取到的數值會在高電平和低電平之間來回波動,得到一個不確定的值。
如果用串口監視器將 在沒有使用上拉/下拉電阻的情況下 從一個數字引腳讀取的輸入打印出來,會得到圖示的結果:
可以看到此時讀取到的輸入並不是一個確定的值。
如果換成從模擬引腳讀取輸入可以更明顯地看到輸入電壓值的波動情況:
只有輸入時要考慮上拉電阻和下拉電阻的問題,輸出時不用考慮。
上拉電阻
上拉電阻:將輸入引腳通過一個10kΩ的電阻上拉到電源上
電路原理圖:
- 開關斷開:輸入引腳通過一個10kΩ的電阻連接到VCC,引腳讀到的是邏輯高電平
- 開關閉合:輸入引腳被短路,VCC直接連接到地,引腳讀到的是邏輯低電平
在串口監視器中打印出的結果為:
使用Arduino I/O口內部上拉功能:
ATmega328P 每個I/O端口都內置了20kΩ上拉電阻(包括數字引腳和模擬輸入引腳)(注意:沒有內置下拉電阻)。
電路連接:
將按鈕的一端接到GND,另一端接到輸入引腳(這里是D2),如圖所示:
代碼:
void setup{ ... pinMode(2,INPUT_PULLUP); ... }
下拉電阻
下拉電阻:將輸入引腳通過一個10kΩ的電阻下拉到地
電路原理圖:
- 開關斷開:輸入引腳通過一個10kΩ的電阻連接到地,引腳讀到的是邏輯低電平
- 開關閉合:輸入引腳直接連接到電源,引腳讀到的是邏輯高電平