Instant Engineering

エンジニアの仕事効率を上げる知識をシェアするWeb記事/機械設計/TPS/QC品質管理

デバウンス処理とは?チャタリング対策の基本

押しボタンを1回押しただけなのに、PLCやマイコン側では何回も押されたように見えることがあります。

原因の多くは、スイッチ接点が一瞬で安定せず、細かなON/OFFを繰り返すチャタリングです。

デバウンス処理とは、この揺れる入力信号を一定時間待ってから有効判定する入力安定化の方法です。

設定を誤ると、二重カウント、誤起動、押しても反応しない遅れにつながります。

本記事では、チャタリングの仕組み、PLCとマイコンでの処理方法、時間設定、ハード対策までを解説します。

 

1. デバウンス処理とは:不安定なスイッチ入力を安定させる技術

デバウンス処理とは、スイッチやリレー接点のON/OFFが細かく揺れる期間を無視し、安定後の状態だけを入力として採用する処理です。

英語のbounceは「跳ね返り」を意味します。

機械接点が閉じる瞬間に、金属接点が微小に跳ねてON/OFFを繰り返すため、この現象をチャタリングまたはバウンスと呼びます。

デバウンスは、このバウンスを取り除くという意味で使われます。

制御機器では、押しボタン、リミットスイッチ、近接スイッチのリレー出力、ロータリースイッチなどで問題になります。

入力信号の基本を整理したい場合は、先にI/Oの考え方を押さえておくと理解しやすくなります。

 

チャタリングは故障ではなく接点の自然な挙動です

チャタリングは、スイッチの品質が悪いから必ず発生するというものではありません。

機械式接点であれば、構造上ある程度は発生するものです。

人間の目には一瞬のONに見えても、制御機器はミリ秒単位で入力を読んでいます。

そのため、接点の揺れがそのまま複数回の入力として解釈されることがあります。

特にカウンタ、起動指令、モード切替、異常リセットの入力では、1回の操作が確実に1回だけ処理されることが重要です。

 

デバウンス処理の目的は誤動作をなくすことです

デバウンス処理の目的は、入力を鈍くすることではありません。

不要な揺れだけを取り除き、必要な操作は確実に拾うことです。

短すぎる設定ではチャタリングを取り切れません。

長すぎる設定では、押してから反応するまでの遅れが大きくなります。

つまり、デバウンス時間は「誤動作しない安定性」と「操作に対する応答性」のバランスで決める必要があります。

 

関連記事

instant.engineer

 

2. チャタリングが起きる仕組み:接点は一瞬で安定しません

スイッチを押すと、内部の金属接点が接触します。

しかし、金属同士がぶつかる瞬間には反発や振動が起きます。

この微小な振動により、電気的にはONとOFFが短時間で何度も切り替わります。

この切り替わり時間はスイッチの種類、接点構造、押し方、劣化、周囲環境によって変わります。

接点が摩耗していたり、油分や粉じんが付着していたりすると、波形がさらに不安定になる場合があります。

 

ON時だけでなくOFF時にも発生します

チャタリングは、スイッチを押した瞬間だけに起きるわけではありません。

指を離して接点が開く瞬間にも、接点の振動やアークの影響で入力が揺れることがあります。

そのため、実務ではON側だけでなくOFF側の安定確認も重要です。

例えば安全扉の確認スイッチでは、閉じたことだけでなく開いたことも確実に検出する必要があります。

ONディレイだけで処理すると、OFF時の揺れを見落とすことがあります。

 

チャタリングとノイズは分けて考えます

チャタリングとノイズは、どちらも入力信号を乱します。

ただし、発生原因は異なります。

チャタリングは接点の機械的な揺れです。

ノイズは、モータ、インバータ、リレーコイル、長い配線などから混入する電気的な妨害です。

同じ誤入力に見えても、対策が違います。

チャタリングには時間判定が有効ですが、ノイズには配線分離、シールド、接地、フィルタ、入力回路設計が必要になる場合があります。

センサ信号を扱う場合は、A/D変換のようなアナログ信号処理とは違い、デジタル入力の閾値と時間判定を分けて考えます。

 

