3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pythonで学ぶ電子回路入門

Last updated at Posted at 2025-09-08

電子回路の式まとめ

抵抗 R

静的抵抗:

$$
R = \frac{V}{I}
$$

動的抵抗:

$$
r = \frac{dV}{dI} \approx \frac{\Delta v}{\Delta i}
$$

導電率(アドミタンス):

$$
g = \frac{1}{r} = \frac{\Delta i}{\Delta v}
$$


容量 C

電荷と電圧の関係:

$$
Q = C V = \int i(t),dt
$$

電荷保存則(スイッチON/OFF時):

$$
C_1 V_1 + C_2 V_2 = (C_1 + C_2)V
$$


インダクタ L

磁束と電流の関係:

$$
N \Phi = L I = \int v(t),dt
$$


三角関数・正弦波信号の表現

正弦波:

$$
v(t) = A \cos(\omega t + \phi)
$$

角速度と周波数:

$$
\omega = \frac{2\pi}{T} = 2\pi f \quad [\text{rad/sec}]
$$

$$
f = \frac{1}{T} = \frac{\omega}{2\pi}
$$


複素数表示とオイラーの公式

複素数:

$$
z = a + jb
$$

極座標表示:

$$
z = r e^{j\theta}, \quad a = r\cos\theta,\ b = r\sin\theta
$$

オイラーの公式:

$$
e^{j\omega t} = \cos(\omega t) + j\sin(\omega t)
$$

位相角:

$$
\theta = \tan^{-1}\left(\frac{b}{a}\right)
$$


微分方程式(回路の基本)

例: 抵抗 R, 容量 C を含む回路

$$
V_0 = R i(t) + \frac{1}{C} \int_0^t i(\tau),d\tau + Q_0
$$

コンデンサ電圧の応答:

$$
V_c = V_0 \left(1 - e^{-\frac{t}{RC}}\right) + \frac{Q_0}{C} e^{-\frac{t}{RC}}
$$


ラプラス変換と素子表記

時間領域から複素周波数領域への変換:

$$
\mathcal{L}{f(t)} = F(s)
$$

抵抗:

$$
R \quad \to \quad R
$$

容量:

$$
C \quad \to \quad \frac{1}{sC}
$$

インダクタ:

$$
L \quad \to \quad sL
$$


キルヒホッフの法則

  • 電流則 (KCL):

$$
\sum_{i=1}^n I_i = 0
$$

  • 電圧則 (KVL):

$$
\sum_{i=0}^n V_i = 0
$$


重ね合わせの理

$$
I_{L} = I_{L}^\prime + I_{L}^{\prime\prime} + I_{L}^{\prime\prime\prime}
$$

例題: 直列接続電流源の内部抵抗

$$
V_o = R_1 I_1 + R_2 I_2
$$

$$
I_s = \frac{I_1 R_1}{R_1 + R_2} + \frac{I_2 R_2}{R_1 + R_2}
$$

$$
R_o = \frac{V_o}{I_s}
$$


半導体基礎 数式まとめ

1. 拡散電流(Diffusion Current)

半導体中では、キャリア濃度の勾配により拡散電流が流れる。
電流密度 $J$ とキャリア濃度 $n(x)$ の関係式は:

$$
J = -D \frac{dn(x)}{dx}
$$

  • $J$:電流密度
  • $D$:拡散定数 $[\text{cm}^2/\text{sec}]$
  • $n(x)$:キャリア濃度

👉 キャリア濃度が高い領域から低い領域へキャリアが移動し、電流を形成する。


2. ダイオードの電流–電圧特性(理想モデル)

PN接合ダイオードの理想的なIV特性は:

$$
I_D = I_S \left( e^{\frac{q V_D}{kT}} - 1 \right)
$$

  • $I_D$:ダイオード電流
  • $I_S$:逆方向飽和電流(約 $10^{-9} \sim 10^{-12},\text{A}$)
  • $V_D$:ダイオードにかかる電圧
  • $q$:電子の電荷 ($1.6\times10^{-19},\text{C}$)
  • $k$:ボルツマン定数 ($1.38\times10^{-23},\text{J/K}$)
  • $T$:絶対温度 [K]

👉 ダイオードは順方向で指数関数的に電流が増加し、逆方向ではほぼ一定の電流 $I_S$ しか流れない。


3. 熱電圧(Thermal Voltage)

温度とともに決まる基準電圧:

$$
V_T = \frac{kT}{q} \approx 26,\text{mV} \quad (\text{室温 300 K})
$$

👉 ダイオードのIV特性を近似するときの基準になる。


4. ダイオードの近似IV特性

  • 順方向バイアス時 ($V_D > 0$)

    $$
    I_D \approx I_S e^{\frac{V_D}{V_T}}
    $$

  • 逆方向バイアス時 ($V_D < 0$)

    $$
    I_D \approx - I_S
    $$

👉 実際のIVカーブでは、順方向は急激に立ち上がり、逆方向はほぼ一定の微小電流。


トランジスタ基礎 数式まとめ

1. バイポーラトランジスタ (BJT)

電流増幅の基本

$$
I_C = \beta I_B
$$

  • $\beta$:電流増幅率(数十~数百倍)
  • $I_C$:コレクタ電流
  • $I_B$:ベース電流

エミッタ電流

$$
I_E = I_C + I_B
$$

$$
I_E = I_C\left(1+\frac{1}{\beta}\right)
$$


β と α の関係

$$
\beta = \frac{I_C}{I_B}, \quad \alpha = \frac{\beta}{\beta+1}
$$


BJTの電流式

指数関数特性を持つ:

$$
I_C = I_S e^{\frac{V_{BE}}{V_T}}
$$

$$
I_B = \frac{1}{\beta} I_S e^{\frac{V_{BE}}{V_T}}
$$

$$
I_E = \frac{\beta+1}{\beta} I_S e^{\frac{V_{BE}}{V_T}}
$$

  • $I_S$:飽和電流
  • $V_T = \frac{kT}{q}$:熱電圧(室温で約26 mV)
  • $V_{BE}$:ベース–エミッタ間電圧

2. MOSFET

nMOS のIV特性

  • 飽和領域 (Saturation)

$$
I_D = \frac{1}{2} \mu_n C_{\text{ox}} \frac{W}{L} (V_{GS} - V_{TH})^2
$$

  • 線形領域 (Triode / Linear)

$$
I_D = \mu_n C_{\text{ox}} \frac{W}{L} \left[ (V_{GS} - V_{TH}) V_{DS} - \frac{1}{2} V_{DS}^2 \right]
$$


ピンチオフ条件

$$
V_{DS} = V_{GS} - V_{TH}
$$

👉 このときチャネルが消滅し、電流が飽和に移行する。


チャネル長変調 (Channel Length Modulation)

$$
I_D = \frac{1}{2} \mu_n C_{\text{ox}} \frac{W}{L} (V_{GS} - V_{TH})^2 (1 + \lambda V_{DS})
$$

  • $\lambda$:チャネル長変調パラメータ
  • $V_A = 1/\lambda$:アーリー電圧

3. pMOS

  • 飽和領域

$$
I_{D,\text{sat}} = \frac{1}{2} \mu_p C_{\text{ox}} \frac{W}{L} (V_{GS} - V_{TH})^2 (1 - \lambda V_{DS})
$$

  • 線形領域

$$
I_{D,\text{tri}} = \mu_p C_{\text{ox}} \frac{W}{L} \left[ (V_{GS} - V_{TH}) V_{DS} - \frac{1}{2} V_{DS}^2 \right]
$$


4. トランスコンダクタンス (gm)

BJT

$$
g_m = \frac{\Delta I_C}{\Delta V_{BE}} \approx \frac{I_C}{V_T}
$$

MOSFET

$$
g_m = \frac{\Delta I_D}{\Delta V_{GS}} \approx \mu_n C_{\text{ox}} \frac{W}{L} (V_{GS} - V_{TH})
$$


CMOS技術とトランジスタの基本機能

1. CMOS (Complementary MOS)

  • CMOS = Complementary MOSFET
    nMOSpMOS を相補的に配置して一つの回路を構成。
  • 出力が論理 "0" または "1" のいずれかに安定 → 消費電力が小さい。

2. 相互コンダクタンス $g_m$

定義

入力電圧 $V_{GS}$ の変化に対するドレイン電流 $I_D$ の変化率:

$$
g_m = \frac{\partial I_D}{\partial V_{GS}}
$$


MOSFETの飽和領域における $g_m$

MOSFET飽和領域の基本式:

