マイコン(MCU)システム開発入門編

第5回:デジタル入出力インターフェースの設計留意点

マイコンのシステム設計全体の留意点はすでに説明しましたが、今回はデジタル入出力インターフェースの設計で特に注意しなければならないポイントについてさらに詳細に説明します。

デジタル入出力インターフェースとは、多くのマイコンで GPIO(General Purpose Input Output)と呼ばれているインターフェースで、基本的なデジタルの High/Low の入出力を行います。単純に High/Low のレベルで使うことが多いですが、短時間のパルス状の入出力に使う場合も多くなっています。この GPIO を使う場合に留意しなければならないことを説明します。

1.TTLレベルとシュミットトリガレベル

マイコンの入力の High か Low を決めるしきい値電圧は、スレッショルド(Threshold)と呼ばれ、当然ながら電源電圧に影響されます。さらに多くのマイコンで、「TTL レベル」と「シュミットトリガレベル」と呼ばれる2種類があります。例えば、PIC16F マイコンの場合のスレッショルドはデータシートに図-1のように記述されています。

表-1 PIC マイコンの入力スレッショルド

Param. No. Sym. Characteristic Min. Typ Max. Units Conditions
VIL — Input Low Voltage
VIL I/O PORT:
D300    with TTL buffer 0.8 V 4.5V ≤ VDD ≤ 5.5V
D301 0.15VDD V 1.8V ≤ VDD < 4.5V
D302    with Schmitt Trigger buffer 0.2 VDD V 2.0V ≤ VDD ≤ 5.5V
D303    with I²C levels 0.3VDD V
D304    with SMBus levels 0.8 V 2.7V ≤ VDD ≤ 5.5V
D305 MCLR 0.2VDD V
VIH — Input High Voltage
VIH I/O PORT:
D320    with TTL buffer 2.0 V 4. V ≤ VDD ≤ 5.5V
D321 0.25VDD + 0.8 V 1.8V ≤ VDD < 4.5V
D322    with Schmitt Trigger buffer 0.8VDD V 2.0V ≤ VDD ≤ 5.5V
D323    with I²C levels 0.7VDD V
D324    with SMBus levels 2.1 V 2.7V ≤ VDD ≤ 5.5V
D325 MCLR 0.7VDD V

この表のなかで Low レベルの VI Lと High レベルの VIH のいずれにも、TTL レベルとシュミットトリガレベルが記述されています。これをわかりやすく図で表すと、図-1 のようになります。図-1 では電源電圧 VDD を 3.3V としています。

この図-1(a)の TTL レベルの場合、Low と High の間は不定となっていて、Low となることも、High となることもあり得ます。このため、入力信号の変化が遅い場合、図のように Low レベルと High レベルの間で High と Low を高速で繰り返してしまう状態、つまり発振状態になる場合があります。

これに対して、図-1(b) のシュミットトリガレベルの場合には、Low レベルと High レベルの間は、変化しないようになっています。つまりヒステリシスがある状態となっていて、Low/High のスレッショルドを超えない限り入力値は変化しません。このため、入力信号の変化が遅くても、Low/High のスレッショルドを超えた時点で初めて Low か High の信号として安定に入力されます。

例えば、外部信号を割り込みとして使うような場合には、シュミットトリガレベルを使うことでより安定な状態となります。さらにアナログ信号の変化をデジタル信号として入力するような場合にも、シュミットトリガレベルが有効となります。

図-1 TTL レベルとシュミットトリガレベル

2.出力電流容量

GPIO を出力ピンとして使う場合には、最大流すことができる電流が決められています。さらに、電源と GND ピンに流せる最大電流も決められています。例えば、PIC16F マイコンの場合次のように絶対最大定格が決められています。温度が -40℃ ~ 85℃の 場合

  • VDD ピン  Max 250mA
  • GND ピン  Max 350mA
  • GPIO ピン Max ±50mA

これから GPIO 1ピンごとに 50mA まで流せますが、High 出力の場合 VDD ピンの制限から5ピンが最大ということになります。内部で消費する電流もありますから、これより少なくなります。このように最大定格を考慮して電流値を考える必要があります。

3.スイッチ入力とチャッタリング

