オペアンプ(演算増幅器)の理論 — 理想モデルから実用回路まで完全解説

スピーカーの音量を自在に調整するボリュームつまみ、体温計が体温を正確にデジタル表示する仕組み、ギターエフェクターが音色を自由に変える秘密 — これらの裏側には、ほぼ必ずオペアンプ(Operational Amplifier, 演算増幅器)と呼ばれるアナログICが潜んでいます。オペアンプは「万能アナログICブロック」とも呼ばれ、わずか数本の外付け抵抗やコンデンサを接続するだけで、増幅・加算・減算・積分・微分・フィルタリングといった多様なアナログ演算を実現できます。

なぜオペアンプを学ぶ必要があるのでしょうか。理由は明快です。アナログ電子回路の設計において、オペアンプは最も汎用的で頻繁に使われる基本素子だからです。オペアンプを理解すると、次のような分野で直接的に役立ちます。

  • センサ信号処理 — 温度・圧力・加速度センサが出力する微弱な電圧信号を、ADコンバータが読み取れるレベルまで正確に増幅する計装アンプの設計ができるようになります
  • アクティブフィルタ設計 — ローパス・ハイパス・バンドパスフィルタをオペアンプで構成することで、受動素子だけでは実現できない急峻な遮断特性やゲイン調整が可能になります
  • 制御系の電子回路実装 — PID制御器をアナログ回路で実装する際、比例・積分・微分の各演算をオペアンプ回路で実現します

本記事の内容

  • 理想オペアンプの仮定と仮想短絡の概念
  • 反転増幅回路・非反転増幅回路の利得導出
  • 電圧フォロワ(バッファ)の役割
  • 差動増幅回路・加算回路・減算回路の解析
  • 積分回路・微分回路の伝達関数導出
  • 実際のオペアンプの特性(有限利得、スルーレート、オフセット電圧、CMRR)
  • 周波数特性と安定性(位相余裕)
  • Pythonによる各回路の入出力特性・周波数応答・実特性の可視化

前提知識

この記事を読む前に、以下の記事を読んでおくと理解が深まります。

オペアンプとは — 万能アナログICブロック

直感的なイメージ

オペアンプを初めて学ぶとき、その概念をつかむ最もよいアナロジーは「非常に耳のよいマイク付きスピーカー」です。2つの入力端子にそれぞれ異なる電圧を加えると、オペアンプはそのを聞き取り、その差を途方もなく大きく増幅して出力します。現実のマイクには感度の限界がありますが、理想化されたオペアンプは「無限に鋭い聴力」を持つと仮定します。

もう少し工学的に表現すると、オペアンプは高利得の差動増幅器です。2つの入力端子 — 非反転入力($+$、$V_+$)と反転入力($-$、$V_-$)— の電圧差 $V_+ – V_-$ を、開ループ利得 $A_{OL}$ で増幅して出力します。

$$ V_{\text{out}} = A_{OL}(V_+ – V_-) $$

$A_{OL}$ は典型的に $10^5$〜$10^6$ という途方もなく大きな値です。つまり、入力端子間の電圧差がわずか $1\,\mu\text{V}$ でも、出力は $0.1$〜$1\,\text{V}$ に達します。この超高利得こそがオペアンプの核心であり、「外付け部品で回路特性を自在に設定できる」という万能性の源になっています。

回路記号と端子

オペアンプの回路記号は三角形で表され、以下の端子を持ちます。

  • 非反転入力端子($V_+$): 三角形の上側($+$ 記号)
  • 反転入力端子($V_-$): 三角形の下側($-$ 記号)
  • 出力端子($V_{\text{out}}$): 三角形の頂点
  • 正電源端子($V_{CC}$ または $V_{DD}$): 正の電源電圧を供給
  • 負電源端子($V_{EE}$ または $V_{SS}$): 負の電源電圧を供給(単電源動作ではGND)

回路図では電源端子を省略することが多いですが、実際の回路では必ず電源が接続されていることを忘れてはなりません。出力電圧は電源電圧の範囲内に制限され、この範囲を超えると出力が飽和します。

オペアンプの回路記号と端子の意味がわかったところで、次に「理想オペアンプ」という強力な解析ツールを導入します。理想化を行うことで、回路解析が劇的に簡単になります。

理想オペアンプの仮定

なぜ理想化するのか

実際のオペアンプ(例えば汎用品のLM741やOPA2134)は、利得が有限であり、入力にわずかな電流が流れ、出力インピーダンスもゼロではありません。しかし、これらの非理想特性をすべて考慮して回路を解析すると、計算が非常に煩雑になります。

幸いなことに、オペアンプを負帰還回路で使う場合、開ループ利得が十分に大きければ、回路全体の特性は外付け部品(抵抗やコンデンサ)の値だけで決まり、オペアンプ自体の特性にはほとんど依存しません。これが負帰還の威力です。この性質を最大限に活かすために、「理想オペアンプ」という極限モデルを使います。

理想オペアンプの3つの仮定

理想オペアンプは次の3つの条件を満たすと仮定します。

仮定1: 開ループ利得が無限大

$$ A_{OL} \to \infty $$

開ループ利得が無限大であるため、負帰還ループを閉じたとき、回路のゲインは完全に外付け部品の比だけで決まります。利得が $10^5$ であっても $10^{10}$ であっても、結果はほぼ同じ — それなら無限大と仮定しても差し支えないのです。

仮定2: 入力インピーダンスが無限大

$$ Z_{\text{in}} \to \infty \quad \Rightarrow \quad I_+ = I_- = 0 $$

入力端子には電流がまったく流れません。これは、オペアンプが入力信号源から一切のエネルギーを奪わないことを意味します。信号源にとって、オペアンプの入力端子は「存在しないに等しい」負荷です。

仮定3: 出力インピーダンスがゼロ

$$ Z_{\text{out}} = 0 $$

出力端子は理想的な電圧源として振る舞います。どれだけ大きな電流を負荷に流しても、出力電圧は変動しません。

これら3つの仮定を「理想オペアンプの黄金ルール(Golden Rules)」と呼ぶこともあります。この仮定から、さらに強力な解析概念 — 仮想短絡 — が導かれます。

仮想短絡(バーチャルショート)

概念の直感

仮想短絡とは、「2つの入力端子の電圧が等しくなる」という現象です。物理的にショート(短絡)しているわけではないのに、あたかもショートしているかのように電圧差がゼロになるため「仮想的な」短絡と呼ばれます。

日常のアナロジーで言えば、天秤のバランスに似ています。天秤の両皿に載せた重りが釣り合うと、天秤は水平になります。天秤の支点が物理的に両皿を接続しているわけではありませんが、結果として両皿は同じ高さ(同じ電位)になります。オペアンプの負帰還も同様に、出力から入力に信号を戻すことで、2つの入力端子の電圧差をゼロに保とうとします。

数学的な導出

出力電圧は次の式で与えられます。

$$ V_{\text{out}} = A_{OL}(V_+ – V_-) $$

この式を入力電圧差について解くと、

$$ V_+ – V_- = \frac{V_{\text{out}}}{A_{OL}} $$

となります。ここで、$V_{\text{out}}$ は電源電圧の範囲内で有限の値をとるのに対し、$A_{OL} \to \infty$ ですから、

$$ V_+ – V_- = \frac{V_{\text{out}}}{A_{OL}} \to 0 $$

したがって、負帰還が接続された理想オペアンプでは次の等式が導かれます。

$$ V_+ = V_- $$

これが仮想短絡の条件です。

理想オペアンプの解析ルールまとめ

負帰還が接続された理想オペアンプの回路を解析するときは、次の2つのルールだけを使います。

  1. $V_+ = V_-$ (仮想短絡: 2つの入力端子の電圧は等しい)
  2. $I_+ = I_- = 0$ (入力端子には電流が流れない)

この2つのルールは極めて強力で、以降のすべてのオペアンプ回路の解析において繰り返し使用します。それでは、最も基本的な回路である反転増幅回路から始めましょう。

反転増幅回路

回路構成と動作の直感

反転増幅回路は、入力信号を反転(正負を入れ替え)させながら増幅する回路です。名前の通り、入力が正の電圧なら出力は負の電圧になり、入力が負なら出力は正になります。

回路構成は非常にシンプルです。入力電圧 $V_{\text{in}}$ を抵抗 $R_{\text{in}}$ を通して反転入力端子($V_-$)に接続し、出力端子と反転入力端子の間に帰還抵抗 $R_f$ を接続します。非反転入力端子($V_+$)はグラウンドに接続します。

なぜ出力が反転するのか、直感的に考えてみましょう。入力に正の電圧を加えると、反転入力端子の電位が上がろうとします。すると、$V_+ – V_-$ が負になるため、オペアンプは出力電圧を下げようとします。出力が下がると、帰還抵抗 $R_f$ を通じて反転入力端子の電位を引き下げ、$V_+ = V_-$ のバランスが回復します。この負帰還メカニズムにより、入力と出力は逆符号の関係になるのです。

利得の導出

理想オペアンプの2つのルールを適用して、回路のゲインを導出します。

ステップ1: 仮想短絡を適用する

非反転入力端子はグラウンドに接続されているので $V_+ = 0$ です。仮想短絡の条件 $V_+ = V_-$ より、

$$ V_- = 0 $$

となります。反転入力端子の電位がゼロになることから、この点は仮想接地(Virtual Ground)と呼ばれます。物理的にはグラウンドに接続されていませんが、電位はゼロに保たれるのです。

ステップ2: キルヒホッフの電流則(KCL)を反転入力ノードに適用する

理想オペアンプの仮定より、反転入力端子には電流が流れません($I_- = 0$)。したがって、$R_{\text{in}}$ を流れる電流 $I_1$ と $R_f$ を流れる電流 $I_2$ は等しくなります。

$$ I_1 = I_2 $$

$R_{\text{in}}$ を流れる電流は、入力電圧と仮想接地点の電位差を $R_{\text{in}}$ で割ったものです。

$$ I_1 = \frac{V_{\text{in}} – V_-}{R_{\text{in}}} = \frac{V_{\text{in}} – 0}{R_{\text{in}}} = \frac{V_{\text{in}}}{R_{\text{in}}} $$

同様に、$R_f$ を流れる電流は、仮想接地点と出力電圧の電位差を $R_f$ で割ったものです。

$$ I_2 = \frac{V_- – V_{\text{out}}}{R_f} = \frac{0 – V_{\text{out}}}{R_f} = -\frac{V_{\text{out}}}{R_f} $$

ステップ3: $I_1 = I_2$ から利得を求める

$$ \frac{V_{\text{in}}}{R_{\text{in}}} = -\frac{V_{\text{out}}}{R_f} $$

両辺を整理して $V_{\text{out}}/V_{\text{in}}$ を求めると、

$$ \boxed{A_v = \frac{V_{\text{out}}}{V_{\text{in}}} = -\frac{R_f}{R_{\text{in}}}} $$

これが反転増幅回路の電圧利得です。マイナス符号は信号の反転を表しています。利得の大きさは帰還抵抗と入力抵抗の比だけで決まり、オペアンプ自体の特性には依存しません。これこそが負帰還とオペアンプの組み合わせの真骨頂です。

例えば、$R_f = 10\,\text{k}\Omega$、$R_{\text{in}} = 1\,\text{k}\Omega$ とすれば、$A_v = -10$ 倍の増幅器が得られます。抵抗の値を変えるだけで任意の利得を設定できるのです。

利得の式が得られたところで、次にこの回路の入力インピーダンスについても確認しておきましょう。入力インピーダンスは信号源との接続設計に直結する重要なパラメータです。

入力インピーダンス

反転増幅回路の入力インピーダンスにも注目しましょう。入力から見ると、信号は $R_{\text{in}}$ を通って仮想接地点に流れ込みます。仮想接地点の電位はゼロですから、入力インピーダンスは、

$$ Z_{\text{in}} = R_{\text{in}} $$

となります。これは回路の重要な特徴であり、入力インピーダンスを高くしたい場合は $R_{\text{in}}$ を大きくする必要がありますが、そうするとゲインを維持するために $R_f$ も大きくしなければならず、設計上のトレードオフが生じます。

反転増幅回路ではマイナス符号が付き、入力インピーダンスが $R_{\text{in}}$ に制限されるという2つの特徴がありました。では、これらの制約を解消するにはどうすればよいでしょうか。その答えが非反転増幅回路です。

非反転増幅回路

回路構成と動作の直感

非反転増幅回路は、入力信号の極性を保ったまま(反転せずに)増幅する回路です。入力電圧 $V_{\text{in}}$ を直接、非反転入力端子($V_+$)に接続し、出力と反転入力端子の間に $R_f$ を、反転入力端子とグラウンドの間に $R_{\text{in}}$ を接続します。

この回路では、出力が帰還抵抗を通じて反転入力に戻されます。入力電圧が上がると、$V_+ > V_-$ となるため、オペアンプは出力を上げます。出力が上がると $R_f$ と $R_{\text{in}}$ の分圧により $V_-$ も上がり、再び $V_+ = V_-$ のバランスに達します。入力が上がれば出力も上がる — だから「非反転」です。

利得の導出

ステップ1: 仮想短絡を適用する

$$ V_- = V_+ = V_{\text{in}} $$

ステップ2: $V_-$ の電圧を $R_f$ と $R_{\text{in}}$ の分圧で表す

反転入力端子には電流が流れないため($I_- = 0$)、$R_f$ と $R_{\text{in}}$ を同じ電流が流れます。$V_-$ は $V_{\text{out}}$ を $R_f$ と $R_{\text{in}}$ で分圧した値になります。

$$ V_- = V_{\text{out}} \cdot \frac{R_{\text{in}}}{R_{\text{in}} + R_f} $$

ステップ3: ステップ1と2を等値して利得を求める

$V_- = V_{\text{in}}$ を代入すると、

$$ V_{\text{in}} = V_{\text{out}} \cdot \frac{R_{\text{in}}}{R_{\text{in}} + R_f} $$

$V_{\text{out}}/V_{\text{in}}$ について解くと、

$$ \boxed{A_v = \frac{V_{\text{out}}}{V_{\text{in}}} = 1 + \frac{R_f}{R_{\text{in}}}} $$

利得は常に1以上であり、マイナス符号はありません。$R_f = 0$ のとき $A_v = 1$(電圧フォロワ)、$R_f / R_{\text{in}}$ を大きくするほど高利得になります。

続いて、非反転増幅回路のもう一つの大きな特長である入力インピーダンスについて見ていきます。

入力インピーダンス

非反転増幅回路の大きな利点は、入力インピーダンスが極めて高いことです。入力信号は非反転入力端子に直接接続されており、理想オペアンプの入力インピーダンスは無限大ですから、

$$ Z_{\text{in}} \to \infty $$

となります。信号源に負荷をかけないため、センサ出力のように出力インピーダンスが高い信号源の増幅に最適です。

