この記事でわかること
・目的に応じたスイッチの選定と使い方(電源用、信号用)
・スイッチON時の突入電流保護と、OFF時の逆起電圧抑制対策
・チャタリングによる誤入力防止方法(ハード、ソフトによる対策)
電子回路にて使用されるスイッチは大別して、回路への電源を入/切する電源用スイッチと、
マイコン等のICへの信号入力に用いる信号用スイッチがあります。
スイッチの選定や接続に際しては、電源用では突入電流や逆起電圧の抑制対策を行い、
信号用は最小電流を考慮したプルアップ/プルダウン抵抗を選定したり、
ON/OFF時に発生するチャタリングに対処する必要があります。
本記事では、用途に応じたスイッチの選定や、回路への接続方法について解説します。
本記事はスイッチの使用方法を参考程度に紹介するものであり、
解説するスイッチの機能や回路の動作を保証するものではありません。
ここで紹介する方法が適切で無い場合がある為、
使用の際は、各部品のデータシートを必ず確認の上、
記事にある回路の利用については自己責任でお願いします。
電源用スイッチの選定と使い方
電源のON/OFFには、ロッカースイッチや、
オルタネート型(※1)のトグルスイッチを主に使用します。
※1:スイッチを操作する度にONとOFFが切り替わるタイプで、
押している間だけONするモーメンタリ型はリセットSWなどに使用します。

ロッカースイッチには図の様にマーキングがあるタイプがあり、
「〇」はOFFで、「ー」又は「|」はONを意味します。
両スイッチともデータシートの回路構成に単極単投や2極双投などの表記があり、
極と投は以下の意味となります。
極(Pole):1つのスイッチが同時に制御できる回路数
単極なら1回路、2極なら2回路を同時にON/OFFできます。
英語表記で、単極:SP (Single Pole)、2極: DP(Double Poles) です。
投(Throw):1回路あたりのスイッチの接点数
単投なら1接点、双投なら2接点です。
英語表記で、単投:ST (Single Throw)、2極: DT(Double Throw) です。
双投はトランスファ接点(別名、c接点(※2))とも呼ばれます。
これ以外にも、極と投の組み合わせで、単極双投や2極単投などもあります。

※2:接点の種類には以下のものがあります。
a接点:通常はOFFで、スイッチを操作するとONする接点
b接点:通常はONで、スイッチを操作するとOFFする接点
c接点:1つのスイッチにa接点とb接点が両方ある接点
a、b接点は単投で、c接点は双投になります。
AC電源は両切りスイッチを使う
DC電源のON/OFFには単極単投を使用するのが一般的ですが、
AC電源では2極単投を使うことが望ましいです。

その理由ですが、単相2線式のAC電源は、N(ニュートラル)相が電源側で接地され、
もう片方のL(ライブ)相は非接地となっているため、スイッチはL相に設けます。
しかし、電源プラグを逆向きに接続した場合、スイッチがN側になってしまい、
スイッチOFF時は回路が非接地状態となるため、
床や手が濡れた状態で回路のシャーシに触ると人体を経由して電流が流れ、
感電する恐れがあります。

このため、LとN相を共にOFFする「両切り」ができる
2極単投スイッチを用いることで、安全性を高めることができます。
スイッチの取付方向
取付方向については、操作パネルなど、SWを垂直方向に取り付ける場合、
上にすると電源ON、下にするとOFFになるように配置します。

これは、物が上から落ちてSWに触れた時にONすることを防いだり、
緊急停止する際、下向きでOFFする方が素早く出来るからです。
もしくは、横向きに配置することで、
落下物の衝突による誤動作を防ぐ方法もあります。
基板に実装する場合など、SWを水平方向に取り付ける場合については、
手前に倒すと電源OFF、奥に倒すとONにするのが一般的です。

この時、トグルスイッチの配線については注意が必要で、
図の様にレバーを倒した方とは逆の端子が接続されるタイプが殆どですが、
レバーを倒した方と同じ側の端子が接続される機種も一部あります。

