3.9. 開關與上下拉電阻

GPIO 輸出用來驅動外部硬體。GPIO 輸入則相反:相機讀取接腳上的電壓,並將其回報為 01。最簡單的輸入裝置就是開關──而要讓它能被可靠地讀取,除了開關本身之外還需要一個電子元件。

3.9.1. 開關與浮接輸入

開關是一種機械式接點:兩塊金屬在開關閉合時相觸、在斷開時分離。在電氣上,這就是這個裝置的全部。它內部沒有電壓源;單獨一個開關只能提供「接通」或「斷開」兩種狀態。

將開關直接接在 GPIO 接腳與接地之間,會使該接腳:

  • 處於 0 V,當開關閉合時(此時接到接地)。

  • 浮接,當開關斷開時(沒有接到任何地方)。

浮接的接腳沒有確定的電壓。輸入會讀到剛好靠近它的任何訊號──來自鄰近訊號的串擾、來自電源的雜訊,甚至是靠近導線的手指上的靜電。value() 每秒會回傳許多次無法預測的 01 混合值。

3.9.2. 上拉與下拉電阻

解決的辦法是上下拉電阻:一個高阻值的電阻(10 kΩ 到 100 kΩ 是常見值),在開關斷開時將輸入繫結到一條已知的電源軌。

兩張並排的電路圖。左:上拉電路,一個電阻 從輸入接腳向上接到電源,一個開關從輸入 接腳向下接到 GND。右:下拉電路,一個 電阻從輸入接腳向下接到 GND,一個開關從 輸入接腳向上接到電源。

用於開關輸入的上拉(左)與下拉(右)組態。

  • 上拉。電阻將輸入繫結到電源軌。當開關斷開時,只有少量電流涓滴流過電阻,接腳讀取為高電位。當開關閉合時,它將接腳對接地短路;接腳讀取為低電位。電阻限制了原本會在開關閉合時從電源經由接地流動的電流。

  • 下拉。鏡像的情形:電阻將輸入繫結到接地,而開關連到電源。斷開讀取為低電位,閉合讀取為高電位。

上拉是較常見的慣例──「低電位有效」(active low)的按鈕。MCU 本身提供內建的上拉與下拉,可透過 Pin.PULL_UPPin.PULL_DOWN 啟用,完全省去外部電阻。