スマートフォンのマイクが拾う微弱な音声信号は、そのままではADコンバータで正しく読み取れないほど小さい振幅しかありません。心電図モニターのセンサ出力も、わずか数mV程度の信号を確実に検出しなければなりません。こうした微弱信号を扱うとき、まず必要になるのが信号を増幅する回路です。しかし単にトランジスタ1個で増幅すると、増幅率は素子のばらつきに左右され、温度が変わるだけで特性が変動してしまいます。
では、素子の特性に依存せず、抵抗の比だけで増幅率を正確に決められる方法はないのでしょうか。この問いに対する答えがオペアンプ(演算増幅器、Operational Amplifier) です。
オペアンプを理解すると、次のような幅広い応用が見えてきます。
- 信号の増幅と条件整合: センサ信号のレベル調整、インピーダンス変換
- アナログ演算回路: 加算、減算、積分、微分を回路で実現し、アナログコンピュータやPID制御器を構成
- アクティブフィルタ: コイルを使わずにLC回路と同等以上のフィルタ特性を実現
本記事の内容
- 理想オペアンプの3つの仮定と仮想短絡の原理
- 反転増幅器・非反転増幅器の解析と導出
- 加算器、差動増幅器、積分器、微分器の回路解析
- Sallen-Key型アクティブフィルタの設計
- 実際のオペアンプの非理想特性
- Pythonでの周波数応答・ボード線図・過渡応答シミュレーション
前提知識
この記事を読む前に、以下の知識があると理解が深まります。
- 回路理論の基礎(キルヒホッフの法則、インピーダンスの概念)
- 共振回路の理論
- PLL(位相同期回路)の理論
理想オペアンプとは
オペアンプの外観と端子
実際のオペアンプICは、8ピンのDIPパッケージに収められた小さな部品です。しかし回路解析で重要なのは、内部の数十個のトランジスタではなく、外から見た3つの端子です。
- 非反転入力端子($V_+$): プラス記号で表される入力端子
- 反転入力端子($V_-$): マイナス記号で表される入力端子
- 出力端子($V_{out}$): 増幅された信号が出力される端子
オペアンプの基本動作は極めてシンプルで、2つの入力端子の電位差を増幅して出力します。
$$ V_{out} = A_{OL}(V_+ – V_-) $$
ここで $A_{OL}$ は開ループ利得(open-loop gain) と呼ばれ、典型的なオペアンプでは $10^5$ 以上($100$ dB以上)もの巨大な値を持ちます。
3つの理想化仮定
回路解析を簡潔に行うために、理想オペアンプでは以下の3つの仮定を置きます。
仮定1: 開ループ利得が無限大 — $A_{OL} \to \infty$
実際の値は有限($10^5 \sim 10^6$)ですが、帰還回路と組み合わせる場合、$A_{OL}$ が十分大きければ閉ループ特性は $A_{OL}$ に依存しなくなります。これが「抵抗の比だけで増幅率が決まる」ことの数学的根拠です。
仮定2: 入力インピーダンスが無限大 — $Z_{in} \to \infty$
非反転入力端子にも反転入力端子にも電流が流れ込みません。すなわち
$$ I_+ = I_- = 0 $$
です。実際のオペアンプでもバイポーラ型で $\sim$ M$\Omega$、CMOS型で $\sim 10^{12}$ $\Omega$ と非常に高いため、多くの場合この仮定は良い近似です。
仮定3: 出力インピーダンスがゼロ — $Z_{out} = 0$
出力端子は理想的な電圧源として振る舞い、負荷に関係なく $V_{out}$ を維持します。実際のオペアンプでも帰還をかけた状態では出力インピーダンスは非常に低く($\sim 0.01$ $\Omega$)、この仮定は実用的です。
これらの仮定を一言でまとめると、「オペアンプは差動入力を無限大の倍率で増幅する、入力電流ゼロ・出力インピーダンスゼロの理想的な増幅器」ということになります。
しかしここで疑問が生じます。利得が無限大なら、ほんの微小な入力差でも出力は飽和してしまうのではないでしょうか。この問題を解決するのが負帰還(ネガティブフィードバック) であり、その理解の鍵が次に説明する仮想短絡の概念です。
仮想短絡(バーチャルショート)
負帰還をかけたオペアンプ回路では、出力の一部が反転入力端子にフィードバックされます。このとき、利得 $A_{OL}$ が十分大きい(理想的には無限大の)条件下で、次の関係が成り立ちます。
出力が有限値 $V_{out}$ をとるとき、$V_{out} = A_{OL}(V_+ – V_-)$ の両辺を $A_{OL}$ で割ると
$$ V_+ – V_- = \frac{V_{out}}{A_{OL}} $$
$A_{OL} \to \infty$ の極限では
$$ V_+ – V_- = 0 \quad \Longrightarrow \quad V_+ = V_- $$
が得られます。つまり、負帰還がかかっている限り、非反転入力と反転入力の電位は等しいのです。これを仮想短絡(バーチャルショート) と呼びます。「短絡」といっても物理的に2点がつながっているわけではなく(入力電流はゼロです)、電位だけが等しくなるという意味で「仮想」です。
仮想短絡の条件 $V_+ = V_-$ と、入力電流ゼロの条件 $I_+ = I_- = 0$ の2つを使えば、どんなオペアンプ回路でもキルヒホッフの法則で解くことができます。これがオペアンプ回路解析の万能ツールです。
それでは、この仮想短絡の原理を使って、最も基本的な増幅回路から解析していきましょう。
反転増幅器
回路構成と直感
反転増幅器は、入力信号 $V_{in}$ を反転入力端子に抵抗 $R_1$ を通して接続し、出力から反転入力端子に帰還抵抗 $R_f$ を接続する回路です。非反転入力端子はグランドに接続します。
この回路の動作を直感的に理解するには、次のように考えます。入力電圧が正の方向に増えると、反転入力端子の電位が上がろうとします。しかし負帰還により、オペアンプは出力を負の方向に動かして反転入力端子の電位をグランド電位($V_+ = 0$)に引き戻します。結果として、出力は入力と逆符号(反転)になります。そして、その「引き戻す力」の大きさは $R_f$ と $R_1$ の比で決まります。
ゲインの導出
仮想短絡と入力電流ゼロの条件を使って、増幅率(ゲイン)を導出します。
仮想短絡の条件から
$$ V_- = V_+ = 0 \quad (\text{非反転入力がGNDに接続}) $$
反転入力端子に流れ込む電流はゼロ($I_- = 0$)なので、$R_1$ を流れる電流と $R_f$ を流れる電流は等しくなります。オームの法則から $R_1$ を流れる電流 $I_1$ は
$$ I_1 = \frac{V_{in} – V_-}{R_1} = \frac{V_{in}}{R_1} $$
$I_- = 0$ より、この電流はそのまま $R_f$ を流れます。$R_f$ の両端の電圧関係から
$$ I_1 = \frac{V_- – V_{out}}{R_f} = \frac{0 – V_{out}}{R_f} = -\frac{V_{out}}{R_f} $$
$I_1$ の2つの式を等置すると
$$ \frac{V_{in}}{R_1} = -\frac{V_{out}}{R_f} $$
$V_{out}$ について解くと、反転増幅器のゲインが得られます。
$$ \boxed{V_{out} = -\frac{R_f}{R_1} V_{in}} $$
閉ループゲインは $G = -R_f / R_1$ です。マイナス符号が「反転」を表しています。たとえば $R_f = 10$ k$\Omega$、$R_1 = 1$ k$\Omega$ なら $G = -10$ で、10倍の反転増幅器になります。
注目すべき点は、ゲインがオペアンプ自体の開ループ利得 $A_{OL}$ に全く依存せず、外付け抵抗 $R_f$ と $R_1$ の比だけで決まることです。これが負帰還の最も重要な効果であり、温度変動や製造ばらつきに強い安定した増幅回路を実現できる理由です。
入力インピーダンス
反転増幅器の入力インピーダンスは、仮想短絡により反転入力端子が仮想グランド($V_- = 0$)になっているため
$$ Z_{in} = R_1 $$
です。これはオペアンプ自体の高い入力インピーダンスとは異なり、$R_1$ の値によって決まります。高い入力インピーダンスが必要な場合は、次に述べる非反転増幅器の方が適しています。
反転増幅器の「入力と出力が逆符号」という制約を外したい場合もあります。次に、入力と同じ符号で増幅する非反転増幅器を見てみましょう。
非反転増幅器
回路構成と直感
非反転増幅器では、入力信号 $V_{in}$ を非反転入力端子($V_+$)に直接接続します。反転入力端子には、出力と $R_f$、$R_1$ で構成された分圧回路が接続されます。$R_1$ の一端はグランドに接続されています。
直感的に言うと、オペアンプは $V_+ = V_-$ を維持するように出力を調整します。$V_-$ は出力 $V_{out}$ を $R_f$ と $R_1$ で分圧した電圧なので、$V_- = V_{in}$ を実現するためには $V_{out}$ は $V_{in}$ よりも大きくなる必要があります。
ゲインの導出
仮想短絡の条件から
$$ V_- = V_+ = V_{in} $$
$R_1$ と $R_f$ による分圧回路において($I_- = 0$ より $R_1$ と $R_f$ には同じ電流が流れます)
$$ V_- = V_{out} \cdot \frac{R_1}{R_1 + R_f} $$
$V_- = V_{in}$ を代入して $V_{out}$ について解くと
$$ V_{in} = V_{out} \cdot \frac{R_1}{R_1 + R_f} $$
$$ \boxed{V_{out} = \left(1 + \frac{R_f}{R_1}\right) V_{in}} $$
非反転増幅器のゲインは $G = 1 + R_f / R_1$ で、常に $1$ 以上の正の値です。$R_f = 10$ k$\Omega$、$R_1 = 1$ k$\Omega$ なら $G = 11$ です。
入力インピーダンス
非反転増幅器の入力インピーダンスは極めて高くなります。入力信号は非反転入力端子に直接接続され、理想オペアンプでは入力電流がゼロなので
$$ Z_{in} \to \infty $$
です。実際のオペアンプでも帰還の効果で入力インピーダンスは開ループ値よりさらに高くなります。このため、高インピーダンスのセンサ(pHセンサ、ピエゾ素子など)の信号を受ける場合は非反転増幅器が適しています。
ボルテージフォロワ(バッファ)
非反転増幅器で $R_f = 0$(短絡)、$R_1 \to \infty$(開放)とすると、出力を直接反転入力端子に接続した回路になり
$$ V_{out} = V_{in} $$
ゲインが1の回路で、ボルテージフォロワ またはバッファ と呼びます。入力インピーダンスは無限大、出力インピーダンスはゼロなので、高インピーダンス源と低インピーダンス負荷の間に挿入してインピーダンス変換を行う用途で広く使われます。
反転と非反転の基本増幅器をマスターしたところで、これらの回路を組み合わせることで、より高度なアナログ演算を実現できます。次に、複数の信号を扱う加算器と差動増幅器を見ていきましょう。
加算器(加算回路)
反転加算器
反転増幅器を拡張して、複数の入力信号を足し合わせる回路が加算器(サミングアンプ) です。$n$ 個の入力 $V_1, V_2, \dots, V_n$ をそれぞれ抵抗 $R_1, R_2, \dots, R_n$ を通して反転入力端子に接続し、帰還抵抗 $R_f$ を出力から反転入力端子に接続します。
仮想短絡により $V_- = 0$(仮想グランド)なので、各入力から流れる電流は
$$ I_k = \frac{V_k}{R_k}, \quad k = 1, 2, \dots, n $$
$I_- = 0$ より、これらの電流の総和が $R_f$ を流れます。
$$ \sum_{k=1}^{n} \frac{V_k}{R_k} = -\frac{V_{out}}{R_f} $$
したがって
$$ \boxed{V_{out} = -R_f \left(\frac{V_1}{R_1} + \frac{V_2}{R_2} + \cdots + \frac{V_n}{R_n}\right)} $$
全ての入力抵抗が等しい場合($R_1 = R_2 = \cdots = R_n = R$)、この式は
$$ V_{out} = -\frac{R_f}{R}(V_1 + V_2 + \cdots + V_n) $$
と簡素化されます。$R_f = R$ なら、出力は入力の単純な和(の符号反転)になります。オーディオミキサーは、まさにこの原理で複数の音源を混合しています。
各入力抵抗 $R_k$ を異なる値にすれば、信号ごとに異なる重みを付けた重み付き加算(DAコンバータの原理)も実現できます。
加算器が複数の信号を「足す」回路なら、2つの信号の「差」を取る回路も重要です。次に差動増幅器を見てみましょう。
差動増幅器
回路構成
差動増幅器は、非反転入力端子と反転入力端子の両方に信号を入力し、その差を増幅する回路です。入力 $V_1$ を抵抗 $R_1$ を通して反転入力端子に接続し、入力 $V_2$ を抵抗 $R_2$ を通して非反転入力端子に接続します。帰還抵抗 $R_f$ は出力から反転入力端子へ、$R_g$ は非反転入力端子からグランドへ接続します。
ゲインの導出
まず非反転入力端子の電圧を求めます。$R_2$ と $R_g$ の分圧から
$$ V_+ = V_2 \cdot \frac{R_g}{R_2 + R_g} $$
仮想短絡の条件 $V_- = V_+$ を使い、反転入力端子側のキルヒホッフの法則から
$$ \frac{V_1 – V_-}{R_1} = \frac{V_- – V_{out}}{R_f} $$
$V_- = V_+$ を代入して $V_{out}$ について整理します。$R_1 = R_2$、$R_f = R_g$ の場合(最も一般的な構成)
$$ \boxed{V_{out} = \frac{R_f}{R_1}(V_2 – V_1)} $$
が得られます。出力は2つの入力の差に比例します。差動増幅器は、ブリッジ回路の出力読み取り、ノイズの多い環境でのセンサ信号取得(コモンモードノイズ除去)などで広く使われています。
増幅と加減算という「代数的」演算を見てきました。オペアンプの可能性はさらに広く、微積分という「解析的」演算も回路で実現できます。次に、積分器と微分器を見ていきましょう。
積分器
回路構成と動作原理
反転増幅器の帰還抵抗 $R_f$ をキャパシタ $C$ に置き換えると、積分器が得られます。入力抵抗 $R$ と帰還キャパシタ $C$ の組み合わせです。
キャパシタを使う理由を直感的に理解しましょう。キャパシタは電荷を蓄積する素子であり、流入した電流の時間積分に比例した電圧が両端に現れます。この性質を帰還経路に利用することで、入力信号の時間積分を出力として取り出せるのです。
入出力関係の導出
仮想短絡により $V_- = 0$ なので、$R$ を流れる電流は
$$ I = \frac{V_{in}}{R} $$
この電流がキャパシタ $C$ に流れ込みます。キャパシタの電流-電圧関係 $I = C \frac{dV_C}{dt}$ から
$$ \frac{V_{in}}{R} = -C \frac{dV_{out}}{dt} $$
ここでマイナスがつくのは、$V_{out} = 0 – V_C = -V_C$(キャパシタの電圧は反転入力端子から出力端子に向かって定義)だからです。両辺を時間で積分すると
$$ \boxed{V_{out}(t) = -\frac{1}{RC} \int_0^t V_{in}(\tau) \, d\tau + V_{out}(0)} $$
出力は入力の時間積分に比例し、時定数 $RC$ が積分のスケールを決めます。$V_{out}(0)$ はキャパシタの初期電荷に対応する初期値です。
周波数領域での解析
$s = j\omega$ のラプラス変換で考えると、キャパシタのインピーダンスは $1/(sC)$ なので、反転増幅器の $R_f$ を $1/(sC)$ に置き換えた形で伝達関数が得られます。
$$ H(s) = -\frac{1/(sC)}{R} = -\frac{1}{sRC} $$
振幅応答は
$$ |H(j\omega)| = \frac{1}{\omega RC} $$
で、周波数に反比例して $-20$ dB/decade で減衰します。位相は全周波数で $-90°$(マイナス符号を含めると $+90°$ のシフト)です。
積分器が信号の「蓄積」を計算するなら、その逆、すなわち信号の「変化率」を計算する微分器も実現できます。
微分器
回路構成と動作原理
積分器の $R$ と $C$ を入れ替えると微分器になります。入力にキャパシタ $C$、帰還に抵抗 $R_f$ を配置します。
入出力関係の導出
仮想短絡により $V_- = 0$ で、キャパシタに流れる電流は
$$ I = C \frac{d(V_{in} – V_-)}{dt} = C \frac{dV_{in}}{dt} $$
この電流が $R_f$ を流れるので
$$ V_{out} = -R_f \cdot I = -R_f C \frac{dV_{in}}{dt} $$
$$ \boxed{V_{out}(t) = -R_f C \frac{dV_{in}(t)}{dt}} $$
出力は入力の時間微分に比例します。
周波数領域での伝達関数
$$ H(s) = -\frac{R_f}{1/(sC)} = -sR_fC $$
振幅応答は $|H(j\omega)| = \omega R_f C$ で、周波数に比例して $+20$ dB/decade で増加します。
実用上の注意: 微分器はその特性上、高周波成分ほど増幅されます。これは高周波ノイズを増幅してしまうことを意味し、実用回路では大きな問題になります。対策として、帰還抵抗 $R_f$ に小さなキャパシタ $C_f$ を並列に接続して高周波でのゲインを制限する(ローパス特性を付加する)のが一般的です。
ここまでで、増幅、加減算、積分、微分というアナログ演算の基本回路を網羅しました。これらの回路はすべて、1つのオペアンプと受動素子(抵抗、キャパシタ)の組み合わせで構成されています。次のステップとして、これらの素子の組み合わせをさらに工夫することで、特定の周波数帯域だけを通すフィルタ回路を構成できます。
アクティブフィルタ — Sallen-Key 型
なぜアクティブフィルタか
受動素子(R, L, C)だけで構成されるパッシブフィルタは、原理的にゲインが1以下(信号が減衰する)であり、低周波のフィルタではインダクタ(コイル)が大きく重くなるという欠点があります。オペアンプを使ったアクティブフィルタは、これらの問題を解決します。
- ゲインを持てる(通過帯域で増幅可能)
- インダクタ不要(IC化が容易)
- 低インピーダンス出力(後段への影響が小さい)
アクティブフィルタの中で最も広く使われる構成の1つがSallen-Key 型です。2つの抵抗と2つのキャパシタ、1つのオペアンプで2次のフィルタ特性を実現できます。
Sallen-Key 型ローパスフィルタ
Sallen-Key 型2次ローパスフィルタの構成は次の通りです。入力から抵抗 $R_1$ を通して接続点Aに至り、接続点Aから抵抗 $R_2$ を通して非反転入力端子に至ります。接続点Aからキャパシタ $C_1$ がグランドに接続され、非反転入力端子からキャパシタ $C_2$ がグランドに接続されます。オペアンプはユニティゲイン(ボルテージフォロワ構成、$V_{out}$ を直接反転入力端子に帰還)で使用します。
伝達関数の導出
ラプラス変換を使って回路を解析します。キルヒホッフの法則を接続点Aと非反転入力端子でそれぞれ立てます。
接続点Aにおける電流の式($V_A$ は接続点Aの電圧、$V_B$ は非反転入力端子の電圧)は
$$ \frac{V_{in} – V_A}{R_1} = \frac{V_A – V_B}{R_2} + sC_1 V_A $$
非反転入力端子における電流の式は
$$ \frac{V_A – V_B}{R_2} = sC_2 V_B $$
ボルテージフォロワ構成により $V_{out} = V_B$ です。第2式から $V_A$ を $V_B$ で表すと
$$ V_A = V_B(1 + sR_2 C_2) $$
これを第1式に代入し、$V_{in}$ と $V_B = V_{out}$ の関係を求めます。$V_A = V_{out}(1 + sR_2 C_2)$ を代入すると
$$ \frac{V_{in} – V_{out}(1+sR_2C_2)}{R_1} = sC_2 V_{out} + sC_1 V_{out}(1+sR_2C_2) $$
右辺を展開して整理すると
$$ V_{in} = V_{out}\left[1 + sR_2C_2 + sR_1C_2 + sR_1C_1 + s^2R_1R_2C_1C_2 + sR_1C_1 \cdot sR_2C_2\right] $$
整理が少し複雑ですが、最終的に伝達関数は以下の標準的な2次系の形になります。
$$ \boxed{H(s) = \frac{V_{out}}{V_{in}} = \frac{1}{1 + s(R_1C_1 + R_2C_1) + s^2 R_1 R_2 C_1 C_2}} $$
標準2次系との対応
この伝達関数を2次ローパスフィルタの標準形
$$ H(s) = \frac{\omega_0^2}{s^2 + 2\zeta\omega_0 s + \omega_0^2} = \frac{1}{1 + \frac{2\zeta}{\omega_0}s + \frac{s^2}{\omega_0^2}} $$
と比較すると、カットオフ角周波数 $\omega_0$ と減衰比 $\zeta$ は
$$ \omega_0 = \frac{1}{\sqrt{R_1 R_2 C_1 C_2}} $$
$$ 2\zeta\omega_0 = \frac{R_1C_1 + R_2C_1}{R_1R_2C_1C_2} \cdot R_1R_2C_1C_2 \cdot \omega_0 $$
より整理すると
$$ \zeta = \frac{(R_1 + R_2)C_1}{2} \cdot \frac{1}{\sqrt{R_1 R_2 C_1 C_2}} \cdot \frac{1}{1} $$
簡単のため $R_1 = R_2 = R$ とすると
$$ \omega_0 = \frac{1}{RC\sqrt{C_1/C_2}}, \quad \zeta = \sqrt{\frac{C_1}{C_2}} $$
ここで $C_1 = C_2 = C$ の等値設計では
$$ \omega_0 = \frac{1}{RC}, \quad \zeta = 1 $$
$\zeta = 1$ は臨界減衰に対応します。バターワース特性(最大平坦、$\zeta = 1/\sqrt{2} \approx 0.707$)を得るには、$C_1$ と $C_2$ の比を調整します。
設計例
カットオフ周波数 $f_0 = 1$ kHz のバターワース特性ローパスフィルタを設計してみましょう。$R_1 = R_2 = R = 10$ k$\Omega$ として、$C$ を求めます。
$$ \omega_0 = 2\pi f_0 = 2\pi \times 1000 \approx 6283 \text{ rad/s} $$
$$ C = \frac{1}{\omega_0 R} = \frac{1}{6283 \times 10000} \approx 15.9 \text{ nF} $$
バターワース特性のために $\zeta = 1/\sqrt{2}$ を実現する $C_1, C_2$ は、$C_1/C_2 = 1/(4\zeta^2) = 1/2$ の条件から、$C_2 = 2C_1$ と選びます。$R_1 R_2 C_1 C_2 = 1/\omega_0^2$ を満たすように $C_1 = C/\sqrt{2} \approx 11.3$ nF、$C_2 = C\sqrt{2} \approx 22.5$ nF とします。
フィルタの理論的な設計ができたところで、Python で各回路の周波数応答と過渡応答をシミュレーションし、理論との一致を確認しましょう。
実際のオペアンプの非理想特性
理想オペアンプの仮定は強力な解析ツールですが、実際のオペアンプにはいくつかの非理想特性があり、精密な回路設計では無視できません。ここでは主要な非理想特性をまとめます。
有限帯域幅とゲイン帯域幅積(GBW)
実際のオペアンプの開ループ利得は、低周波では非常に大きい($A_{OL} \sim 10^5$)ですが、あるブレーク周波数 $f_b$(典型的には $\sim 10$ Hz)から $-20$ dB/decade の傾きで減少します。ゲインが $0$ dB($= 1$)になる周波数がユニティゲイン帯域幅($f_T$)で、
$$ \text{GBW} = A_{OL} \times f_b = f_T $$
が一定になります。これをゲイン帯域幅積(GBW: Gain-Bandwidth Product) と呼びます。例えば GBW が 1 MHz のオペアンプを閉ループゲイン10倍で使うと、帯域幅は 100 kHz に制限されます。
$$ f_{-3\text{dB}} = \frac{\text{GBW}}{|G_{CL}|} $$
スルーレート
スルーレート(Slew Rate, SR) は、出力電圧が変化できる最大速度 [V/$\mu$s] です。入力に大きなステップ信号を加えると、出力は理想的な階段状ではなく、スルーレートで制限された傾斜で変化します。
$$ SR = \left.\frac{dV_{out}}{dt}\right|_{\max} $$
例えば SR = 1 V/$\mu$s のオペアンプで振幅 5 V、周波数 $f$ の正弦波を扱う場合、出力の最大変化率は $2\pi f \times 5$ V/s なので、歪みなく動作する最大周波数は
$$ f_{\max} = \frac{SR}{2\pi V_p} = \frac{10^6}{2\pi \times 5} \approx 31.8 \text{ kHz} $$
です。この周波数を超えると出力波形が三角波状に歪みます。
入力オフセット電圧
理想オペアンプでは $V_+ = V_-$ のとき $V_{out} = 0$ ですが、実際のオペアンプでは内部トランジスタの不整合により、出力をゼロにするために入力に $V_{OS}$(典型的には $\sim 1$ mV)のオフセット電圧を加える必要があります。
$$ V_{out} = A_{OL}(V_+ – V_- + V_{OS}) $$
DC精度が重要な応用(精密計測、DAC出力バッファ等)では、オフセット電圧の小さいオペアンプを選ぶか、外部トリミング回路で補正します。
入力バイアス電流
理想モデルでは $I_+ = I_- = 0$ でしたが、実際のバイポーラ入力オペアンプでは、ベース電流として nA オーダーのバイアス電流が流れます。CMOS入力型では pA オーダーまで低減されます。
これらの非理想特性は、実際の回路設計では仕様書(データシート)を確認して影響を評価する必要があります。しかし、本記事で扱う基本的な動作原理は、理想オペアンプの仮定で十分正確に理解できます。
非理想特性の概要を把握したところで、Python を使って各回路のシミュレーションを行い、理論で導いた伝達関数が実際にどのような応答を示すかを確認しましょう。
Python による周波数応答シミュレーション
反転・非反転増幅器のボード線図
まず、反転増幅器と非反転増幅器の周波数応答をボード線図(ゲインと位相)で比較します。実際のオペアンプの有限帯域幅の影響も含めてシミュレーションします。
import numpy as np
import matplotlib.pyplot as plt
from scipy import signal
# オペアンプの開ループ特性(1次近似)
A_OL_dc = 1e5 # DC開ループ利得
f_b = 10 # ブレーク周波数 [Hz]
GBW = A_OL_dc * f_b # ゲイン帯域幅積 = 1 MHz
# 開ループ伝達関数: A(s) = A_OL_dc / (1 + s/(2*pi*f_b))
num_ol = [A_OL_dc]
den_ol = [1/(2*np.pi*f_b), 1]
sys_ol = signal.TransferFunction(num_ol, den_ol)
# 反転増幅器の閉ループ伝達関数
# G_inv = -Rf/R1 / (1 + (1 + Rf/R1)/A(s))
# 簡易的に: 閉ループ = -Rf/R1 * A(s) / (A(s) + 1 + Rf/R1)
R1 = 1e3 # 1 kOhm
Rf = 10e3 # 10 kOhm
G_target_inv = Rf / R1 # 10
# 非反転増幅器の閉ループ伝達関数
G_target_noninv = 1 + Rf / R1 # 11
freq = np.logspace(0, 7, 1000) # 1 Hz - 10 MHz
w = 2 * np.pi * freq
# 開ループ応答
_, H_ol = signal.freqresp(sys_ol, w)
# 閉ループ応答(反転増幅器)
H_cl_inv = -G_target_inv * H_ol / (H_ol + 1 + G_target_inv)
# 閉ループ応答(非反転増幅器)
H_cl_noninv = (1 + G_target_inv) * H_ol / (H_ol + 1 + G_target_inv)
fig, axes = plt.subplots(2, 1, figsize=(12, 9))
# ゲイン特性
ax = axes[0]
ax.semilogx(freq, 20*np.log10(np.abs(H_ol)),
'k--', linewidth=1, alpha=0.5, label='Open-loop')
ax.semilogx(freq, 20*np.log10(np.abs(H_cl_inv)),
'b-', linewidth=2, label=f'Inverting (G=-{G_target_inv:.0f})')
ax.semilogx(freq, 20*np.log10(np.abs(H_cl_noninv)),
'r-', linewidth=2, label=f'Non-inverting (G={G_target_noninv:.0f})')
ax.axhline(y=20*np.log10(G_target_inv), color='b', linestyle=':', alpha=0.4)
ax.axhline(y=20*np.log10(G_target_noninv), color='r', linestyle=':', alpha=0.4)
ax.axvline(x=GBW/G_target_inv, color='b', linestyle=':', alpha=0.3)
ax.axvline(x=GBW/G_target_noninv, color='r', linestyle=':', alpha=0.3)
ax.set_xlabel('Frequency [Hz]')
ax.set_ylabel('Gain [dB]')
ax.set_title('Bode Plot: Inverting and Non-inverting Amplifiers with Finite GBW')
ax.legend(fontsize=10)
ax.grid(True, which='both', alpha=0.3)
ax.set_ylim(-20, 110)
# 位相特性
ax = axes[1]
ax.semilogx(freq, np.degrees(np.angle(H_ol)),
'k--', linewidth=1, alpha=0.5, label='Open-loop')
ax.semilogx(freq, np.degrees(np.angle(H_cl_inv)),
'b-', linewidth=2, label='Inverting')
ax.semilogx(freq, np.degrees(np.angle(H_cl_noninv)),
'r-', linewidth=2, label='Non-inverting')
ax.set_xlabel('Frequency [Hz]')
ax.set_ylabel('Phase [degrees]')
ax.legend(fontsize=10)
ax.grid(True, which='both', alpha=0.3)
plt.tight_layout()
plt.savefig('opamp_bode_plot.png', dpi=150, bbox_inches='tight')
plt.show()
このボード線図から、帰還増幅器の周波数特性について重要な知見が得られます。
-
ゲイン特性(上図): 開ループ利得(黒破線)はDCで100 dBから始まり、10 Hzで折れて $-20$ dB/decade で減少しています。反転増幅器(青)は低周波で 20 dB(= 10倍)、非反転増幅器(赤)は低周波で約 20.8 dB(= 11倍)の一定ゲインを示し、それぞれ 100 kHz 付近と約 91 kHz で $-3$ dB に達しています。これは GBW/$|G|$ の関係($10^6/10 = 100$ kHz、$10^6/11 \approx 91$ kHz)と一致しており、ゲインを大きくするほど帯域幅が狭くなるというゲイン-帯域幅のトレードオフが明確に現れています。
-
位相特性(下図): 反転増幅器は低周波で $180°$(反転)の位相を示し、帯域幅付近で位相が変化しています。非反転増幅器は低周波で $0°$(同相)です。開ループ利得の位相は $90°$ まで回転しており、1次系の特性を反映しています。
積分器と微分器の周波数応答
次に、積分器と微分器の伝達関数のボード線図を作成します。
import numpy as np
import matplotlib.pyplot as plt
from scipy import signal
R = 10e3 # 10 kOhm
C = 10e-9 # 10 nF
tau = R * C # 時定数 = 100 us
# 積分器: H(s) = -1/(sRC)
num_int = [-1]
den_int = [tau, 0] # sRC -> tau*s
sys_int = signal.TransferFunction(num_int, den_int)
# 微分器: H(s) = -sRC
num_diff = [-tau, 0]
den_diff = [1]
sys_diff = signal.TransferFunction(num_diff, den_diff)
# 実用的な微分器(高周波ゲイン制限付き)
# H(s) = -sRC / (1 + sR_f*C_f) で高周波を制限
Cf = 1e-12 # 1 pF(帰還キャパシタ)
Rf = R
tau_f = Rf * Cf # 高周波制限の時定数
num_diff_practical = [-tau, 0]
den_diff_practical = [tau_f, 1]
sys_diff_practical = signal.TransferFunction(num_diff_practical, den_diff_practical)
freq = np.logspace(1, 7, 1000)
w = 2 * np.pi * freq
fig, axes = plt.subplots(2, 2, figsize=(14, 10))
# 積分器 - ゲイン
_, H_int = signal.freqresp(sys_int, w)
ax = axes[0, 0]
ax.semilogx(freq, 20*np.log10(np.abs(H_int)), 'b-', linewidth=2)
ax.axvline(x=1/(2*np.pi*tau), color='gray', linestyle='--', alpha=0.5,
label=f'f_0 = 1/(2piRC) = {1/(2*np.pi*tau):.0f} Hz')
ax.set_xlabel('Frequency [Hz]')
ax.set_ylabel('Gain [dB]')
ax.set_title('Integrator: Magnitude Response')
ax.legend()
ax.grid(True, which='both', alpha=0.3)
# 積分器 - 位相
ax = axes[0, 1]
ax.semilogx(freq, np.degrees(np.angle(H_int)), 'b-', linewidth=2)
ax.axhline(y=90, color='gray', linestyle='--', alpha=0.5, label='+90 deg')
ax.set_xlabel('Frequency [Hz]')
ax.set_ylabel('Phase [degrees]')
ax.set_title('Integrator: Phase Response')
ax.legend()
ax.grid(True, which='both', alpha=0.3)
# 微分器 - ゲイン
_, H_diff = signal.freqresp(sys_diff, w)
_, H_diff_p = signal.freqresp(sys_diff_practical, w)
ax = axes[1, 0]
ax.semilogx(freq, 20*np.log10(np.abs(H_diff)), 'r--', linewidth=1.5,
label='Ideal differentiator', alpha=0.6)
ax.semilogx(freq, 20*np.log10(np.abs(H_diff_p)), 'r-', linewidth=2,
label='Practical differentiator')
ax.axvline(x=1/(2*np.pi*tau), color='gray', linestyle='--', alpha=0.5)
ax.set_xlabel('Frequency [Hz]')
ax.set_ylabel('Gain [dB]')
ax.set_title('Differentiator: Magnitude Response')
ax.legend()
ax.grid(True, which='both', alpha=0.3)
# 微分器 - 位相
ax = axes[1, 1]
ax.semilogx(freq, np.degrees(np.angle(H_diff)), 'r--', linewidth=1.5,
label='Ideal', alpha=0.6)
ax.semilogx(freq, np.degrees(np.angle(H_diff_p)), 'r-', linewidth=2,
label='Practical')
ax.set_xlabel('Frequency [Hz]')
ax.set_ylabel('Phase [degrees]')
ax.set_title('Differentiator: Phase Response')
ax.legend()
ax.grid(True, which='both', alpha=0.3)
plt.tight_layout()
plt.savefig('integrator_differentiator_bode.png', dpi=150, bbox_inches='tight')
plt.show()
この周波数応答から、積分器と微分器の特性が理論通りに確認できます。
-
積分器のゲイン(左上): 周波数に反比例して $-20$ dB/decade で減衰する直線が得られています。$f_0 = 1/(2\pi RC) \approx 15.9$ kHz で 0 dB を通過しています。低周波ほどゲインが高く、DC 信号に対してはゲインが無限大(実際には飽和)になるため、実用回路ではDCパスを設ける必要があります。
-
積分器の位相(右上): 全周波数で $+90°$ の一定位相を示しています。これは入力正弦波の積分($\sin \to -\cos$)が $90°$ の位相遅れに対応することと整合しています(反転の $180°$ と合わせて $+90°$)。
-
微分器のゲイン(左下): 理想微分器(赤破線)は周波数に比例して $+20$ dB/decade で際限なく増加しています。実用微分器(赤実線)は高周波で帰還キャパシタによりゲインが飽和し、ノイズ増幅の問題が軽減されています。
-
微分器の位相(右下): 理想微分器は $-90°$(反転の $180°$ と合わせて $-90°$)の一定位相、実用微分器は高周波で位相がさらに回転しています。
Sallen-Key 型アクティブフィルタの応答
異なる減衰比 $\zeta$ を持つ Sallen-Key 型ローパスフィルタの周波数応答とステップ応答を比較します。
import numpy as np
import matplotlib.pyplot as plt
from scipy import signal
f0 = 1000 # カットオフ周波数 [Hz]
w0 = 2 * np.pi * f0
# 異なる減衰比での2次ローパスフィルタ
zetas = [0.25, 0.5, 0.707, 1.0, 2.0]
labels = ['zeta=0.25 (Under)', 'zeta=0.5', 'zeta=0.707 (Butterworth)',
'zeta=1.0 (Critical)', 'zeta=2.0 (Over)']
colors = ['red', 'orange', 'blue', 'green', 'purple']
fig, axes = plt.subplots(2, 2, figsize=(14, 10))
# 振幅応答
ax = axes[0, 0]
for zeta, label, color in zip(zetas, labels, colors):
num = [w0**2]
den = [1, 2*zeta*w0, w0**2]
sys = signal.TransferFunction(num, den)
freq = np.logspace(1, 5, 1000)
w = 2 * np.pi * freq
_, H = signal.freqresp(sys, w)
ax.semilogx(freq, 20*np.log10(np.abs(H)), color=color, linewidth=1.5, label=label)
ax.axvline(x=f0, color='gray', linestyle='--', alpha=0.5, label=f'f_0={f0}Hz')
ax.axhline(y=-3, color='gray', linestyle=':', alpha=0.3)
ax.set_xlabel('Frequency [Hz]')
ax.set_ylabel('Gain [dB]')
ax.set_title('Sallen-Key LPF: Magnitude Response')
ax.legend(fontsize=8)
ax.grid(True, which='both', alpha=0.3)
ax.set_ylim(-40, 20)
# 位相応答
ax = axes[0, 1]
for zeta, label, color in zip(zetas, labels, colors):
num = [w0**2]
den = [1, 2*zeta*w0, w0**2]
sys = signal.TransferFunction(num, den)
freq = np.logspace(1, 5, 1000)
w = 2 * np.pi * freq
_, H = signal.freqresp(sys, w)
ax.semilogx(freq, np.degrees(np.angle(H)), color=color, linewidth=1.5, label=label)
ax.axhline(y=-90, color='gray', linestyle=':', alpha=0.3)
ax.set_xlabel('Frequency [Hz]')
ax.set_ylabel('Phase [degrees]')
ax.set_title('Sallen-Key LPF: Phase Response')
ax.legend(fontsize=8)
ax.grid(True, which='both', alpha=0.3)
# ステップ応答
ax = axes[1, 0]
t_step = np.linspace(0, 5e-3, 2000)
for zeta, label, color in zip(zetas, labels, colors):
num = [w0**2]
den = [1, 2*zeta*w0, w0**2]
sys = signal.TransferFunction(num, den)
t, y = signal.step(sys, T=t_step)
ax.plot(t*1000, y, color=color, linewidth=1.5, label=label)
ax.axhline(y=1, color='gray', linestyle='--', alpha=0.3)
ax.set_xlabel('Time [ms]')
ax.set_ylabel('Amplitude')
ax.set_title('Sallen-Key LPF: Step Response')
ax.legend(fontsize=8)
ax.grid(True, alpha=0.3)
# インパルス応答
ax = axes[1, 1]
t_imp = np.linspace(0, 5e-3, 2000)
for zeta, label, color in zip(zetas, labels, colors):
num = [w0**2]
den = [1, 2*zeta*w0, w0**2]
sys = signal.TransferFunction(num, den)
t, y = signal.impulse(sys, T=t_imp)
ax.plot(t*1000, y, color=color, linewidth=1.5, label=label)
ax.set_xlabel('Time [ms]')
ax.set_ylabel('Amplitude')
ax.set_title('Sallen-Key LPF: Impulse Response')
ax.legend(fontsize=8)
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('sallen_key_response.png', dpi=150, bbox_inches='tight')
plt.show()
この4つのグラフから、2次アクティブフィルタの設計において減衰比 $\zeta$ が果たす役割が明確にわかります。
-
振幅応答(左上): $\zeta < 1/\sqrt{2}$ の場合、カットオフ周波数付近で共振ピーク(ゲインのオーバーシュート)が現れています。$\zeta = 0.25$ では約 12 dB のピークがあり、特定の周波数が過度に増幅される問題があります。$\zeta = 1/\sqrt{2}$(バターワース特性)では通過帯域が最大限に平坦で、共振ピークがありません。$\zeta > 1$ では通過帯域でもゲインが徐々に減衰し始め、理想的なフィルタ特性から離れていきます。全てのケースで高周波側は $-40$ dB/decade(2次系)の傾きで減衰しています。
-
位相応答(右上): 全てのケースで $\omega_0$ において $-90°$ を通過し、高周波で $-180°$ に漸近しています。$\zeta$ が小さいほどカットオフ付近での位相変化が急峻で、$\zeta = 0.25$ ではほぼステップ的に $-180°$ に移行しています。
-
ステップ応答(左下): $\zeta$ の物理的な意味が最も直感的に理解できるグラフです。$\zeta = 0.25$ では大きな振動(オーバーシュート $\sim 45\%$)を伴いながら定常値に収束しています。$\zeta = 0.707$(バターワース)では約 $4\%$ のわずかなオーバーシュートで素早く収束し、応答速度と安定性のバランスが最も良い状態です。$\zeta = 1$(臨界減衰)は振動なしで最速の収束、$\zeta = 2$(過減衰)は振動はありませんが収束が遅くなっています。
-
インパルス応答(右下): ステップ応答の微分に対応します。$\zeta$ が小さいほど振動が長く続き、$\zeta = 1$ 以上では単調に減衰しています。
各回路の過渡応答比較
最後に、反転増幅器、積分器、微分器に矩形波を入力した場合の過渡応答を比較します。
import numpy as np
import matplotlib.pyplot as plt
from scipy import signal
# パラメータ
R = 10e3
Rf = 10e3
C = 10e-9
tau = R * C
# 伝達関数の定義
# 反転増幅器(理想的には周波数非依存だが、GBW制限付き)
GBW = 1e6
f_b = 10
A_dc = GBW / f_b
# 閉ループ: G * A/(A + 1 + G) ≈ G / (1 + G/(2*pi*GBW)*s)
G_inv = Rf / R # = 1 (unity gain inverting)
f_cl = GBW / (1 + G_inv)
sys_inv = signal.TransferFunction([-G_inv], [1/(2*np.pi*f_cl), 1])
# 積分器: -1/(sRC)
sys_int = signal.TransferFunction([-1], [tau, 0])
# 実用的微分器: -sRC/(1+sRfCf)
Cf = 100e-12
tau_f = Rf * Cf
sys_diff = signal.TransferFunction([-tau, 0], [tau_f, 1])
# 矩形波入力の生成
fs_sim = 1e6 # シミュレーションサンプリング周波数
T_total = 2e-3 # 2 ms
t = np.arange(0, T_total, 1/fs_sim)
f_rect = 2000 # 矩形波の周波数 2 kHz
V_in = 0.5 * signal.square(2 * np.pi * f_rect * t, duty=0.5)
fig, axes = plt.subplots(4, 1, figsize=(12, 14))
# 入力信号
ax = axes[0]
ax.plot(t*1000, V_in, 'k-', linewidth=1.5)
ax.set_xlabel('Time [ms]')
ax.set_ylabel('Voltage [V]')
ax.set_title('Input: Square Wave (2 kHz, 0.5 Vpp)')
ax.set_xlim(0, T_total*1000)
ax.grid(True, alpha=0.3)
# 反転増幅器の応答
ax = axes[1]
tout, yout, _ = signal.lsim(sys_inv, V_in, t)
ax.plot(tout*1000, V_in, 'b--', linewidth=0.8, alpha=0.5, label='Input')
ax.plot(tout*1000, yout, 'b-', linewidth=1.5, label='Inverting amp output')
ax.set_xlabel('Time [ms]')
ax.set_ylabel('Voltage [V]')
ax.set_title(f'Inverting Amplifier (G = -{G_inv:.0f}, BW = {f_cl/1e3:.0f} kHz)')
ax.legend()
ax.set_xlim(0, T_total*1000)
ax.grid(True, alpha=0.3)
# 積分器の応答
ax = axes[2]
# 積分器に矩形波を入力すると三角波が出力される
# 手動で計算(lsimだとDCドリフトの問題があるため)
V_int = np.cumsum(V_in) * (-1/(R*C)) * (1/fs_sim)
ax.plot(t*1000, V_in * 5, 'r--', linewidth=0.8, alpha=0.5, label='Input (x5)')
ax.plot(t*1000, V_int, 'r-', linewidth=1.5, label='Integrator output')
ax.set_xlabel('Time [ms]')
ax.set_ylabel('Voltage [V]')
ax.set_title(f'Integrator (tau = RC = {tau*1e6:.0f} us)')
ax.legend()
ax.set_xlim(0, T_total*1000)
ax.grid(True, alpha=0.3)
# 微分器の応答
ax = axes[3]
tout, yout, _ = signal.lsim(sys_diff, V_in, t)
ax.plot(tout*1000, V_in, 'g--', linewidth=0.8, alpha=0.5, label='Input')
ax.plot(tout*1000, yout, 'g-', linewidth=1.5, label='Differentiator output')
ax.set_xlabel('Time [ms]')
ax.set_ylabel('Voltage [V]')
ax.set_title('Practical Differentiator')
ax.legend()
ax.set_xlim(0, T_total*1000)
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('transient_response.png', dpi=150, bbox_inches='tight')
plt.show()
過渡応答のシミュレーション結果から、各回路が入力信号をどのように変換するかが具体的にわかります。
-
反転増幅器(2段目): 入力の矩形波が反転(符号が逆転)された波形が出力されています。有限帯域幅の影響で立ち上がり・立ち下がりに若干の丸みが見られますが、基本的には入力を忠実に反転増幅しています。
-
積分器(3段目): 矩形波を時間積分した三角波が出力されています。矩形波の正の期間では出力が直線的に減少(反転の影響)し、負の期間では直線的に増加しています。積分器の時定数 $\tau = RC$ が三角波の傾きを決定しており、$\tau$ が小さいほど傾きが急になります。
-
微分器(4段目): 矩形波を時間微分すると、エッジ(立ち上がり・立ち下がり)の部分にパルスが現れます。理想的にはデルタ関数ですが、実用微分器では帰還キャパシタにより高周波が制限されるため、指数関数的に減衰するパルスになっています。矩形波の平坦な部分(変化率ゼロ)では出力もゼロに戻っています。
GBW の影響のシミュレーション
異なるゲイン設定での帯域幅の変化を可視化し、GBW一定の法則を確認します。
import numpy as np
import matplotlib.pyplot as plt
from scipy import signal
GBW = 1e6 # 1 MHz
f_b = 10
A_dc = GBW / f_b
gains = [1, 10, 100, 1000]
freq = np.logspace(0, 7, 2000)
w = 2 * np.pi * freq
fig, ax = plt.subplots(1, 1, figsize=(12, 6))
# 開ループ特性
num_ol = [A_dc]
den_ol = [1/(2*np.pi*f_b), 1]
sys_ol = signal.TransferFunction(num_ol, den_ol)
_, H_ol = signal.freqresp(sys_ol, w)
ax.semilogx(freq, 20*np.log10(np.abs(H_ol)),
'k--', linewidth=1.5, label='Open-loop', alpha=0.5)
for G in gains:
# 非反転増幅器の閉ループ
H_cl = G * H_ol / (H_ol + G)
f_bw = GBW / G
ax.semilogx(freq, 20*np.log10(np.abs(H_cl)),
linewidth=2, label=f'G={G}, BW={f_bw/1e3:.0f}kHz')
ax.axvline(x=f_bw, linestyle=':', alpha=0.2)
ax.axhline(y=0, color='gray', linestyle='-', alpha=0.2)
ax.set_xlabel('Frequency [Hz]')
ax.set_ylabel('Gain [dB]')
ax.set_title(f'Gain-Bandwidth Product (GBW = {GBW/1e6:.0f} MHz)')
ax.legend(fontsize=9)
ax.grid(True, which='both', alpha=0.3)
ax.set_ylim(-20, 110)
ax.set_xlim(1, 1e7)
# GBW一定の線を追加
gbw_freqs = np.logspace(0, 7, 100)
gbw_gains = GBW / gbw_freqs
ax.semilogx(gbw_freqs, 20*np.log10(gbw_gains),
'gray', linewidth=1, linestyle='-.', alpha=0.5,
label='GBW = const')
plt.tight_layout()
plt.savefig('gbw_tradeoff.png', dpi=150, bbox_inches='tight')
plt.show()
GBWのシミュレーション結果から、ゲイン-帯域幅トレードオフの法則が視覚的に確認できます。
-
ゲインが $G = 1$(0 dB)のとき帯域幅は 1 MHz、$G = 10$(20 dB)のとき 100 kHz、$G = 100$(40 dB)のとき 10 kHz、$G = 1000$(60 dB)のとき 1 kHz と、ゲインと帯域幅の積が常に一定($= 10^6$ Hz)です。
-
全ての閉ループ応答の $-3$ dB 点が、開ループ特性の直線($-20$ dB/decade)上に乗っています。これは、閉ループ帯域幅が開ループ利得と閉ループゲインの交点で決まることを意味しています。
-
灰色の一点鎖線がGBW一定の曲線を示しており、各閉ループ応答のゲインと帯域幅の組み合わせがこの曲線上にあることが確認できます。高ゲインが必要な場合は GBW の大きなオペアンプを選ぶ必要があります。
まとめ
本記事では、オペアンプの基本的な動作原理から各種応用回路、アクティブフィルタまでを体系的に解説しました。
- 理想オペアンプの3つの仮定(無限大利得、無限大入力インピーダンス、ゼロ出力インピーダンス)と、それから導かれる仮想短絡 $V_+ = V_-$ が全ての回路解析の基盤
- 反転増幅器 $V_{out} = -(R_f/R_1)V_{in}$: 入力インピーダンス $R_1$、仮想グランドが特徴
- 非反転増幅器 $V_{out} = (1+R_f/R_1)V_{in}$: 高入力インピーダンス、ボルテージフォロワへの発展
- 加算器・差動増幅器: 複数信号の演算(オーディオミキサー、コモンモードノイズ除去)
- 積分器・微分器: 帰還素子を $C$ にすることで解析的演算を実現(PID制御器の構成要素)
- Sallen-Key 型アクティブフィルタ: 2つの $R$ と $C$ で2次フィルタ特性を実現、$\zeta$ で特性を制御
- 非理想特性: GBW によるゲイン-帯域幅のトレードオフ、スルーレートによる大信号の歪み
オペアンプは、アナログ回路設計の最も基本的な能動素子であり、本記事で扱った回路はその出発点です。これらの基本回路を組み合わせることで、PID制御器、能動整流回路、計装アンプ(インスツルメンテーションアンプ)、発振回路など、さらに高度な回路を構成できます。
次のステップとして、以下の記事も参考にしてください。