非反転増幅回路の利得の式で $R_f = 0$(帰還抵抗をショート)かつ $R_{\text{in}} \to \infty$(入力抵抗を開放)とすると、利得がちょうど1になります。この特殊なケースは「電圧フォロワ」と呼ばれ、非常に重要な用途を持ちます。

電圧フォロワ(バッファ)

役割の直感

電圧フォロワ(ボルテージフォロワ)は、入力電圧をそのまま出力する回路です。「増幅しないなら何の意味があるのか?」と思うかもしれませんが、これはインピーダンス変換という極めて重要な役割を果たします。

日常のアナロジーで言えば、電圧フォロワは「通訳」のような存在です。小声でしか話せない人(高出力インピーダンスのセンサ)の言葉を、通訳(電圧フォロワ)がそのまま大きな声(低出力インピーダンス)で伝えます。メッセージの内容(電圧値)は変わりませんが、届く範囲(駆動能力)が格段に広がります。

回路と利得

電圧フォロワは、出力を直接反転入力に接続するだけのシンプルな回路です。

$$ V_- = V_{\text{out}}, \quad V_+ = V_{\text{in}} $$

仮想短絡より $V_+ = V_-$ なので、

$$ \boxed{V_{\text{out}} = V_{\text{in}} \quad (A_v = 1)} $$

入力インピーダンスは無限大、出力インピーダンスはゼロです。この特性を利用して、回路のステージ間の分離(バッファリング)やADコンバータの入力段に広く使われます。

ここまでで、オペアンプの3つの基本増幅回路 — 反転・非反転・電圧フォロワ — を理解しました。これらは「単一の入力信号を増幅する」回路でしたが、実際の信号処理では2つの信号の差を増幅したい場面が頻繁にあります。たとえば、ノイズに埋もれたセンサ信号を抽出するには、差動増幅が不可欠です。

差動増幅回路

差動増幅の必要性

センサから長いケーブルで信号を取り出す場面を考えてみましょう。ケーブルにはノイズが乗りますが、2本の信号線に乗るノイズはほぼ同じ(コモンモードノイズ)です。一方、有用な信号は2本の線の間の電位差として現れます。この電位差だけを増幅し、共通のノイズを除去するのが差動増幅回路の役割です。

回路構成

差動増幅回路(差動増幅器、Difference Amplifier)は、非反転入力と反転入力の両方に信号を入力する回路です。非反転入力端子 $V_+$ には $V_2$ を $R_3$ と $R_4$ の分圧回路を通して接続し、反転入力端子 $V_-$ には $V_1$ を $R_1$ を通して接続し、さらに出力から $R_2$ を通した帰還を接続します。

利得の導出

ステップ1: 非反転入力端子の電圧を求める

入力端子に電流は流れないので、$R_3$ と $R_4$ の分圧から、

$$ V_+ = V_2 \cdot \frac{R_4}{R_3 + R_4} $$

ステップ2: 仮想短絡を適用する

$$ V_- = V_+ = V_2 \cdot \frac{R_4}{R_3 + R_4} $$

ステップ3: 反転入力ノードにKCLを適用する

$R_1$ を流れる電流と $R_2$ を流れる電流が等しいので、

$$ \frac{V_1 – V_-}{R_1} = \frac{V_- – V_{\text{out}}}{R_2} $$

この式に $V_- = V_2 \cdot R_4 / (R_3 + R_4)$ を代入して $V_{\text{out}}$ について解きます。まず右辺を展開します。

$$ V_{\text{out}} = V_- – \frac{R_2}{R_1}(V_1 – V_-) $$

右辺の括弧を展開し、$V_-$ を含む項をまとめます。$V_-$ に掛かる係数は $1 + R_2/R_1 = (R_1 + R_2)/R_1$ となります。

$$ V_{\text{out}} = V_- \left(1 + \frac{R_2}{R_1}\right) – \frac{R_2}{R_1} V_1 $$

ここで $V_- = V_2 \cdot R_4 / (R_3 + R_4)$ を代入すると、

$$ V_{\text{out}} = V_2 \cdot \frac{R_4}{R_3 + R_4} \cdot \frac{R_1 + R_2}{R_1} – \frac{R_2}{R_1} V_1 $$

ステップ4: 抵抗比を揃えて簡略化する

ここで $R_1 = R_3$、$R_2 = R_4$ と設定すると(これが最も一般的な設計)、

$$ \frac{R_4}{R_3 + R_4} \cdot \frac{R_1 + R_2}{R_1} = \frac{R_2}{R_1 + R_2} \cdot \frac{R_1 + R_2}{R_1} = \frac{R_2}{R_1} $$

したがって、

$$ \boxed{V_{\text{out}} = \frac{R_2}{R_1}(V_2 – V_1)} $$

差動増幅回路は、2つの入力のを $R_2/R_1$ 倍して出力します。$V_1$ と $V_2$ に同じノイズが重畳しても、差を取ることでノイズが相殺されるのです。

差動増幅回路は「2つの信号の差」を扱いましたが、もし「複数の信号の和」を計算したい場合はどうするのでしょうか。実は、反転増幅回路を少し拡張するだけで加算回路が構成できます。

加算回路と減算回路

加算回路(反転加算器)

加算回路は、複数の入力信号の重み付き和を出力する回路です。アナログコンピュータの時代、この回路は文字通り「足し算」を行うために使われていました。オペアンプの名前「Operational Amplifier(演算増幅器)」は、まさにこのような数学的演算を実行できることに由来します。

$n$ 個の入力 $V_1, V_2, \dots, V_n$ をそれぞれ抵抗 $R_1, R_2, \dots, R_n$ を通して反転入力端子に接続し、帰還抵抗を $R_f$ とします。

仮想接地の条件と KCL を適用します。各入力からの電流の合計は帰還抵抗を流れる電流に等しいので、

$$ \frac{V_1}{R_1} + \frac{V_2}{R_2} + \cdots + \frac{V_n}{R_n} = -\frac{V_{\text{out}}}{R_f} $$

したがって、

$$ \boxed{V_{\text{out}} = -R_f \left(\frac{V_1}{R_1} + \frac{V_2}{R_2} + \cdots + \frac{V_n}{R_n}\right)} $$

すべての入力抵抗を同じ値 $R$ にすれば、

$$ V_{\text{out}} = -\frac{R_f}{R}(V_1 + V_2 + \cdots + V_n) $$

となり、単純な和の $R_f/R$ 倍が得られます。各入力抵抗を異なる値にすれば、異なる重みの加算が実現できます。これはオーディオミキサーの原理そのものです。

減算回路

減算回路は、先ほど導出した差動増幅回路と本質的に同じです。

$$ V_{\text{out}} = \frac{R_f}{R}(V_2 – V_1) $$

加算回路と減算回路を組み合わせれば、任意の線形結合 $a_1 V_1 + a_2 V_2 + \cdots$ をアナログ的に計算できます。

加算・減算は「代数的」な演算でしたが、オペアンプの万能性はここにとどまりません。抵抗の代わりにコンデンサを使うことで、微積分という「解析的」な演算も実現できます。

積分回路

概念と直感

積分回路は、入力信号の時間積分を出力する回路です。反転増幅回路の帰還抵抗 $R_f$ をコンデンサ $C$ に置き換えた構成です。

直感的には、コンデンサは「電荷をためるバケツ」です。一定の電流を流し続けると、バケツに溜まる電荷(=コンデンサの電圧)は時間とともに直線的に増加します。つまり、定電圧入力を積分すると直線的に変化する出力が得られるのです。矩形波を入力すれば三角波が出力されます。

伝達関数の導出

仮想接地の条件と KCL を適用します。入力抵抗 $R$ を流れる電流がコンデンサ $C$ を流れる電流に等しいので、

$$ \frac{V_{\text{in}}}{R} = -C \frac{dV_{\text{out}}}{dt} $$

$V_{\text{out}}$ について解くために両辺を時間で積分します。

$$ V_{\text{out}}(t) = -\frac{1}{RC}\int_0^t V_{\text{in}}(\tau)\,d\tau + V_{\text{out}}(0) $$

ここで $RC$ は積分の時定数で、$V_{\text{out}}(0)$ は初期値です。$RC$ が大きいほど積分のスケールが小さくなり、出力の変化が緩やかになります。

ラプラス変換を用いると、伝達関数は次のように表されます。

$$ \boxed{H(s) = \frac{V_{\text{out}}(s)}{V_{\text{in}}(s)} = -\frac{1}{sRC}} $$

$s = j\omega$ を代入すると $H(j\omega) = -1/(j\omega RC)$ であり、ゲインの大きさは $|H(j\omega)| = 1/(\omega RC)$ です。周波数が上がるほどゲインが下がる — これはローパスフィルタ的な特性です。実際、積分回路は理想的なローパスフィルタ($-20\,\text{dB/decade}$ のロールオフ)として機能します。

積分回路が「時間の蓄積」を計算するのに対し、「変化の速さ」を計算するのが微分回路です。

微分回路

概念と直感

微分回路は、入力信号の時間微分を出力する回路です。積分回路と逆に、入力側にコンデンサ $C$ を、帰還側に抵抗 $R$ を配置します。

直感的には、微分回路は「変化に敏感なセンサ」です。入力電圧が急激に変化するとき大きな出力を生じ、入力が一定のときは出力がゼロになります。三角波を入力すると矩形波が出力されます。

伝達関数の導出

KCL を反転入力ノードに適用します。コンデンサを流れる電流が帰還抵抗 $R$ を流れる電流に等しいので、

$$ C\frac{dV_{\text{in}}}{dt} = -\frac{V_{\text{out}}}{R} $$

したがって、

$$ V_{\text{out}}(t) = -RC\frac{dV_{\text{in}}}{dt} $$

ラプラス変換すると、

$$ \boxed{H(s) = -sRC} $$

ゲインの大きさは $|H(j\omega)| = \omega RC$ であり、周波数が上がるほどゲインが増加します。これはハイパスフィルタ的な特性です。ただし、高周波でゲインが無制限に上がるため、実用上は高周波ノイズを大きく増幅してしまうという問題があります。このため、実際の回路では帰還抵抗に並列にコンデンサを追加したり、入力コンデンサに直列に抵抗を追加したりして、高周波でのゲインを制限する工夫が必要です。

ここまでで、理想オペアンプを用いた主要な回路 — 反転増幅・非反転増幅・電圧フォロワ・差動増幅・加算・積分・微分 — をすべて解析しました。しかし、現実のオペアンプは理想ではありません。次のセクションでは、実際のオペアンプが持つ非理想特性と、それが回路性能に与える影響を検討します。

実際のオペアンプの特性

理想からのズレ

理想オペアンプは解析の強力なツールですが、実際のオペアンプICはいくつかの重要な点で理想から外れます。設計者はこれらの非理想特性を理解し、許容範囲内に収まるように回路を設計しなければなりません。ここでは主要な4つの非理想特性を解説します。

有限の開ループ利得

実際のオペアンプの開ループ利得 $A_{OL}$ は無限大ではなく有限です。汎用オペアンプで $10^5$(100 dB)程度、高精度オペアンプで $10^6$(120 dB)程度です。

有限利得のもとでは、反転増幅回路の閉ループ利得は、

$$ A_v = \frac{-R_f / R_{\text{in}}}{1 + \frac{1 + R_f / R_{\text{in}}}{A_{OL}}} $$

$A_{OL}$ が十分に大きければ分母の第2項は無視でき、理想の $-R_f/R_{\text{in}}$ に近づきます。しかし、高い閉ループ利得を設定する場合(例えば $R_f/R_{\text{in}} = 1000$)、有限利得の影響が無視できなくなります。

ゲイン精度への影響を定量的に見てみましょう。理想利得を $A_{\text{ideal}} = -R_f/R_{\text{in}}$、ループゲインを $T = A_{OL} / (1 + R_f / R_{\text{in}})$ とすると、ゲイン誤差は次のように近似されます。

$$ \text{ゲイン誤差} \approx \frac{1}{T} \times 100\,[\%] $$

ループゲインが大きいほど、ゲイン誤差は小さくなります。

入力オフセット電圧

理想オペアンプでは、両入力端子に同じ電圧を加えると出力はゼロになるはずです。しかし、実際のオペアンプの内部差動対のトランジスタには微小な不整合があり、出力をゼロにするためには入力に小さな補正電圧 $V_{OS}$ を加える必要があります。この $V_{OS}$ を入力オフセット電圧と呼びます。

汎用オペアンプで $V_{OS} \approx 1$〜$5\,\text{mV}$、高精度オペアンプ(オートゼロ型)で $V_{OS} < 10\,\mu\text{V}$ 程度です。

オフセット電圧は回路のゲインで増幅されるため、高ゲイン回路では深刻な問題になります。反転増幅回路の場合、出力のオフセットは次のようになります。

$$ V_{\text{out,offset}} = V_{OS} \left(1 + \frac{R_f}{R_{\text{in}}}\right) $$

ゲイン100倍の回路で $V_{OS} = 2\,\text{mV}$ なら、出力に $0.2\,\text{V}$ のオフセットが生じます。

スルーレート

スルーレート(Slew Rate, SR)は、オペアンプの出力電圧が変化できる最大速度です。単位は $\text{V}/\mu\text{s}$ で表されます。

$$ SR = \left.\frac{dV_{\text{out}}}{dt}\right|_{\max} $$

汎用オペアンプ(LM741)で $SR \approx 0.5\,\text{V}/\mu\text{s}$、高速オペアンプで $SR > 1000\,\text{V}/\mu\text{s}$ に達するものもあります。

スルーレートが不足すると、大振幅の正弦波出力が三角波状に歪みます。歪みなく出力できる最大周波数(フルパワー帯域幅)は、

$$ f_{\text{FP}} = \frac{SR}{2\pi V_p} $$

ここで $V_p$ は出力の振幅です。$SR = 0.5\,\text{V}/\mu\text{s}$、$V_p = 10\,\text{V}$ とすると、$f_{\text{FP}} \approx 8\,\text{kHz}$ となり、オーディオ帯域の上限近くです。高周波信号を扱う回路では、スルーレートの大きなオペアンプの選定が不可欠です。

同相除去比(CMRR)

理想オペアンプは差動信号($V_+ – V_-$)のみを増幅し、同相信号($V_+ + V_-$ の共通成分)は完全に除去します。しかし実際のオペアンプでは同相信号もわずかに増幅されてしまいます。この性能を定量化する指標が同相除去比(Common Mode Rejection Ratio, CMRR)です。

$$ CMRR = \frac{A_d}{A_{cm}} $$

ここで $A_d$ は差動利得、$A_{cm}$ は同相利得です。デシベル表示では、

$$ CMRR_{\text{dB}} = 20\log_{10}\left(\frac{A_d}{A_{cm}}\right) $$

汎用オペアンプで $CMRR \approx 80$〜$100\,\text{dB}$、高精度計装アンプで $120\,\text{dB}$ 以上に達します。$CMRR = 100\,\text{dB}$ は、差動信号の $10^{-5}$ 倍しか同相ノイズが漏れ込まないことを意味します。

これらの非理想特性が定常的な動作に影響を与えることがわかりました。では、信号の周波数が変わるとオペアンプはどのように振る舞うのでしょうか。次は周波数特性と安定性について検討します。

周波数特性と安定性

オペアンプの周波数特性

オペアンプの開ループ利得 $A_{OL}$ は、低周波では非常に大きいですが、周波数が上がるにつれて低下していきます。多くの汎用オペアンプは内部に補償コンデンサを持ち、主極が1つの1次系として近似できます。

$$ A_{OL}(s) = \frac{A_0}{1 + s/\omega_p} $$

ここで $A_0$ は DC利得(典型的に $10^5$〜$10^6$)、$\omega_p$ は主極の角周波数(典型的に $2\pi \times 10\,\text{Hz}$ 程度)です。

この周波数特性をボード線図(Bode Plot)に描くと、低周波域では平坦($A_0$)、主極以降は $-20\,\text{dB/decade}$ の傾きで低下していきます。

ゲイン帯域幅積(GBP)

ゲインが低下して $0\,\text{dB}$(=1倍)になる周波数をユニティゲイン周波数 $f_T$ と呼びます。$A_0$ が十分大きいとき、

$$ f_T \approx A_0 \cdot f_p $$

ここで $f_p = \omega_p/(2\pi)$ です。$f_T$ はゲイン帯域幅積(Gain-Bandwidth Product, GBP)とも呼ばれ、データシートに必ず記載される重要なパラメータです。

GBPの物理的意味は明快です。閉ループ利得を上げると、回路の帯域幅(使用可能な周波数範囲)はそれに反比例して狭くなります。利得と帯域幅の積は一定で、GBPに等しくなります。

$$ A_v \times BW \approx GBP $$

例えば、$GBP = 1\,\text{MHz}$ のオペアンプで利得10倍の回路を作ると、帯域幅は約 $100\,\text{kHz}$ に制限されます。利得100倍にすると帯域幅は $10\,\text{kHz}$ まで狭まります。

位相余裕と安定性

負帰還回路の安定性を評価する上で最も重要な指標が位相余裕(Phase Margin, PM)です。

ループゲイン $T(j\omega) = A_{OL}(j\omega) \cdot \beta$ のゲインが $0\,\text{dB}$ になる周波数(ゲイン交差周波数)$\omega_{gc}$ において、位相の遅れが $-180°$ にどれだけ「余裕」があるかを測ります。

$$ PM = 180° + \angle T(j\omega_{gc}) $$

位相余裕が正であれば回路は安定です。$PM < 0°$ では発振します。設計上の目安として、$PM \geq 45°$ を確保するのが一般的で、$PM \approx 60°$ が推奨されます。

1次系のオペアンプ(主極補償済み)をユニティゲイン帰還($\beta = 1$)で使う場合、ゲイン交差周波数 $\omega_{gc}$ における位相遅れは $-90°$ 近傍であり、位相余裕は約 $90°$ です。これは十分に安定です。しかし、帰還ネットワークに余分な極やゼロが含まれる場合、位相が余計に遅れて位相余裕が減少する可能性があります。

ここまでの理論をまとめると、オペアンプ回路の設計では周波数特性と安定性のバランスが重要であることがわかります。次に、これらすべての理論をPythonで実装し、可視化によって直感的な理解を深めましょう。

Pythonでの実装と可視化

反転・非反転増幅回路の入出力特性

まず、反転増幅回路と非反転増幅回路の入出力特性を可視化します。理想オペアンプの利得公式に従って、入力電圧に対する出力電圧を比較します。

import numpy as np
import matplotlib.pyplot as plt

# 回路パラメータ
Rf = 10e3    # 帰還抵抗 10kΩ
Rin = 2e3    # 入力抵抗 2kΩ

# 入力電圧の範囲
Vin = np.linspace(-2, 2, 500)

# 反転増幅回路の利得
Av_inv = -Rf / Rin
Vout_inv = Av_inv * Vin

# 非反転増幅回路の利得
Av_noninv = 1 + Rf / Rin
Vout_noninv = Av_noninv * Vin

# 電源電圧による飽和(±12V)
Vsat = 12
Vout_inv_sat = np.clip(Vout_inv, -Vsat, Vsat)
Vout_noninv_sat = np.clip(Vout_noninv, -Vsat, Vsat)

fig, axes = plt.subplots(1, 2, figsize=(12, 5))

# 反転増幅回路
axes[0].plot(Vin, Vout_inv_sat, 'b-', linewidth=2, label=f'$A_v = {Av_inv:.0f}$')
axes[0].plot(Vin, Vin, 'k--', alpha=0.3, label='$A_v = 1$ (reference)')
axes[0].axhline(y=Vsat, color='r', linestyle=':', alpha=0.5, label=f'Saturation ±{Vsat}V')
axes[0].axhline(y=-Vsat, color='r', linestyle=':', alpha=0.5)
axes[0].set_xlabel('$V_{in}$ [V]')
axes[0].set_ylabel('$V_{out}$ [V]')
axes[0].set_title(f'Inverting Amplifier ($R_f$={Rf/1e3:.0f}kΩ, $R_{{in}}$={Rin/1e3:.0f}kΩ)')
axes[0].legend()
axes[0].grid(True, alpha=0.3)
axes[0].set_xlim(-2, 2)
axes[0].set_ylim(-15, 15)

# 非反転増幅回路
axes[1].plot(Vin, Vout_noninv_sat, 'r-', linewidth=2, label=f'$A_v = {Av_noninv:.0f}$')
axes[1].plot(Vin, Vin, 'k--', alpha=0.3, label='$A_v = 1$ (reference)')
axes[1].axhline(y=Vsat, color='r', linestyle=':', alpha=0.5, label=f'Saturation ±{Vsat}V')
axes[1].axhline(y=-Vsat, color='r', linestyle=':', alpha=0.5)
axes[1].set_xlabel('$V_{in}$ [V]')
axes[1].set_ylabel('$V_{out}$ [V]')
axes[1].set_title(f'Non-Inverting Amplifier ($R_f$={Rf/1e3:.0f}kΩ, $R_{{in}}$={Rin/1e3:.0f}kΩ)')
axes[1].legend()
axes[1].grid(True, alpha=0.3)
axes[1].set_xlim(-2, 2)
axes[1].set_ylim(-15, 15)

plt.tight_layout()
plt.savefig('opamp_inverting_noninverting.png', dpi=150, bbox_inches='tight')
plt.show()

左のグラフは反転増幅回路の入出力特性を示しており、利得 $A_v = -5$ で入力信号が反転・増幅されていることがわかります。入力が正のとき出力は負に、入力が負のとき出力は正になり、傾きの絶対値が5であることが直線の勾配から読み取れます。右のグラフは非反転増幅回路で、利得 $A_v = 6$ で同極性のまま増幅されています。どちらの回路でも、出力が電源電圧 $\pm 12\,\text{V}$ に達すると飽和してクリッピングが生じます。この飽和現象は理想オペアンプの解析では現れないため、実際の設計では入力信号の振幅範囲に注意が必要です。

ここまで単一入力の増幅特性を確認しました。次に、複数の入力信号を合成する加算回路の動作を時間波形で見てみましょう。

加算回路の動作波形

次に、加算回路(反転加算器)の動作を時間波形で確認します。2つの異なる周波数の正弦波を加算し、その出力を観察します。

import numpy as np
import matplotlib.pyplot as plt

# 回路パラメータ
Rf = 10e3     # 帰還抵抗
R1 = 10e3     # 入力抵抗1(ゲイン -1)
R2 = 5e3      # 入力抵抗2(ゲイン -2)

# 時間軸
t = np.linspace(0, 0.01, 1000)

# 入力信号
V1 = 1.0 * np.sin(2 * np.pi * 200 * t)  # 200Hz, 1V振幅
V2 = 0.5 * np.sin(2 * np.pi * 500 * t)  # 500Hz, 0.5V振幅

# 加算回路の出力
Vout = -Rf * (V1 / R1 + V2 / R2)

fig, axes = plt.subplots(3, 1, figsize=(10, 8), sharex=True)

axes[0].plot(t * 1000, V1, 'b-', linewidth=1.5)
axes[0].set_ylabel('$V_1$ [V]')
axes[0].set_title(f'Input 1: 200Hz, 1V (gain = $-R_f/R_1$ = {-Rf/R1:.0f})')
axes[0].grid(True, alpha=0.3)

axes[1].plot(t * 1000, V2, 'g-', linewidth=1.5)
axes[1].set_ylabel('$V_2$ [V]')
axes[1].set_title(f'Input 2: 500Hz, 0.5V (gain = $-R_f/R_2$ = {-Rf/R2:.0f})')
axes[1].grid(True, alpha=0.3)

axes[2].plot(t * 1000, Vout, 'r-', linewidth=1.5)
axes[2].set_ylabel('$V_{out}$ [V]')
axes[2].set_xlabel('Time [ms]')
axes[2].set_title('Summing Amplifier Output: $V_{out} = -(R_f/R_1)V_1 - (R_f/R_2)V_2$')
axes[2].grid(True, alpha=0.3)

plt.tight_layout()
plt.savefig('opamp_summing_amplifier.png', dpi=150, bbox_inches='tight')
plt.show()

上の3つのグラフは加算回路の入出力波形を示しています。第1入力(200 Hz, 1 V)はゲイン $-1$ で、第2入力(500 Hz, 0.5 V)はゲイン $-2$ で増幅された後、加算されて出力に現れます。出力波形が2つの周波数成分の混合になっていること、そして全体が反転していることが確認できます。入力抵抗の値を変えることで各入力のゲインを独立に設定できるため、オーディオミキサーのように複数の信号を任意の比率で混合する用途に最適です。

加算回路の「代数的」な動作を確認できたところで、次はオペアンプによる「解析的」な演算 — 積分と微分 — の時間応答をシミュレーションします。

積分回路と微分回路の時間応答

積分回路と微分回路に矩形波を入力したときの出力波形をシミュレーションします。

import numpy as np
import matplotlib.pyplot as plt
from scipy import signal

# 回路パラメータ
R = 10e3    # 抵抗 10kΩ
C = 100e-9  # コンデンサ 100nF
RC = R * C  # 時定数 1ms

# 時間軸
dt = 1e-6
t = np.arange(0, 0.01, dt)

# 矩形波入力(500Hz)
Vin = signal.square(2 * np.pi * 500 * t)

# 積分回路の出力(数値積分)
Vout_int = np.zeros_like(t)
for i in range(1, len(t)):
    Vout_int[i] = Vout_int[i-1] - (1 / RC) * Vin[i] * dt

# 微分回路の出力(数値微分)
Vout_diff = np.zeros_like(t)
dVin_dt = np.gradient(Vin, dt)
Vout_diff = -RC * dVin_dt

# 微分出力のクリッピング(実際のオペアンプの飽和を模擬)
Vout_diff = np.clip(Vout_diff, -12, 12)

fig, axes = plt.subplots(3, 1, figsize=(10, 8), sharex=True)

axes[0].plot(t * 1000, Vin, 'k-', linewidth=1.5)
axes[0].set_ylabel('$V_{in}$ [V]')
axes[0].set_title('Input: Square Wave (500Hz)')
axes[0].set_ylim(-1.5, 1.5)
axes[0].grid(True, alpha=0.3)

axes[1].plot(t * 1000, Vout_int, 'b-', linewidth=1.5)
axes[1].set_ylabel('$V_{out}$ [V]')
axes[1].set_title(f'Integrator Output ($RC$ = {RC*1000:.1f} ms)')
axes[1].grid(True, alpha=0.3)

axes[2].plot(t * 1000, Vout_diff, 'r-', linewidth=1.5)
axes[2].set_ylabel('$V_{out}$ [V]')
axes[2].set_xlabel('Time [ms]')
axes[2].set_title(f'Differentiator Output ($RC$ = {RC*1000:.1f} ms)')
axes[2].grid(True, alpha=0.3)

plt.tight_layout()
plt.savefig('opamp_integrator_differentiator.png', dpi=150, bbox_inches='tight')
plt.show()

上のグラフから積分回路と微分回路の本質的な違いが読み取れます。積分回路(中段)は矩形波を入力すると三角波を出力しています。これは、矩形波の正の部分で出力が一定速度で下降(反転積分のため)し、負の部分で一定速度で上昇するためです。一方、微分回路(下段)は矩形波のエッジ(立ち上がり・立ち下がり)のタイミングで鋭いパルスを出力しています。矩形波は一定値の区間(微分がゼロ)とエッジ(微分が極大)からなるため、微分器はエッジだけに反応するのです。実用上、微分回路はノイズに非常に敏感であり、高周波ノイズが増幅されて出力パルスが不安定になりやすい点にも注意が必要です。

ここまでは時間領域での動作を確認してきました。次に、周波数領域の視点からオペアンプの特性を見ていきましょう。開ループ利得と閉ループ帯域幅の関係をボード線図で可視化します。

オペアンプの開ループ周波数特性(ボード線図)

オペアンプの開ループ特性と、閉ループ利得がどのように帯域幅を制限するかをボード線図で可視化します。

import numpy as np
import matplotlib.pyplot as plt

# オペアンプのパラメータ(汎用品を想定)
A0_dB = 100      # DC開ループ利得 [dB]
A0 = 10**(A0_dB / 20)  # リニア値
fp = 10           # 主極周波数 [Hz]
GBP = A0 * fp     # ゲイン帯域幅積 [Hz]

# 周波数軸
f = np.logspace(0, 8, 1000)
omega = 2 * np.pi * f
omega_p = 2 * np.pi * fp

# 開ループ伝達関数
A_OL = A0 / (1 + 1j * f / fp)
A_OL_mag_dB = 20 * np.log10(np.abs(A_OL))
A_OL_phase = np.degrees(np.angle(A_OL))

# 閉ループ利得の例
gains = [1, 10, 100]
colors = ['#e74c3c', '#2ecc71', '#3498db']

fig, axes = plt.subplots(2, 1, figsize=(10, 8), sharex=True)

# ゲイン線図
axes[0].semilogx(f, A_OL_mag_dB, 'k-', linewidth=2.5, label='Open-loop $A_{OL}$')

for gain, color in zip(gains, colors):
    beta = 1 / gain
    A_CL = A_OL / (1 + beta * A_OL)
    A_CL_mag_dB = 20 * np.log10(np.abs(A_CL))
    bw = GBP / gain
    axes[0].semilogx(f, A_CL_mag_dB, color=color, linewidth=1.5, linestyle='--',
                      label=f'Closed-loop $A_v$={gain} (BW≈{bw/1e3:.0f}kHz)')

axes[0].axhline(y=0, color='gray', linestyle=':', alpha=0.5)
axes[0].set_ylabel('Gain [dB]')
axes[0].set_title(f'Op-Amp Bode Plot ($A_0$={A0_dB}dB, $f_p$={fp}Hz, GBP={GBP/1e6:.1f}MHz)')
axes[0].legend(loc='upper right', fontsize=9)
axes[0].grid(True, alpha=0.3, which='both')
axes[0].set_ylim(-20, 110)

# 位相線図
axes[1].semilogx(f, A_OL_phase, 'k-', linewidth=2.5, label='Open-loop phase')
axes[1].axhline(y=-90, color='gray', linestyle=':', alpha=0.5, label='$-90°$')
axes[1].axhline(y=-180, color='r', linestyle=':', alpha=0.5, label='$-180°$')
axes[1].set_ylabel('Phase [degrees]')
axes[1].set_xlabel('Frequency [Hz]')
axes[1].legend(loc='lower left')
axes[1].grid(True, alpha=0.3, which='both')
axes[1].set_ylim(-200, 10)

plt.tight_layout()
plt.savefig('opamp_bode_plot.png', dpi=150, bbox_inches='tight')
plt.show()

print(f"GBP = {GBP/1e6:.1f} MHz")
print(f"Av=1  → BW ≈ {GBP/1e6:.1f} MHz")
print(f"Av=10 → BW ≈ {GBP/10/1e3:.0f} kHz")
print(f"Av=100 → BW ≈ {GBP/100/1e3:.0f} kHz")

ボード線図から3つの重要な特徴が読み取れます。第一に、開ループ利得(黒の実線)は低周波で100 dBの一定値を持ち、主極周波数(10 Hz)を超えると $-20\,\text{dB/decade}$ で減衰しています。この単調な減衰が、1次系として補償されたオペアンプの典型的な特性です。第二に、閉ループ利得(破線)は低周波では設定ゲインの値で平坦ですが、開ループ特性に近づくと減衰が始まります。ゲインを高く設定するほど帯域幅が狭くなる — ゲイン帯域幅積の一定則 — が明確に視覚化されています。第三に、位相特性を見ると、主極周波数で $-45°$、その10倍の周波数で $-90°$ 近くに漸近しています。1次系のオペアンプでは位相遅れが $-90°$ を超えないため、ユニティゲイン帰還でも十分な位相余裕(約 $90°$)が確保されます。

ここまで周波数特性を理想的なモデルで可視化しました。次に、有限利得と入力オフセット電圧という実際のオペアンプ固有の非理想特性が、回路の出力にどの程度の誤差をもたらすかを定量的に確認します。

有限利得とオフセット電圧の影響

有限開ループ利得と入力オフセット電圧が、反転増幅回路の出力にどのような影響を与えるかを定量的に比較します。

import numpy as np
import matplotlib.pyplot as plt

# 回路パラメータ
Rf = 100e3   # 帰還抵抗
Rin = 1e3    # 入力抵抗
ideal_gain = -Rf / Rin  # 理想利得 = -100

# 入力信号
Vin = np.linspace(-0.1, 0.1, 500)

# 理想オペアンプの出力
Vout_ideal = ideal_gain * Vin

# 有限利得(A_OL = 10^3, 10^4, 10^5)の出力
A_OL_values = [1e3, 1e4, 1e5]
colors_aol = ['#e74c3c', '#f39c12', '#2ecc71']

fig, axes = plt.subplots(1, 2, figsize=(14, 5))

# 左: 有限利得の影響
axes[0].plot(Vin * 1000, Vout_ideal, 'k--', linewidth=2, label='Ideal ($A_{OL}=\\infty$)')
for A_OL, color in zip(A_OL_values, colors_aol):
    # 有限利得の閉ループゲイン
    actual_gain = (-Rf / Rin) / (1 + (1 + Rf / Rin) / A_OL)
    Vout = actual_gain * Vin
    error = (actual_gain - ideal_gain) / ideal_gain * 100
    axes[0].plot(Vin * 1000, Vout, color=color, linewidth=1.5,
                  label=f'$A_{{OL}}=10^{{{int(np.log10(A_OL))}}}$ (error={error:.2f}%)')

axes[0].set_xlabel('$V_{in}$ [mV]')
axes[0].set_ylabel('$V_{out}$ [V]')
axes[0].set_title(f'Effect of Finite Open-Loop Gain (Ideal gain = {ideal_gain:.0f})')
axes[0].legend(fontsize=9)
axes[0].grid(True, alpha=0.3)

# 右: オフセット電圧の影響
Vos_values = [0, 1e-3, 3e-3, 5e-3]
colors_vos = ['k', '#3498db', '#e74c3c', '#9b59b6']
linestyles = ['--', '-', '-', '-']

for Vos, color, ls in zip(Vos_values, colors_vos, linestyles):
    # オフセットによる出力シフト
    Vout_offset = ideal_gain * Vin + (1 + Rf / Rin) * Vos
    lw = 2 if Vos == 0 else 1.5
    label = f'$V_{{OS}}$={Vos*1000:.0f}mV (offset={((1+Rf/Rin)*Vos):.2f}V)' if Vos > 0 else 'Ideal ($V_{OS}$=0)'
    axes[1].plot(Vin * 1000, Vout_offset, color=color, linewidth=lw,
                  linestyle=ls, label=label)

axes[1].set_xlabel('$V_{in}$ [mV]')
axes[1].set_ylabel('$V_{out}$ [V]')
axes[1].set_title(f'Effect of Input Offset Voltage (Gain = {int(abs(ideal_gain))})')
axes[1].legend(fontsize=9)
axes[1].grid(True, alpha=0.3)

plt.tight_layout()
plt.savefig('opamp_real_effects.png', dpi=150, bbox_inches='tight')
plt.show()

左のグラフから、有限利得の影響はゲインが $A_{OL}$ に比べて十分小さい限り無視できることがわかります。理想利得 $-100$ に対して、$A_{OL} = 10^3$ でもゲイン誤差はわずか約 $9.1\%$ にとどまり、$A_{OL} = 10^5$ では $0.1\%$ 未満です。しかしゲインを $A_{OL}$ と同程度まで上げると誤差が急増するため、閉ループゲインは開ループ利得に対して十分なマージンを持たせる必要があります。右のグラフはオフセット電圧の影響を示しており、ゲイン100倍の回路では $V_{OS} = 5\,\text{mV}$ のオフセットが出力に $0.505\,\text{V}$ のDCシフトを生じさせています。微小信号を高ゲインで増幅する用途(例えば熱電対の信号処理)では、低オフセットのオペアンプの選定が不可欠であることが数値的に確認できます。

有限利得とオフセット電圧は定常的な(低周波の)非理想特性でした。次に、信号が高速に変化する場面で問題となるスルーレートの影響を可視化します。

スルーレートの影響シミュレーション

スルーレートが制限された場合の出力波形の歪みを可視化します。

import numpy as np
import matplotlib.pyplot as plt

# パラメータ
freq = 50e3  # 50kHz
Vp = 10      # 振幅 10V
SR = 0.5e6   # スルーレート 0.5 V/μs = 0.5e6 V/s

# 時間軸
t = np.linspace(0, 3 / freq, 3000)
dt = t[1] - t[0]

# 理想出力(正弦波)
Vout_ideal = Vp * np.sin(2 * np.pi * freq * t)

# スルーレート制限付き出力
Vout_sr = np.zeros_like(t)
Vout_sr[0] = Vout_ideal[0]
for i in range(1, len(t)):
    desired = Vout_ideal[i]
    delta = desired - Vout_sr[i-1]
    max_delta = SR * dt
    if abs(delta) > max_delta:
        Vout_sr[i] = Vout_sr[i-1] + np.sign(delta) * max_delta
    else:
        Vout_sr[i] = desired

# フルパワー帯域幅
f_FP = SR / (2 * np.pi * Vp)

fig, ax = plt.subplots(figsize=(10, 5))
ax.plot(t * 1e6, Vout_ideal, 'b-', linewidth=1.5, label='Ideal output', alpha=0.7)
ax.plot(t * 1e6, Vout_sr, 'r-', linewidth=2, label=f'SR-limited (SR={SR/1e6:.1f} V/μs)')
ax.set_xlabel('Time [μs]')
ax.set_ylabel('$V_{out}$ [V]')
ax.set_title(f'Slew Rate Distortion (f={freq/1e3:.0f}kHz, $V_p$={Vp}V, Full-power BW={f_FP/1e3:.1f}kHz)')
ax.legend()
ax.grid(True, alpha=0.3)

plt.tight_layout()
plt.savefig('opamp_slew_rate.png', dpi=150, bbox_inches='tight')
plt.show()

print(f"Full-power bandwidth: {f_FP/1e3:.1f} kHz")
print(f"Signal frequency: {freq/1e3:.0f} kHz")
print(f"SR required for undistorted output: {2*np.pi*freq*Vp/1e6:.2f} V/μs")

グラフから、スルーレートの制限により正弦波出力が三角波状に歪んでいることが明確に読み取れます。$SR = 0.5\,\text{V}/\mu\text{s}$、$V_p = 10\,\text{V}$ のとき、フルパワー帯域幅は約 $8\,\text{kHz}$ です。信号周波数 $50\,\text{kHz}$ はフルパワー帯域幅を大きく超えているため、出力はスルーレートの上限速度でしか追従できず、直線的に上昇・下降する三角波になります。歪みなく $50\,\text{kHz}$、$10\,\text{V}$ の正弦波を出力するには、$SR \geq 2\pi f V_p \approx 3.14\,\text{V}/\mu\text{s}$ が必要です。高速オペアンプの選定においては、必要なスルーレートを出力振幅と周波数から事前に計算することが重要です。

ここまで時間領域での非理想特性の影響を個別に見てきました。最後に、反転増幅器・積分器・微分器の3つの回路の周波数応答をボード線図で比較し、各回路のフィルタ特性の違いを総括的に確認しましょう。

各回路の周波数応答の比較

反転増幅器、積分器、微分器の周波数応答をボード線図で比較し、各回路のフィルタ特性を確認します。

import numpy as np
import matplotlib.pyplot as plt

# 回路パラメータ
R = 10e3      # 10kΩ
C = 100e-9    # 100nF
Rf = 50e3     # 帰還抵抗(反転増幅器用)

# 周波数軸
f = np.logspace(1, 6, 1000)
omega = 2 * np.pi * f
s = 1j * omega

# 反転増幅器: H(s) = -Rf/R(周波数に依存しない理想特性)
H_inv = -Rf / R * np.ones_like(s)

# 積分器: H(s) = -1/(sRC)
H_int = -1 / (s * R * C)

# 微分器: H(s) = -sRC
H_diff = -s * R * C

# ゲイン(dB)
gain_inv = 20 * np.log10(np.abs(H_inv))
gain_int = 20 * np.log10(np.abs(H_int))
gain_diff = 20 * np.log10(np.abs(H_diff))

# 位相(度)
phase_inv = np.degrees(np.angle(H_inv))
phase_int = np.degrees(np.angle(H_int))
phase_diff = np.degrees(np.angle(H_diff))

# 特性周波数
f_c = 1 / (2 * np.pi * R * C)

fig, axes = plt.subplots(2, 1, figsize=(10, 8), sharex=True)

# ゲイン線図
axes[0].semilogx(f, gain_inv, 'b-', linewidth=2, label=f'Inverting Amp ($A_v$={Rf/R:.0f})')
axes[0].semilogx(f, gain_int, 'r-', linewidth=2, label='Integrator ($-1/sRC$)')
axes[0].semilogx(f, gain_diff, 'g-', linewidth=2, label='Differentiator ($-sRC$)')
axes[0].axvline(x=f_c, color='gray', linestyle=':', alpha=0.7, label=f'$f_c = 1/(2\\pi RC)$ = {f_c:.0f} Hz')
axes[0].set_ylabel('Gain [dB]')
axes[0].set_title('Frequency Response Comparison of Op-Amp Circuits')
axes[0].legend(fontsize=9)
axes[0].grid(True, alpha=0.3, which='both')
axes[0].set_ylim(-40, 60)

# 位相線図
axes[1].semilogx(f, phase_inv, 'b-', linewidth=2, label='Inverting Amp')
axes[1].semilogx(f, phase_int, 'r-', linewidth=2, label='Integrator')
axes[1].semilogx(f, phase_diff, 'g-', linewidth=2, label='Differentiator')
axes[1].set_ylabel('Phase [degrees]')
axes[1].set_xlabel('Frequency [Hz]')
axes[1].legend()
axes[1].grid(True, alpha=0.3, which='both')

plt.tight_layout()
plt.savefig('opamp_frequency_response_comparison.png', dpi=150, bbox_inches='tight')
plt.show()

print(f"Characteristic frequency (1/2πRC): {f_c:.0f} Hz")

このボード線図は、3つのオペアンプ回路の周波数特性の本質的な違いを明確に示しています。反転増幅器(青)はゲインが $14\,\text{dB}$(= $R_f/R = 5$ 倍)で全帯域にわたって平坦であり、位相は $-180°$(反転)で一定です。これは純粋な「増幅」です。積分器(赤)はゲインが $-20\,\text{dB/decade}$ で減衰しており、低周波ほどゲインが大きくなります。位相は $+90°$ 一定で、理想的なローパスフィルタ的振る舞いです。特性周波数 $f_c = 1/(2\pi RC) \approx 159\,\text{Hz}$ でゲインが $0\,\text{dB}$ を通過します。微分器(緑)は逆に $+20\,\text{dB/decade}$ でゲインが増加し、高周波ほどゲインが大きくなります。位相は $-90°$ 一定で、ハイパスフィルタ的です。この高周波でのゲイン増加が、微分器がノイズに弱い根本的理由です。

まとめ

本記事では、オペアンプ(演算増幅器)の理論を、理想モデルから実用回路まで体系的に解説しました。

  • 理想オペアンプの3条件 — 無限大の開ループ利得、無限大の入力インピーダンス、ゼロの出力インピーダンス — と、そこから導かれる仮想短絡($V_+ = V_-$, $I_+ = I_- = 0$)の2つのルールが、すべての回路解析の基盤です
  • 基本増幅回路 — 反転増幅($A_v = -R_f/R_{\text{in}}$)、非反転増幅($A_v = 1 + R_f/R_{\text{in}}$)、電圧フォロワ($A_v = 1$)の3つが最も基本的な構成です。利得が外付け抵抗の比だけで決まるのが負帰還の威力です
  • 演算回路 — 差動増幅、加算、減算、積分、微分といった数学的演算をオペアンプ回路で実現できます。「演算増幅器」の名前の由来です
  • 実特性の影響 — 有限利得によるゲイン誤差、入力オフセット電圧による出力DCシフト、スルーレートによる大振幅高周波での歪み、CMRRによる同相ノイズ除去性能が、実際の回路設計で考慮すべき主要パラメータです
  • 周波数特性と安定性 — ゲイン帯域幅積(GBP)が利得と帯域幅のトレードオフを決定し、位相余裕が回路の安定性を保証します

オペアンプは電子回路のあらゆる場面で使用される万能素子であり、本記事で解説した基本回路を組み合わせることで、アクティブフィルタ、PID制御器、計装アンプ、発振回路など、より高度な回路を構成することができます。

次のステップとして、以下の記事も参考にしてください。