雑誌無償購読申込み 最新号 バックナンバー 広告資料請求 EDN Japanについて お問合せ
雑誌無償購読申し込み
メールニュースレター登録
登録内容変更
アナログ IC/ディスクリート
電源/電池/コントローラー
PLD / メモリー
組み込みシステム
コンピュータ&ボード
EDA/IP/CAE/ソフトウェア
電子部品
計測器
ディスプレイ
デジタル家電
通信・ネットワーク
カーエレクトロニクス/産業機器
EDN Japan 記事検索
検索方法の詳細
雑誌無償購読申込み ニュースレター登録 この記事に対する感想/ご意見
DESIGINIDEAS
2005.11
アルゴリズムで接点のチャタリングを解決
Elio Mazzocca オーストラリア在住
 機械式接点のチャタリングは、マイクロコントローラへの接続や、ノイズの多いあらゆる入力信号の接続を複雑にしている。この問題に対応する様々なハードウエアとソフトウエアが提案されてきたが、本命といえるアプローチは得られていない*1〜10)
 接点のチャタリングを解消するためのハードウエア的なアプローチは通常、RCフィルタとシュミット・トリガー回路とで構成される(図1)。この方式では、RC時定数を長くすると、有効性を簡単に拡大することができるが、応答時間が長くなるのが欠点である。
図1 スイッチ接点のチャタリング解消回路は基本的に、RC回路とシュミット・トリガー回路で構成される。
図1 スイッチ接点のチャタリング解消回路は基本的に、RC回路とシュミット・トリガー回路で構成される。

 ソフトウエアによるチャタリング対応策では通常、1ビット処理を用いる。これは、接点の入力情報を2回読み取るもので、2回の読み取りの間に固定の遅延期間を設ける。状態マシンを組み込むか、入力信号をシフトレジスタに通して導入し、レジスタの出力が3〜4状態の間、変わらないのを待つこともできる。1ビット処理という効率の低い方法を用いるのは、この対応策が一見簡単で、同程度に簡単なソフトウエアで処理できるはずだという、誤った認識に基づいている。しかし、種々の接点の接触タイプを詳細に調べてみると、複雑で、ときには予想もしない一連の挙動が明らかになる。
 そこで、マイクロコンピュータに接続する機械式接点インターフェースすべてを容易に取り扱うことのできる、より包括的な方法を紹介しよう。
図2 10 ms時点でスイッチを閉じると、安定な閉状態に達するまでに、50 ms以上にわたって不規則にチャタリングが発生する。
図2 10 ms時点でスイッチを閉じると、安定な閉状態に達するまでに、50 ms以上にわたって不規則にチャタリングが発生する。
図3 チャタリング解消ソフトウエア・ルーチンによって、接点のチャタリングが完全に収まった後にのみ、閉じられる。
図3 チャタリング解消ソフトウエア・ルーチンによって、接点のチャタリングが完全に収まった後にのみ、閉じられる。
 このチャタリング解消法では、8ビットの処理とデジタル・フィルタリングをデジタル入力にフルに適用する。せいぜい20個のアセンブラ命令により、Atmel社の8ビットマイクロコントローラ「ATmega8」上で19マシン・サイクルで実行し、信頼できるチャタリング解消機能を提供する。このDesign ideasのウェブ版www.edn.com/edn050707dilにあるリスト1を参照されたい。
 このソフトウエアは、1次再帰デジタル低域通過フィルタと、ソフトウエアによるシュミット・トリガー機能を用いて、図1のハードウエア回路を正確にシミュレーションする。一般に入力を処理しない1ビット・ソフトウエア方式のチャタリング解消策と対照的に、この回路のアルゴリズムは、過去の入力遷移を「記憶」していて、それがどのくらい前に起きたかによって、各遷移に「重み付け」を行うため効果的である。
 さらに、メイン・プログラムによって、フィルタのスレッショルドを変更して、その実行時間つまり時定数を変更することができる。これにより、フィルタの設定を、外部条件に即応するように変えることができる。基本的な漸化アルゴリズムは、現在の出力値=(1/4)×入力値+(3/4)×前の出力値、つまり、YNEW=(1/4)×XNEW+(3/4)×YOLDで構成される。
 レジスタのオーバフローと不安定性を避けるために、YOLDおよびXNEWの値は1より小さくなければならない。このXNEWおよびYOLDの値は、8ビット・マイクロプロセッサでは、256未満の値に翻訳される。その結果、フィルタへの入力((1/4)×XNEW)は0か63になる。
 次いで、出力値YNEWをソフトウエア・シュミット・トリガーに印加する。このトリガーは、If YNEW>hi, and flag=0, then flag=1, and out=1. If YNEW< lo, and flag=1, then flag=0, and out=0.というアルゴリズムを用いている。
 ハードウエアのシュミット・トリガー回路は通常、電源電圧の1/3と2/3の固定スレッショルドにしている。ソフトウエア方式ならば、このスレッショルドを広げて、フィルタの時定数を長くできる。動作時には、タイマー割り込みルーチンが4ms〜5msごとにチャタリング解消プログラムを実行する。時定数は割り込み周期に等しいので、15および240のスレッショルドを用いて、11個の割り込み、つまり、44ms〜55ms後にルーチンの出力が「トリガー」をかけるようにすれば、ほとんどのスイッチの接点チャタリングを適切に処理することができる。
 メイン・フィルタの係数の変更は簡単で、フィルタ時定数を様々に設定できる。特に厄介な接点チャタリングには、次の漸化式を使える。
 YNEW=(1/16)×XNEW+(15/16)×YOLD
 時定数の16倍の時間後に、ソフトウエア・シュミット・ルーチンをトリガーする。このアルゴリズムはわずか8個のアセンブラ命令で構築することができるが、シュミット・トリガー・ルーチンでは12命令を要する。この2つを組み合わせると、ソフトウエア・シュミット・トリガーがレジスタのビット0をアップデートし、それをメイン・プログラムのループが連続してチェックして、接点の状態を確定することができる。
 別の方法として、ソフトウエアによる割り込みを活性化し、接点状態の変化を知らせる信号を発生することもできる。Atmel社のAVRアーキテクチャ上では、外部割り込み入力として機能するビットを当該ポートに書き込む。
