アフィリエイト広告
アフィリエイト広告

オペアンプで直流電圧を増幅してみた

オペアンプ (演算増幅器) について、勉強してみようと思います。

オペアンプではフィードバックを行なう増幅回路を構成しますが、フィードバックアンプの考案というのは 1940年代からの真空管オペアンプに始まっているんだとか。それが半導体に置き換わり、ICとなっていまに続きます。奥深そうだなぁ。マクスウェルの方程式も深かったけど、こっちでも沈んでいきそうなんだけど。

なお、毎度のように、これは俺がオペアンプについて学んでみた備忘録的記事ですので、正確であるとか理論的だとか技術的だとか、まったく保証できませんので、あしからず。

オペアンプとは

ググってください m(_ _;)m 詳しい解説記事、技術資料などなど、あふれるほどにあります。

で、いろいろ眺めていて感じたことなんですが、用語がいまひとつ統一されてないというか、あれ?と思うことがあったので、そのことについてちょっとだけ、一例です。

まず、「オペアンプ (演算増幅器) 」は “operational amplifier” と言います。単に “op amp” とも言われます。
「非反転増幅回路」は “voltage follower” です。”non-inverting amplifier” とも言います。いわゆる「ボルテージフォロワ」は非反転増幅回路の一種で、”unity gain follower” とか “voltage buffer” とか言います。
「反転増幅回路」は “inverting amplifier”、単に “inverter” とも言います。
それから、「仮想短絡」「仮想接地」は “virtual short”、”virtual ground” です。イマジナリショートは和製英語、とはっきり書いてあるサイトもありますね。

どっちが正しいとか、それ間違っているぞとか言う気はありません。こうしたことを頭の片隅においておくと、ググった時に混乱しなくなる、かもしれません。

なぜオペアンプを使うのか

電子工作で遊んでいる俺にとって一番身近にありそうなのは、たとえばセンサーから出たアナログ信号を Arduino で受け取るといったシーン。そこでオペアンプを使うと嬉しいことがあります。

俺の部品箱に LM61 という温度センサがあります。こいつの出力は、温度 -30℃ で +300mV、+100℃ で +1600mV、1℃ あたり +10mV です。
この出力をそのまま Arduino の ADコンバータ (アナログ入力) に入力すると、入力電圧 0~5V が 1024 (=210bit) に変換されるのですから、-30℃ で 61、+100℃ で 328 になります。130℃ を 267 に分解することになるので、数値 1 が 0.49℃ に相当します。でもこれでは、1024 の分解能があるのにその 1/4 ほどしか利用できていません。
そこで、300~1600mV を 0~5V に増幅してやる。すると、130℃ を 1024 に分解できますから、数値 1 が 0.13℃ になる。リビングの室温を測るなら 10~40℃ の測定範囲があれば十分じゃないでしょうか。そうすれば 0.03℃にできます。LM61 の精度は ±2.0℃ なので、そこまでの分解能がなくてもいいんじゃね?とも思いますけど。
センサー出力をフルスケールに増幅することで、ADコンバータの性能が十分に発揮できるので、嬉しいのです。

もう一つはインピーダンスのこと。
温度センサ LM61 の出力インピーダンスは 800Ω です。Arduino UNO (R3) のアナログ入力は、前段の出力インピーダンスを 10KΩ 以下にしなければいけません。800Ω なら問題はないように思えますが、アナログ入力はサンプリングの時に電流が流れ、出力インピーダンスによって電圧降下がおきますので、それが誤差になります。
そこで、オペアンプを入れてもっと低いインピーダンスに変換してやります。オペアンプの入力インピーダンスは無限大、出力インピーダンスはゼロだと教科書に書いてありますね。つまり、インピーダンスを変換することができる。
高いインピーダンスでセンサーの出力を受け取り、低いインピーダンスに変換して ADコンバータに渡してやれば、センサーの出力を正しく伝えることができるので、嬉しいのです。

オペアンプの実験の準備

実験の準備をしましょう。

オペアンプは、部品箱に LM358 と LM324 がありました。どちらも、どこにでも転がっていそうな単電源動作を想定した汎用オペアンプで、似たような特性のようです。LM358 は 2回路入り、LM324 は 4回路入り、今回は 2回路入りの LM358 を使ってみます。