突入電流や逆起電圧を考慮した定格値の選定
電源スイッチは回路内にあるコイルなどの誘導成分や、コンデンサの容量成分により、
電源ON時に定常時よりも大きな突入電流が流れます。
また、誘導成分についてはOFF時に定常電圧とは逆向きの大きな逆起電圧が発生します。
スイッチのデータシートにある定格電流は
突入電流が流れない抵抗負荷の使用を前提としているため、
定常時に流れる電流よりも十分大きな定格値を持つスイッチを選定します。
(この定格値に対し余裕度を持たせることをディレーティングと言います)
突入電流は負荷の種類によって、かなり大きさが違うため、
ディレーティングの取り方も負荷に応じて異なります。
以下に各負荷のディレーティングを示しますが、
スイッチの構造や使用条件にも影響を受けるため、参考程度として下さい。
・抵抗負荷(ヒーターなど)
実際の回路には誘導性や容量性成分が若干含まれるため突入電流が発生します。
このため、定常時に流れる電流が定格電流値の80%以内になるようにします。

・誘導性負荷(トランス、モータなど)
回路内にコイルが使用されている場合、大きな突入電流が流れるため、
定常時に流れる電流が定格電流値の30~50%以内になるようにします。
また、OFF時に通常電圧の数倍ある逆起電圧が発生するので、
定格電圧についても注意する必要があります。

特に、DC電圧の場合はAC電圧と違い、電圧がゼロになる期間が無いため、
逆起電圧による接点間のアーク放電が長く続き、接点を消耗する恐れがあります。
対策としては、スイッチを2個直列接続して接点間隔を2倍に広げることで、
アーク放電の期間を短縮する方法があります。
誘導性負荷の種類によっては、上記のディレーティングよりも
更に大きな電流・電圧になる場合があるため、
必要に応じて、突入電流や逆起電圧を軽減する回路を設けます。
(軽減回路については後述)
逆起電圧発生の仕組みについては下記記事で解説しています。
・ランプ負荷(白熱電球など)
抵抗と同じ無誘導負荷ですが、ランプのフィラメントが冷えた状態だと
抵抗値が低いため、大きな電流が流れます。
定常時に流れる電流が定格電流値の20~25%以内になるようにします。
・容量性負荷(電源など)
回路内に容量の大きいコンデンサが使用されている場合、
ON時にコンデンサが充電されることで、突入電流が流れます。

スイッチング電源などの入力部分には大容量の電解コンデンサがあるため、
かなり大きな突入電流となります。
また、LED照明器具などにも電源回路があるため、同様に突入電流が流れます。
コンデンサ容量が大きい程、突入電流は大きくなるので、
ON時に流れる電流を測定し、必要に応じて突入電流軽減回路を設けます。
接点保護回路
突入電流や逆起電圧からスイッチの接点を保護するため、以下の方法があります。
<突入電流防止対策>
・ NTCサーミスタを使用
サーミスタは温度で抵抗値が変化する素子です。
NTC(Negative Temperature Coefficient)とは、負の温度係数のことで、
低温時は高抵抗で、通電により温度上昇すると抵抗値が低くなります。

スイッチON直後は抵抗値が高いため、突入電流を制限でき、
その後、サーミスタが通電することによる温度上昇で抵抗値が低下するため、
定常動作時はサーミスタでの消費電力を低減できます。
但し、スイッチOFFしてから、サーミスタの温度が下がりきらないうちにONすると、
抵抗値が小さいため、突入電流を抑制できなくなる欠点があります。
この欠点を解消したのが、次に説明する突入電流防止リレーを用いた方法です。
・突入電流防止リレー を使用
突入電流を抑制する抵抗にリレーを並列接続した回路です。
スイッチON時はリレーをOFFしておくことで、抵抗によって突入電流を抑制し、
一定時間が経過したら、リレーをONして抵抗を未経由にします。

この方法では電源OFF後、すぐにONしても突入電流を抑制できますが、
スイッチONから一定期間経過後にリレーをONする回路を設ける必要があります。
また、低損失・小型・長寿命化のため、
リレーの代わりにサイリスタ(※)を使う方法もあります。
(※サイリスタは電流を流す方向が一方向なのでDC電圧に使用し、AC電圧では双方向に流せるトライアックを使用)
<逆起電圧防止対策>
・CRスナバ回路を使用
OFF時に発生した逆起電力をスナバ回路で吸収することで、逆起電圧を抑制します。