項目 チャタリング 電気ノイズ
主な原因 機械接点の跳ね返り 誘導ノイズ、サージ、配線影響
発生タイミング ON/OFFの切り替え直後 負荷動作時や周辺機器の切替時
代表対策 デバウンス時間、入力フィルタ 配線分離、シールド、接地、フィルタ
確認方法 オシロスコープで接点波形を見る 負荷動作と誤入力の相関を見る

 

3. PLCでのデバウンス処理:入力フィルタとタイマを使う

PLCでは、入力ユニットやCPU側に入力フィルタ機能が用意されていることがあります。

入力フィルタは、入力が変化してもすぐには確定せず、一定時間同じ状態が続いた場合にだけ内部入力として反映する仕組みです。

ラダーやファンクションブロックでタイマを組み、自分でデバウンス処理を作ることもあります。

どちらを使うかは、対象入力の重要度、必要な応答速度、既存プログラムの設計方針で決めます。

シーケンス制御では、入力の一瞬の揺れが次の動作条件に伝播するため、入力段階での安定化が重要になります。

 

入力フィルタは全体の入力安定化に向いています

PLCの入力フィルタは、入力ユニット単位やチャンネル単位で設定できる場合があります。

簡単に設定でき、プログラムを複雑にしない点がメリットです。

押しボタンやリミットスイッチのように、ある程度遅れても問題ない入力では使いやすい方法です。

一方で、高速カウントや短パルス検出には不向きです。

フィルタ時間より短い入力は、正しい信号であっても無視される可能性があります。

 

タイマ処理は入力ごとの条件調整に向いています

ラダー上でタイマを使う方法は、入力ごとに細かく条件を変えられる点がメリットです。

例えば、起動ボタンは20ms、扉スイッチは50ms、ワーク検出は5msのように使い分けられます。

ON側だけを安定判定するのか、OFF側も安定判定するのかも設計できます。

また、入力確定後にワンショットを作れば、1回の押下を1パルスとして扱えます。

ただし、プログラムが増えるほど保守性は下がるため、命名やコメントを整理しておく必要があります。

 

スキャンタイムとの関係を必ず確認します

PLCは入力更新、プログラム実行、出力更新を周期的に繰り返します。

そのため、デバウンス時間はスキャンタイムと独立して考えることはできません。

例えばスキャンタイムが10msの場合、5msのチャタリングを完全に細かく見ることは難しくなります。

逆に、スキャンタイムが長いPLCで過度に短いタイマを設定しても、実際の判定精度はスキャン周期に制約されます。

応答遅れの原因を考えるときは、入力フィルタ、スキャンタイム、タイマ、出力機器の遅れを合算して見る必要があります。

 

4. マイコンでのデバウンス処理:GPIO入力を安定して読む

マイコンでは、スイッチ入力をGPIOピンで読み取ることが多くあります。

GPIOは高速に状態を読めるため、チャタリングも細かく検出してしまいます。

そのため、ソフトウェア側で入力の安定時間を確認する処理が必要になります。

単純な待ち時間を入れる方法もありますが、処理全体を止めてしまうため、実務では周期監視や状態遷移で処理する方が安全です。

マイコンの構成を整理したい場合は、マイコンの記事も合わせて確認すると全体像がつかみやすくなります。

 

連続一致方式:一定回数同じ値なら確定します

よく使われる方法は、一定周期で入力を読み、同じ状態が連続したら確定する方式です。

例えば1msごとに入力を読み、10回連続でONならON確定とします。

この場合、デバウンス時間はおおむね10msです。

短いチャタリングは途中でカウントがリセットされるため、確定入力にはなりません。

この方式は実装がわかりやすく、複数のスイッチを同じ周期で処理しやすい点がメリットです。

 

時刻比較方式:最後の変化からの経過時間で判断します

もう一つの方法は、入力が変化した時刻を記録し、一定時間変化しなければ確定する方式です。

システムタイマを使って、最後に揺れた時刻から20ms経過したら状態を採用します。

この方式は、スイッチごとに異なる時間を設定しやすい点がメリットです。

一方で、時刻管理や状態変数が必要になるため、単純な連続一致方式より実装は少し複雑になります。

複数入力を扱う場合は、入力ごとの構造体や配列で状態を管理すると保守しやすくなります。

 

割り込み入力では再入防止が必要です

スイッチ入力を割り込みで処理する場合、チャタリングのたびに割り込みが発生することがあります。

これにより、1回の押下で複数回の割り込み処理が実行される場合があります。