$$
I_D = \frac{1}{2} \mu_n C_{ox} \frac{W}{L} (V_{GS} - V_{TH})^2
$$

これを $V_{GS}$ で微分すると:

$$
g_m = \mu_n C_{ox} \frac{W}{L} (V_{GS} - V_{TH})
$$


BJTの $g_m$

BJTのコレクタ電流:

$$
I_C = I_S e^{\frac{V_{BE}}{V_T}}
$$

微分すると:

$$
g_m = \frac{\partial I_C}{\partial V_{BE}} = \frac{I_C}{V_T}
$$

  • $V_T = \frac{kT}{q}$ (熱電圧、室温で約 26 mV)

数値例

  • $V_{GS}: 1.5 \to 2.0 ,\text{V}$
  • $I_D: 1 \to 2 ,\text{mA}$

$$
g_m = \frac{\Delta I_D}{\Delta V_{GS}} = \frac{2 - 1}{2.0 - 1.5} = 2 ,\text{mS}
$$


3. ボディ効果 (Body Effect)

ソース-ボディ間電圧 $V_{SB}$ があると、しきい値電圧が増加する。

$$
V_{TH} = V_{TH0} + \gamma \left( \sqrt{\phi_F + V_{SB}} - \sqrt{\phi_F} \right)
$$

  • $V_{TH0}$:基準しきい値電圧
  • $\gamma$:ボディ効果係数
  • $\phi_F$:フェルミ電位

👉 $V_{SB}$ が大きいほど $V_{TH}$ が上がり、トランジスタがオンしにくくなる。


4. MOSFETの入力としての役割

(A) スイッチ機能(デジタル回路)

  • OFF条件

    $$
    V_{GS} < V_{TH} \quad \Rightarrow \quad I_D \approx 0
    $$

  • ON条件

    $$
    V_{GS} > V_{TH} \quad \Rightarrow \quad I_D \neq 0
    $$

→ 0/1 論理スイッチ


(B) 増幅器機能(アナログ回路)

  • MOSFETを飽和領域でバイアスすると:

$$
I_D \approx \frac{1}{2} \mu_n C_{ox} \frac{W}{L} (V_{GS} - V_{TH})^2
$$

  • 入力の小信号電圧 $v_{gs}$ に対し出力電流変化 $i_d$ は:

$$
i_d = g_m v_{gs}
$$

👉 この関係が 電圧制御→電流出力 の増幅機能を実現。


MOSFETの幾何パラメータ依存性

1. 基本式(飽和領域)

MOSFETのドレイン電流(飽和領域)は次の式で表されます:

$$
I_D = \frac{1}{2} \mu_n C_{ox} \frac{W}{L} (V_{GS} - V_{TH})^2
$$

  • $\mu_n$:キャリア移動度
  • $C_{ox} = \frac{\varepsilon_{ox}}{t_{ox}}$:ゲート酸化膜容量(単位面積あたり)
  • $W$:ゲート幅
  • $L$:チャネル長
  • $V_{GS}$:ゲート-ソース電圧
  • $V_{TH}$:しきい値電圧

2. 幾何パラメータの依存性

(1) チャネル長 $L$

  • 式の分母に現れる:

    $$
    I_D \propto \frac{1}{L}
    $$

  • 短チャネル化 ($L$ を小さくする) と電流が大きくなる。

  • 近年の微細化技術では nm スケール(例:5 nm)まで縮小。


(2) ゲート幅 $W$

  • 式の分子に現れる:

    $$
    I_D \propto W
    $$

  • → ゲート幅を広げると電流が増える。

  • 同じ $V_{GS}$ でも「大電流駆動」が可能。

  • パワーデバイスでは $W$ を大きくして大電流を流す設計が多い。


(3) 酸化膜厚さ $t_{ox}$

  • $C_{ox} = \frac{\varepsilon_{ox}}{t_{ox}}$ より:

    $$
    I_D \propto \frac{1}{t_{ox}}
    $$

  • → 酸化膜を薄くすると $C_{ox}$ が大きくなり、電流が増える。

  • ゲート制御力(電界効果)が強まり、しきい値電圧も下がる傾向。

  • 微細化MOSでは $t_{ox}$ を極限まで薄くする → リーク電流増加という課題もある。


3. 総合式での依存関係

まとめると、電流は以下のように幾何パラメータに依存:

$$
I_D \propto \frac{W}{L} \cdot \frac{\varepsilon_{ox}}{t_{ox}}
$$

  • $W↑$ → 電流増加(大電流駆動)
  • $L↓$ → 電流増加(短チャネル効果、微細化)
  • $t_{ox}↓$ → 電流増加(ゲート制御性向上)

4. 技術的意味

  • デジタル回路:高速化のため $L$ を短くして $I_D$ を大きく → スイッチング速度UP。
  • アナログ回路:ノイズやゲインを考慮して $W/L$ 比を調整。
  • 微細化技術:$t_{ox}$ を薄くするが、リークや信頼性とのトレードオフがある。

1. CMOSインバータ

回路構造

  • pMOS:電源 $V_{DD}$ に接続
  • nMOS:GND に接続
  • 出力 $V_{out}$ は pMOS と nMOS の接続点
  • 入力 $V_{in}$ は両ゲートに接続
 VDD
  │
 ┌┴┐ pMOS
 │   │
 │   └───┐ Vout
 │       │
 │   ┌───┘
 │   │
 └┬┘ nMOS
  │
 GND

動作式(近似)

  • nMOS電流(飽和領域):

$$
I_{Dn} = \frac{1}{2}\mu_n C_{ox}\frac{W_n}{L_n}(V_{in}-V_{THn})^2
$$

  • pMOS電流(飽和領域):

$$
I_{Dp} = \frac{1}{2}\mu_p C_{ox}\frac{W_p}{L_p}(V_{DD}-V_{in}-|V_{THp}|)^2
$$

  • バランス条件:

$$
I_{Dn} = I_{Dp}
$$

  • 近似的伝達特性(S字カーブ):

$$
V_{out} \approx \frac{V_{DD}}{1+\exp(\alpha(V_{in}-V_M))}
$$


2. CMOS NAND回路

回路構造

  • pMOS 2個:並列接続(電源側)
  • nMOS 2個:直列接続(GND側)
  • 入力:A, B
  • 出力:Y
 VDD
  │
 ┌─┬─┐  pMOS並列
 │ │ │
 │ │ └──────┐
 │ │        │
 │ │        ├─── Y
 │ │        │
 │ │ ┌──────┘
 │ │ │
 └─┴─┘  nMOS直列
   │
  GND

論理動作

  • A=B=1 → nMOS直列ON, pMOS並列OFF → $Y=0$
  • それ以外 → pMOS並列ON → $Y=1$

数式モデル

  • 出力電圧 $V_{out}$ は入力A, Bに依存して決まる:

$$
I_{Dp}(A,B) = I_{Dn}(A,B)
$$

  • 論理式:

$$
Y = \overline{A \cdot B}
$$


3. S字伝達特性

  • インバータもNANDも 出力はS字カーブの切り替え特性を示す。
  • 一般式:

$$
V_{out} \approx \frac{V_{DD}}{1+\exp(\alpha(f(V_{in})-V_M))}
$$

  • インバータ: $f(V_{in}) = V_{in}$
  • NAND: $f(V_{in}) = A \cdot B$

✅ まとめると:

  • CMOSインバータは 1入力→1出力、S字カーブで反転。
  • CMOS NANDは 2入力→1出力、論理ANDの否定をアナログ的にS字カーブで実現。

1. 増幅の定義

  • 電圧利得

$$
A_v = \frac{v_{out}}{v_{in}}
$$

  • 電流利得

$$
A_i = \frac{i_{out}}{i_{in}}
$$


2. MOS増幅回路の基本式

  • MOSFETの電流式(飽和領域)

$$
I_D = \frac{1}{2}\mu_n C_{ox}\frac{W}{L}(V_{GS}-V_{TH})^2
$$

ここで
$\mu_n$:電子移動度
$C_{ox} = \frac{\varepsilon_{ox}}{t_{ox}}$:酸化膜容量
$W, L$:チャネル幅と長さ
$V_{TH}$:しきい値電圧

  • 小信号近似による出力電圧

$$
v_{out} = -g_m R_L , v_{in}
$$

  • 相互コンダクタンス(トランスコンダクタンス)

$$
g_m = \frac{\partial I_D}{\partial V_{GS}} = \mu_n C_{ox}\frac{W}{L}(V_{GS}-V_{TH})
$$

  • 電圧利得

$$
A_v = \frac{v_{out}}{v_{in}} = -g_m R_L
$$