・バリスタを使用
バリスタにより逆起電圧を吸収します。

・ダイオードを使用
ダイオードで電流を逃がすことで逆電圧を抑制します。

これらの逆起電圧防止回路を接続する位置ですが、
一般的には、負荷電圧が高い場合は負荷の両端に、
低い場合は接点間につけると効果的な場合が多いです。
また、負荷と防止回路との距離が長いと、逆起電圧の抑制効果が低減するため、
配線は出来るだけ太く短くします。
電源スイッチ使用時の注意点
電源スイッチの接続は以下の点を考慮して行います。
・複数の接点を並列接続しても許容電流は大きくならない
2極以上のスイッチを使って、接点を並列接続しても、
ON/OFFのタイミングは接点によって僅かにズレるため、
一時的に1つの接点に全電流が流れるため、許容電流を増やすことはできません。

・スイッチをACとDCどちらに設けても良い場合はAC側にする
スイッチには、ACとDC両方で使用できるものがありますが、
基本的にはDCの方が接点の定格電圧が低くなっています。

その理由は、OFFすると接点にアーク放電が発生しますが、
ACは周期的に電圧ゼロになるタイミング(ゼロクロス)で放電が消滅するのに対し、
DC電圧はゼロクロスが無いため、放電が終了するのが遅い分、接点の負担が増えることから、
DC定格電圧は低くなっています。
このため、スイッチの接続をACとDC、どちらでも良い場合はAC側にすることで、
接点の消耗を抑えて長寿命化できます。
(この時に使用するSWは前述したように、2極単投にするのが望ましい)
・DC負荷の場合、スイッチを+側に接続する
AC電源では両切りスイッチの使用が望ましいと説明しましたが、DC電源においても、
GND側にスイッチを接続してしまうと、OFF時に装置のGNDが浮いた状態となり、
入力電圧が不安定になることで誤動作や感電の恐れがあるため、+側に接続します。

・複数接点を使う場合、同じ極性に接続し、大電流負荷と小電流負荷を一緒にしない
2極以上のスイッチにおいて、接点と負荷を異なる極性に接続すると、
スイッチ内部の隣接する接点間電圧が高くなり、
絶縁破壊による電源ショートの恐れがあるため避けます。

また、一つのスイッチに大電流負荷と小電流負荷を接続すると、
大電流負荷の開閉で生じた生成物が小電流負荷用の接点に付着し、
アーク放電による接点表面のクリーニング効果が得られず接触障害を起こすため、
大電流負荷と小電流負荷とはスイッチを分けます。
・C接点によるモータ極性切替は逆起電圧に注意する
2極双投スイッチを使った図の様なモータの正逆転切替は
逆起電圧によって接点間にアーク放電が発生し、
電源ショートによる大電流で接点が損傷を受けます。

対策としては、下図の様にスイッチを2個使用することで、
アークによる電源ショートを回避します。
信号用スイッチの選定と使い方
DIPスイッチ(別名:スライドスイッチ)や、ロータリースイッチを使用し、
プルアップ又はプルダウンすることで、マイコン等への入力信号(H又はL信号)を生成します。

DIPスイッチは複数の接点(1~10極)を持ち、各接点を2進数の各桁に割り当てることで、
H信号を1、L信号を0とした2進数データを入力できます。
ロータリースイッチはローターを回して0~9(又は0~F)のポジションにセットすると、
1,2,4,8ピンのうち、ポジションに応じたピンがコモン(C)ピンとONするリアル(正)コードと、
OFFするコンプリメンタリ(裏)コードがあり、4ビットの2進数データを入力できます。

これらの信号スイッチは定格電流が小さいため、電源回路には不向きですが、
長期間、操作せずに放置した場合でも高い接触信頼性を維持できるように
接点表面に被膜を生じにくい金メッキ接点にしたり、
接触不良が少ないツイン接点を採用したものが多いです。
また、これらのスイッチは構造上、接点がスライドしながら接触することで、
接触面の酸化物や異物を除去するセルフクリーニング効果がありますが、
チャタリング(※)が発生しやすい欠点があります。
※スイッチ切替時に、短時間に複数回のON/OFF状態が発生する現象

