Pull-up / Pull-down¶
Pull-up / Pull-downとは¶
Pull-up(プルアップ)とPull-down(プルダウン)は、デジタル入力端子の状態を安定させるために使用される抵抗である。
マイコンの入力ピンを何も接続せずに放置すると、入力状態が不安定になる。
これを防ぐためにPull-up抵抗やPull-down抵抗を使用する。
なぜ必要なのか¶
例えばSTM32のGPIO入力を以下のように接続したとする。
GPIO
│
(未接続)
この状態では入力電圧が定まらない。
その結果、
0
1
0
1
1
0
1
...
のようにランダムな値を読み取ることがある。
これをフローティング(Floating)状態という。
Pull-up抵抗¶
Pull-up抵抗は入力を通常時にHighへ固定するための抵抗である。
回路例
3.3V
│
[10kΩ]
│
GPIO
│
SW
│
GND
スイッチOFF¶
SW = OFF
の場合
GPIO = High
となる。
スイッチON¶
SW = ON
の場合
GPIO = Low
となる。
動作イメージ
OFF → 1
ON → 0
Pull-down抵抗¶
Pull-down抵抗は入力を通常時にLowへ固定するための抵抗である。
回路例
3.3V
│
SW
│
GPIO
│
[10kΩ]
│
GND
スイッチOFF¶
GPIO = Low
スイッチON¶
GPIO = High
動作イメージ
OFF → 0
ON → 1
なぜ抵抗が必要なのか¶
もし抵抗を使わずに直接接続すると、
3.3V
│
GPIO
│
SW
│
GND
スイッチを押した瞬間
3.3V
↓
GND
が直接つながる。
これをショート(短絡)という。
大電流が流れて部品を破損する可能性がある。
抵抗を入れることで電流を制限できる。
よく使われる抵抗値¶
一般的には以下の値が使用される。
| 抵抗値 | 用途 |
|---|---|
| 1kΩ | 強いPull |
| 4.7kΩ | I2Cなど |
| 10kΩ | 最も一般的 |
| 47kΩ | 消費電力重視 |
| 100kΩ | 弱いPull |
STM32では10kΩがよく利用される。
STM32の内部Pull-up / Pull-down¶
STM32には内部Pull-upとPull-downが搭載されている。
そのため外付け抵抗が不要な場合も多い。
CubeMX設定例
GPIO Mode
Input Pull-Up
または
Input Pull-Down
を選択するだけで利用できる。
内部Pull-upの仕組み¶
内部では以下のような抵抗が自動で接続される。
3.3V
│
[内部抵抗]
│
GPIO
通常は30kΩ~50kΩ程度である。
スイッチ回路での利用¶
最もよく使われる例である。
Pull-up方式
3.3V
│
[10kΩ]
│
GPIO
│
SW
│
GND
状態
押していない → High
押した → Low
STM32開発ではこの構成が非常に多い。
I2CとPull-up抵抗¶
I2CではPull-up抵抗が必須である。
I2C信号
SCL
SDA
はオープンドレイン方式で動作する。
そのため、
3.3V
│
[4.7kΩ]
│
SDA
のようなPull-up抵抗が必要になる。
例
3.3V
│
├─4.7kΩ─ SDA
│
└─4.7kΩ─ SCL
オープンドレインとの関係¶
オープンドレイン出力は
Low
しか出力できない。
HighはPull-up抵抗によって作られる。
そのため
I2C
割り込み信号
リセット信号
などで頻繁に利用される。
Pull-upとPull-downの選び方¶
一般的にはPull-upの方が利用されることが多い。
理由
- 多くのマイコンが内部Pull-upを搭載
- I2Cでも利用される
- ノイズ耐性が高い場合が多い
Asterでの利用例¶
Asterでは以下の場所で利用される可能性がある。
DIPスイッチ¶
GPIO
↓
Pull-up
↓
DIP SW
↓
GND
ボタン入力¶
GPIO
↓
Pull-up
↓
Push SW
↓
GND
I2C通信¶
SDA
↓
4.7kΩ
↓
3.3V
SCL
↓
4.7kΩ
↓
3.3V
よくあるトラブル¶
Pull抵抗を付け忘れる¶
入力がフローティング状態になり誤動作する。
Pull-upとPull-downを逆に設定する¶
押した時の判定が逆になる。
I2CにPull-upが無い¶
通信できなくなる。
抵抗値が小さすぎる¶
無駄な電流が流れる。
抵抗値が大きすぎる¶
ノイズの影響を受けやすくなる。
まとめ¶
Pull-upとPull-downは入力信号を安定させるための抵抗である。
- フローティング状態を防ぐ
- スイッチ入力でよく利用される
- STM32には内部Pull機能がある
- I2CではPull-up抵抗が必須
- 一般的には10kΩ前後が利用される
組み込み開発では非常に基本的な知識であり、GPIOやI2Cを扱う際には必ず理解しておくべき重要な仕組みである。