3. Bipolar増幅回路の基本式

  • バイポーラトランジスタ(BJT)の電流式

$$
I_C = I_S \exp\left(\frac{V_{BE}}{V_T}\right)
$$

ここで
$I_S$:飽和電流
$V_T = \frac{kT}{q}$:熱電圧(約26 mV, 室温300K)

  • 相互コンダクタンス

$$
g_m = \frac{\partial I_C}{\partial V_{BE}} = \frac{I_C}{V_T}
$$

  • 電圧利得

$$
A_v = -g_m R_L
$$


4. バイアスの基本式

  • 入力信号:

$$
V_{GS} = V_{GSQ} + v_1
$$

ここで
$V_{GSQ}$:バイアス電圧(直流成分)
$v_1$:小信号(交流成分)

  • MOSの動作条件(確実に動作させるための条件)

$$
V_{GS,min} = V_{GSQ} - V_1 > V_{TH}
$$

従って:

$$
V_{GSQ} > V_{TH} + V_1
$$


5. バイアス方式の式

(a) 分圧抵抗バイアス(1電源方式)

$$
V_{GSQ} = \frac{R_2}{R_1 + R_2} V_{DD}
$$

$$
R_G = \frac{R_1 R_2}{R_1 + R_2}
$$

(b) 電流源バイアス(ICで多用)

$$
I_D = I_0 \quad (\text{電流源が一定値を供給})
$$

$$
V_{GS} , \text{が自動的に決まる}
$$


1. 大信号解析 (DC特性)

MOSFET のドレイン電流は、しきい値電圧 $V_{TH}$ を超えたときに次の式で表されます。

  • 飽和領域:

$$
I_D = \frac{1}{2}\mu_n C_{ox}\frac{W}{L}(V_{GS}-V_{TH})^2 (1+\lambda V_{DS})
$$

  • 線形領域:

$$
I_D = \mu_n C_{ox}\frac{W}{L}\left[(V_{GS}-V_{TH})V_{DS} - \frac{1}{2}V_{DS}^2\right]
$$

ここで
$\mu_n$:移動度
$C_{ox}$:ゲート酸化膜容量
$W,L$:チャネル幅・長さ
$\lambda$:チャネル長変調係数

👉 この式は 直流動作点 (バイアス点) を決めるために使います。


2. 小信号解析 (AC特性)

直流バイアス点 $(V_{GSQ}, I_{DQ})$ の周りで小さな入力変動 $v_{gs}$ を与えると、電流は テイラー展開で近似できます。

$$
I_D \approx I_{DQ} + g_m v_{gs} + \frac{1}{2}g_m' v_{gs}^2 + \cdots
$$

1次の項だけを取ると:

$$
i_d = g_m v_{gs}
$$

ここで

  • 相互コンダクタンス (トランスコンダクタンス)

$$
g_m = \frac{\partial I_D}{\partial V_{GS}}\bigg|{V{GS}=V_{GSQ}} = \mu_n C_{ox}\frac{W}{L}(V_{GSQ}-V_{TH})
$$

👉 この式により、MOSFETは「電圧制御電流源」としてモデル化されます。


3. 大信号 vs 小信号のまとめ

項目 大信号解析 (DC) 小信号解析 (AC)
入力 $V_{GS}$, $V_{DS}$ 小変動 $v_{gs}, v_{ds}$
出力 $I_D$ (非線形関数) $i_d = g_m v_{gs} + g_{ds} v_{ds}$
利用目的 動作点(バイアス)の決定 増幅動作の解析
モデル 非線形MOSFET方程式 線形化された小信号等価回路

✅ 式で整理すると:

  • 大信号

$$
I_D = f(V_{GS}, V_{DS})
$$

  • 小信号

$$
i_d = g_m v_{gs} + g_{ds} v_{ds}
$$

TL;DR

  • 動作点 $Q$ のまわりで テイラー展開の一次(微分) だけ残す=接線近似だから、非線形なMOSFETも線形回路に置き換えられる。

  • 小信号モデルのコアは

    $$
    i_d \approx g_m v_{gs} + g_{mb} v_{bs} + g_{ds} v_{ds},\quad r_o=\frac{1}{g_{ds}}
    $$

  • 成立条件:振幅が小さい動作領域が切り替わらない準静的近似が妥当

  • 大振幅・超高周波・強い短チャネル効果では、一次近似が崩れる(高次・NQS・寄生まで要考慮)。


1. まず結論(概念)

MOSFETの静特性 $I_D=f(V_{GS},V_{DS},V_{BS})$ を、直流動作点 $Q$ のまわりでテイラー展開して一次で打ち切ると、

$$
i_d ;\approx;
\underbrace{\frac{\partial f}{\partial V_{GS}}}{g_m} v{gs}
+\underbrace{\frac{\partial f}{\partial V_{BS}}}{g{mb}} v_{bs}
+\underbrace{\frac{\partial f}{\partial V_{DS}}}{g{ds}} v_{ds}.
$$

この“勾配”がそのまま依存電流源($g_m v_{gs}, g_{mb} v_{bs}$)と出力抵抗($r_o=1/g_{ds}$)に化け、線形の小信号等価回路として扱えます。
DCは別系統(電源)で受け持ち、ACの“小さな揺れ”だけを等価回路に流す、という分離がポイント。


2. 数学的な根拠(テイラー一次)

$$
I_D(Q+\Delta)\approx I_D(Q)

  • \frac{\partial f}{\partial V_{GS}}v_{gs}
  • \frac{\partial f}{\partial V_{DS}}v_{ds}
  • \frac{\partial f}{\partial V_{BS}}v_{bs}.
    $$

二次以上($v^2$, $v^3$ …)を無視 ⇒ 線形化
これが“小信号”の意味そのもの。


3. 強反転・飽和の代表式(長チャネル近似)

チャネル長変調込みの古典式:

$$
I_D \approx \tfrac{1}{2}k_n(V_{OV})^2(1+\lambda V_{DS}),\quad
V_{OV}=V_{GS}-V_{TH},\quad
k_n=\mu_n C_{ox}\tfrac{W}{L}.
$$

小信号パラメータは

$$
g_m=\frac{\partial I_D}{\partial V_{GS}}
= k_n V_{OV} = \frac{2I_D}{V_{OV}},\quad
g_{ds}=\frac{\partial I_D}{\partial V_{DS}}=\lambda I_D,\quad
r_o=\frac{1}{\lambda I_D}.
$$

ボディ効果込み(しきい値の $V_{SB}$ 依存)だと

$$
g_{mb}=g_m\cdot \eta,\quad
\eta=\frac{\gamma}{2\sqrt{2\Phi_F+V_{SB}}};;\Rightarrow;; g_{mb}\approx 0.1\sim0.3,g_m.
$$

交流容量は“チャージの微分”

$$
C_{ij}=\left.\frac{\partial Q_i}{\partial V_j}\right|_{Q}.
$$

強反転・飽和の概算:

  • $C_{gs}\approx \tfrac{2}{3}C_{ox}WL$(チャネルがゲートをシールド → $C_{gb}\approx 0$)
  • $C_{gd}$ は小さめ(ただしミラー効果で見かけ増大)
  • 接合容量 $C_{db},C_{sb}$ は逆バイアスで減少(バイアス依存)

4. いつ“許される”か(成立条件チェックリスト)

  • 小振幅:経験的に $v_{gs}\lesssim 0.1\sim0.2,V_{OV}$ だと高次項が効きにくい。
  • 領域不変:小信号の揺れで飽和↔線形をまたがない。
  • 準静的(QS):周波数が高すぎず、チャージ分布が即応できる帯域。極端なRFは非準静的(NQS) へ。
  • 温度・バイアス固定:$\mu, V_{TH}, \lambda, \gamma$ 等のパラメータが解析中に動かない。

5. 破綻しがちなケース(注意点)

  • 入力が大きく歪みクリップ領域またぎが発生。
  • 超高周波でNQS・配線/寄生が支配的(レイアウト・パッケージの寄生含めモデル強化)。
  • 短チャネル効果(DIBL、速度飽和 等)で古典式がズレる。
    → それでも「微分して一次化」の思想自体は有効。実務はBSIM等のデバイスモデルが内部で小信号(偏微分)を持っています。

6. 手計算しやすい実数例

  • $;I_D=1\ \text{mA},;V_{OV}=0.2\ \text{V},;\lambda=0.02\ \text{V}^{-1}$

$$
g_m=\frac{2I_D}{V_{OV}}
=\frac{2\cdot 1\text{mA}}{0.2\text{V}}=10\ \text{mS},\quad
r_o=\frac{1}{\lambda I_D}
=\frac{1}{0.02\cdot 1\text{mA}}=50\ \text{k}\Omega.
$$

  • もし $\eta=0.2$ なら $g_{mb}\approx 2\ \text{mS}$。
    → これを小信号回路に差し込めば、利得・入出力抵抗・帯域(容量で極)を紙と鉛筆で読めます。

7. 実務フロー(最短手順)

  1. DCバイアス設計で $V_{GS0}, V_{DS0}$ を決定(領域=飽和か要確認)。
  2. データシート/モデルまたは式から $I_D, V_{OV}, \lambda$ を見積もる。
  3. $g_m=2I_D/V_{OV}$, $r_o=1/(\lambda I_D)$, $g_{mb}$ を算出。
  4. 必要帯域に応じて $C_{gs}, C_{gd}, C_{db}$ を加える(ミラー確認)。
  5. 小信号等価回路でAC利得・極/零点安定度を解析。
  6. 入力振幅と周波数が成立条件を満たすかを最後にチェック。

8. 付録:最小の等価回路メモ(飽和・ボディ結合なし)

  • 依存電流源:$g_m v_{gs}$(ドレインへ)
  • 出力抵抗:$r_o$(ドレイン–ソース間)
  • 容量:$C_{gs}, C_{gd}, C_{db}$(必要に応じて)

まずは $g_m$–$r_o$ から始め、帯域を見たいときに容量を足す、が実務の定石。


1. 3つの特性を重ねて読む

  1. $I_D!-!V_{GS}$ 特性(ゲートを増やすと電流が増える)
  2. $I_D!-!V_{DS}$ 家族曲線(各 $V_{GS}$ ごとの出力特性)
  3. 負荷直線:抵抗 $R_L$ と電源 $V_{DD}$ により

$$
\boxed{V_{DS}=V_{out}=V_{DD}-R_L I_D}
$$

(切片:$I_D=0\Rightarrow V_{DS}=V_{DD}$、$V_{DS}=0\Rightarrow I_D=V_{DD}/R_L$)

家族曲線と負荷直線の交点が動作点 $Q$
$V_{GS}$(= $V_{in}$)を上げる ⇒ 家族曲線が上方へ ⇒ 交点の $I_D$ 増加 ⇒ 負荷直線上で $V_{DS}$ は減少(反転特性)。


2. MOSFET の大信号式(長チャネル近似、$\lambda=0$ なら簡単)

しきい値 $V_{TH}$、過剰電圧 $V_{OV}=V_{GS}-V_{TH}$、
$k=\mu_n C_{ox}\frac{W}{L}$ として

  • カットオフ:$V_{GS}<V_{TH}$
    $\displaystyle I_D\simeq0,\quad V_{out}\simeq V_{DD}$.

  • 飽和(強反転):$V_{GS}\ge V_{TH},; V_{DS}\ge V_{OV}$

    $$
    \boxed{I_D=\tfrac{1}{2}k,V_{OV}^2}
    $$

    従って

    $$
    \boxed{V_{out}=V_{DD}-\tfrac{R_L k}{2},(V_{in}-V_{TH})^2}
    $$

    (但し 自己整合条件 $V_{out}\ge V_{in}-V_{TH}$ を満たす範囲のみ)

  • 線形(トライオード):$0\le V_{DS}<V_{OV}$

    $$
    \boxed{I_D=k!\left[(V_{in}-V_{TH})V_{out}-\tfrac{1}{2}V_{out}^2\right]}
    $$

    負荷直線 $I_D=(V_{DD}-V_{out})/R_L$ を連立。
    $V_{out}$ についての 2 次方程式:

    $$
    \frac{k}{2}V_{out}^2-!\Big{k(V_{in}-V_{TH})+\frac{1}{R_L}\Big}!V_{out}+\frac{V_{DD}}{R_L}=0
    $$

    物理的に小さい方の根($0\le V_{out}<V_{in}-V_{TH}$)を採用:

    $$
    \boxed{;
    V_{out}=\frac{k(V_{in}-V_{TH})+\frac{1}{R_L}
    -\sqrt{\Big[k(V_{in}-V_{TH})+\frac{1}{R_L}\Big]^2-;2k\frac{V_{DD}}{R_L}}}{k};}
    $$

実回路では $\lambda>0$(チャネル長変調)なら
$I_D$ に $(1+\lambda V_{DS})$ を掛け、負荷直線との交点はわずかに右上へ。
解析の流れは同じです。


3. 入出力特性(まとめ・描き方)

$$
V_{out}(V_{in})=
\begin{cases}
V_{DD} & (V_{in}<V_{TH}) \
V_{DD}-\dfrac{R_L k}{2},(V_{in}-V_{TH})^2
& \big[V_{DD}-\dfrac{R_L k}{2},(V_{in}-V_{TH})^2 ;\ge; V_{in}-V_{TH}\big] \
\text{上の 2次式の小さい根}
& \text{(トライオード条件: }V_{out}<V_{in}-V_{TH})
\end{cases}
$$

  1. まず $I_D!-!V_{DS}$ の家族曲線(複数の $V_{GS}$)を描く。
  2. 負荷直線 $V_{DS}=V_{DD}-R_L I_D$ を重ねる。
  3. それぞれの交点を読み取り、$(V_{in},V_{out})$ へ写像すると右端の入出力特性が得られる(図の右パネル)。

4. 設計の指針(直感)

  • 反転増幅:$V_{in}\uparrow \Rightarrow I_D\uparrow \Rightarrow V_{out}\downarrow$.

  • 動作点 $Q$

    • クリップ(カットオフ側/線形側)しにくい 中央 付近(例 $V_{out}\approx V_{DD}/2$)に置くのが基本。
    • 対応する $I_D$ は負荷直線で決まる($I_D=(V_{DD}-V_{out})/R_L$)。
  • 直流大信号の傾きから、微小変化の近似増幅率も読める:
    飽和で $\displaystyle \frac{dV_{out}}{dV_{in}}\approx -R_L,\frac{\partial I_D}{\partial V_{GS}} =-R_L,g_m$(小信号の導入)。


# NMOS with resistive load: DC (large-signal) analysis via load-line
# Three panels:
#  (1) I_D vs V_GS
#  (2) I_D–V_DS family + load line + Q-points for a few V_GS
#  (3) Transfer V_out(V_in)

import numpy as np
import matplotlib.pyplot as plt

# ----------------------------
# Parameters (units shown)
# ----------------------------
VDD = 16.0           # V
RL  = 2.0            # kΩ  (so current axis is in mA)
VTH = 2.0            # V   (threshold)
k   = 1.0            # mA/V^2  (long-channel, lambda=0)

# ----------------------------
# Device equations (lambda = 0)
# IDs returned in mA, VDS/VGS in V
# ----------------------------
def Id_family(VGS, VDS):
    """I_D (mA) for given VGS, VDS (V), long-channel, no CLM."""
    if VGS <= VTH:
        return 0.0
    VOV = VGS - VTH
    if VDS >= VOV:  # saturation
        return 0.5 * k * VOV**2
    # triode
    return k * ((VOV * VDS) - 0.5 * VDS**2)

def loadline_I(VDS):
    """Load line current in mA for a given VDS (V)."""
    return (VDD - VDS) / RL  # because RL is in kΩ, current is mA

def vout_from_vin(Vin):
    """Piecewise solve Vout for a given Vin using saturation check, else triode root."""
    if Vin < VTH:
        return VDD  # cut-off
    VOV = Vin - VTH
    # Saturation candidate
    Vout_sat = VDD - RL * (0.5 * k * VOV**2)
    if Vout_sat >= VOV:  # still satisfies sat condition
        return max(0.0, min(VDD, Vout_sat))
    # Triode region: solve quadratic
    # (k/2) Vout^2 - [k(Vin - VTH) + 1/RL] Vout + VDD/RL = 0
    A = 0.5 * k
    B = -(k * VOV + 1.0 / RL)
    C = VDD / RL
    disc = max(0.0, B**2 - 4*A*C)
    r1 = (-B - np.sqrt(disc)) / (2*A)  # smaller root
    r2 = (-B + np.sqrt(disc)) / (2*A)
    Vout = min(r1, r2)
    # enforce region
    return np.clip(Vout, 0.0, VOV - 1e-12)

# ----------------------------
# Sweep data
# ----------------------------
VGS_vals_for_family = [2.0, 4.0, 6.0]  # example inputs
VDS_axis = np.linspace(0, VDD, 600)

Vin_axis = np.linspace(0.0, 8.0, 400)
Vout_axis = np.array([vout_from_vin(v) for v in Vin_axis])