入力信号はプラスの直流電圧としますが、パルス信号でも動作させてみたいので矩形波発振回路を作りましょう。先日の UART通信で使った水晶発振回路を流用しました。図1 の上側の部分です。

矩形波発振回路
図1. 矩形波発振回路

水晶発振子 (19.6608MHz) をアンバッファインバータ 74HCU04 で発振させ、リプルカウンタ 74HC4020 で分周しています。出力できる周波数は 1.2~9830.4KHz、最高 10MHz ってオーダーですけど、LM358 はそんなに高い周波数を扱えるようなオペアンプじゃありません。
R13、R14、R15 はアッテネータです。減衰率 -20dB なので、出力される電圧 VI は 0~0.5V になります。

図1 の下側の回路は、いつもは書いていないのですが、未使用回路の処理と電源のバイパスコンデンサについて示しています。
インバータの未使用回路は、入力端子を GND または 5V につないでおきます。出力側は開放です。オペアンプの未使用回路は、U12B のようにボルテージフォロワにして電源電圧の半分の電圧を印加しておきます。
IC の電源端子 VCC と GND 端子の間にはバイパスコンデンサをいれます。0.1μF が一般的ですけど、74HCU04 には 0.01μF も入れてあります。

電源電圧は 5V ですが、オペアンプだけは VCC を 10V にしています。VEE は 0V (GND) として、単電源動作させます。オペアンプの電源電圧を高くしているのは、LM358 の出力電圧が VCC までフルスイングしないためです。VCC を 5V にすると出力電圧は最大 3.5V なので、Arduino の最大入力 5V に届きません。
ちなみに 10V にしたのは、使用した ACアダプタが 10V だったから。あるものを使おうの精神です。あ、74HCシリーズの電源電圧は最大 7V です。Arduino の I/O 入力電圧は 5V です。10V かけると壊れますので、ご注意を。

それじゃ、オペアンプ LM358 (U12A) を使って遊びましょ。

非反転増幅回路

基本的な構成の増幅回路を作ってみましょう。まずは、非反転増幅回路 (Voltage follower) です。

回路図

非反転増幅回路図
図2. 非反転増幅回路図

この回路のクローズドループ利得 GV は、

GV = 1 + R2 / R1 = 1 + 100 / 4.7 = 22.3

となります。デシベルでいうと 27.0dB です。

ところで、増幅率は R1 と R2 の比で決まることはわかるのですが、具体的に R1、R2 はどれだけの値にすればよいのでしょうか?いろいろな条件を考慮しないといけないそうですが、一つの目安として俺は、R1、R2 に流れる電流を入力バイアス電流の 100~200倍以上になるようにしています。LM358 の入力バイアス電流は最大 250nA ですので、その 200倍で 50μA。出力電圧を 5V とすると抵抗は 5[V]/50[μA]=100[kΩ]、増幅率を 20倍とすると R1=5KΩ、R2=95KΩ なので、まぁだいたいこんなもんかなぁ、って。抵抗器は E6 系列を使っていますので、4.7KΩ と 100KΩ としました。
抵抗が大きすぎると入力バイアス電流とか寄生容量とかの影響がでてきます。小さすぎると出力電流が大きくなって発熱します。電子工作で普通によく使うような、ほどほどの抵抗値がちょうど良いみたいです。

R3 は入力オフセット電圧をキャンセルするための抵抗で、R1 と R2 の並列抵抗値とします。

R3 = R1 ・ R2 / (R1 + R2) = 4.7 × 100 / (4.7 + 100) = 4.49 [KΩ]

なので 4.7KΩ としました。なお、入力インピーダンスは、R3 に電流が流れないのでほぼ無限大です。

ちなみに、よく「オペアンプの非反転入力 IN(+) と反転入力 IN(-) は仮想短絡しているので同電位だ」と言われますけど、出力をフィードバックすることで IN(+) と IN(-) の電位差がなくなるように動く、ということであって、内部でつながったりしているわけではないです。だから、出力がクリップしているような飽和状態などでは仮想短絡にはなりません。

R4 は負荷抵抗です。出力インピーダンスはゼロ、とはいかないので、負荷電流によって出力電圧が変化します。オープンにせずに 10KΩ をつけておきました。

