電子工作をしていてマイコンのIOピンだけを壊してしまった経験が何度かある。そうなってしまう原因として多かったのは、絶対最大定格をオーバーして電流を流してしまうことだった。これを防ぐための原因と対策を見ていこう。
IOピンの内部回路
この図はIOピンの内部回路、正確には 汎用入出力ピン :GPIO(General Purpose Input/Output)ピンという。長ったらしいので人によっては単にIOと呼んだリする。
①は入力バッファ。このピンを入力で使う場合はトランジスタのゲートでHIGH側もしくはLOW側どちらか一方のトランジスタを駆動して内部回路に伝える。内部回路はIOレジスタなどに繋がっていて、ソフトウェアが読んだり書いたりできる。②は出力バッファ。入力の時とは逆で、内部回路で出力された信号で HIGHもしくはLOWどちらかのトランジスタを駆動してマイコン外部に出力する。③は入力用のプルアップ・プルダウン抵抗。それぞれにスイッチが付いていて、ソフトウェアで制御できる。外部回路の部品点数を削減するときに使える機能だ。④は内部回路保護用のダイオード。静電気など瞬間的な大電圧が印加されたときに、中の回路に入らないように電源ラインにノイズを逃がす。④についてはあまりユーザが気にする必要はない。
ちなみに、①入力バッファと②出力バッファで使われているトランジスタ2個の構成、これをハーフブリッジやハーフアームと呼ぶ。ハーフがあるならフルもある?その通り。 (ハーフはつかないが、トーテムポールよいう呼び名もある)マイコン内部ではなかなか使われないが、フルブリッジはモータ制御でよく使われる回路だ。
壊してしまうパターン
ピンを壊してしまうパターンで多いのは、入力として使いたかったピンを間違って出力に設定してしまったときだ。特に、外部回路でスイッチを取り付けて、プルダウンもしくはプルアップの逆側を、スイッチで電源/GNDに直接接続しているときが危険。
IOピンは入力もしくは出力のモード設定をすると①②いずれかの回路が使えるようになるので、正しく設定していれば内部回路と外部回路の結線は図のようになる。スイッチを押さなければHIGH、スイッチを押せばLOWが入力される。
でも、間違って出力に設定してしまった場合はこのような結線になる。
何がヤバイかお分かり頂けるだろうか。仮にa.プルアップした場合でHIGHを出力、b.プルダウンした場合でLOWを出力していたとしよう。aではHIGH側トランジスタがONし、IOピンはマイコン内部で電源ピンとつながっている状態になる。この状態で外部回路のスイッチをONすると・・・電源とGNDが短絡し貫通電流が流れてしまう。同様に、bの場合はLOW側トランジスタがONし、外部スイッチをONすると貫通電流が流れる。
こういった経緯で出力トランジスタはお亡くなりになってしまう。壊れ方はチップのレイアウトにもよるが、多くの場合短絡モードでトランジスタはお亡くなりになるので、無傷の入力回路側も正常に機能できなくなる場合が多い。
対策
ハードウェアの対策
ではこうならないためにどうするか。仮に出力に設定してしまい、運悪くそれに気づかず外部スイッチをONしても貫通電流が流れないように、保護抵抗Rpを追加する。これなら貫通電流が流れても 保護抵抗Rp で電圧降下する。
具体的にどの程度の値にすればよいかというと、貫通電流が流れた際に出力トランジスタの絶対最大定格を超えない電流になるように設定すればよい。例えば、出力時の入出力電流の定格が50mAで電源電圧が5Vの場合は、オームの法則から100Ωとなる。ただ、定格スレスレは危険だし、精神衛生上よろしくない。なので通常は倍以上のディレーティングを考慮する。入力でしか使わないつもりなら、数kΩに設定しておくと安心だ。外部回路との接続点なので、ノイズ対策にもなる。マイコンボードなど入力にも出力にも使用するつもりなら、定格×2くらいが一つの目安になる。
ソフトウェアの対策
貫通電流を流してしまったのは、モード設定をミスってしまったことによる。なのでソフト側でもできる対策をしておこう。まずソースコードを書き始める前にIOピンをすべて入力に設定し、そのあとで必要なピンだけ出力に設定する。すべて、というのはNCピン(使用しないピン)もすべて入力に設定する。このようにすれば、不要な出力ピンを作らず、貫通電流を流してしまう可能性も低くできる。新しくソースコードを書く際のテンプレートでは、すべてのピンを入力に設定したコードまで書いておくとよいかもしれない。
一部のIOピンが死んだマイコンを使い続けなければならない場合
IOピンの出力側が死んでしまうとマイコン内部のほかの回路や、外部の電源回路も道連れにしてしまうことがある。それでも運よく他回路を巻き込まず、その他機能は健全でそのマイコンを使う続けなければならない場合も、やはり故障したピンは入力に設定しておく。触らぬ神に祟りなし。死んでしまったトランジスタはそっとしておこう。
まとめ
○IOピン内部回路の破壊は、入出力設定を間違え、貫通電流が流れることで発生する。
○保護抵抗を挿入することで対策する。
○ソフトでもNCピンを含め、基本的には入力に設定する。必要最低限のピンだけを出力に設定する。