スイッチを開いたときにデバウンスする必要がありますか?


8

マイクロコントローラーの入力に5Vへのプルアップ抵抗とそれに接続されたグラウンドへのスイッチ(通常はオープン)があるとします。スイッチを閉じるとデバウンス(私の場合はソフトウェア)する必要があることを知っていますが、スイッチを開くとデバウンスが必要ですか?

回答:


11

はい、スイッチの状態が変わるたびに単一のエッジが保証されるようにする場合は、双方向のデバウンスが必要です。

幸い、スイッチがマイクロコントローラーに接続されている場合、デバウンスのための追加のハードウェアは必要ありません。マイクロに内部プルアップがある場合、多くの場合、マイクロピンとグランド間のスイッチ以外に外部に必要なものはありません。

50 msが適切なデバウンス時間です。ほとんどのスイッチはそれよりもはるかに短い時間でバウンスしますが、いくつかはそれほど長くなる場合があります。ただし、50ミリ秒でも人間のユーザーには瞬時に感じられるので、信頼性も高まります。唯一の違いは、ファームウェアで数える数なので、追加のコストはかかりません。とにかく、他の理由で通常1 msの定期的な割り込みがあるので、スイッチがその割り込みの連続で50回同じ状態にある場合、新しい状態にデバウンスしたことを宣言します。

コメントに対するデバウンスロジックの詳細:

通常、スイッチの公式のデバウンス状態を示すグローバルビットがあります。これは、スイッチがどのように設定されているかを知る必要があるロジックが使用するものです。必要な唯一の追加の状態は、割り込みルーチン内のカウンター(通常は1バイト)です。割り込みが1 msごとで、デバウンス時間が50 msだとします。各割り込みについて:

瞬間的な状態がデバウンスされた状態と一致する場合:
  カウンターを50にリセット
  できた

瞬間的な状態がデバウンスされた状態と異なる場合:
  デクリメントカウンター
  カウンターが0に達した場合:
    新しいデバウンス状態を宣言する
    カウンターを50にリセット
  できた

しばらく前にwww.embedded.comに非常に良い記事がありました。著者は一連のスイッチをつかんで、電源とデジタルストレージスコープの入力の間に配置し、バウンス特性を調べました。最後の結論は、「1つのサイズですべてに適合する」デバウンス時間を選択することはできないということです。特定の各スイッチを特徴付け、どのようにバウンスするかを確認する必要があります。
ジョンR.ストローム2012年

@ジョン:あなたはリンクを与えることができますか?ユーザーを満足させるのに十分短い場合、すべてのスイッチで最悪の最大バウンス時間の仮定を使用できない理由がわかりません。50msのOlinが言及するIMEは、両方の基準を満たします。
Wouter van Ooijen 2012年

オリン、ありがとう。では、過去50回の割り込みでスイッチがどのような状態であったかをどのように追跡するのでしょうか。スイッチが最後の割り込みと同じ状態の場合は変数をインクリメントし、状態が変化した場合は変数をクリアし、スイッチが50に達した場合はスイッチがデバウンスしたと見なします。それを行う効率的な方法はありますか?
ネイト

1
これは上記の記事ではないかもしれませんが、興味深い情報がたくさんあります:ganssle.com/debouncing.htmデバウンス を扱う人は誰でも読むべきです。
UnconditionallyReinstateMonica 2012年

1
@ネイト:回答への追加を参照してください。
Olin Lathrop、2012年

2

ええ、私はそれを使います、メカニズムは基本的に同じです。接点を切断しているときに、スイッチが良好な電気的接触をしているときと良好な電気的接触をしていないときがあります。連絡先と同じです。


1

一般的に、はい。メカニカルスイッチは、開閉時に電気ノイズ(バウンス)を発生させる可能性があります。


1

一般的にはそうですが、常にデジタル入力で何をしているのかによって異なります。私は、どちらの方向にもデバウンスする必要がないシステムをいくつか持っています。

ただし、割り込みを駆動している場合は、デバウンスする必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.