# Intersections (Q points) for sample VGS
Q_pts = []
for VGS in VGS_vals_for_family:
    # brute-force intersection on grid
    Id_dev = np.array([Id_family(VGS, v) for v in VDS_axis])
    Id_ll  = loadline_I(VDS_axis)
    idx = np.argmin(np.abs(Id_dev - Id_ll))
    Q_pts.append((VDS_axis[idx], Id_ll[idx], VGS))

# ----------------------------
# Plot
# ----------------------------
fig = plt.figure(figsize=(13, 4.5))

# (1) I_D vs V_GS (assume saturation region curve for intuition)
ax1 = fig.add_subplot(1, 3, 1)
VGS_axis = np.linspace(0, 6.5, 500)
ID_VGS = np.where(VGS_axis >= VTH, 0.5 * k * (VGS_axis - VTH)**2, 0.0)
ax1.plot(VGS_axis, ID_VGS, lw=2, label="ID vs VGS (sat approx)")
for v in VGS_vals_for_family:
    ax1.axvline(v, ls="--", alpha=0.8)
    ax1.text(v+0.05, 0.2, f"VGS={v:g} V", rotation=90, va="bottom", fontsize=9)
ax1.set_xlabel("VGS [V]")
ax1.set_ylabel("ID [mA]")
ax1.set_title("1) ID–VGS characteristic")
ax1.grid(alpha=0.3)
ax1.set_xlim(0, 6.5)
ax1.set_ylim(0, 8.5)

# (2) Family + load line + Q
ax2 = fig.add_subplot(1, 3, 2)
# family curves
for VGS in [2.0, 3.0, 4.0, 5.0, 6.0]:
    Idcurve = np.array([Id_family(VGS, v) for v in VDS_axis])
    ax2.plot(VDS_axis, Idcurve, lw=1.5)
    ax2.text(16.1, Idcurve[-1], f"{VGS:g} V", ha="left", va="center", fontsize=8)
# load line
ax2.plot(VDS_axis, loadline_I(VDS_axis), 'k--', lw=2, label="Load line")
# Q points for selected inputs
for (vds_q, id_q, vgs) in Q_pts:
    ax2.plot([vds_q], [id_q], 'o', ms=6)
    ax2.vlines(vds_q, 0, id_q, linestyles=":", alpha=0.7)
    ax2.hlines(id_q, 0, vds_q, linestyles=":", alpha=0.7)
    ax2.text(vds_q+0.15, id_q+0.15, f"VGS={vgs:g}", fontsize=9)
ax2.set_xlim(0, VDD+1.5)
ax2.set_ylim(0, 8.5)
ax2.set_xlabel("VDS [V]  (= Vout)")
ax2.set_ylabel("ID [mA]")
ax2.set_title("2) ID–VDS family with load line")
ax2.grid(alpha=0.3)
ax2.legend(loc="upper right", frameon=False)

# (3) Transfer curve Vout(Vin)
ax3 = fig.add_subplot(1, 3, 3)
ax3.plot(Vin_axis, Vout_axis, lw=2)
# mark the same sample inputs
for vgs in VGS_vals_for_family:
    vout = vout_from_vin(vgs)
    ax3.plot([vgs], [vout], 'o')
    # guide arrows (ΔVin, ΔVout style)
    ax3.vlines(vgs, 0, vout, linestyles=":", alpha=0.6)
    ax3.hlines(vout, 0, vgs, linestyles=":", alpha=0.6)
ax3.set_xlabel("Vin (= VGS) [V]")
ax3.set_ylabel("Vout (= VDS) [V]")
ax3.set_title("3) Transfer characteristic Vout(Vin)")
ax3.grid(alpha=0.3)
ax3.set_xlim(0, 8.0)
ax3.set_ylim(0, VDD)

plt.tight_layout()
plt.show()

1) 増幅器の基本量

  • 入力ポートの小信号
    電圧 $v_1$、電流 $i_1$ ⇒ 入力インピーダンス

    $$
    \boxed{Z_{\text{in}}=\dfrac{v_1}{i_1}}
    $$

  • 出力ポートの小信号
    電圧 $v_2$、電流 $i_2$ ⇒ 出力インピーダンス

    $$
    \boxed{Z_{\text{out}}=\dfrac{v_2}{i_2}}
    $$

  • 利得(周波数依存の複素量になるのが一般的)

    $$
    \boxed{A_v=\dfrac{v_2}{v_1}},\qquad
    \boxed{A_i=\dfrac{i_2}{i_1}},\qquad
    \boxed{A_p=\dfrac{v_2 i_2}{v_1 i_1}}
    $$

物理量の次元
$A_v, A_i$:無次元、$A_p$:無次元(比)。実務ではdB表記:$20\log_{10}|A_v|$、$20\log_{10}|A_i|$、$10\log_{10} A_p$。


2) 「高 $Z_{\text{in}}$・低 $Z_{\text{out}}$」が良い理由(直感と式)

信号源(内部抵抗 $R_s$)と負荷 $R_L$ に接続するときの全体の電圧伝達

$$
\boxed{
\frac{v_2}{v_s}
= A_{v0};
\underbrace{\frac{Z_{\text{in}}}{R_s+Z_{\text{in}}}}{\text{入力の分圧}}
\underbrace{\frac{R_L}{Z
{\text{out}}+R_L}}_{\text{出力の分圧}}
}
$$

  • $A_{v0}$:増幅器の開放出力電圧利得(出力開放、入力は源で駆動)
  • $Z_{\text{in}}$ が大 ⇒ 入力分圧のロスが小さい(源を“ほぼ電圧源”として扱える)
  • $Z_{\text{out}}$ が小 ⇒ 出力分圧のロスが小さい(負荷を“しっかり駆動”できる)

理想電圧増幅器:$Z_{\text{in}}=\infty$, $Z_{\text{out}}=0$。
理想電流増幅器なら逆(低 $Z_{\text{in}}$、高 $Z_{\text{out}}$)が望ましい。


3) 入出力インピーダンスの測定・計算(テスト源法)

小信号線形近似(独立源は 0:電圧源→短絡、電流源→開放)を前提。

入力インピーダンス $Z_{\text{in}}$

  1. 出力を開放(負荷を外す、帰還の指定があればその条件に合わせる)
  2. 入力ポートにテスト電圧源 $v_x$ を接続し、そのとき流れる電流 $i_x$ を測る
  3. $\displaystyle \boxed{Z_{\text{in}}=\frac{v_x}{i_x}}$

出力インピーダンス $Z_{\text{out}}$

  1. 入力をゼロ(駆動源 $v_s\to 0$:短絡、$i_s\to 0$:開放)
  2. 出力ポートにテスト電圧源 $v_x$ を接続し、流れる電流 $i_x$ を測る
  3. $\displaystyle \boxed{Z_{\text{out}}=\frac{v_x}{i_x}}$

別法(テブナン):入力ゼロの条件で
開放出力電圧 $V_{\text{oc}}$ と短絡電流 $I_{\text{sc}}$ を計算し
$;Z_{\text{out}}=V_{\text{oc}}/I_{\text{sc}}$。


4) よくある回路での近似(MOSFET例)

  • ソース接地電圧増幅段(小信号)
    ゲートは容量性で直流的には無限大 ⇒ $Z_{\text{in}}$ は非常に大(高周波では $1/(j\omega C_{in})$ が支配)。
    出力側は $r_o$ と負荷の並列 ⇒ $\displaystyle Z_{\text{out}}\approx r_o\parallel R_D\parallel R_L$。
    開放利得 $\displaystyle A_{v0}\approx -g_m (R_D\parallel r_o)$。

  • このときの端‐端の電圧伝達は前節の式に代入して評価。


5) 現場でハマりやすい点

  • dBの加算:直列段の総電圧利得(dB)は各段の dB 値の和。ただし分圧ロス(前節の二つの係数)も dB に換算して一緒に足す。
  • 周波数依存:$Z_{\text{in}}, Z_{\text{out}}, A_v$ は一般に $s=j\omega$ の関数。BPF/LPF 化や発振余裕(位相余裕)を見るときはボード線図で評価。
  • 帰還がある系:測定条件(開ループか閉ループか)を明確に。閉ループでは $Z_{\text{in}}$ 上昇、$Z_{\text{out}}$ 低下が起きるのが普通(電圧帰還)。