スイッチやリレー接点はメカニカルな構造なので、ばねや接点の振動によりオンオフの際、図-2 のように短時間の間オンオフを繰り返します。この時間はスイッチの大きさにより異なり、数 msec から数 10msec となっています。大型のスイッチほど長い時間となります。

この現象はチャッタリングとかバウンシングと呼ばれていて、スイッチやリレー接点をマイコンで扱う場合にやっかいな問題とされています。なぜなら、この繰り返し時間がマイコンのプログラムから見ると結構長い時間になるので、何度もオンオフが入力されることになってしまうためです。

図-2 スイッチのチャッタリング

このチャッタリングを回避するための方法にはいくつかあります。

(1) ハードウェアによる回避方法

ハードウェア回路でチャッタリングを回避する方法でよく使われているのは図-3のような方法です。図-3(a)がスイッチでよく使われますが、多くの場合これだけでは完全に回避するのは難しく、プログラム対策も併用します。図-3(b)はC接点が使える場合の回路で、この回路であれば完全に回避できます。その他ロジック回路でエッジ検出する方法もありますが、結構複雑なロジックになるため実用的ではありません。

図-3 ハードウェアによるスイッチのチャッタリング回避

(a) チャッタリング回避ロジック

チャッタリング回避ロジック

(b) チャッタリング回避ロジック2

チャッタリング回避ロジック2

(2) プログラムによるチャッタリング回避

プログラムでチャッタリングを回避する方法にもいくつかの方法がありますが、いずれの方法も数 10msec の時間を必要としますので、高速な入力変化には対応できません。

(a) 遅延を挿入する方法

スイッチ入力の Low(High)を検出したら、数 10msec の遅延後、再度スイッチの状態を読み、Low(High)であったら確かにスイッチがオン(オフ)となったとします。

(b) 複数回入力する方法

スイッチの状態を一定間隔で複数回入力し、連続で同じ状態になったら、スイッチ入力ありと判定する方法です。

(c) 一定間隔でスイッチ状態を入力する

タイマ等の数 10msec 周期の割り込みでスイッチの状態を入力し、立ち上がりまたは立下りを検出することでオンオフを判定する方法です。

これらのいずれの場合も、スイッチが長時間のオン状態の場合、同じ判定を繰り返すことが無いようにフラグ等で区別する必要があります。つまり一度オンを検出したら、オンフラグをセットし、続いてオンを検出しても、オンフラグがセット中はオン処理をしないようにします。オフ状態の検出でオンフラグをリセットします。

4. 未使用ピンの処理

マイコンの入出力ピンで使わないピンをどうするかという問題です。

最近のマイコンはすべて CMOS 構造ですから、空きピンが入力モードでオープンのままの場合、内部の CMOS 回路が中途半端な論理状態となるため、わずかですがリーク電流(1µA 程度)を発生します。空きピンがたくさんある場合、このリーク電流による消費電流は無視できなくなります。特に低消費電力モードでマイコンを使う場合には必須の対策となります。

この対策としては、出力モードで Low とするか、入力モードにする場合には、High か Low の論理を明確にします。アナログピンモードが使える場合には、アナログピンにすることもよい対策です。

5. スルーレートとダンピング抵抗

最近のマイコンは高速化されているため、GPIO としてオンオフする場合にも、接続相手との距離が長く、インピーダンスがミスマッチしているような場合、立ち上がり、立下りのエッジで信号の反射やオーバーシュートが発生し、エッジが割れて複数パルスになってしまう場合があります。

特にマイコンが高速で、接続相手が IC のクロック信号だったり、相手マイコンの外部割込み信号だったりする場合には注意する必要があります。

この問題を回避するには次のような対策があります。

(1) スルーレートを制御する

マイコンにより、GPIO ピンのスルーレートを設定できるようになっている場合があります。スルーレートを遅い設定にすることで、反射やオーバーシュートを抑制することができます。

(2) ダンピング抵抗を挿入する

GPIO の出力側に、数 10Ω の抵抗を直列に挿入します。この抵抗によりスルーレートが遅くなり、反射やオーバーシュートを抑制することができます。このような抵抗をダンピング抵抗と呼んでいます。

6. 異なる電源系との接続

例えば 3.3V 動作のマイコンを、相手が 5V 動作のデバイスと GPIO で接続する場合の問題です。

