キーボードの『チャタリング』を防ぐ。電気接点のはね返りとデバウンス処理の回路・制御設計
キーボードの特定のキーを1回だけ押したはずなのに、「aaaaa」のように同じ文字が連打されて入力されてしまう。自作キーボードや長年使い込んだメカニカルキーボードで発生するこの不快な現象は、一般に「チャタリング」と呼ばれる。
電子回路やマイクロコントローラの設計者にとって、これは「スイッチのバウンス(Bounce:はね返り)現象」として知られる日常的な問題であり、これを抑えるための処理を「デバウンス(Debounce)」と呼ぶ。この極小の電気ノイズを防ぐための、ハードウェアとソフトウェア双方のアプローチについて解説する。
なぜチャタリングは発生するのか?:物理的バウンス
メカニカルスイッチの内部は、金属の板(接点)同士が触れ合うことで電気が流れる(ON状態になる)仕組みになっている。
私たちがキーを押した瞬間、金属接点は一発でピタッと接触するわけではない。物理的な弾性があるため、接触する瞬間に金属同士がミクロなスケールで何度も衝突してはね返る。このはね返りがある間、電気的にはわずか数ミリ秒(通常1〜5ms程度)の間に、ONとOFFが超高速で繰り返されるノイズ信号が発生する。
オシロスコープでこの瞬間を観測すると、きれいな矩形波(ON/OFFの明確な境界)ではなく、ギザギザとした激しい振動波形が見える。この過渡状態をマイクロコントローラがすべて「高速な連打」として誤認してしまうのが、チャタリングの正体である。
ハードウェアによるデバウンス設計
チャタリングを回路レベルで除去する(コントローラにノイズを入れない)ために、以下のハードウェア対策が施されることがある。
- RCローパスフィルタの挿入: スイッチと並列にコンデンサ(C)を、直列に抵抗(R)を配置する。スイッチがON/OFFする際の急激な電圧変化(高周波ノイズ)をコンデンサの充放電特性によってなだらかなカーブに変調し、はね返りによる細かいスパイク状のノイズを吸収する。
- シュミットトリガによる閾値処理: RCフィルタによって波形がなだらかになると、今度は「ONとOFFの中間の曖昧な電圧」が長く続くことになる。これによる論理の不安定化を防ぐため、入力電圧が上がるときと下がるときで異なる閾値(ヒステリシス)を持つ「シュミットトリガ」ゲートを通すことで、きれいに2値化(0 or 1)された信号に整形する。
ソフトウェアによるデバウンスアルゴリズム
キーボードのような数百のキーを並べるデバイスでは、すべてのキーに個別のRCフィルタを設けると部品コストとスペースがかさむため、ファームウェア(ソフトウェア)側でデバウンスを行うのが一般的である。自作キーボードで使われるQMK Firmwareなどの制御ソフトウェアでは、いくつかのアルゴリズムを選択できる。
- 遅延確定法(Delay / Eager Debounce):
キーの状態変化(例:OFF→ON)を検知した瞬間、即座に入力を確定(ホストPCにキーコードを送信)し、その後一定時間(例:5ms)はキーの読み取り処理自体を「無視」する。
- メリット: 入力遅延がゼロに近い。ゲーミングキーボードなどに適している。
- デメリット: ノイズによる誤動作に弱い。
- カウント一致法(Sym Debounce):
一定の間隔(例:1msごと)でスイッチのピンをサンプリング(監視)し、N回連続して同じ状態(例:5回連続でON)が検出されて初めて、入力状態の遷移を確定させる。
- メリット: ノイズによる偶発的な誤入力を完璧に排除できる。
- デメリット: 状態が確定するまでにカウント回数分の遅延(数ミリ秒)が発生する。
キーボードの「カチッ」という心地よい打鍵感の裏側では、金属接点のはね返りという物理的ノイズを力学的にキャンセルするための、ミリ秒単位の制御工学が息づいている。
お役立ち情報
- A Guide to Debouncing by Jack Ganssle: 組み込みシステム界の大御所による、スイッチバウンスの実測データと最適なデバウンスアルゴリズムの徹底調査ペーパー(英語)。
- QMK Firmware Debounce API: 自作キーボードの標準ファームウェアQMKにおける、各種デバウンスアルゴリズムの設定と特性の解説。
- エンジニアのためのスイッチ入門(日本語): オムロンなどのスイッチメーカーによる、電気接点の物理的特性とバウンス対策の回路設計解説。
出典: