スイッチ デバウンスに関する究極のガイド (パート 2)

ブログ

ホームページホームページ / ブログ / スイッチ デバウンスに関する究極のガイド (パート 2)

Oct 01, 2023

スイッチ デバウンスに関する究極のガイド (パート 2)

Come spiegato nella prima parte di questa miniserie, quando giochi allo switch;

このミニシリーズのパート 1 で説明したように、スイッチを操作すると、新しい状態で停止する前に複数回バウンスすることがあります (スイッチの種類とスイッチの用語のコラムも参照してください)。 これは、スイッチの接点が通常、バネ性のある金属でできていることが原因です。 それらが一緒に衝突すると、その勢いと弾力性により、安定して接触する前に 1 回以上バラバラに跳ね返る可能性があります。 話している相手に応じて、これは「スイッチ バウンス」、「コンタクト バウンス」、または「チャタリング」として知られる場合があります。

その結果、スイッチがオンになったとき、またはスイッチがオフになったときにゼロから最大電流へのきれいな移行ではなく、急速なパルス電流が発生します。 スイッチバウンスは、電源回路(壁に取り付けられた照明スイッチなど)のような一部のアプリケーションでは問題になりませんが、オンオフパルスをデータストリームとして誤って解釈するほど高速に応答する論理回路やマイクロコントローラベースのシステムでは問題を引き起こす可能性があります。 。

弾む弾む

スイッチバウンスは、トグルスイッチ、ロッカースイッチ、押しボタンスイッチなど、私たちが一般的に使用するすべてのスイッチで発生します(逆説的に言えば、影響を受けない唯一のスイッチは、水銀チルトスイッチなど、めったに使用しないスイッチだけです)。 また、スイッチが閉じたときと再び開いたときの両方で発生します。 以下に示すように、SPST-NO (単極、単投、常開) トグル スイッチから始めましょう。

SPST-NO トグル スイッチのスイッチ バウンス (画像ソース: Max Maxfield)

場合によっては、バウンスが +ve と 0V の間をずっと通過することがあります。 これらを「クリーンな」バウンスと呼びましょう。

信号が完全に遷移せず、初期値と中間電圧の間を行ったり来たりする場合があります。 これは正式な用語ではありませんが、これらのバウンスを「ダーティ」バウンスと呼びましょう。 また、バウンス タイプがランダムに混在する場合もあります。

各スイッチは独自の方法で動作するため、唯一変わらないのは変化です。 さらに悪いことに、前回のコラムで述べたように、「同じスイッチでも、温度、湿度、時間帯、卓越した風の方向、チェック柄のポリエステル製ゴルフ パンツの色に応じて、その特性が異なる場合があります。」

次に、以下に示すような SPDT (単極双投) トグル スイッチについて考えてみましょう (わかりやすくするために、クリーン バウンスのみを示します)。

SPDT トグル スイッチのスイッチ バウンス (画像ソース: Max Maxfield)

ここでのスイッチは、最も一般的なタイプである「非短絡スイッチ」とも呼ばれるブレーク ビフォア メイク (BBM) カテゴリのものであると仮定していることに注意してください。 スイッチ用語のコラムで説明したように、これは、移動接点が他のスローとの新しい接続を作成する前に、現在のスローとの既存の接続を切断することを意味します。

スイッチ バウンスの場合、これは、最初にどちらかの端子が切断中 (オープン) でバウンスが発生し、その後に短い遅延が発生し、その後にどちらかの端子が切断中 (クローズ) でバウンスが発生することを意味します。

上に示した回路に関して、ロジック 0 = 0V、ロジック 1 = +ve と仮定すると、スイッチが安定状態にあるときは NO 端子と NC 端子が 10 と 01、安定状態では (潜在的に) 11 になることを意味します。 「クリーン」の場合、状態間の遷移中にバウンスしますが、00 になることはありません。これは重要ですか? SPDT スイッチのソフトウェアでデバウンスを実行することにした場合はそうなるかもしれません (率直に言って、スイッチごとにマイクロコントローラーのピンを 2 つ使用するため、その可能性は低いでしょう。しかし、私たちは不確実な世界に住んでおり、すべてが現実的です。可能)。

うるさい、うるさい

それほど遠くない将来、スイッチ バウンスに対処するためのさまざまな手法について説明する予定です。 心に留めておく必要があることの 1 つは、ノイズの可能性です。ノイズは、(システム内の他のケーブルからの) クロストーク、ケーブル内の電流による EMI (電磁干渉)、RFI (無線周波数干渉) など、さまざまな発生源から発生する可能性があります。信号を放射する無線システムからの影響、誰かがシステムに触れることによる ESD (静電気放電) (「ESD の冒険」も参照)、静電気干渉や雷などの自然原因によるものです。

スイッチバウンスソリューションはノイズに騙されてはいけません (画像出典: Max Maxfield)

設計者がこれを考慮していない限り、リセット信号はあちこちで蛇行する傾向があるため、特に問題が発生しやすくなります。 たとえば、Arduino ベースのシステムの場合、マザーボード上のリセット信号は任意のドーター カード (シールド) にファンアウトされます。

余談ですが、RFI、EMI、および EMC (電磁両立性) について詳しく知りたい場合は、Wyatt Technical Services の Ken Wyatt に問い合わせて、彼のセミナーやプレゼンテーションをチェックしてみるとよいでしょう。しかし、話はそれました…

スイッチのバウンスに対処するためにどのような技術を使用するか(ハードウェアで信号を前処理するか、ソフトウェアで後処理するか)、その技術が時折発生するノイズ「グリッチ」や「スパイク」にだまされないことが重要です。 たとえば、誰かが掃除機の電源を入れたことによって「自爆」シーケンスが引き起こされたとしたら、それは残念なことです(明るい面としては、少なくとも世界の終わりにはきれいなカーペットが伴うでしょう)。

経験的データ

スイッチのバウンスはどのくらい持続しますか? 個々のスイッチのバウンスパルスの幅はどれくらいですか? パルスは何回発生すると予想されますか? そうですね、質問してよかったです。 私が持っている最も信頼できるデータは、私の友人の 2 人からのものです。組み込みシステム時空連続体の伝説であるジャック ガンスルと、ダウンアンダー出身で自身のランチタイム連続体の伝説であるデビッド アシュトンです。

はるか昔、ジャックは独自のデバウンス ガイドを作成しました。 このミニシリーズのパート 1 を執筆したとき、私は「スイッチ バウンスの問題が蔓延している」、「現在、インターネット上には非常に多くの解決策が散在しており、ほとんどの若いエンジニアは知識欲を満たすためにそこを訪れています。良い面としては、これらの製品のいくつかは実際に機能しますが、悪い面としては、それらの機能は設計ではなく偶然によるものである可能性があります。」

幸いなことに、ジャックも同じ考えを持っています。 彼はガイドの中で、「ネットサーフィンをして、デバウンスへのさまざまなアプローチをサンプルしてください。ほとんどは非常に不十分です。実験的なバウンスパラメータに基づいているものはほとんどありません。ニュースグループに流布される逸話のメドレーが経験的証拠の代わりになります。」と述べています。

そこでジャックがやったのは、18 種類の異なるスイッチを用意し、5V 電源と 1kΩ プルアップ抵抗を備えた上記の回路と同様のテスト装置を構築し、各スイッチを 300 回押して、最小値と最大値を記録することでした。接点の開閉の両方でバウンスします。 2 つの異常値を破棄した後、残りのスイッチは平均 1,557 usec のバウンス、最大 6,200 usec のバウンスを示しました。 Jack はまた、個々のバウンス パルスの幅が 1 usec 未満から数百 usec までの間で変化することにも注目しています。

