2 オープンドレイン LPC1114のdp5とdp27は、内部でドレイン端子が接続されていないオープンドレインです。 オープンドレインの話をする前に、ほかのピンが出力ピンとして設定されたとき、内部回路はどうなっているか見てみましょう。 図3をご覧ください。 オープンドレインでない出力ピンは2つのMOS FETによってプラス側かグランド側のどちらかにつながった状態になっています。 このような構造をCMOSといいます。 MOS FETには3端子あり、それぞれの端子にはゲート(Gate)、ドレイン(Drain)、ソース(Source)と名前が付いています。 この名前の付けかたは電子の流れを意識したものなので電流の流れとは逆になっています。 図3 簡単に言えばこのMOS FETは電流の流れを制御するスイッチのようなものです。 蛇口に例えるとソースが水が供給される水道管につながります。 ドレインが水が出る蛇口、ゲートが蛇口を開け閉めするコックとなります。 この出力ピンに1をセットすると、上側のMOS FETのみがONになりプラス電源とピンがつながります。 よってピンの電圧は電源電圧に近い値になります。 図3のように配線された発光ダイオードは点灯します。 一方このピンに0がセットされると、下のMOS FETがONとなりこのピンはグランドに接続されます。 このピンの電圧をグランドレベルになり接続した発光ダイオードは消灯します。 ただ流せる電流はというと(MOS FETの能力によりますが)、この様なマイクロコントローラーに内蔵されているものの場合、数mAから数10mAといったところで、LEDを点灯させるのが精いっぱいです。 それ以上電流を流そうとするとこのピンの出力段のMOS FETが破損する場合がありますので注意してください。 くれぐれもGPIOを出力ピンに設定する場合、抵抗なしでLEDにつないだり、GNDや電源につながっていないか確認してください。 CMOSタイプの出力ピン同士をつなぐことも禁物です。 それではオープンドレインの場合を見ていきましょう (図4)。 オープンドレインはグランドにつながったMOS FETのみ構造となっています。 オープンドレインの出力ピンを1にセットするとこのピンはグランドに短絡し、出力電圧はグランドレベル(ほぼ0V)となります。 LPC1114の場合、プログラムでセットした値を反転してゲートに入力しています。 図4 一方、このピンに0をセットすると、MOS FETはオフになり、どこにもつながっていない状態となります。 これをハイインピーダンス状態といいます。 この状態ではデジタル的に0とも1ともどっちとも付かない状態なので、図のようにプラス電源とピン間に抵抗を入れます。 これをプルアップ抵抗といいます。 この抵抗によりハイインピーダンス状態では1となり、0か1かが必ず決まります。 このピンに対してプログラムから0をセットした場合、ピン自体はハイインピーダンス状態ですが、このピンは抵抗を通してプラス電源に引っ張り上げられていますので、結果として出力は1となります。 ではこのピンにプログラムから1をセットした場合はどうでしょう。 MOS FETはオンになりピンにつながったドレインはグランドに短絡します。 結果として出力は0となります。 それではオープンドレインのピンに発光ダイオードをつないで見ましょう。 まず 図5のように発光ダイオードを接続してみましょう。 プログラムから0をセットしたときはMOS FETのドレインはどこにもつながっていませんので、発光ダイオードはプルアップ抵抗から流れてきた電流で点灯します。 プログラムから1をセットしたときはMOS FETがオンとなりドレインとソースがつながります。 その結果今まで発光ダイオードに流れていた電流の大部分は内部のFET側を通ってグランドに流れ込みます。 よって発光ダイオードは消灯します。
次の通常のロジック回路なら、L出力は0V、H出力は ほぼ 電源電圧。 ですが、次段の入力電圧が、この電圧より高い場合は問題です。 0Vと3. 3Vで出力しても、次の入力が0Vと5Vでは3. 3VだとH入力として動かないかもしれません。 このような、レベルシフトに使えますね。 次段が低い閾値なら抵抗で分圧すればよい 出力電流が多くの必要な場合も、使えます。 プルアップ抵抗を介するものの、電源線に繋がるため、多くの電流が流せるわけです。 例えば、リレー駆動とか。 出力によって、LEDが点いたり消えたりします。 7セグメントLEDドライバICなんか、オープンドレイン出力を見かけることも多いと思いますよ。 これは、どんなLEDが付くかわかりませんしね。 オープンドレイン同士なら、出力同士を短絡しても、問題はありませんので、そちらの使い方もあります。 通常出力のものとトランジスタを組み合わせても良いのですが、ICになってれば簡単ですよね。 デジタル回路としてオープンドレインを使うメリットは、 1 複数のICが同じ信号線を駆動しても壊れない。 普通の出力だと、IC-Aが5Vを出力し、IC-Bが0Vを出力すると、その間で大電流が 流れてICが壊れてしまいますが、オープンドレインだと0Vしか出力しないので 大丈夫です。 どれか1つがLowを出力したらLowレベルになる動作となります。 バスの割り込み信号線などで使用されます。 2 違う電源電圧に対応できる。 3V系のICから5V系のICに信号を伝達するとき、そのままつなぐとHighレベルの 電圧が足りません。 逆に5Vから3. 3Vにつなぐと過電圧で壊れたりしますが、 オープンドレインを使えば、プルアップ抵抗の接続先を、後段ICの電源電圧に 合わせるだけで問題を解決できます。 3 電気的に絶縁する方法として使われることがある。 電子回路からデジタル信号を出力する時、電気的安定性を確保する目的で、電子回路内部と 外部を電気的に絶縁する必要がある場合があります。 そういう時はフォトカプラという素子を使って 絶縁するのが一般的なのですが、フォトカプラの出力をそのまま出力に出すとオープンドレイン形式 になります。 デメリットは遅い事です。 Lowを出力しているとき、プルアップ抵抗経由で電源から電流を吸い込む事に なりますので、プルアップ抵抗をあまり小さく出来ません。 その一方、プルアップ抵抗を大きくするとHigh側への駆動能力が小さくなるので、 信号電圧の立ち上がり時間が長くなってしまいます。
次のSTマイクロエレクトロニクスのSTM32やSTM8では、多目的に多方面で使用できると言う意味で「汎用」を付けて、「汎用IO」(General Purpose Input Output)と呼んだり、英文表記の頭文字を取って「GPIO」と呼んでいます。 港から荷物を出したり、入れたりするので、マイコンでもポートという言葉が使われています。 マイコンの場合の荷物は、0または1のデータになります。 GPIOの役割 図1にGPIOの最も簡単な使い方の例を示します。 【図1】GPIOの役割 押しボタンスイッチが押されていない時は、ポート2へは0(GNDレベル)が入力されますが、押しボタンを押すと1(電源レベル)に切り替わります。 一方、ポート1は通常は1を出力しておくとLEDは点灯せず、0を出力するとLEDは点灯するようになっています。 この2つの動作をマイコンのプログラムで連動させると、押しボタンを押せばLEDが点灯し、離すと消灯する回路が作れます。 実際は、押しボタンスイッチは制御回路の入力信号。 LEDはモータのドライバICなどにつながれて使われています。 GPIOの構成 では実際にGPIOの構成がどうなっているか見てみましょう。 構成は各社のマイコンで異なっていますので、詳細は各マニュアルを見なければなりません。 ここでは、STマイクロエレクトロニクスのSTM32のGPIOをベースにして説明します。 図2にGPIOの構成図を示します。 【図2】GPIOの構成 (クリックで拡大) 上半分が入力回路、下半分が出力回路です。 右側にGPIOピンがあって、ここからデータが入ったり、出たりします。 ピンのすぐ近くには、ノイズやサージ電圧を電源(またはGND)に逃がすための保護ダイオードが付いています。 入力データはCMOS回路で一度受け、その後内部回路に伝わります。 このCMOS回路を入力バッファと呼びます。 この図ではCMOSインバータを使っています。 マイコン内部から来た出力データは出力バッファによって出力されます。 このバッファはCMOSインバータの構成ですが、マイコン外部の回路をドライブするので、ドライブ能力の高いCMOSが使われます。 GPIOの構成で「NMOSオープンドレイン」と呼ばれる構成があります。 NMOSのドレインが開放状態、すなわちPMOSがNMOSにつながっていない構成です。 図2の出力バッファでPMOSがなく、NMOSだけで構成される場合を「NMOSオープンドレイン」と呼びます。 図2の右側に参考図として記述してあります。 このままでは1( Highレベル)が出力されませんので、外付けプルアップ抵抗が必要になります。 NMOSオープンドレインは、I2Cなどの通信用端子に使われています。
次の