VIVITABLOG

VIVITAで活躍するメンバーの情報発信サイト

特に質問されてないけどこれは知っておけ - 入力/出力インピーダンス編 -

どもー。ハードウェアエンジニアの嶋田(@shozaburo)です。ここ2回はよく質問されることをブログ記事として書きましたが今回は「特に質問されてはいないのだけど、これは知っておけ」という回路設計における超重要な基本について書きたいと思います。

回路設計は計算の塊なのか?

突然ですが、みなさんは”回路”というものにどういう印象を持っているでしょうか?

ほとんどの方は中学校や高校でオームの法則やフレミングの法則など簡単な電気の基礎は習っていると思います。その時の印象として、

「回路って計算ばっかりで複雑だな」

と思われている人は少なくないのではないでしょうか?もっというと、

「世の中の電化製品は、巨大な電気回路の塊なのにどうやって設計・計算してるんだろう」

と、私自身が回路設計を仕事にするまで思っていました。 でも、実際に設計に携わって分かったことは、電気回路は、機能毎のブロックを組み合わせてできているということです。

ブロックとブロックをつなげるためには、簡単な"ルール・型"があり、その"ルール・型"が一致すればブロックを接続できます。(レゴブロック同士は接続できても、レゴとダイヤブロックでは凹凸の型が一致しないので接続できないのと同じです。)

これはソフトウェアでいうところのライブラリにも似ています。ライブラリを使う場合”引数の型”や”返り値の型”を合わせないと使えないように、電気回路においても"型"をあわせないとブロックをつなぎ合わせることができません。

回路における”型”とは?

"電気回路ブロックにおける型"とは、"信号の電圧の大きさ""信号の種類(デジタルorアナログor電源)"です。これが、出力側と入力側で一致していることでブロック同士を接続できます。下図はよくあるIC同士を接続する例です。これも回路設計におけるブロック同士の接続です。

f:id:shozaburo:20180910223948p:plain

しかし、回路設計においてブロック同士を接続するためには、”型”以外にも重要な要素があります。

それが”入力インピーダンスと出力インピーダンス”です。

入力/出力インピーダンス

(厳密な定義は他のサイトにお任せするとして)私の理解は、

・入力インピーダンス:入力される側が、電流をどれだけ引き込むか

・出力インピーダンス:出力する側が、電流をどれだけ吐くことができるか


です。オームの法則 I=V/R から、電流と抵抗(≒インピーダンス)は反比例の関係なので、言い換えると、

・入力インピーダンスが高い = 電流をあまり引き込まない

・出力インピーダンスが低い = 電流を多く吐くことができる

ということができます。先程の図に、入力インピーダンス(Ri)と出力インピーダンス(Ro)を書き込むと下図のようなイメージになります(これはイメージなので実際の内部がこういう回路になっているわけではありません)。

f:id:shozaburo:20180910223647p:plain

出力としては電流を多く吐くことができる(Roが低い)方がよく、入力としては電流を引き込まない(Riが高い)方がよいです。 現実世界で言うなら、出力の大きいACアダプターやバッテリーのほうがよく(Roが低い)、デバイスは消費電力が低いほうがよい(Riが高い)、という感覚です。 なぜ、抵抗で考えるのではなく電流で考えるのかというと、部品のデータシートなどでは抵抗で記載されていることはほとんどなく、「〇〇mA電流をドライブできる」「△△uA電流を引き込む」のように電流で記載されているからです。

話を戻すと、回路におけるブロック同士の接続は”型”だけではなく、

"出力インピーダンス" << "入力インピーダンス"1

の関係を守った上でブロック同士を接続しなければなりません。

具体例

ArduinoやRaspberryPiを使った簡単な電子工作をされている方は、入力、出力インピーダンスを意識したことはないかもしれません。ArduinoやRaspberryPiのGPIOポート、その他一般的なICのGPIOは基本的に、

"出力インピーダンス" << "入力インピーダンス"