これは、David が執筆した 2 つのコラム「スイッチ バウンス アラウンド」と「SR ラッチを使用した SPDT スイッチ デバウンス」で見つけた内容と大まかに結びついています。 デビッドの場合、観察した個々のスパイクの幅は「数ナノ秒から約 100 マイクロ秒の間」であったと彼は私に語った。

ここで、ESD パルスの幅は数ナノ秒から 100 ナノ秒を超える場合があることに注意する必要があります。これは、ESD パルスが個々のスイッチ バウンス イベントと簡単に間違われる可能性があることを意味します。

そして、何回のバウンスが予想されるでしょうか? さて、Horowitz & Hill 著の『The Art of Electronics』 (第 2 版の 506 ページ) によると、「スイッチが閉じると、2 つの接点は実際に分離したり再接続したりするのが通常、約 1 ミリ秒の間に 10 ~ 100 回行われます。」 これは、この分野がいかに未定義であるかを示しています。なぜなら、この本は多くのエンジニアによって「エレクトロニクスのバイブル」とみなされているからです。しかし、その 1 ミリ秒の値 (私が若いエンジニアだったときにそう言われた値です) は、ジャックの値よりも小さいからです。彼の最大の所見は言うまでもなく、平均的な所見です。

スイッチ バウンスに対処する際に最後に注意しなければならないのは、パルスの全体的なプロファイルです。 私たちのほとんどがこれらを見ることを期待する方法は、David の 2 番目のコラムの次のスクリーンショットと一致すると思います。

SR ラッチに電力を供給する SPDT スイッチの波形 (画像提供: David Ashton)。

この例では、SPDT スイッチをオフにしているため、最初に表示されるのは、NC 端子が 0 から 1 に遷移し、切断 (開く) ときに多少の跳ね返りが見られることです。 遅延の後、NO 端子は 1 から 0 への遷移を開始します (閉じるとき)。 QA および QB 出力に反映されるように、SR ラッチをトグルさせるのは NO 端子の最初の立ち下がりエッジです。

これらすべての重要な点は、スイッチのバウンスが NC 端子と NO 端子の初期遷移の近くに集まっているということですが、これはそれほど驚くべきことではないようです。 しかし、物事はいつもこんなにきちんと整頓されているわけではありません。 たとえば、ジャックの論文では、O スイッチと Q スイッチについて次のように述べています (以下の図は、私の安っぽく陽気な解釈にすぎません。オリジナルはジャックの論文で見ることができます)。

ジャックのスイッチ O と Q に見られるバウンス パターン (画像ソース: Jack のオリジナルの Max Maxfield)

Jack が論文で述べているように、「O は非常に優れた高品質のマイクロスイッチで、1.18 ミリ秒を超えるバウンスは決して見られませんでした。しかし、さらに詳しく調べてみると、通常、単純なフィルター コードで大混乱を引き起こすことが保証されているパルス列を生成していることがわかりました。高いものはありません」 -スピードハッシュ、除去するのが難しい固体の 1 と 0 のみです。1 回の操作で、時間範囲 12 ~ 86 μ秒の 7 つのきれいなゼロ レベルと、6 ~ 95 μ秒の範囲の 7 つの論理 1 が生成されました。フィルタリングは簡単ですか? もちろんです。しかしそうではありません。いくつかの同一の読み取りを探すだけのコードによって。」

スイッチ Q の場合、ジャックは次のように述べています。「Q は解放されると、840 usec のハッシュを生成する前に 480 usec の間 High になります。これは、設計が適切でないと割り込みシステムを狂わせる確実な方法です。」

次回…

まあ、場面は十分に設定できたと思います。 これでロックンロールの準備が整いました。 次回のコラムでは、私たちのいたずらなバウンス信号を、母親が誇りに思うような鮮明でクリーンな信号に変換するために使用できるさまざまなハードウェアおよびソフトウェアのテクニックを詳しく掘り下げていきます。