3.1 基準電源(Reference Voltage Source)
(1) 基準電圧生成
V_REF1 = V_TNE + |V_TND| * sqrt( μ_nD * (W1/L1) / ( μ_nE * (W2/L2) ) )
- V_TNE : エンハンスメント型MOSのしきい値電圧 [V]
- V_TND : ディプレッション型MOSのしきい値電圧 [V]
- μ_n : キャリア移動度 [cm²/V·s]
- W/L : トランジスタのチャネル幅長比
解説:
2種類のMOSを組み合わせ、V_Tの差を基準電圧として抽出する。
μ・W/L比により電流バランスが決まり、基準電圧が安定化する。
(2) 温度係数
∂V_REF1/∂T = (∂V_TNE/∂T) + (∂|V_TND|/∂T) * sqrt( μ_nD*(W1/L1) / ( μ_nE*(W2/L2) ) )
解説:
しきい値電圧の温度依存性(負傾向)と移動度補正(正傾向)が打ち消し合うように設計する。
温度ドリフト最小化が目的。
(3) トリミング条件(Trim Resistor)
R_tr = R1 * (1/V_IN - 1) [V_REF1V0 < 1V]
R_tr = R1 * (V_IN / 1 - 1) [V_REF1V0 > 1V]
数値例:
R1 = 216kΩ, V_IN = 0.7V → R_tr = 92.6kΩ
R1 = 216kΩ, V_IN = 1.2V → R_tr = 43.2kΩ
解説:
チップ製造ばらつきに対し、R_trを変更して1V基準を補正する。
(4) トリミング抵抗構成
R_tr = r * (2^n - 1)
例:r = 422Ω, n = 8 → R_tr = 107.6kΩ
→ ±0.5% 調整可能。
3.2 基準電流源(Reference Current Source)
(1) 基本式
I_REF = ΔV_GS / R_X
意味: ΔV_GS(2素子間のV_GS差)を抵抗で変換して一定電流を生成。
(2) トランジスタ電流式
I1 = 0.5 * μ_nD * C_ox * (W1/L1) * (V_GS1 - V_TND)^2
I2 = 0.5 * μ_nE * C_ox * (W2/L2) * (V_GS2 - V_TNE)^2
(3) カレントミラー比
I1/I2 = [ μ_nD * (W1/L1) * (V_GS1 - V_TND)^2 ] / [ μ_nE * (W2/L2) * (V_GS2 - V_TNE)^2 ]
解説:
ミラー構成で電流比を制御。
ΔV_GSとサイズ比によりI_REFを規定。
(4) トリミング設計
ΔV_GS = 60mV ±20mV
R_X = ±25%
→ 誤差範囲:I_REF ±66%
→ トリミング補正後:I_REF = 2μA ±12.5%
(5) 抵抗値例
R1 = 13.5kΩ
r = 1.688kΩ
R_X = R1 + R_tr = 53.4kΩ → R_tr = 39.9kΩ
トリミング段数 n = 5 → R_tr = 52.3kΩ
3.3 レギュレータ回路(Voltage Regulator VBI)
(1) ポール・ゼロ周波数
ω_P,FB = 1 / ( C_F * (r_oH // r_oL) )
ω_P,VBI = 1 / ( C_L * (R_L // R_o) )
ω_P,L = 1 / ( C_P * (R1 // R2) )
|ω_Z,L| = 1 / ( C_P * R2 )
ω_Z,ESR = 1 / ( C_L * R_ESR )
単位: [rad/s]
解説: ループの極と零点を配置し、安定性を確保。
(2) 動作条件例
V* = 5V
C_L = 1μF
R_ESR = 10mΩ〜1Ω
I_REG1 = 0〜1mA
(3) 出力段条件
I_d ≤ 1.5mA(外部+内部負荷)
→ 設計上は I_d ≈ 3mA として安全余裕を確保
V_FB1 = 1V
(4) 動作領域の確認
V_P = V_REF1V0 - V_TN1 = 1.0V - 0.35V = 0.65V
V_DS6 = V* - V_BI = 4.7V - 4.0V = 0.7V
→ M6 は非飽和領域 (V_DS6 < V_TP,H)
3.4 位相補償と安定性
ポール配置の考え方:
- P点(高域ポール)を十分高く設定
- 出力ポールとESRゼロを分離
- 位相余裕を45〜60°確保
ループゲイン測定:
帰還点Rを開放して測定。ボード線図で確認。
設計パラメータまとめ
V_REF1V0 = 1.000V ±0.5%
I_REF = 2μA ±12.5%
V_BI = 4.0V
I_REG1_max = 1mA
Phase Margin ≥ 45°
まとめ(定性的説明)
-
基準電圧源
しきい値電圧の差を用いて温度安定な電圧を生成。 -
基準電流源
ΔV_GSを抵抗変換し、カレントミラーで複製。 -
レギュレータ
多段帰還で安定化し、トリミングと位相補償で高精度化。 -
設計目的
製造ばらつき・温度変動・外部負荷変化に対し安定な基準を供給する。
# ===============================================================
# Program Name: reference_voltage_current_regulator_analysis.py
# Creation Date: 20251030
# Overview: Compute and plot reference voltage, current, and regulator stability
# Usage: Run to calculate V_REF, I_REF, pole-zero frequencies, and plot Bode gain-phase
# ===============================================================
import numpy as np
import matplotlib.pyplot as plt
# ==== Constants ====
mu_nD = 450e-4 # electron mobility [m^2/V·s]
mu_nE = 500e-4
W1, L1 = 10e-6, 2e-6 # transistor 1 size [m]
W2, L2 = 8e-6, 2e-6 # transistor 2 size [m]
V_TNE = 0.7 # threshold voltage enhancement [V]
V_TND = -0.4 # threshold voltage depletion [V]
# ==== Reference Voltage ====
V_REF1 = V_TNE + abs(V_TND) * np.sqrt(mu_nD * (W1/L1) / (mu_nE * (W2/L2)))
print("Reference Voltage V_REF1 =", V_REF1, "[V]")
# ==== Temperature Coefficient (symbolic form approximated) ====
dV_TNE_dT = -2e-3 # [V/°C]
dV_TND_dT = 1.5e-3 # [V/°C]
temp_coeff = dV_TNE_dT + dV_TND_dT * np.sqrt(mu_nD*(W1/L1)/(mu_nE*(W2/L2)))
print("Temperature Coefficient dV_REF1/dT =", temp_coeff, "[V/°C]")
# ==== Trim resistor examples ====
R1 = 216e3
V_IN1, V_IN2 = 0.7, 1.2
R_tr_low = R1 * (1/V_IN1 - 1)
R_tr_high = R1 * (V_IN2 / 1 - 1)
print("\nTrim resistor for <1V:", R_tr_low, "[Ω]")
print("Trim resistor for >1V:", R_tr_high, "[Ω]")
# ==== Reference Current ====
delta_VGS = 60e-3 # [V]
R_X = 53.4e3 # [Ω]
I_REF = delta_VGS / R_X
print("\nReference Current I_REF =", I_REF, "[A]")
# ==== Current Mirror Ratio ====
V_GS1, V_GS2 = 0.9, 0.8
I_ratio = (mu_nD*(W1/L1)*(V_GS1 - V_TND)**2) / (mu_nE*(W2/L2)*(V_GS2 - V_TNE)**2)
print("Current mirror ratio I1/I2 =", I_ratio)
# ==== Regulator Parameters ====
C_F = 5e-12 # [F]
C_L = 1e-6 # [F]
C_P = 10e-12 # [F]
R1 = 100e3
R2 = 100e3
R_L = 1e3
R_o = 50e3
r_oH = 80e3
r_oL = 50e3
R_ESR = 0.1
omega_P_FB = 1 / (C_F * ((r_oH * r_oL) / (r_oH + r_oL)))
omega_P_VBI = 1 / (C_L * ((R_L * R_o) / (R_L + R_o)))
omega_P_L = 1 / (C_P * ((R1 * R2) / (R1 + R2)))
omega_Z_L = 1 / (C_P * R2)
omega_Z_ESR = 1 / (C_L * R_ESR)
print("\nPole-Zero Frequencies [rad/s]:")
print("ω_P,FB =", omega_P_FB)
print("ω_P,VBI =", omega_P_VBI)
print("ω_P,L =", omega_P_L)
print("|ω_Z,L| =", omega_Z_L)
print("ω_Z,ESR =", omega_Z_ESR)
# ==== Frequency Response (Bode plot model) ====
freq = np.logspace(3, 8, 1000)
s = 1j * 2 * np.pi * freq
# Simplified loop gain model: one dominant pole + ESR zero
A0 = 80 # DC gain
omega_p = omega_P_VBI
omega_z = omega_Z_ESR
H = A0 * (1 + s/omega_z) / (1 + s/omega_p)
mag = 20 * np.log10(abs(H))
phase = np.angle(H, deg=True)
# ==== Plot ====
plt.figure(figsize=(8, 6))
plt.subplot(2,1,1)
plt.semilogx(freq, mag)
plt.title("Regulator Loop Gain (Bode Plot)")
plt.ylabel("Magnitude [dB]")
plt.grid(True, which="both")
plt.subplot(2,1,2)
plt.semilogx(freq, phase)
plt.xlabel("Frequency [Hz]")
plt.ylabel("Phase [deg]")
plt.grid(True, which="both")
plt.tight_layout()
plt.show()
# ==== Summary ====
print("\n--- Summary ---")
print(f"V_REF1 = {V_REF1:.3f} V")
print(f"I_REF = {I_REF*1e6:.2f} μA")
print(f"dV_REF1/dT = {temp_coeff*1e3:.3f} mV/°C")
print(f"Phase Margin target ≥ 45°")
このコードは以下を計算・可視化する:
- 基準電圧 V_REF1 と温度係数
- トリミング抵抗 R_tr の設計例
- 基準電流 I_REF とカレントミラー比
- レギュレータの極・零点 (ω_P, ω_Z)
-
ボード線図(利得・位相) を
matplotlibで描画