の関係が守られているため、それら同士のGPIOの接続は意識をせずとも問題になることはありません。 ここでは、入力、出力インピーダンスが問題になりそうな例をいくつか取り上げてみます。

例1:マイコンのGPIOポートでLEDは点灯できるか?

答えは、「Yes」でもあり「No」でもあります。マイコンの出力ポートの特性(出力インピーダンス)と、LEDの特性(入力インピーダンス)の関係を具体的に比較しなければ答えはでません。 ということで具体例を挙げて検討してみます。

blog.vivita.io

さて、こちらの記事の中の "LED回路の注意点" として "マイコン出力ポートの最大電流容量" に触れましたが、 「Arduinoでよく使用されているAtmega328pのGPIOポートに、If(max):20mAのLEDを1個だけ接続する」場合は問題ありません。なぜならAtmega328pのGPIOの出力特性は「1ポート当たり最大40mA」で、LEDの入力特性は「20mA」なので、出力インピーダンス << 入力インピーダンスの関係が成り立つからです。

しかし、もし「Atmega328pのGPIOポートに、if(max):20mAのLEDを10個並列接続する」場合は問題です。Atmega328pのGPIOの出力特性は「1ポート当たり最大40mA」で、10個並列接続したLEDの入力特性は「20mA x 10 = 200mA」なので、出力インピーダンス > 入力インピーダンスとなってしまうからです。

こういうときは、LEDドライバを使います。LEDドライバは、いわばインピーダンス変換回路です。LEDドライバは高い入力インピーダンス(高Ri)で受けて、低い出力インピーダンス(低Ri)で出力します。

f:id:shozaburo:20180910223431p:plain

例2:抵抗分圧で電源はつくれるか?

電気の基本的な知識として抵抗2つで電圧を変換(抵抗分圧と呼ぶ)できることは、みなさんご存知かと思います。そこで5VのUSB電源から3.3VのICに電源を供給するために、5Vを抵抗2本で抵抗分圧して3.3Vを作ると。とても簡単ですね(下図左)。しかし、実際にはうまくはいきません。

抵抗分圧回路なので、5V x R2/(R1+R2) = 3.3V でR1とR2の比が計算できると考えているかもしれませんが、抵抗分圧の公式は下図でいうところのIb=0の状態(つまり入力インピーダンスが無限大)の時の話です。Ibの影響を無視するためには、電源からR1とR2を貫通して流れるIaをIbの100倍ほど流す必要があります。Iaに電流を流すということはR1とR2の抵抗値を下げることですから、これは出力インピーダンスを下げて、出力インピーダンス<<入力インピーダンスの関係を成立させようとしていることが分かります。しかし、出力インピーダンスを下げるが故に、使用するICの100倍の電流をドバドバと抵抗を通してGNDに流し込むのは非常に電力の無駄遣いです。

そこで、登場するのがLDOやSMPS(スイッチング電源)と呼ばれる電圧変換のための回路(下図右)です。LDOやSMPSの詳細は割愛しますが、これらの回路は電圧を変換する機能を持つと同時に、電源と負荷の間に入りインピーダンス変換する機能も持ち合わせています。

f:id:shozaburo:20180910225525p:plain

まとめ

少々難しい内容かもしれませんが、回路設計においては非常に基本的な知識です。ときどき回路図を眺めていると一見何のために入っているのか分からない回路があるかもしれませんが、そういう場合はインピーダンス変換回路である場合があります。回路図を読む際のヒントにしてみてください。

また、回路が正常に動作しないときに信号線の電圧を測定してみましょう。予想よりも低めの電圧が出ている場合は、この "出力インピーダンス<<入力インピーダンス" の関係が崩れている可能性がありますので、問題解決の糸口の一つとして考えてみるのもよいと思います。

それではまた次回。


  1. 実は必ずしもこれがよいというわけではなく、"出力インピーダンス=入力インピーダンス"が良い場合があります。高周波回路、オーディオ回路などの信号品質が重要な場合です。これをインピーダンス整合といいます。この話は非常に深い話なので今回は割愛します。