チャタリング対策としてはシュミットトリガやフィルタを用いたハードウェアによる方法と、
プログラムによる複数回の読込で誤入力を回避するソフトウェアによる方法があります。
(ソフトウェアによる方法は後述)
シュミットトリガについては下記記事の中で解説してます。
DIPスイッチにはレバーが短く、操作にはミニドライバーが必要なフラットタイプと、
手で操作が可能なレバーの長いピアノタイプがあり、
ロータリースイッチにも、ローターを手で回せるシャフトタイプと、
ミニドライバーを使って回すフラットタイプがあります。
両スイッチとも、フラットタイプは操作する機会が少なく、
手が振れて誤って変更しないようにしたいケースで使用します。
プルアップ、プルダウンする方法について
DIPスイッチの場合、ONでL信号(ほぼ0V)にしたい場合はプルアップ、
H信号(ほぼVcc電圧)にしたい場合はプルダウンします。

VccやGNDから抵抗を経由しているのに、入力電圧がVccやGNDになる理由ですが、
マイコンなどのICの入力インピーダンスが非常に大きいためです。

ここで、インピーダンスは単純に抵抗と考えた場合、
図のように入力ピンはIC内でVccとGND間に数MΩの大きな抵抗(Rin1,Rin2)が接続されており、
ICに流れ込むシンク電流や、流れ出すソース電流はuAレベルの微小電流となります。
ここで、プルアップ又はプルダウン抵抗Rpを数kΩ程度にした場合、
RpとRinが並列接続部分の合成抵抗値は、ほぼRpなのでRinが未接続と考えることができ、
RpとRinが直列接続部分の抵抗比はRinが大半を占めるので、
抵抗分圧される入力電圧は、ほぼVccか0Vになります。

プルアップとプルダウンどちらにするかは、一般的にはプルアップが多いですが、
接触信頼性を考慮し、スイッチON状態での長期間放置を回避したい場合で、
L信号にしておく状態が長いならプルダウンにするなど、用途に応じて使い分けます。
(一つのDIPスイッチ内で、接点によってプルアップとプルダウンを組み合わせても良い)
また、スイッチへの入力に使用するマイコンのI/Oピンを出力にも使用する場合(※)、
プルダウンでは、マイコンが出力L時にスイッチONすると、L出力ピンが電源と直結してしまい、
マイコンへのシンク電流が過大となるため、図の様に制限抵抗を設けておきます。
※マイコンのブートモード設定入力ピンは、汎用入出力(GPIO)を兼用しているものがあり、
起動時はスイッチ入力でブートモード設定を行い、起動後は出力として使用する場合がある。

プルアップについても同様に制限抵抗を設け、出力H時にグランドに直結するのを防ぎます。
この制限抵抗の値は、プルアップ又はプルダウン抵抗との抵抗分圧が、
マイコンのH/L入力レベルを満足し、かつ許容電流以内になるように選定します。
ロータリースイッチについては、リアルコード タイプの場合はプルダウン、
コンプリメンタリコード タイプはプルアップすることで、
ポジションに設定した値が、4桁の2進数値として入力されます。

スイッチのプルアップ/プルダウン抵抗値の決め方
プルアップ/プルダウン抵抗値は一般的な回路では10kΩ程度ですが、
スイッチについては、最小電流や最小適用負荷が規定されている場合、
ON時に十分な電流を流すことができる抵抗値にする必要があります。
その理由ですが、スイッチの接点が開閉を繰り返すうちに
酸化皮膜が生成されて接触不良が発生してしまうため、
ある程度の電流を流してアーク放電を発生させ、酸化被膜を破壊します。
スイッチON時に流れる電流は、プルアップ又はプルアップ抵抗からと
マイコン等の入力ピンに入出力する電流の合計ですが、
一般的なCMOS ICの入力抵抗は数MΩと大きく、
流れる電流も数uA程度と非常に小さいので無視します。
スイッチに流れる電流が最大定格電流を超えないのと同時に、
最小電流を下回らないように抵抗値を決めます。
DIPスイッチやロータリースイッチは最小電流が10uA程度と非常に小さいので、
一般的なプルアップ抵抗値(数kΩ程度)で問題ありませんが、
検出等に使用されるマイクロスイッチはmAレベルを流すことが要求されます。