6) 1分クイック計算の型

  1. まず理想化して $;v_2/v_s\approx A_{v0}$ を求める
  2. 次に入力分圧 $\dfrac{Z_{\text{in}}}{R_s+Z_{\text{in}}}$ と出力分圧 $\dfrac{R_L}{Z_{\text{out}}+R_L}$ を掛け、実際の端‐端利得に直す
  3. 欲しい仕様(「この $R_s$・$R_L$ で $|v_2/v_s|\ge \dots$」など)から、必要な $Z_{\text{in}}$ と $Z_{\text{out}}$ の目安が決まる

小信号パラメータ

$$
g_m=\left.\frac{\partial I_D}{\partial V_{GS}}\right|Q,\quad
g
{ds}=\left.\frac{\partial I_D}{\partial V_{DS}}\right|Q,\quad
r_o=\frac{1}{g
{ds}}
$$

1) ソース接地(Common-Source, CS)

入力:G、出力:D、SはAC接地。

  • 電圧利得

    $$
    \boxed{A_v=\frac{v_o}{v_i}\approx -,g_m,(R_D\parallel r_o\parallel R_L)}
    $$

    (KCL:$\frac{v_o}{R_D}+\frac{v_o}{r_o}+\frac{v_o}{R_L}-g_m v_{gs}=0,\ v_{gs}=v_i$)

  • 入力インピーダンス

    $$
    \boxed{Z_{\text{in}}\approx R_G} \quad(\text{理想MOSなら } \to \infty)
    $$

  • 出力インピーダンス

    $$
    \boxed{Z_{\text{out}}\approx R_D\parallel r_o}
    $$

注:ソースに抵抗 $R_S$(局所帰還)が入ると
$A_v\simeq-\dfrac{g_m(R_D\parallel r_o\parallel R_L)}{1+g_m R_S}$。


2) ゲート接地(Common-Gate, CG)

入力:S、出力:D、GはAC接地。

  • 電圧利得

    $$
    \boxed{A_v\approx +,g_m,(R_D\parallel r_o\parallel R_L)}
    $$

  • 入力インピーダンス(低いのが特徴)

    $$
    \boxed{Z_{\text{in}}\approx \frac{1}{g_m}} \quad(\text{ボディ効果込みなら } 1/(g_m+g_{mb}))
    $$

  • 出力インピーダンス

    $$
    \boxed{Z_{\text{out}}\approx R_D\parallel r_o}
    $$

  • 電流利得:おおむね 1(電流バッファ的)。


3) ドレイン接地=ソースフォロワ(Common-Drain, CD)

入力:G、出力:S、DはAC接地(電流源や VDD へ)。

  • 電圧利得(≲1 のバッファ)

    $$
    \boxed{A_v \approx \frac{g_m,R_L'}{1+g_m,R_L'}}
    $$

    ここで $R_L'$ はソースから見える合成負荷(例:純抵抗 $R_L$ なら $R_L'=R_L$)。
    ボディ効果ありなら $g_m\to g_m+g_{mb}$。

  • 入力インピーダンス

    $$
    \boxed{Z_{\text{in}}\approx R_G\ (\text{非常に大})}
    $$

  • 出力インピーダンス(低いのが特徴)

    $$
    \boxed{Z_{\text{out}}\approx \frac{1}{g_m}\ \parallel\ r_o\ \approx \frac{1}{g_m}}
    $$


4) インピーダンスの測り方(定義)

  • $Z_{\text{in}}$:出力開放で入力ポートに試験源 $v_x$ → $Z_{\text{in}}=v_x/i_x$。
  • $Z_{\text{out}}$:入力短絡で出力ポートに試験源 → $Z_{\text{out}}=v_x/i_x$。

5) ざっくり数値感

例:$g_m=10,\mathrm{mS},\ r_o=50,\mathrm{k}\Omega,\ R_D=10,\mathrm{k}\Omega,\ R_L=\infty$

  • CS:$A_v\approx -g_m(R_D\parallel r_o)= -0.01\times 8.33\mathrm{k}\approx -83$(約 38 dB)
    $Z_{\text{out}}\approx 8.33,\mathrm{k}\Omega$。
  • CD:$A_v\approx \dfrac{g_mR_L}{1+g_mR_L}$($R_L=1,\mathrm{k}\Omega$ なら $\approx0.91$)、
    $Z_{\text{out}}\approx 1/g_m=100,\Omega$。

6) 周波数依存(ひとこと)

容量 $C_{gs}, C_{gd}, C_{db}$ を入れると、

  • CS:ミラー効果で見かけの $C_{gd}$ 増大 → 高域ゲイン低下。
  • CG:広帯域向き(入力に $C_{gd}$ のミラーが乗りにくい)。
  • CD:低出力抵抗で負荷容量を駆動しやすい。

了解。「各種接地方式の比較」表だけを、記号の意味と“なぜそうなるか”を最短で解説します(NMOS、交流小信号、長チャネル近似)。


記号

  • $g_m$:トランスコンダクタンス($\partial I_D/\partial V_{GS}$)。
  • $g_D\equiv g_{ds}$:ドレインの小信号コンダクタンス(チャネル長変調)。
  • $r_D\equiv r_o=1/g_D$:トランジスタの出力抵抗。
  • $G_L$:外部負荷のコンダクタンス(例:抵抗 $R_L$ なら $G_L=1/R_L$)。
  • $n=1+g_{mb}/g_m$(ボディ効果込みの“スロープ係数”)。
  • $\infty$:実質的に非常に大きい/小さいことを表す。

1) ソース接地(Common-Source, CS)

  • 入力インピーダンス $Z_i$:$\infty$
    ゲートは直流的に電流を吸わない(IGFET)→入力はほぼオープン。
  • 出力インピーダンス $Z_o$:$r_D$(高い)
    ドレイン側はトランジスタの出力抵抗で決まる(負荷が並列に付けば下がる)。
  • 電圧利得 $A_v \approx -\dfrac{g_m}{G_L+g_D} = -g_m(R_L\parallel r_o)$
    反転増幅。負荷が軽いほど($G_L\downarrow$)ゲインは大きい。
  • 電流利得 $A_i$:$\infty$(理想的には入力に電流を食わないため大)
  • 電力利得 $A_p$:$\infty$(理想的定義上。実際は有限)

直感:電流源($g_m v_{gs}$)が高抵抗の出力に流れ、電圧化される→大きい電圧利得。


2) ゲート接地(Common-Gate, CG)

  • 入力インピーダンス $Z_i \approx \dfrac{1}{n g_m}$(低い)
    入力はソース端子。入ってきた電流を $g_m$ がほぼそのまま取り込むので低Z。
  • 出力インピーダンス $Z_o$:$r_D$(高い)
    出力はドレインでCS同様に高Z。
  • 電圧利得 $A_v \approx +\dfrac{n g_m}{G_L+g_D}$同相で大きい)
    $n$ はボディ効果分の“おまけ”。
  • 電流利得 $A_i \approx 1$(電流バッファ的)
  • 電力利得 $A_p \approx A_v$

直感:電流をほぼそのまま出力高抵抗へ押し上げて電圧に変える。低入力Z・高出力Z。