Advertisement
 接点のチャタリングを防止できなければ、機械式接点を接続して入力に割り込みをかけるのは避けなければならない。接点が何10回もチャタリングを起こして、プロセッサのマシン・サイクルを無駄に消費するからである。ソフトウエア・ルーチンは4msごとに入力を読み、入力に対して追加フィルタリング機能を提供する。シミュレーションと実験の結果、このチャタリング解消アルゴリズムは期待通りに動作し、接触雑音が継続するときにも、確実な出力遷移を生成することを確認できた。このdesign ideasのWeb版に載っているソースコードを、ATmega8に書き込めば、マイクロコントローラのポートDビット0がグラウンドになるときに、コードがポートBビット0に接続された出力LEDを点灯する。
 シミュレーションによる入力波形(pind0)と、それに対応する出力ログ・ファイル(portb0.log)は、Web版からダウンロードでき、このフィルタの優れたチャタリング解消機能を示している。まず、10ms時点でキーを閉じると、この状態がAVRスタディオ統合開発環境にローディングされる。入力が何度かチャタリングが発生しても、出力ログ・ファイルを見ると55.333ms時点で1回だけ出力遷移が起きることがわかる。ソフトウエアによって、56.1msから始まる3個の入力パルスを効率良く除去しているのである(図2、図3)。

「design ideas」への寄稿のお願い
「design ideas」は米EDNの「名物コラム」です。このコラムは、電子機器設計や電子回路設計などの現場で働く技術者の皆さまからのご寄稿により成り立っています。そこで、「EDN Japan」でも半導体メーカーや電子機器メーカーの電子技術者のほか、大学などの研究者、コンサルタント業務に携わる技術者などの皆さまからのご寄稿を募集します。
【記事内容】
電気/電子回路の新たな提案とその説明。
半導体製品に搭載した新たな回路の紹介。
半導体/電子部品の面白い使い方。
半導体/電子回路の性能を引き出す、あるいは部品の弱点を補う回路の提案。
などです。上記以外のテーマについては、別途ご相談ください。
【原稿の長さ】
1〜2ページ。文字数は1000〜1500、図版は1〜2点です。
【原稿料】
採用原稿に対して、400字当たり3000円(税込み)。
【注意点など】
未発表のものに限定します。
ご寄稿いただいた原稿は、EDN Japanで選考して、採用/不採用を決めさせていただきます。ご寄稿いただいた原稿は、お返しできません。
ご寄稿いただいた原稿に対して、加筆、改筆をお願いする場合がございます。
掲載した原稿の著作権はEDN Japanに帰属します。
design ideasへのご寄稿に関するご質問、ご要望などは、
EDN Japan編集部、 住所: 〒107-0051東京都港区元赤坂1-7-17 テラサワビル4F
電話: 03-3402-0076、FAX:03-3402-0209
e-mail:ednjreader@reedbusiness.jp

用語解説 / 会社情報
*1)参考文献
Hills, Paul, "A Mercury switch filter," August 2001,
▲本文へ戻る
*2)
Baker, Bonnie, "The debounce debacle," EDN, Oct 28, 2004, pg 26.
▲本文へ戻る
*3)
Ganssle, Jack, "My favorite hardware debouncers," Embedded Systems programming, June 16, 2004,
▲本文へ戻る
*4)
Ganssle, Jack, "The secret life of switches, " Embedded Systems Programming, March 18, 2004,
▲本文へ戻る
*5)
Smewing, Alan, "Icc-avr keypad-debounce code, " March 4, 2004,.
▲本文へ戻る
*6)
"Switch debouncing,"
▲本文へ戻る
*7)
Matic, Nebojsa, The PIC Microcontroller,.
▲本文へ戻る
*8)
Ganssle, Jack, "Smoothing digital inputs," Embedded Systems Programming, October 1992,
▲本文へ戻る
*9)
Ganssle, Jack, "My favorite software debouncers," Embedded Systems Programming, June 16, 2004,
▲本文へ戻る
*10)
"Switch bounce and other dirty little secrets," Maxim, September 2000,.
▲本文へ戻る

雑誌無償購読申込み ニュースレター登録 この記事に対する感想/ご意見
Reed Electronics Group
Electronic BUSINESS Japan | Design News Japan | Semiconductor INTERNATIONAL | DETAIL JAPAN
EDN Japanについて | 広告掲載について | サイトマップ | お問合せ
 Copyright (C) 2000-2007 Reed Business Information Japan K.K. 
個人情報に関する方針 | 著作権・リンクについて | 会社情報