例として、オムロン製マイクロスイッチZ-01H(定格DC30V 0.1A)の場合、
最小適用負荷がDC5V 1mAです。
従って、このスイッチは1mA~0.1Aの範囲で電流を流す必要があるので、
ここでは、10mA流れるようにプルアップ抵抗を選定します。
R=5V/10mA=500Ω
抵抗値のラインナップ(E24系列)から470Ωを選択します。
スイッチON時に流れる電流は
I=5V/470Ω=10.6mA
になります。
プルアップ抵抗の決め方の詳細については、下記記事で解説しています。
スイッチ実装時の注意点
スイッチは可動部分があるため、他の電子部品に比べ気密性が低く、
粉塵や液体の流入により動作に支障を生じる恐れがあります。
このため、半田付けの際、フラックスが侵入しないようにしたり、
その後のフラックス洗浄についても、洗浄不可部品があるので注意して下さい。

フラットタイプのDIPスイッチには、
洗浄液が入らないようにテープシールが貼ってある製品があり、
洗浄終了後にシールをはがして使います。
ソフトウェアによるスイッチ入力処理方法
スイッチを押している時間や、押す速さは人によって異なるため、
ON時間に差があったり、チャタリングが発生したりしますが、
ソフトウェア処理を工夫することで、正しい信号を取り込むことができます。
ここでは、秋月電子で販売されているPICマイコン学習キットを参考にして、
スイッチ入力のソフトウェア処理方法を紹介します。
PICマイコン学習キットについては下記記事で紹介しています。
キットのプログラムはキットを販売している秋月電子のHPからダウンロードできます。
秋月電子 新居浜高専PICマイコン学習キットVer.3 ACアダプタ付
また、参考書も販売されています。
ここでは、マイコンの汎用入出力ピンRB0~RB3をタクトスイッチ(SW1~4)にプルアップ接続し、
スイッチOFFで1、ONで0が入力される構成とします。
(キットではRB2とRB3を出力ポートとしても使用できる回路構成になっていますが、
ここではスイッチの説明に特化するため、全て入力ポートのみに使用する回路を掲載しています)

タクトスイッチは押された時のみONするモーメンタリ型のスイッチで、
キーボードの様にOFFへの復帰動作が早いです。

以下のプログラム例では、入出力ピンの設定や、変数の定義については省略しています。
詳細はキットのプログラムを参照下さい。
<例1:スイッチを押したままでも1回だけ処理を行う>
スイッチを押している時間に関係無く、1回だけ処理を行います。
複数回処理を行いたい場合は、スイッチから手を離してから再度押す必要があります。
(参考:電子ピアノ プログラム)

※1:ソースファイル内で定義された待機処理を行う関数。
L_wait関数は約500us×(引数の値) だけ待機時間を作ります。関数の詳細は下記記事で解説してます。
<例2:複数スイッチの同時押しで処理を行う>
同時に押したつもりでも、スイッチ間のONタイミングは微妙にズレが生じるため、
先に押されたスイッチから少し待ってから各スイッチの値を入力することで、
誤検知を回避します。
(参考:モグラ叩き プログラム)

※2:PICマイコンのタイマ2割込みを利用してカウントアップする変数。
t2_icntはタイマ2割込み発生(200us)毎にカウントアップします。
1500カウントで、200us×1500=0.3sとなります。割込みについては下記記事で解説しています。
<例3:あるスイッチを押しながら、別のスイッチを押す度に処理を行う>
時計の時刻セット等に用いられる方法で、
ここではSW4を押しながらSW3を押すと時間hourがカウントアップします。
変数kfはスイッチ有効化フラグで、0の時にSW3が有効となります。
(参考:デジタル時計 プログラム)