3) ドレイン接地(Common-Drain, CD=ソースフォロワ)

  • 入力インピーダンス $Z_i$:$\infty$
    入力はゲートで電流を食わない。
  • 出力インピーダンス $Z_o \approx \dfrac{1}{n g_m}$(低い)
    ソースがエミッタフォロワ相当で低Zバッファ。
  • 電圧利得 $A_v \approx \dfrac{g_m+g_{mb}}{g_m+g_{mb}+G_L+g_D}\ \approx \dfrac{1}{n}\le 1
    重い負荷((G_L\uparrow$)ほどゲインが下がるが**非反転**。
  • 電流利得 $A_i$:$\infty$(出力低Z・入力ほぼ無限)
  • 電力利得 $A_p$:$\infty$(理想的定義)

直感:ゲートの電圧をソースが“追随”。利得は≦1だが、駆動力が強い(低出力Z)のでバッファ用途。


# Small-signal MOS amplifier quick calculator + plots
# (CS/CG/CD gains & impedances; sweep RL)
import numpy as np
import matplotlib.pyplot as plt

# ---------- utilities ----------
def par(*vals):
    """Parallel of resistances (accepts np arrays)"""
    vals = [np.asarray(v, dtype=float) for v in vals]
    inv = 0.0
    for v in vals:
        inv = inv + 1.0/v
    return 1.0/inv

def as_ohm(x):
    """Pretty ohms as scalar or array -> str"""
    if np.ndim(x) == 0:
        v = float(x)
        if v == np.inf:
            return ""
        units = [(1e9, ""), (1e6, ""), (1e3, ""), (1.0, "Ω")]
        for s, u in units:
            if abs(v) >= s:
                return f"{v/s:.3g} {u}"
        return f"{v:.3g} Ω"
    return x

# ---------- small-signal models ----------
def cs_params(gm, ro, RD, RL=np.inf, RG=np.inf, RS=0.0):
    """
    Common-Source (gate input, drain output, source AC-ground)
    Returns: Av, Zin, Zout
    """
    # local feedback via RS (optional)
    A = gm * par(RD, ro, RL)
    if RS > 0:
        A = A / (1.0 + gm * RS)
    Av = -A
    Zin = RG  # ideal MOS gate
    Zout = par(RD, ro)
    return Av, Zin, Zout

def cg_params(gm, ro, RD, RL=np.inf, gmb=0.0):
    """
    Common-Gate (source input, drain output, gate AC-ground)
    Returns: Av, Zin, Zout
    """
    gm_eff = gm + gmb
    Av = + gm_eff * par(RD, ro, RL)
    Zin = 1.0 / gm_eff
    Zout = par(RD, ro)
    return Av, Zin, Zout

def cd_params(gm, ro, RL, gmb=0.0, RG=np.inf):
    """
    Common-Drain = Source Follower (gate input, source output, drain AC-ground)
    Returns: Av, Zin, Zout
    """
    gm_eff = gm + gmb
    # Effective load seen by source (ro in parallel with RL because drain is AC-ground)
    RLp = par(RL, ro)
    Av = (gm_eff * RLp) / (1.0 + gm_eff * RLp)
    Zin = RG
    # Looking into source with gate/drain at AC-ground
    G_L = 1.0/RL if np.isfinite(RL) else 0.0
    gD = 1.0/ro if np.isfinite(ro) else 0.0
    Zout = 1.0 / (gm_eff + gD + G_L)
    return Av, Zin, Zout

# ---------- example parameters ----------
gm  = 10e-3        # 10 mS
ro  = 50e3         # 50 kΩ
RD  = 10e3         # 10 kΩ (load resistor to supply for CS/CG)
RG  = 1e9          # gate bias resistance (very large)
gmb_ratio = 0.2    # gmb/gm for body effect example
gmb = gmb_ratio * gm

# Sweep RL from 100 Ω to 100 kΩ
RLs = np.logspace(2, 5, 200)

# Compute sweeps
Av_cs, Zin_cs, Zout_cs = [], [], []
Av_cg, Zin_cg, Zout_cg = [], [], []
Av_cd, Zin_cd, Zout_cd = [], [], []

for RL in RLs:
    av, zin, zout = cs_params(gm, ro, RD, RL=RL, RG=RG)
    Av_cs.append(av);  Zin_cs.append(zin);  Zout_cs.append(zout)
    av, zin, zout = cg_params(gm, ro, RD, RL=RL, gmb=gmb)
    Av_cg.append(av);  Zin_cg.append(zin);  Zout_cg.append(zout)
    av, zin, zout = cd_params(gm, ro, RL=RL, gmb=gmb, RG=RG)
    Av_cd.append(av);  Zin_cd.append(zin);  Zout_cd.append(zout)

Av_cs = np.array(Av_cs); Av_cg = np.array(Av_cg); Av_cd = np.array(Av_cd)
Zout_cs = np.array(Zout_cs); Zout_cg = np.array(Zout_cg); Zout_cd = np.array(Zout_cd)

# ---------- print a few operating points ----------
def snapshot(RL_pick):
    acs, zics, zocs = cs_params(gm, ro, RD, RL=RL_pick, RG=RG)
    acg, zicg, zocg = cg_params(gm, ro, RD, RL=RL_pick, gmb=gmb)
    acd, zizd, zozd = cd_params(gm, ro, RL=RL_pick, gmb=gmb, RG=RG)
    print(f"\n=== RL = {as_ohm(RL_pick)} ===")
    print(f"CS: Av={acs:.2f}, Zin≈{as_ohm(zics)}, Zout≈{as_ohm(zocs)}")
    print(f"CG: Av={acg:.2f}, Zin≈{as_ohm(zicg)}, Zout≈{as_ohm(zocg)}")
    print(f"CD: Av={acd:.3f}, Zin≈{as_ohm(zizd)}, Zout≈{as_ohm(zozd)}")

print("Example small-signal parameters:")
print(f"gm={gm*1e3:.2f} mS, ro={as_ohm(ro)}, RD={as_ohm(RD)}, gmb={gmb*1e3:.2f} mS")

for RL_pick in [1e3, 10e3, np.inf]:
    snapshot(RL_pick)

# ---------- Plot 1: |Av| vs RL (one chart, log axes) ----------
plt.figure(figsize=(7,5))
plt.loglog(RLs, np.abs(Av_cs), label="CS |Av|")
plt.loglog(RLs, np.abs(Av_cg), label="CG |Av|")
plt.loglog(RLs, np.abs(Av_cd), label="CD |Av|")
plt.xlabel("Load resistance RL [Ω]")
plt.ylabel("|Av|")
plt.title("Voltage gain magnitude vs RL (CS/CG/CD)")
plt.grid(True, which="both", alpha=0.3)
plt.legend()
plt.show()

# ---------- Plot 2: Zout vs RL (one chart, log axes) ----------
plt.figure(figsize=(7,5))
plt.loglog(RLs, Zout_cs, label="CS Zout")
plt.loglog(RLs, Zout_cg, label="CG Zout")
plt.loglog(RLs, Zout_cd, label="CD Zout")
plt.xlabel("Load resistance RL [Ω]")
plt.ylabel("Output impedance [Ω]")
plt.title("Output impedance vs RL (CS/CG/CD)")
plt.grid(True, which="both", alpha=0.3)
plt.legend()
plt.show()

カレントミラー回路 ─ 要点ぜんぶ乗せ解説

0) 何をする回路?

基準電流 $I_{\rm REF}$ を“鏡映”して、別の端子に同じ電流(あるいは比率を掛けた電流)を流す回路。
アナログICの バイアス生成/電流分配/電流モード演算/DAC で多用されます。


1) バイポーラ(BJT)の基本

  • ダイオード接続の $Q_{\rm REF}$ でベース–エミッタ電圧 $V_{BE}$ を作り、同じ $V_{BE}$ を与えたコピー素子 $Q_i$ に同じ電流を流す。

  • 面積比(エミッタ面積)でスケーリング:

    $$
    I_i=\frac{I_{S,i}}{I_{S,\rm REF}},I_{\rm REF}=\frac{A_i}{A_{\rm REF}},I_{\rm REF}
    $$

  • Early 効果(有限の $r_o$)で電圧依存誤差が出る:
    $I \approx I_0(1+V_{CE}/V_A)$ → $\Delta I/I \approx (V_{\rm out}-V_{\rm ref})/V_A$。


2) MOS の基本ミラー

長チャネル近似・飽和領域:

$$
I_D=\tfrac{1}{2}\mu_n C_{\rm ox}\frac{W}{L}(V_{OV})^2(1+\lambda V_{DS}),\quad V_{OV}=V_{GS}-V_{TH}
$$

  • ダイオード接続 $M_1$ で $V_{GS}$ を作り、同寸法 $M_2$ に同じ $V_{GS}$ を与えると
    飽和($V_{DS}\ge V_{OV}$)の範囲で $I_{\rm OUT}\approx I_{\rm REF}$。

  • サイズ比でスケーリング

    $$
    I_{\rm OUT}= \underbrace{\frac{(W/L)2}{(W/L)1}}{\alpha}, I{\rm REF}
    $$

  • コンプライアンス電圧(最低出力電圧)

    $$
    V_{\rm out,min}\approx V_{OV,{\rm out}} \quad(\text{単純ミラー})
    $$

電圧依存誤差(チャネル長変調)

$$
I\propto (1+\lambda V_{DS})\ \Rightarrow\
\frac{\Delta I}{I}\approx \lambda,(V_{\rm out}-V_{\rm ref})
$$

→ 出力抵抗 $r_o=1/(\lambda I)$ が有限なほど電圧で電流が“揺れる”。


3) 複数コピー/和と定数倍

  • 同じゲート電圧を複数の MOSに配れば,
    それぞれ $\alpha_j=(W/L)j/(W/L){\rm ref}$ 倍の電流を同時に生成可能。
  • 並列に束ねれば整数倍電流:和はキルヒホッフ(電流則)で自動的に足し算。
    例:3 本の同一ミラーを並列 ⇒ $3I_{\rm REF}$。

4) カレントステア型 DAC の肝

