目次
006.プルダウン抵抗を配置する
2026-08-17 清書とかを頼むとAIさんが「プルアップ!プルダウン!」と大変しつこ……推奨してくるので。
概要
- タクトスイッチの回路にプルダウン抵抗を配置する。プルダウンにしたのはイメージと論理に合致して自分が理解しやすいから。
- プルダウン抵抗が無い時の回路振る舞いが改善するのか確かめる。
GND
すっかり書き忘れて…
GND : 電圧の基準(0V)であり回路的に電流の出口でもある
やめてだいぶ簡単に書いたんだからいっぱい指摘しないで…
抵抗を配置する理由
プルダウン/プルアップ抵抗
GPIOは入力PINの電圧を基準にHigh/Lowを決める。
プルダウン/プルアップ抵抗を配置する理由は 入力が未接続状態の時に入力をLow/High(プルダウン/プルアップ)に固定してノイズを防ぐ 為。
簡単な回路で
- ノイズが気にならない
- 気にしなくていい
なら配置しなくても実用上問題は無いかもしれない。
プルダウン抵抗
入力PINとGND間に配置する抵抗。図だとスイッチがONの時入力PINは3.3VとつながりHigh状態になる。
プルアップ抵抗
入力PINと3.3V間に配置する抵抗。図だとスイッチがOFFの時入力PINは3.3VとつながりHigh状態になる。
保護抵抗
以前の回路と同様で、GPIOが意図せぬ理由で入力から出力に変わった時、過大電流が流れるのを防ぐために配置する。
抵抗 Rg が保護抵抗。
プルダウン、プルアップのどちらも、GPIOが誤って出力設定になった場合や、外部回路と反対の電位でぶつかった場合に、保護抵抗 Rg が過大な電流が流れるのを防ぐ。
プルダウン時
スイッチON + GPIO出力がLow時、3.3VからGPIOの出力回路側へ過大電流が流れ得る。
配置したRgが電流を制限する。
| スイッチ | GPIO出力 | 状況 |
|---|---|---|
| OFF | Low | 問題なし。GPIOもプルダウンもLow |
| OFF | High | GNDへ電流が流れるが、Rg、Rが電流を制限する |
| ON | High | 問題なし。3.3VとGPIO Highが同方向 |
| ON | Low | Rgが電流を制限する |
プルアップ時
スイッチON + GPIO出力がHigh時、GPIOからGNDへ過大電流が流れ得る。
配置したRgが電流を制限する。
| スイッチ | GPIO出力 | 状況 |
|---|---|---|
| OFF | High | 問題なし。GPIOもプルアップもHigh |
| OFF | Low | 3.3VからGPIOへ電流が流れるが、R、Rgが制限する |
| ON | Low | 問題なし。GPIOもGNDもLow |
| ON | High | Rgが電流を制限する |
プルダウン抵抗なしで実験
回路を長くしてノイズなんかを拾うように…というAIさん推奨構成。
残念ながら外付けのカードリーダーのUSBケーブルをワザと線の上(写真で言うところの緑の結線)に被せてファイルコピーなんかを実行してみたが、ノイズは見られず。
005.LEDとタクトスイッチを連動するでやった回路に少し手を入れる。
LEDのGNDも接続したいので右側の電源ライン(マイナス側)とP8_1を接続。
ついでなので左側の電源ライン(プラス側)にP9_3(3.3V)を接続。
そしてTSW 1 と P8_45 間を意図的に長くした。
タクトスイッチの押す離すの間隔を狭めるとそれらしい不安定さが出てきた。
- Pushdemo3.sh
#!/bin/bash # TACT SW 1 sudo config-pin P8_45 gpio >/dev/null sudo stdbuf -oL gpiomon gpiochip2 7
結果、RISING→FALLINGの繰り返しのはずがRISING連続、な検出。
不安定な入力は確認できた。ただし今回の結果だけでは、AIさんの言うノイズなのか、タクトスイッチのチャタリングなのかは判別できない。
そしてこれ以上詳しく調べるつもりもない。ヤだよ面倒だもん…
debian@BeagleBone:~$ ./Pushdemo3.sh event: RISING EDGE offset: 6 timestamp: [ 119480.872924936] event: FALLING EDGE offset: 6 timestamp: [ 119481.023533483] event: RISING EDGE offset: 6 timestamp: [ 119482.129727678] event: FALLING EDGE offset: 6 timestamp: [ 119485.022289240] event: RISING EDGE offset: 6 timestamp: [ 119487.168530954] event: FALLING EDGE offset: 6 timestamp: [ 119487.241813167] event: RISING EDGE offset: 6 timestamp: [ 119487.343832366] event: FALLING EDGE offset: 6 timestamp: [ 119487.388211435] event: RISING EDGE offset: 6 timestamp: [ 119488.588575460] event: FALLING EDGE offset: 6 timestamp: [ 119488.725893697] event: RISING EDGE offset: 6 timestamp: [ 119488.834687524] event: FALLING EDGE offset: 6 timestamp: [ 119488.967555410] event: RISING EDGE offset: 6 timestamp: [ 119489.587770591] event: FALLING EDGE offset: 6 timestamp: [ 119489.734967908] event: RISING EDGE offset: 6 timestamp: [ 119489.833294181] event: FALLING EDGE offset: 6 timestamp: [ 119489.978722865] event: RISING EDGE offset: 6 timestamp: [ 119490.074842523] event: FALLING EDGE offset: 6 timestamp: [ 119490.209937355] event: RISING EDGE offset: 6 timestamp: [ 119490.501814430] event: FALLING EDGE offset: 6 timestamp: [ 119492.696805702] event: RISING EDGE offset: 6 timestamp: [ 119493.268147798] event: FALLING EDGE offset: 6 timestamp: [ 119493.422785965] event: RISING EDGE offset: 6 timestamp: [ 119494.266001031] event: RISING EDGE offset: 6 timestamp: [ 119494.400179944] event: RISING EDGE offset: 6 timestamp: [ 119494.400428767] event: FALLING EDGE offset: 6 timestamp: [ 119494.400562095] event: RISING EDGE offset: 6 timestamp: [ 119494.844143796] event: FALLING EDGE offset: 6 timestamp: [ 119495.003756169] event: RISING EDGE offset: 6 timestamp: [ 119496.873623910] event: FALLING EDGE offset: 6 timestamp: [ 119497.099399800] event: RISING EDGE offset: 6 timestamp: [ 119497.099472172] event: RISING EDGE offset: 6 timestamp: [ 119497.099618958] event: RISING EDGE offset: 6 timestamp: [ 119497.099891988] event: FALLING EDGE offset: 6 timestamp: [ 119497.099994442] event: RISING EDGE offset: 6 timestamp: [ 119525.229745690] event: FALLING EDGE offset: 6 timestamp: [ 119525.368526286] event: RISING EDGE offset: 6 timestamp: [ 119525.991826058] event: FALLING EDGE offset: 6 timestamp: [ 119527.286269567] event: RISING EDGE offset: 6 timestamp: [ 119527.286490975] event: RISING EDGE offset: 6 timestamp: [ 119527.286555305] event: RISING EDGE offset: 6 timestamp: [ 119527.286646051] event: RISING EDGE offset: 6 timestamp: [ 119527.286789504] event: RISING EDGE offset: 6 timestamp: [ 119527.286875750] event: FALLING EDGE offset: 6 timestamp: [ 119527.286925498] event: RISING EDGE offset: 6 timestamp: [ 119710.378896851] event: FALLING EDGE offset: 6 timestamp: [ 119711.339763310]
プルダウン抵抗ありで実験