対策としては、最初の割り込みで一時的に割り込みを無効化し、一定時間後に状態を再確認します。

または、割り込みでは時刻だけを記録し、実際の判定は周期タスクで行います。

割り込み処理を使う場合ほど、チャタリング対策を後回しにしないことが重要です。

 

関連記事

instant.engineer

 

5. デバウンス時間の決め方:短すぎても長すぎても問題です

デバウンス時間は、固定値を暗記するものではありません。

対象スイッチの実測波形、必要な応答速度、処理周期、誤動作時の影響を見て決めます。

一般的な押しボタンであれば、数msから数十msの範囲で検討することが多いです。

ただし、これはあくまで目安です。

高速に反応させたいセンサ入力では短くする必要がありますし、人が操作するボタンでは少し長めでも問題になりにくいです。

 

まずは許容できる応答遅れから逆算します

デバウンス処理を入れると、必ず入力確定までの遅れが増えます。

操作ボタンで30ms遅れても人間にはほとんど気になりません。

しかし、高速搬送中のワーク検出では30msが大きな位置ズレになることがあります。

搬送速度が1m/sなら、30msの遅れは約30mmの位置差になります。

このように、時間遅れを実際の移動量や制御タイミングに置き換えて判断することが大切です。

 

入力の種類ごとに設定を変えます

すべての入力に同じデバウンス時間を設定するのは、わかりやすい反面、最適とは限りません。

非常停止や安全系は、専用安全機器や安全規格に従うべきであり、通常のデバウンス処理だけで判断してはいけません。

人の操作ボタン、低速リミットスイッチ、ワーク検出、パルス入力では要求が異なります。

高速パルスやエンコーダ信号に長いデバウンスを入れると、正しいパルスまで消してしまう危険があります。

用途別の目安を表にまとめると、次のようになります。

 

入力の種類 重視する点 設定の考え方
押しボタン 二重押し防止 操作感を損なわない範囲で長めにする
リミットスイッチ 確実な位置検出 機械速度と停止距離を見て決める
ワーク検出 位置ズレ防止 搬送速度から許容遅れを計算する
高速パルス パルス欠落防止 通常のデバウンスではなく専用入力を使う

 

応答遅れは合算して評価します

実際の応答遅れは、デバウンス時間だけでは決まりません。

入力回路の遅れ、PLCスキャン、プログラム処理、通信周期、出力機器の応答が重なります。

例えば、入力フィルタ20ms、スキャン10ms、タイマ10ms、出力リレー10msなら、最悪で50ms程度の遅れを考える必要があります。

設備の動作が遅い原因を調べるときは、1箇所だけを見るのではなく、入力から出力までの時間を分解します。

リアルタイムOSのように周期性が重要なシステムでは、タスク周期と入力確定タイミングの関係も確認します。

 

6. ハードウェア対策:RCフィルタとシュミットトリガを使う

デバウンス処理はソフトウェアだけで行うとは限りません。

入力回路側でチャタリングやノイズを丸めてから、PLCやマイコンに入力する方法もあります。

代表的なのがRCフィルタ、シュミットトリガ、プルアップ・プルダウン抵抗の適切な設計です。

ソフト処理だけで不安定な場合は、回路と配線も含めて見直します。

特に長い配線、盤外スイッチ、モータ近傍のセンサでは、電気ノイズ対策も同時に必要です。

 

RCフィルタは急な変化をなだらかにします

RCフィルタは、抵抗とコンデンサで入力電圧の変化をゆっくりにする回路です。

短いチャタリング波形を平滑化できるため、デジタル入力の安定化に使われます。

ただし、応答も遅くなる点に注意が必要です。

また、入力回路の閾値付近で電圧がゆっくり変化すると、かえって不安定になる場合があります。

そのため、RCフィルタだけでなく、次に説明するシュミットトリガと組み合わせることがあります。

 

シュミットトリガは閾値にヒステリシスを持たせます

シュミットトリガは、ON判定の閾値とOFF判定の閾値を別にする回路です。

入力電圧が閾値付近で揺れても、出力が細かく反転しにくくなります。

アナログ的にゆっくり変化する信号を、きれいなデジタル信号に整形する用途に向いています。

マイコンの入力ピンによっては、内部にシュミットトリガ特性を持つものもあります。

ただし、すべてのピンが同じ特性とは限らないため、データシートで確認する必要があります。

 