各分岐を 1, 2, 4, 8,… とバイナリ重みでスケーリングし、
スイッチで出力ノードに流すか捨てるかを切替。
理想なら $V_{\rm out}=R\cdot (\sum 2^k I)$。
(実機ではミスマッチ/グリッチ抑制のため、共通センタ配置やセグメント化を使う)


5) 誤差源と対策(MOS/BJT 共通)

  • VDS(VCE)差:$\lambda$(Early)による電圧依存 → カスコードで抑圧。
  • 寸法・VTH/IS ミスマッチ:ランダム $\propto 1/\sqrt{WL}$ → 面積を大きく共通センタ配置。
  • 温度:$\mu$, $V_{TH}$, $I_S$ が温度依存 → **基準回路(PTAT/CTAT の合成)**で補償。
  • コンプライアンス不足:出力が飽和に落ちる → ヘッドルーム確保 or ワイドスイング・カスコード

6) カスコード・カレントミラー(縦積で高抵抗化)

目的

  • コピー素子の $V_{DS}$ をほぼ一定に固定し、$\lambda$ による電圧依存を抑える
  • 出力抵抗を大幅に増加 → 電流の理想性が上がる

小信号での効果

(左右対称・長チャネルを仮定)

$$
r_{\text{out,cas}}\ \approx\ g_m,r_o^2\ ;(=\ A_v\cdot r_o)\ \gg r_o
$$

スライドの式と対応:
$r \simeq g_m r_{D} r_{D2} = A_v r_D$。
直感:上段トランジスタの増幅作用で、下段の電流変化を“打ち消す帰還”が掛かる。

ヘッドルーム(最小出力電圧)

  • 単純カスコード(NMOSミラー):

    $$
    V_{\rm out,min}\ \approx\ V_{OV,{\rm cas}}+V_{OV,{\rm out}}\ \ (\simeq 2V_{OV})
    $$

    これがデメリット(電源電圧に余裕が要る)。

  • ワイドスイング・カスコード/レギュレーテッド・カスコード(RGC)
    バイアスの作り方やアンプで $V_{DS}$ をより低ヘッドルームで規定し、
    高 $r_{\rm out}$低ヘッドルーム を両立。


7) 設計レシピ(MOS 例)

  1. 目標電流 $I_{\rm REF}$ と許容 $V_{\rm out,min}$ を決める。
  2. $V_{OV}$ を選ぶ(ノイズ/スピード/ヘッドルームのトレードオフ、0.15–0.25 V が実用域)。
  3. $(W/L){\rm ref}=\dfrac{2I{\rm REF}}{\mu C_{\rm ox} V_{OV}^2}$ でデバイス寸法を計算。
  4. スケール比 $\alpha=(W/L){\rm out}/(W/L){\rm ref}$ を与えて出力電流設定。
  5. $\lambda$ を小さくするため 長めの L を選択(→ $r_o\uparrow$)。
  6. カスコードを使うなら Vbias を用意し、各素子が必ず飽和するよう電位関係をチェック。
  7. 版下は共通センタ/ダミーでミスマッチ抑制。

8) 使い方のコツ

  • 電流の加算・減算は配線だけ(KCL)→ 電流モード演算に向く。
  • 入力/出力ノードの電圧が設計通りに保てるか常に確認(コンプライアンス)。
  • 大きなスイングや負荷容量がある場合は、ミラーの出力抵抗 × 負荷容量が落ち、応答が遅くなる → バッファや位相補償を検討。

1) 基本モデルと電流の分担

テール電流源 $I_0$ を持つ NMOS 差動対(左右のトランジスタの小信号 $g_m, r_o$ は等しい)。

  • バイアス時:
    $I_{D1}=I_{D2}=I_0/2$

  • 微小差動入力
    $v_{id}=v_{in1}-v_{in2}$ を加えると,
    テール電流源の小信号抵抗が十分大(理想)⇒ソース節点は交流的に固定
    したがってドレイン電流の変化は

    $$
    \Delta I_{D1}=+\frac{g_m}{2},v_{id},\qquad
    \Delta I_{D2}=-\frac{g_m}{2},v_{id}
    $$

    (スライドの $I_{D1}=I_0/2+\Delta I_D,\ I_{D2}=I_0/2-\Delta I_D$ に一致)


2) 利得(抵抗負荷の例)

(A) 差動利得(fully-differential 出力)

$$
v_{o1}=-\Delta I_{D1},R_D,\quad
v_{o2}=-\Delta I_{D2},R_D
$$

$$
\boxed{;A_{vd}\equiv\frac{v_{o1}-v_{o2}}{v_{id}}
=-g_m,R_D;}
$$

シングルエンド CS と同じ大きさ

(B) シングルエンド出力(片側だけ観測)

$$
\boxed{;A_{v,\text{single}}=\frac{v_{o1}}{v_{id}}
=-\frac{g_m R_D}{2};}
$$

(差動出力の半分になるのが定石)

(C) 能動負荷(ミラー等)を使うと

抵抗 $R_D$ の代わりに小信号出力抵抗を使えばよい:

$$
\boxed{A_{vd}\approx g_m,(r_{o,\text{N}}\parallel r_{o,\text{load}})}
$$


3) 入出力インピーダンス

  • 入力(MOS ゲート)
    $\boxed{Z_{in}\to\infty}$(実際はゲート抵抗や容量が支配)
  • 出力(各ドレイン)
    $\boxed{Z_{out}\approx R_D\parallel r_o}$(能動負荷ならその並列)

4) 同相入力と CMRR

同相入力 $v_{ic}$(両ゲートに同じ変化):
理想テール電流源(小信号抵抗 $r_{tail}\to\infty$)なら

$$
\Delta I_{D1}\approx \Delta I_{D2}\approx 0 \Rightarrow A_{vc}\approx 0
$$

現実には有限の $r_{tail}$ により少し漏れる:

$$
\boxed{;A_{vc}\ \approx\ -,\frac{R_D\parallel r_o}{2,r_{tail}};}
$$

(オーダ感:テールが硬いほど小さくなる)

同相除去比(重要!)

$$
\boxed{;\text{CMRR}\equiv\left|\frac{A_{vd}}{A_{vc}}\right|
\approx \frac{2,g_m,r_{tail}}{1+\frac{r_{tail}}{R_D\parallel r_o}};}
$$

理想では $\to\infty$。


5) 実務の勘所(NMOS 差動対)

  • トランスコンダクタンス
    $g_m=\dfrac{2I_D}{V_{OV}}$(各アーム $I_D=I_0/2$)

  • 差動入力感度
    小信号 $\Rightarrow$ 片側の電流勾配は $g_m/2$。

  • 入力同相範囲(ICMR)
    NMOS差動対(ソース側電流源 $M_{\rm tail}$)なら

    $$
    \begin{aligned}
    &\text{下限}\ \approx V_{SS}+V_{OV,\rm tail}+V_{GS,\rm in} \
    &\text{上限}\ \approx V_{DD}-V_{OV,\rm load}-V_{OV,\rm in}
    \end{aligned}
    $$

    (両トランジスタ・負荷・テールが飽和を保てる電位を確保)

  • 出力スイング
    片側出力は $\approx [V_{OV,\rm out}\ ,\ V_{DD}-V_{OV,\rm load}]$ の範囲で線形。


6) カスコードや能動負荷を入れると

  • 能動負荷:$r_o$ が大→ $A_{vd}\uparrow$
  • カスコード差動対:出力抵抗 $\sim g_m r_o^2$ まで上げられ、
    同相利得も低下(CMRR 向上)。ただしヘッドルームが増える。

7) 1分設計レシピ(抵抗負荷・片側出力)

  1. 目標利得 $A_{v,\text{single}}$ と電源/スイングから $R_D$ を仮置き。
  2. テール電流 $I_0$ と $V_{OV}$ を選び、
    $g_m=2(I_0/2)/V_{OV}=I_0/V_{OV}$。
  3. 利得チェック:$-g_mR_D/2$ が目標か?
    足りなければ $R_D\uparrow$(ただしスイング↓)か $V_{OV}\downarrow$(速度↓)か能動負荷へ。
  4. CMRR が不足→ テールの $r_{tail}$ を大きく(良い電流源)、左右マッチング、レイアウト最適化。

8) まとめ(要点)

  • 差動利得(差→差) $\boxed{A_{vd}=-g_mR_D}$(片側出力は半分)。
  • 同相利得はテールの硬さで決まり、理想なら 0。
  • CMRR は $\sim g_m r_{tail}$ に比例して改善。
  • 能動負荷・カスコードで大利得&高 CMRR、ただしヘッドルームに注意。

このセットを覚えておけば、スライドの各式・図は全部読めます。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?