ArduinoやPICなど、マイコンを使った工作をしていると、IOピンの不足に困ることがあります。特にスイッチの状態の取得方法に関しては、普通にやると、スイッチの数だけGPIOピンを消費するので、スイッチがたくさん付いた回路を作る場合、ピン数の多い高価なマイコンを用いる必要があります。
しかし、アナログ入力ピンの付いているマイコンでは、少し工夫することで、一つのIOピンにたくさんのスイッチをつなげることができます。アナログ入力に入って来た信号は、A/D変換器で電圧を測定する事ができるため、GNDと電源電圧の中間の電圧を積極的に使うのです。
上の図は、抵抗分圧器を使って、2つのスイッチの状態を1つのアナログ入力ピンで監視する方法を解説した原理図です。図1(a)が回路図です。R1とR2の2つの抵抗を直列に接続し、分圧回路を構成します。SW1とSW2の2つのスイッチを分圧回路につなぎ、スイッチがONになるとGNDとショートするようにします。こうすることにより、スイッチの状態に応じて分圧器の分圧比が変わり、アナログ入力の電圧をA/D変換すれば、変換結果よりスイッチの状態を推測できるようになります。
図1(b)は、SW1、SW2共にOFFの場合の等価回路です。R2の下端がどこにもつながらないため、この抵抗には電流が流れません。その結果、出力端子をR1でVCCにプルアップした形となります。マイコンのアナログ入力端子の入力インピーダンスが十分高ければ、出力電圧はVCCになります。
図1(c)は、SW1がONになった場合の等価回路です。(SW2のON/OFFに関わりなくこの等価回路になる) 出力端子がGNDにショートされるため、出力端子の電圧は0になります。
図2(d)は、SW2のみがONになった場合の等価回路です。VCCがR1とR2による分圧回路で半分に分圧され、出力電圧は1/2 VCCとなります。
よって、アナログ入力端子の電圧がほぼ0ならSW1が押されており、ほぼ1/2 VCCならSW2が押されており、ほぼVCCなら両方のスイッチがOFFと判断できます。
なお、SW1はSW2より優先度の高いスイッチで、SW1がONになると、SW2の状態は不明になります。よって、この回路は、複数のスイッチがONにならないという前提、あるいは、より優先度の高いスイッチがONになっている際に優先度の低いスイッチの状態は無視してよいという前提で使われます。
図1の回路の考え方を拡張すると、スイッチをどんどん増やしていくことができます。例として次の図のようにSW1~SW10の10個のスイッチをセンシングする回路を考えます。
出力電圧の計算の方法の説明は省略しますが、図2の中の表に書いたような出力電圧になります。この表を見ると、数字の大きなスイッチになるほど、出力電圧が似通った値になります。もう少し分かり易いように出力電圧の変化をグラフ化したのが図3です。
SW8、SW9、SW10あたりをONにした場合、出力電圧にほとんど差がない様子が分かります。これでは、少しノイズが乗っただけで、別のスイッチをONにしたのと勘違いしそうです。一方で、SW1をONにした場合ととSW2をONにした場合を比べると、出力電圧が0.5 VCCも違います。両者を区別するのに、0.5 VCCもの電圧差は不要です。
そこで、出力電圧を均等に配分するように再設計したのが次の回路です。なお、この回路の設計法については、次回に説明する予定です。
この回路の出力電圧をグラフ化すると、次の様になります。
完全な直線のグラフになっています。図2の回路より、図4の回路の方が、ノイズやA/D変換器の誤差などに強い回路であることが分かります。
では、どのようにしたら図4のような回路を設計できるのでしょう?また、図4の抵抗値は、市販されている抵抗が採用しているE24系列の数値に乗っていませんが、無理やりE24系列の値に近似したら、出力電圧にどの程度の影響があるのでしょうか?次のページでは、このような事を議論します。
商品名 | I/Oピン一つで読める4X4キーパッドキット | |
税抜き小売価格 | 900円 | |
販売店 | スイッチサイエンス | |
サポートページ | I/Oピン一つで読める4X4キーパッドキットサポートページ |
商品名 | I/Oピン一つで読める4X4キーパッド(完成品) | |
税抜き小売価格 | 1380円 | |
販売店 | スイッチサイエンス | |
サポートページ | I/Oピン一つで読める4X4キーパッド(完成品)サポートページ |
商品名 | I/Oピン一つで読める4X5キーパッドキット | |
税抜き小売価格 | 2400円 | |
販売店 | スイッチサイエンス | |
サポートページ | I/Oピン一つで読める4X5キーパッドキットサポートページ |