応用回路設計のための第一歩 ―― I/O規格とLED表示,スイッチ入力,アナログ出力,RS-232通信のための回路の設計法

井倉 将実

3.スイッチのつなぎ方

 ここでは,FPGAにスイッチを接続する方法について説明します.FPGAといっしょに使われるスイッチには,DIPスイッチやプッシュ・スイッチがあります(写真2)


写真2 さまざまなスイッチ

● スイッチ入力の基本回路

 スイッチは,接点間のON(導通)かOFF(絶縁)の状態を作ることができる部品です.

 スイッチは機械的な構造の部品のため,自分自身で信号を出力することはできません.そこでFPGAに接続する場合は,スイッチからの信号にプルアップ抵抗を入れます(図9).こうすることで,スイッチがOFFの場合はHレベルに保持し,ONにするとGNDにショートされてLレベルが出るように使います.FPGAに限らず,多くのディジタルLSIで同じ回路が使えます(コラム「抵抗は回路を保護する重要な素子」を参照).


図9 スイッチ入力の基本回路

 図10を使って動作を説明します.スイッチがOFFの状態では,電源電圧はプルアップ抵抗を介してFPGAの端子に印加されます.つまりこの状態はHレベルです.スイッチがONの状態では,電源→抵抗→GNDの順に電流が流れます.FPGAのI/OはちょうどGNDに接続される形になりますので,Lレベルになります.


図10 スイッチ入力回路の動作

 プルアップ抵抗の抵抗値は任意のものが使用できますが,4.7KΩ~10KΩがよく使われています.あまりに小さすぎると無駄に電力を消費します.大きすぎると微弱な電流しか流れないため,ノイズなどの影響を受けやすくなります.

● スイッチではチャタリングが起こる

 図9の回路は,ほとんどのスイッチで使えますが,動作中に操作されるスイッチの場合は,不具合の原因となることがあります.

 スイッチは構造上,ON/OFFの切り替えを行う際に「チャタリング」という現象が起こります(写真3).スイッチは機械的な部品です.プッシュ・スイッチは,バネの力で上側に押し上げているスイッチの接点部を,人間の指で押し込むことにより,接点が端子に接触して通電します.この接点部と端子が接触する瞬間,物理的な挙動により,接触した後いったん外れ,また接触して外れてという現象をしばらく繰り返して,最終的に接触状態になります.ボタンを押してから最終的に接点部と端子が確実に接続する時間までの過渡状態は,スイッチによって異なり,数ms~数十ms程度の間続きます注1


写真3 チャタリングの様子

 FPGAにとってはこの時間も十分に長く,確実に認識します.チャタリングはFPGAの入力端子に対して,断続的なON/OFFの状態を作ります.つまり,1回しかスイッチを操作していないはずなのに,複数回スイッチを操作したように見えてしまい,想定しなかった挙動を引き起こします.

 そこで,スイッチを操作者の意図通りに認識したい場合には,チャタリング除去回路が必要になります.

注1;スイッチのデータシートに明記されています.付属FPGA基板のオプションとして推奨されるオムロンのB3W-1000では5ms以下です.

● チャタリング除去付きスイッチ入力回路

 チャタリングの除去は,FPGAに実装する回路でもできます.しかしここではFPGAに信号が入力される前にチャタリングを除去する回路を説明します.

 チャタリングは,信号だけに注目すれば,非常にすばやい速度でスイッチのONとOFFが繰り返されている状況です.そのため,すばやい動きを出力しないようにします.具体的には,抵抗とコンデンサによるフィルタ回路をスイッチの出力に挿入します.

 図11にチャタリング除去付きスイッチ入力回路を示します.RCフィルタの抵抗値を大きくすれば,よりスイッチの操作に対する応答速度は遅くなります注2.スイッチとFPGAの間にはシュミット・トリガ・インバータICを挿入します.シュミット・トリガというのは,緩やかな信号変化を急しゅんなディジタル信号に変換できるディジタル素子です.RCフィルタにより,信号の立ち上がりがなだらかになっています.この信号をそのままFPGAに入力してしまうと,HレベルなのかLレベルなのか決まらず.誤った値を取り込む可能性があります.そこでシュミット・トリガ・インバータICを入れて,緩やかに変化する波形をディジタル的に整えます.


図11 チャタリング除去付きスイッチ入力回路

 また,インバータICを挿入していることで副次的に理解しやすい効果があります.つまり,「スイッチがONのときHレベル」,「スイッチがOFFのときLレベル」となります.直感的に分かりやすくなります.
 ところで,スイッチを切り替えた瞬間には,「オーバシュート」という,大きなノイズが発生します(写真4).そこで,ダイオードを付加することで,電源電圧を超えたノイズ成分はダイオードを介して電源側に戻します.


写真4 オーバシュートが発生した様子

 図11の回路でスイッチを操作したときの波形を写真5に示します.


写真5 チャタリング除去付きスイッチ入力回路の波形

注2;RCフィルタにより,信号の立ち上がりがなだらかになります.RCフィルタの抵抗値を大きくすることで,さらに立ち上がりがなだらかになり,応答速度が遅くなります.

[コラム]抵抗は回路を保護する重要な素子
 回路設計の初心者の中には,Webなどの情報をうのみにして「抵抗素子は電流の流れを妨げる無駄なもの」と覚えてしまい,抵抗値が低ければ低いほど良いと考える人がいるようです.
 スイッチの回路でもし抵抗を入れなければどうなるのでしょうか.スイッチをONにした瞬間から,電源とGNDはショートの状態になり,理論上は無限大の電流が流れます.通常はブレーカが落ちるか,ヒューズが飛んでしまいます.電源の電流駆動能力に余裕がある場合には過大な電流がスイッチに流れ,スイッチはいとも簡単に破壊されてしまうでしょう.最悪の場合,燃えてしまいます.
 抵抗素子は,電流の流れを妨げるのではなく,電流の上限を整え,かつ回路を保護する役目もあるということを覚えておいてください.
組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! FPGAマガジン No.12『ARMコアFPGA×Linux初体験』好評発売中

FPGAマガジン No.11『性能UP! アルゴリズム×手仕上げHDL』好評発売中! PDF版もあります

PICK UP用語

EV(電気自動車)

関連記事

EnOcean

関連記事

Android

関連記事

ニュース 一覧を見る
Tech Villageブログ

渡辺のぼるのロボコン・プロモータ日記

2年ぶりのブログ更新w

2016年10月 9日

Hamana Project

Hamana-8最終打ち上げ報告(その2)

2012年6月26日