(1) マイコン側が入力の場合

3.3V 動作のマイコンに 5V 動作の出力信号を接続する場合の対策には次のような方法があります。

(a) マイコンが 5V トレラントであれば直接接続可能

マイコンにより 5V 入力を直接入力できるようになっている場合は問題ありません。

(b) 抵抗分圧

抵抗で 5V から 3.3V に分圧する方法です。例えば 1kΩ と 2kΩ で分圧すれば、5V を 2/3 に分圧できますから 3.3V にすることができます。この方法は、信号速度が遅い場合には問題なく使えて安価な方法です。

(c) レベルシフタ IC を使う

この場合は高速動作でも問題なく使えますし、多チャネルが可能です。

(2) マイコン側が出力の場合

(a) そのままでよい場合

相手の論理 High のスレッショルドが、マイコン出力の High レベルで問題なければそのまま接続できます。

(b) オープンドレイン出力として 5V でプルアップ

マイコン側でオープンドレイン出力が設定できる場合には、この設定とし、プルアップ抵抗を相手の電圧に接続すれば問題なく接続できます。

(c) バッファ IC やレベルシフタ IC を使う

レベルシフタ IC は双方向ができますから、入力も出力も一緒に解決することができます。

7. 高電圧、大電流制御

GPIO で高電圧、大電流をオンオフ制御する場合には、トランジスタを使いますが、バイポーラトランジスタと MOSFET トランジスタの2通りの方法があります。

(1) バイポーラトランジスタの場合の接続方法は図-4 のようにします

基本回路は図-4(a) となります。NPN 型(2SC、2SD タイプ)トランジスタを使い、R1 でベース電流を制限します。この R1 がないとマイコンから電流が無制限に流れ出しますから過負荷となってしまいます。この R1 は、トランジスタの電流増幅率hfeを使って次の式で求められます。

IB ≧ Ic ÷ hfe      R1 ≦ (VDD – 0.6)÷ IB

抵抗 R2 の役割はマイコン出力がリセットや電源オン直後のハイインピーダンスの間、トランジスタをオフ状態にして余計な動作をしないようにします。

モータやリレーなどのコイルを駆動する場合には、図-4(b) のようにコイルに並列にダイオードを接続します。これは、コイル駆動をオフする瞬間に、コイル両端に発生する高電圧の逆起電圧をショートして、トランジスタやマイコンを保護する役割を果たします。

バイポーラトランジスタを使う場合、大電流を制御する際には発熱が大きいので放熱対策が必要となります。

図-4 バイポーラトランジスタの場合

(2) MOSFET の場合の接続方法は図-5 のようにします

基本の接続は図-5(a) のようにします。N チャネルの MOSFET を使います。MOSFET は電圧で駆動できますので、バイポーラの場合の R1 の抵抗は不要となります。R3 の役割はバイポーラの場合の R2 と同じで、マイコンがハイインピーダンスの間 MOSFET をオフ状態にします。MOSFET の場合もコイルを駆動する際にはダイオードをコイルに並列に接続します。

MOSFET はオン抵抗が非常に小さいので、数 A という大電流制御でもほとんど発熱しませんから放熱対策は不要です。このように高電圧、大電流を制御する際には MOSFET が便利に使えます。

図-5 MOSFET の場合

アナログ入力インターフェースの留意点について次回以降で説明していきます。

PDF 資料請求

特別連載_MCU_5:デジタル入出力インターフェースの設計留意点

著者プロフィール

後閑 哲也 Tetsuya Gokan

経歴 1971年 東北大学卒業後 大手通信機メーカにて各種の制御装置を開発
2003年 有限会社マイクロチップ・デザインラボ設立
現在の活動
  • マイコンや計測制御システムの開発コンサルタント、グローバル電子(株)顧問
  • 神奈川工科大学 非常勤講師としてモノづくりの基礎を指導
  • 書籍や雑誌記事の執筆
書籍
(技術評論社)
  • 電子工作の素(改定新版)
  • MCC、C言語によるPICプログラミング大全
  • マイコンの使い方がよくわかる本
  • 逆引きPIC電子工作やりたいこと事典
  • IoT電子工作やりたいこと事典

特別連載「マイコン(MCU)システム開発入門編」リンク

特別連載