引用:BeagleBone Black 公式ドキュメントPDF 66ページ
LEDのGNDも接続したいので右側の電源ライン(マイナス側)とP8_1を接続。
ついでなので左側の電源ライン(プラス側)にP9_3(3.3V)を接続。
R1は保護抵抗。R2がプルダウン抵抗。
同じようにタクトスイッチを連打したり緑の結線に手を近づける等したが、心持ち連続した立上りイベント/立下りイベントが減った感じがするのみで、状況はプルダウン抵抗なしの時とほぼ変わらず。
チャタリングの問題なのだろうと推測した。
チャタリング
スイッチのON/OFFで理論的な電位変化と実際の電位変化は異なる。
スイッチの切り替え時に物理的な現象で、
スイッチを押し込んで接点が接触するとその際に跳ね返って離れまた接触して離れ…最終的に跳ね返りは収まる。イメージ的には、ボールを落として床で跳ね返り、徐々に跳ね返りが減衰してやがて制止する、そんな状況。
スイッチを離した時も同様な事が起こる。
| 論理上のON/OFF | 計測上のON/OFF |
|---|---|
| |
この跳ね返り現象はとても短い間隔で発生し、この跳ね返りで起きる電位変化がチャタリングとして観測される。
チャタリング除去
本当の入力とチャタリングによる入力を判別する方法は無い。
機材の設置場所や室温湿度などの要因でチャタリングの期間は変動するし、操作する人間が非常に素早い操作をしている可能性だってある。
もしチャタリングが問題になるなら、何らかの基準や制限を使ってチャタリング判定・無効化を実施する。
入力状態から推測するソフトウエア的手法、発生期間をON/OFF状態に倒すハードウエア的手法がある。
ただしこれらの判定・制限によって正しい入力がチャタリングとして処理されたり、入力に対する反応が遅れたり、とデメリットもある。
