2002. 1. 30
接点入力の処理において常につきまとう問題として、チャタリングがあげられます。チャタリングとは、機械接点がOFF→ONまたはON→OFFへ移行する際、瞬時に変化するのではなく、ON/OFFを何回か繰り返しながら状態が移行する現象のことです。
チャタリングの継続時間は、数100μs~数msと人間から見ればほんの一瞬のことで感知することはできませんが、高速な電子回路にとっては次のようなイメージでとらえられていることでしょう。まず、ONするときは接点同士が衝突した瞬間一度では安定せず、ボールがバウンドするように暴れながら最終的に接触状態に落ち着きます。また、OFFするときは接触圧が徐々に弱まり、接触不良状態になりながら接点が離れてゆきます。
NOTE: チャタリング(chattering)には、震えて歯がカチカチいう、また機械が同様の音を立てるという意味がある。
たとえば、右の図のように接点入力をカウンタのクロックとしてそのまま使うとどうなるでしょうか。1回押しただけでカウントがいくつも進んでしまい意図した動作をしません。このように、電子回路はチャタリングを複数回の接点動作として捉えてしまうのです。
チャタリングの継続時間は接点支持機構の造りにより異なり、だいたい次のような感じです。
さて、チャタリングの正体が分かったところでそれの対策といきましょう。簡単な対策として、右図のようなCRフィルタの挿入が一般的に用いられています。チャタリングによる高速な断続はフィルタにより平滑され除去されます。ただし、フィルタにより波形が鈍るので必要に応じてシュミット・トリガなどで波形整形してやる必要があります。
マイコンの入力ポートへ接続される場合は、付加回路を省いて代わりにプログラムによる処理でチャタリングの影響を回避します。
簡単なので単純なプログラムで用いられることがあります。まず、接点の状態を監視して、変化したら一定時間待ってもう一度読み込みます。そのとき再び同じ状態が読み込まれたらその変化を有効とみなして相応の処理へ移ります。しかし、プロセッサの有効利用の観点からすると良くない方式ですので、ごく単純なものを除いてあまり用いられていません。
実際の組み込み用途ではこの方式が通常よく用いられます。接点の状態はタイマー割り込みなどにより一定時間ごとにサンプルされメモリに格納されます。サンプリングの周期をチャタリング継続時間より十分長くとれば、メモリ上の値はチャタリングの影響を受けないことになります。接点の状態を調べるときはポートは読まずに、そのメモリの値を参照するようにします。プログラムループ中でスイッチ状態の参照が間欠的に行われるような処理とすれば、メモリに保持しておく必要は無いとも言えます。
サンプリング周期はスイッチの特性にもよりますが、一般的に10ms(100Hz)程度です。必要に応じてノイズキャンセル処理(次のセクションで解説)も組み合わせて使用されます。