マイコン・メモ
チャタリング・キャンセル方法
 ホームページに戻る  トップページに戻る  前ページ  次ページ

マイコンでよく使用するチャタリングキャンセルについて、その機能と作成方法について、これまで製作したものを元に紹介します。

1.チャタリングとは

チャタリングは、機械的なスイッチをON/OFFするときに発生する接点のバウンド現象のようなもので、切り換えのわずかな時間にON/OFFを繰り返す現象です。
照明のスイッチのようなものでは問題は起きないでしょうが、例えば電子機器の操作スイッチや機械的に接点がON/OFFするセンサーなど、ON/OFFの正確さを要求する場合にはチャタリングをキャンセルする、つまり無効化する仕組みが必要です。

2.チャタリングを除去する回路

次の図は、スイッチのチャタリングをキャンセルする回路としてよく見かけるもので、RSフリップ・フロップを使ってチャタリングを除去します。
しかし、スイッチ1つにNANDゲートが2つ必要で、しかもメイクとブレークの2接点(またはC接点)のスイッチでなければなりません。
スイッチが2~3個程度なら良いでしょうが、多くのスイッチあるいは多くの接点信号に対しては現実的ではありません。また、キーボード状の操作スイッチなどでは、C接点が使われることはほとんどありません。

チャタリングキャンセル回路

3.マイコンとスイッチの接続

次の図は、マイコンの入力ポートに機械的スイッチを接続する場合の回路例です。
チャタリングキャンセルをソフトウェアで行うとすれば、このように単に入力ポートにスイッチを接続するだけです。ただし、スイッチの数だけ入力ポートが必要です。
キーボードのようにスイッチの数が多い場合は、キー・マトリクスつまりキーを格子状配線の交点に配置して、ソフトウェアで順次スキャンする方法で入力しますが、ここでは取り上げません。

マイコンとスイッチの接続

4.チャタリングキャンセルの方法

次の図は、入力ポートで読み込んだスイッチのON/OFF状態から、ソフトウェアでチャタリングを除去する方法例を説明するものです。

チャタリングキャンセル方法説明図

(A) スイッチのON/OFF状態(“H”でOFF,“L”でONとする)
このようにON/OFF変化点でON/OFFが定まらない瞬間があり、これがチャタリングです。図はわかりやすく描いていますが、実際は接点の種類や構造、あるいは経年劣化などで幅(時間)や形状は異なります。
(B) マイコンが入力ポートでスイッチの状態を読み込むタイミング
一定周期の読み込みタイミングで、ON/OFFの幅(時間)を測定することにも使うので、1mS~10mSくらいの速度が必要です。チャタリングキャンセルは、この一定周期を作る割り込み処理の中で行われます。
(C) マイコンが認識したスイッチのON/OFF状態
この中の、幅の狭いONおよびOFFを無視する処理がチャタリングキャンセルとなります。
(D) チャタリングキャンセルの結果
「ON/OFF状態を示す」とあるのが、チャタリングを除去した現在のON/OFF状態です。チャタリングキャンセルした結果は、フラグとしてメモリ内に保持します。

チャタリングキャンセルは、あらかじめ決めておいた時間と、認識したスイッチのON/OFF幅を比較することで行われます。つまり、ONまたはOFFが時間に達する前に変化した場合は無視し、時間以上になった場合は有効としてその時の状態(ONまたはOFF)を保持することにより行われます。
時間は、筆者の場合10~50mS程度としていますが、時間が長すぎるとスイッチの実際のON/OFFに対して反応が鈍くなります。この方法は幅の狭いON/OFFを除去する一種のノイズ除去であるため、機器外部からのON/OFF信号入力などにも使用できます。

上の図で“Tlong”とあるのは、長押しを認識する必要があるキースイッチなどのために、あらかじめ決めておいた時間です。Tlong時間(例えば2~3秒)以上押し続けたとき有効となるスイッチにすることができます。長押しキーが不要の場合、時間Tlongに伴う処理は必要ありません。
上の図で、(D)の「ONしたことを示す」というのは、チャタリングキャンセル済みのスイッチONを示すフラグで、スイッチ入力を使用するプログラムが監視し、確認後に“0”(OFF)に戻すことで、1度のスイッチONを1回だけ認識することができます。
また、「長押ししたことを示す」というのは文字通り長押しを認識したフラグで、同様に1度の長押しを1回だけ認識させるためのものです。


5.プログラム例

下記に、H8/3694Fの場合の、チャタリングキャンセルの処理フロー図例と、チャタリングキャンセルおよびキー入力のプログラム例を示します。
インターバルタイマによる定周期割り込みと、スイッチを接続した入力ポートがあれば、わずかな修正で他のマイコンでも利用できます。
  備考:下記の例には、定周期割り込み発生に関する部分やI/Oポートの初期化などは含まれていません。

  ・キー入力チャタリングキャンセルのフロー図例
  ・キー入力チャタリングキャンセルのプログラム例

これらは、次に示す前提の下で作成されています。

1) 関数KeyChatCancelは、10mS 周期の割り込み処理関数から呼ばれるものとします。
     ただし、フロー図およびプログラム例に割り込み処理関数は書かれていません。
2) 6個のキースイッチがPORTB のb5~b0 に接続されているものとします。
3) キースイッチはON するとPORTB の該当ビットが“0”(LOW)になるものとします。
4) 読み込んだキー情報はKEYDAT_T型変数に格納され、関数GetKeyState,WaitKey,GetKeyで読み出すものとします。
     KEYDAT_T型の構造は、プログラム例を見てください。
5) オートリピート機能が有効なのはb1~b0に接続されたキースイッチで、長押しが有効なのはb3~b2に接続されたキースイッチです。

このプログラム例では、長押しとして認識する時間とオートリピートを開始する時間を同じにして簡略化しています。
オートリピート機能は、スイッチのON/OFFの幅(時間)を測定するタイマをリセットすることで、スイッチONを繰り返し認識させて実現しています。
また、このプログラム例では、下記のマクロ定義がそれぞれの処理に関する時間を示しています。

  CHAT_TIME= チャタリングキャンセル時間(10mS単位) ←プログラム例では50mS
  RPT_STTIM= 長押しおよびオートリピート開始時間(10mS単位) ←プログラム例では1000mS
  RPT_INTTM= オートリピート繰り返し時間(10mS単位) ←プログラム例では100mS


ホームページに戻る  トップページに戻る  前ページ  次ページ

■■■ 注 意 ■■■
1.ここに掲載された内容(写真,図,表などを含む)の、全てまたは一部を無断で使用しないでください。
2.ここで紹介した手法(構造や仕組み,回路,プログラムなどを含む)を使用したことにより、問題や不利益が発生したとしても一切関知しません。
3.ここで紹介したプログラム例は、正常なコンパイルおよび正常な動作を保証するものではありません。
Copyright © 2012-2017 S.Suzuki, All rights reserved.