直流電圧を入力してみる

この回路にプラスの直流電圧を入力してみました (図3)。CH2 (青色) が入力電圧、CH1 (黄色) が出力電圧です。なお、いろいろノイズがのるので、CH2 は帯域を 20MHz に制限して測定しています。直流電圧なので横棒だけですけど。

直流電圧を入力したときの入出力電圧 (非反転増幅回路)
図3. 直流電圧を入力したときの入出力電圧 (非反転増幅回路)

入力電圧 VI が 0.0V のとき、出力電圧 VO も 0V です (左)。VI=0.22V で VO=5.0V となりました (中央)。このときのクローズドループ利得 GV は、

GV = VO / VI = 5.0 / 0.22 = 22.7

と、ほぼ計算通りです。

入力電圧を上げていくと出力電圧は 8.9V でクリップしました (右)。このときの入力電圧は 0.40V で、これ以上入力電圧を上げても出力電圧は上昇しません。もちろん、この電圧を直接 Arduino に入力すると壊れます。ご注意を。

うまく増幅できましたね。考えたとおりの結果が得られたと思います。

パルス信号を入力してみる

では今度は、1.2KHz のパルス信号を入力してみましょう。

パルス信号を入力したときの入出力波形 (非反転増幅回路)
図4. パルス信号を入力したときの入出力波形 (非反転増幅回路)

図4 の左側は、出力電圧 VO が 5.0V になるようにしたときの波形です。入力電圧 VI は 0.22V でした。クローズドループ利得 GV は、

GV = VO / VI = 5.0 / 0.22 = 22.7

直流電圧を入力したときと同じです。
入力電圧 0.40V のとき、出力電圧 8.9V でクリップします (右)。これも直流電圧を入力したときと同じでした。

パルスもうまく増幅できていますね。出力波形が台形になっているので、スルーレートがちょっと気になるところ。このあたりのことは、またあとで確認してみようと思います。

ボルテージフォロワ

今回実験はしませんでしたが、ボルテージフォロワ (Unity gain follower) について。

ボルテージフォロワ回路図
図5. ボルテージフォロワ回路図

ボルテージフォロワは非反転増幅回路の一種で、抵抗 R1 を無限大に、R2 をゼロにしたものと考えられます。クローズドループ利得は 1 ですので、入力電圧がそのまま出力されます。
ただし、LM358 の出力電圧は VCC-1.5V 程度なので、VCC=10V とすると出力電圧は 8.5V ほどでクリップします。

入力インピーダンスはほぼ無限大 (数10MΩ)、出力インピーダンスはほぼゼロ (数Ω) なので、電圧バッファとして利用されます。

反転増幅回路

つぎも基本的な構成の、反転増幅回路 (Inverter) です。

反転増幅回路

うまく動かない反転増幅回路図
図6. うまく動かない反転増幅回路図

教科書なんかではまるで異なる回路のように見えてしまうことがあるけれども、基本は非反転増幅回路と同じフィードバック回路です。違いは、信号入力が反転入力 IN(-) になり、非反転入力 IN(+) が接地されるということ。
クローズドループ利得 GV は、

GV = - (R2 / R1) = - (100 / 4.7) = -21.3

マイナスがつくのは出力が反転する、位相が逆になる、からです。デシベルで表すと 26.6dB。デシベルは絶対値で計算するのでプラスです。また、反転増幅回路の入力インピーダンス ZI は、IN(-) が仮想接地されるので ZI=R1=4.7KΩ と、とても小さくなってしまいます。

しかしこの回路、プラスの電圧を入力してもうまく動かない、増幅されないです。なぜ?

出力が反転するということは、プラスの電圧を入力するとマイナスの電圧が出力されるということ。ところが、単電源動作なので出力はマイナスにはならない。だからって、マイナスの電圧を入力することはできません。入力電圧は VEE (単電源の場合 0V) 以下にしてはいけないと、データシートに書いてあります。(最大定格 Input Voltage VI = -0.3 ~ +32V)

そこで、非反転入力 IN(+) にバイアス電圧を加えて、反転入力 IN(-) を IN(+) に対してマイナスになるようにする。と、出力はプラスになって増幅ができる、はず。
バイアス電圧を加えるようにしたのが図7 の回路です。