プルアップ・プルダウンの不足も誤入力の原因です

スイッチが開いているときに入力ピンが浮いていると、周囲ノイズでON/OFFが不定になります。

この状態をフローティングと呼びます。

フローティングはチャタリングではありませんが、見た目には同じような誤入力として現れます。

マイコンでは内部プルアップを有効にするか、外部抵抗で確実に電位を固定します。

入力状態とメモリ配置を整理する場合は、メモリマップの考え方も関連します。

 

7. 実装例とトラブル切り分け:どこで揺れているかを確認する

デバウンス処理を入れても誤動作が残る場合は、処理内容だけを疑うのではなく、入力の発生源から確認します。

スイッチ自体が揺れているのか、配線にノイズが乗っているのか、プログラムで二重処理しているのかを分けます。

現場では、入力ランプ、PLCモニタ、オシロスコープ、ログ出力を使い分けます。

「押していないのに入力が入る」のか、「押した時だけ複数回入る」のかでも原因は変わります。

 

PLCでは入力接点と内部確定ビットを分けます

PLCで実装する場合は、物理入力をそのまま制御条件に使わず、デバウンス済みの内部ビットを作ると管理しやすくなります。

例えば、入力X0が一定時間ONしたら内部ビットM0をONにします。

制御本体ではX0ではなくM0を参照します。

こうすると、入力安定化のロジックと設備動作のロジックを分離できます。

あとからデバウンス時間を変更しても、制御本体を大きく触らずに済みます。

 

マイコンでは状態遷移で管理すると安全です

マイコンでは、入力を「OFF安定」「ON判定中」「ON安定」「OFF判定中」のように状態で管理すると誤動作を防ぎやすくなります。

状態遷移にすると、ON確定時だけイベントを発行できます。

長押し、短押し、ダブルクリックのような処理も拡張しやすくなります。

ただし、処理が複雑になるほどテストも重要です。

ファームウェアとして実装する場合は、入力条件と期待動作をテスト項目に落とし込みます。

 

現場確認では波形とログをセットで見ます

チャタリング対策の確認では、入力波形だけを見ると判断を誤ることがあります。

波形上は揺れていても、制御上は問題なく除去できている場合があります。

逆に、波形では目立たない短いノイズでも、プログラムの取り方によって誤動作する場合があります。

そのため、オシロスコープの波形、PLCの入力モニタ、内部ビットのログを合わせて確認します。

設備全体の入力処理を設計する場合は、組込みシステムとしての周期設計や異常時の扱いも考慮します。

 

よくある失敗:二重処理と取りこぼしを分けます

デバウンス処理の不具合では、二重処理と取りこぼしを混同しがちです。

二重処理は、1回の入力が複数回のイベントとして処理される状態です。

この場合は、入力確定後にワンショット化しているかを確認します。

取りこぼしは、正しく押した入力が確定入力にならない状態です。

この場合は、デバウンス時間が長すぎないか、入力フィルタが重複していないかを確認します。

PLC入力フィルタ、ラダー上のタイマ、上位通信側の再判定を重ねると、意図せず大きな遅れになることがあります。

また、機械の動作が遅れたときに、入力側だけを疑うのも危険です。

出力リレー、電磁弁、モータ始動、通信周期など、入力以降の遅れも同時に確認します。

 

8. まとめ:デバウンス処理は入力品質を決める基本対策です

デバウンス処理は、スイッチ入力のチャタリングを取り除き、PLCやマイコンで安定した入力判定を行うための基本技術です。

押しボタン、リミットスイッチ、接点出力センサでは、1回の操作を1回の入力として扱うために欠かせません。

PLCでは入力フィルタやタイマ処理を使い、マイコンではGPIOの周期読み取りや状態遷移で実装します。

重要なのは、デバウンス時間を長くすればよいと考えないことです。

長すぎる設定は、応答遅れや位置ズレの原因になります。

短すぎる設定は、チャタリングを取り切れず二重カウントや誤起動につながります。

入力の種類、機械速度、必要な応答性、誤動作時のリスクを見て設定しましょう。

また、誤入力の原因が本当にチャタリングなのか、ノイズやフローティングなのかを切り分けることも大切です。

ソフト処理、入力回路、配線、接地を合わせて確認することで、安定した制御入力を作ることができます。