熊おふし五郎が行く

主にマイコンボードを動かした記録を書いています

プルアップ回路とプルダウン回路

プルアップ回路とプルダウン回路とは?

マイコンの入力端子は、HighまたはLowの電圧が常に印加される必要があります。また、入力端子が接続されていない状態の場合、ノイズや静電気によって電圧が印加されることがあります。そのため、入力端子に入力される信号がHighまたはLowを明確にします。この対策をするのが、プルアップ回路とプルダウン回路です。

一般的なプルアップ回路

電源側(High)に抵抗を接続し、グランド側(Low)にスイッチなどHighまたはLowを制御するデバイスを接続します。接続する抵抗は一般的に10 KΩから数百KΩまでです。

f:id:bear_9973:20200823123351p:plain:w400
プルアップ回路図

スイッチをONにしたとき、プルアップ抵抗からの電流がスイッチに流れるため、マイコンの入力端子は0 Vになります。
スイッチをOFFにしたとき、プルアップ抵抗からの電流がマイコンに流れるため、マイコンの入力端子は直流電源とほぼ同等の電圧が印加されます。

一般的なプルダウン回路

電源側(High)にスイッチなどHighまたはLowを制御するデバイスを接続し、グランド側(Low)に抵抗を接続します。接続する抵抗は一般的に10 KΩから数百KΩまでです。

f:id:bear_9973:20200823123548p:plain:w400
プルダウン回路図

スイッチをONにしたとき、直流電源からの電流が10 KΩ以上の高い抵抗値のあるプルダウン抵抗よりもマイコンに流れるため、マイコンの入力端子は直流電源とほぼ同等の電圧が印加されます。
スイッチをOFFにしたとき、直流電源からの電流がマイコンに流れないため、マイコンの入力端子は0 Vになります。

マイコン内蔵のプルアップ/ダウン抵抗

マイコンによっては、入出力端子(入出力ポート)にプルアップ/ダウン抵抗が内蔵されている場合があります。内蔵されたプルアップ/ダウン抵抗は、開発言語のコードで有効または無効にすることができます。

Micro:bit

仕様書による確認

Micro:bitで使用されているプロセッサは、ARM Cortex-M0です。そのデータシート(最終閲覧日:2020年8月14日)に、I/Oポートの構成図(Fig 7. Standard I/O pad configuration)があります。この構成図でMicro:bitにプルアップ/ダウン抵抗が内蔵されていることがわかります。

f:id:bear_9973:20200823123755p:plain:w400
構成図

ただし、Micro:bitの端子からプロセッサまでの間にプルアップ/ダウン抵抗があるかどうかは、確認できませんでした。

MicroPythonの設定方法

MicroPythonは、PULL_UP、PULL_DOWN、NO_PULLで設定できます。pin0にプル設定する例を以下に示します。

pin0.set_pull(pin0.PULL_UP) # プルアップ抵抗を設定
pin0.set_pull(pin0.PULL_DOWN) # プルダウン抵抗を設定 
pin0.set_pull(pin0.NO_PULL) # プル設定をしない

Micro:bitとMicroPythonの実験

MicroPythonのプル設定とMicro:bitの端子の電圧との関係を、以下の通りに実験で確認します。

  1. PULL_UP設定
  2. PULL_DOWN設定
  3. NO_PULL設定

PULL_UP設定

以下のサンプルコードを実行して、pin0を電圧計で測定します。

from microbit import *

pin0.set_pull(pin0.PULL_UP) # プルアップ抵抗を設定

while True:
   pass

測定結果を以下に示します。pin0にプルアップ抵抗を設定すると、電源電圧と同等の3.3 Vでした。

f:id:bear_9973:20200823123957j:plain:w400
プルアップ抵抗の実験結果

PULL_DOWN設定

以下のサンプルコードを実行して、pin0を電圧計で測定します。

from microbit import *

pin0.set_pull(pin0.PULL_DOWN) # プルダウン抵抗を設定

while True:
   pass

測定結果を以下に示します。pin0にプルダウン抵抗を設定すると、0 Vでした。

f:id:bear_9973:20200823124140j:plain:w400
プルダウン抵抗の実験結果

NO_PULL設定

以下のサンプルコードを実行して、pin0を電圧計で測定します。

from microbit import *

pin0.set_pull(pin0.NO_PULL) # プル設定をしない

while True:
   pass

測定結果を以下に示します。pin0に"プル設定をしない"に設定すると、0.3 Vでした。
※この実験結果は正しいことの根拠は未調査

f:id:bear_9973:20200823140611j:plain:w400
プル設定をしないの実験結果