タクタイルスイッチやメカニカルスイッチを使って高速応答の回路を作っても、なぜかうまく動作しないということがあります。これは、スイッチの接点のバウンシング(チャタリング)が原因である可能性があります。
スイッチ接点の原理
直感的には、スイッチの接続は速くて、ダイレクトで、しっかりしていると思います。しかし、実際のところは少し違うようです。
図1:スイッチング信号の理想的な状態
図2:スイッチング信号の実際の状態
実際には、導電性のポイント間のスイッチの接触は、可動式の機械的要素によって確立または分離されます。一般的なスイッチは、接続の開閉に必要な数十ミリ秒の間に、経年変化、動作慣性、機械設計、スイッチ接触面の微細な状態などの影響を受けて、複数の遷移を繰り返します。一般的に「スイッチバウンス」と呼ばれるこの動作は、避けて通れない現実です。
メカニカルスイッチでは、データシートにバウンスタイムの情報が記載されている場合があります。例えば、Würth Elektronik社のWS-TASV series J-Bend SMT Tact Switch 4.7x3.5 mmなどです。
デバウンス回路
ここでは、一般的なディスクリート部品を使ってローパスフィルタを作り、この不要な信号を除去するシンプルなデバウンス回路を紹介したいと思います。
1.フィルタの追加
シンプルなRCフィルタは、ローパスフィルタを作る最も安価でシンプルな方法の一つです。スイッチが開いているときは、コンデンサがR1+R2を通して充電され、電圧の上昇が緩やかになります。スイッチが閉じているときは、コンデンサはR2を通して制御された速度で放電されます。
フィルタを構成する部品が適切かつ慎重に選択されていれば、充放電の間にスイッチバウンシングを吸収でき、スムーズに移行することができます。
コンデンサと抵抗の値を計算するには、上記の回路に適用される以下の時定数の公式を使用できます。
τ = (R1 + R2) ⋅ C1
ꞇ:時定数(単位:秒)
R:抵抗値(単位:Ω)
C:静電容量(単位:F)
この時定数は、スイッチのデバウンスの必要性と、回路の必要な応答時間のバランスをとっています。1つの時定数の間に、電圧は最終値の63%まで上昇するか、37%まで下降します。いずれの場合も、時定数の5倍の時間で99%に達します。
例えば:
バウンスタイム:仕様では10ms
R1:電流を制限するために、伝統的な値である1kΩを選ぶことができます。
R2:デバウンスのために2つの標準的な値を選びます。10kΩと47kΩです。
電源電圧:DC5V
したがって、計算上は2つの容量値が得られます。
C1= τ / (R1+R2 )
そして、この回路の2つの値の組み合わせを提案しています。
- ソリューション1:R1=1kΩ、R2=10kΩ、C1=1μF
- ソリューション2:R1=1kΩ、R2=47kΩ、C1=220nF
2.ダイオードの追加
R2の両端にD1ダイオードを追加することで、充電時間と放電時間を別々に制御することができます。これにより、R1とD1を使用してコンデンサの充電の移行時間を早くし、R2のみを使用してコンデンサの放電時間を異なるものにすることができます。この場合、ダイオードはブロック状態になっているためです。
3.バッファの追加
アプリケーションが未定義の値(0.8Vや2.5Vなど)に対応できない場合は、ヒステリシス付きのシュミットトリガバッファが必要になることがあります。下の図は、オンとオフの時間を変え、ヒステリシスを追加した回路です。回路の応答時間は、マイクロコントローラのサンプリング時間と調整する必要があるかもしれません。
4.過渡現象保護
スイッチが遠くにある場合や長い回線の末端にある場合は、過電圧、ESD、その他の過渡現象に対する保護が必要になることがあります。これは、入力回路のフロントエンドにフェライトビーズとTVSダイオードを置くだけの簡単なものです。
PaulHutch Trusted Contributor
さらに詳しい情報は、こちらの2部構成の記事をお勧めします。
http://www.ganssle.com/debouncing.htm