バイアス電圧回路を追加した反転増幅回路
図7. バイアス電圧回路を追加した反転増幅回路

ボリューム RV1 を調整してバイアス電圧 VB を 0.5V にします。すると入力電圧 VI は VB に対して -0.5~0V ということになる。増幅率 GV を -21.3 とすると、出力電圧は計算上 +10.7~0V になる、はず。

直流電圧を入力してみる

直流電圧を入力したときの入出力電圧 (反転増幅回路)
図8. 直流電圧を入力したときの入出力電圧 (反転増幅回路)

実測してみましょう。(図)

入力電圧 VI が 0.10V 以下のとき、出力電圧 VO は 9.0V でクリップされます (左)。入力電圧を上昇させると VI=0.32V で VO=4.4V (中央)、VI=0.50V で VO=0.6V (右) となりました。
入力電圧を上げていくと、出力電圧は下降していく。これが反転増幅回路の動きです。

入力電圧と出力電圧の関係がわかりにくいですが、バイアス電圧 VB を基準にして電圧の変化量を比較してみます。VB を差し引くと入力電圧 VI は -0.40V から 0.00V に上昇、このとき出力電圧 VO は 8.5V から 0.1V に下降した、ということになります。この変化量の増幅率 GV は、

GV = ΔVO / ΔVI = (8.5 - 0.1) / (-0.40 - 0.00) = -21.0

計算値とほぼ一致しました。

パルス信号を入力してみる

図9 は、1.2KHz のパルス信号を入力したときの入出力波形です。

パルス信号を入力したときの入出力波形 (反転増幅回路)
図9. パルス信号を入力したときの入出力波形 (反転増幅回路)

左側の波形は、入力電圧の HIGH レベルと LOW レベルが VIH=0.32V / VIL=0.16V のときです。出力電圧は VOL=4.4V / VOH=8.0V です。
右側は、入力電圧 VIH=0.50V / VIL=0.16V で出力電圧 VOL=0.6V / VOH=7.4V でした。
バイアス電圧 VB=0.5V を基準にすると、VI=-0.18V/-0.34V のとき VO=3.9V/7.5V、VI=0.00V/-0.34V のとき VO=0.1V/6.9V です。

それぞれの増幅率 GV は、

GV = ΔVO / ΔVI = (3.9 - 7.5) / (-0.18 + 0.34) = -22.5
GV = ΔVO / ΔVI = (0.1 - 6.9) / (0.00 + 0.34) = -20.0

だいたい計算値になりました。

増幅はできていますが、入力信号の LOW レベルが 0.16V 持ち上がっていて、角のような電圧変動もあります。フィードバック電圧が信号源に影響を与えてしまっているようです。また、出力電圧が HIGH レベル、LOW レベルとも変化するし、7V 以上と高い。センサー出力を Arduino に入力するという用途では、ひと工夫が必要になりそうです。

そんな反転増幅回路って、いったいなにがいいのでしょう?

一般には、非反転増幅回路より安定しているとか、入力インピーダンスが低いのでノイズに強いとか、言われています。反転増幅回路はバイアス電圧 VB が動作点になります。VB は変化しない、つまり動作点が変化しない。でも、非反転増幅回路はフィードバックの電圧が動作点なので、入力電圧によって変化する。だから不安定になる、と。まぁ高速信号回路とかならそうでしょうけど、上でやったような直流電圧の増幅ではほとんど問題にならないように思いますケド。
そうそう、反転増幅回路は増幅率を 1 以下にできるんですよね。これが案外役に立ったりする。要は使いようなんでしょうか。

後記

今回は、オペアンプを使った基本的な構成の非反転増幅回路、反転増幅回路について試してみました。オペアンプはこれまでにも使っていますので、だいたい知っている内容だったかなと思います。でも改めて資料を読んだりしてみると、あっそうか、と思うことも多くありました。
それでも、なんとなくわかっているようなわかってないような。まぁトランジスタなんかと同じように、それなりにテキトーに簡単に扱えるようになれたらいいかな。

次は、オペアンプの電気的特性などについて確認してみようと思っています。

タイトルとURLをコピーしました