計算手順

電源制御ワークベンチが、何を・どの順で計算しているか

このページは 電源制御ワークベンチ の中身を全部開けて見せるものだよ。式だけでなく、なぜその式なのか、どの近似の上に立っているのかも一緒に置いてある。道具が出した数字を疑いたくなった時に、ここへ戻って確かめられるように。

各節の終わりに、実装のどの関数にあたるかを書いてある。index.html を開いて検索すれば、式とコードが一対一で並ぶ。図はすべて、この道具自身に計算させて描いたもので、手描きの概念図ではない。だから図と道具の挙動は食い違わない。

目次
  1. この道具が見ているもの
  2. なぜデューティ比を固定できないか
  3. なぜ小信号で考えるのか
  4. 動作点を決める
  5. 状態平均化
  6. 電力段 Gvd(s) の構造
  7. 右半平面零点
  8. 検出 Kv と変調 Fm
  9. 補償器 Gc(s)
  10. ループゲインと安定余裕
  11. 0dB 交差を数える
  12. 自動配置と自己検算
  13. 実部品 R, C へ落とす
  14. 離散化と時間応答
  15. ディジタルの遅れ
  16. MLCC の実効容量
  17. 設計の流れ
  18. 実機でループを測る
  19. 混乱しやすい所
  20. 通しの数値例
  21. 扱っていないもの

01この道具が見ているもの

電源の制御は、突き詰めると一つの負帰還ループだよ。出力電圧を測り、目標との差を作り、その差から操作量を決め、電力段がそれを電圧に変える。ぐるっと回って戻ってくる。

制御ループ全体。比較点の符号(+ と −)が負帰還であることを表している。設計者が自由に置けるのは Gc(s) だけで、他の3つは部品と実装で先に決まっている。

この一周の強さを表すのがループゲイン $T(s)$ で、この道具が最終的に見ているのは全部これ。

$$T(s) \;=\; K_v \cdot G_c(s) \cdot F_m \cdot G_{vd}(s) \cdot e^{-sT_d}$$
意味どこで決まるか
$K_v$出力電圧 → 検出電圧分圧抵抗
$G_c(s)$誤差 → 制御電圧設計者が置く
$F_m$制御電圧 → デューティ比PWMのランプ振幅
$G_{vd}(s)$デューティ比 → 出力電圧電力段(L, C, ESR)
$e^{-sT_d}$ADC・演算・PWM更新の遅れ実装

だから補償器の設計とは、すでに決まっている $G_{vd}$, $K_v$, $F_m$ を見て、$G_c$ をどう置けば安定でかつ十分速いループになるかを決める作業ということになる。

実装:loopEval() がこの掛け算をそのまま複素数でやっている。

02なぜデューティ比を固定できないか

降圧コンバータなら、理想的には $V_o \approx D\,V_i$ だから、12V から 5V が欲しければ $D = 5/12 \approx 0.417$ に固定すればよさそうに見える。ところがそうはいかない。

だから出力を測って $D$ を増減させる。ここまでは素直な話。問題はその次で、「低ければ上げる」という比例的な反応だけでは足りない。

デューティ比を変えても出力電圧は瞬時には変わらないからだよ。インダクタ電流は急に変われないし、コンデンサ電圧も急には動かない。LCフィルタは共振も持つ。操作してから結果が出るまでに遅れがある系を触っている。

遅れを無視して強く反応すると、出力は目標を行き過ぎる。行き過ぎを戻そうとしてまた強く反応し、また行き過ぎる。これが繰り返されると発振する。だから同時に4つを満たす必要が出てくる。

出力電圧を目標に近づける / 負荷や入力の変動から速く戻す / 発振しない余裕を持つ / ノイズに反応しすぎない

外乱と観測雑音

実際に困るのは、基準に追従させることより、勝手に出力を動かしてくる要因のほうだよ。小信号では、出力はこう書ける。

$$\hat v_o(s) \;=\; G_{vd}(s)\,\hat d(s) \;+\; G_{vv}(s)\,\hat v_i(s) \;-\; Z_o(s)\,\hat i_o(s)$$

$G_{vv}$ は入力電圧変動の伝わり方、$Z_o$ は出力インピーダンス(負荷電流が動いたとき出力がどれだけ動くか)。閉ループにすると、どちらもおおよそ

$$G_{vv,\mathrm{cl}} \approx \frac{G_{vv}}{1+T(s)},\qquad Z_{o,\mathrm{cl}} \approx \frac{Z_o}{1+T(s)}$$

のように抑えられる。つまり$|T|$ が大きい周波数でだけ外乱は抑えられる。これがループゲインを見る理由そのもので、$T$ を大きく保てる帯域=制御が効く範囲になる。

ただし、測定に混ざるノイズ $n(s)$ も誤差として同じ入口から入ってくる。ループはそれが本物の変動かノイズかを区別できない。

$$e(s) = v_{ref}(s) - K_v v_o(s) - n(s)$$

だから帯域を上げると外乱には強くなるが、同時にノイズにも反応しやすくなる。ここは正面からのトレードオフで、制御で見るべき現象と、レイアウトや実装で抑えるべき現象を分けるのが実務上の答えになる。

03なぜ小信号で考えるのか

スイッチング電源は、制御対象としてはかなり扱いにくい。ONとOFFで回路のトポロジが変わり、L と C がエネルギーを保持し、$D$ と $V_o$ の関係は動作点に依存し、昇圧型には逆応答がある。これを全部そのまま時間領域で追いかけても、補償器設計に使える形にはならない。

そこで動作点を一つ決めて、そこから少しだけ動かしたときの応答だけを見る。各変数を定常値と微小変動に分ける。

$$v_o(t) = V_o + \hat v_o(t), \qquad d(t) = D + \hat d(t), \qquad \dots$$

非線形な状態方程式 $\dot x = f(x,u)$ を定常点まわりでテイラー展開し、一次項だけ残す。

$$\dot{\hat x} = A\hat x + B\hat u, \qquad A = \left.\frac{\partial f}{\partial x}\right|_{X,U},\quad B = \left.\frac{\partial f}{\partial u}\right|_{X,U}$$

このとき $\hat d(t)\,\hat v_i(t)$ のような微小量どうしの積は二次の微小項として捨てる。これで重ね合わせが効く線形モデルになり、「デューティだけ動かしたら」「入力だけ動かしたら」を別々に見られるようになる。

守備範囲を忘れないこと。小信号モデルが答えられるのは、定常動作点近傍の安定性と、小〜中程度の応答まで。起動、短絡、過電流制限、PWM飽和、DCMへの遷移、パルススキップ、大振幅の負荷ステップは、この枠の外にある。

04動作点を決める

以降の伝達関数は全部この動作点まわりの線形化だから、ここがずれると後ろが全部ずれる。

降圧(Buck)

$$D = \frac{V_o}{V_i}, \qquad \Delta I_L = \frac{(V_i - V_o)\,D}{L\,f_{sw}}, \qquad \Delta V_o = \frac{\Delta I_L}{8\,C_o f_{sw}} + r_C\,\Delta I_L$$ $$f_{LC} = \frac{1}{2\pi\sqrt{L C_o}}, \qquad f_{z,ESR} = \frac{1}{2\pi\, r_C C_o}$$

リップルの第1項は、三角波のインダクタ電流をコンデンサが積分したときの電圧振幅。第2項はその電流が ESR に落とす電圧。セラミックなら第1項が、電解なら第2項が支配的になりやすい。

昇圧(Boost)

$$D' = \frac{V_i}{V_o},\quad D = 1-D', \qquad \Delta I_L = \frac{V_i D}{L f_{sw}}, \qquad \Delta V_o = \frac{I_o D}{C_o f_{sw}} + r_C\left(I_L + \tfrac{\Delta I_L}{2}\right)$$ $$f_{LC} = \frac{D'}{2\pi\sqrt{L C_o}}, \qquad f_{z,RHP} = \frac{D'^2 R_{load}}{2\pi L}$$

昇圧のリップル第1項が降圧と形が違うのは、出力コンデンサが単独で負荷を支えるのがスイッチON期間だけだから。その時間が $D T_{sw}$ なので、放電量は $I_o D / f_{sw}$ になる。

CCM か DCM か

インダクタ電流が谷で 0 を切る(平均電流が $\Delta I_L/2$ を下回る)と DCM に入る。この道具の伝達関数は全部 CCM 前提なので、境界を割ったら警告を出して「ここから先はモデルの外」と伝える。数字は出続けるが、信じてはいけない。

実装:operatingPoint() / 警告は opWarnings()

05状態平均化

スイッチング電源は、ON期間とOFF期間で回路の形そのものが変わる。だからそのままでは一つの伝達関数で書けない。それぞれの期間で状態方程式を立てる。

$$\dot x = A_{on}x + B_{on}u \qquad\text{(ON)}, \qquad \dot x = A_{off}x + B_{off}u \qquad\text{(OFF)}$$

状態変数はエネルギーを溜める2つ、つまりインダクタ電流とコンデンサ電圧を取る。この2つが次の瞬間の挙動を決めているから。

$$x = \begin{bmatrix} i_L \\ v_C \end{bmatrix}$$

1周期の中で ON が $D$、OFF が $(1-D)$ を占めることを使って重み付き平均する。

$$\dot x = \big[D A_{on} + (1-D) A_{off}\big] x + \big[D B_{on} + (1-D) B_{off}\big] u$$

ここに $x = X+\hat x$, $u = U+\hat u$, $d = D+\hat d$ を代入して線形化する。定常点では $0 = A(D)X + B(D)U$ が成り立つので直流項は消え、一次の変動だけが残る。

$$\dot{\hat x} = A\hat x + B\hat u + \Big[(A_{on}-A_{off})X + (B_{on}-B_{off})U\Big]\hat d$$

最後の項が大事で、デューティ比を揺らすことが、ON回路とOFF回路の「差」を通じて系を励起することを表している。これがあるから $G_{vd}$ が生まれる。ラプラス変換して

$$\hat x(s) = (sI-A)^{-1}\big(B\hat u(s) + B_d \hat d(s)\big)$$

出力との比を取れば $G_{vd}$, $G_{vv}$, $Z_o$ が出てくる。

状態平均化は「スイッチングの細かい波形を消している」のではなく、「制御で扱う周波数ではスイッチング1周期の平均で十分言い表せる」という近似だよ。だからこのモデルは $f_{sw}$ の近くでは信用できないし、サブハーモニック発振やパルススキップは別途考える必要がある。

06電力段 Gvd(s) の構造

降圧の電力段。SWノードの電圧は $V_i$ と 0 の間をデューティ比で行き来し、LC がそれをならして直流を作る。制御が直接動かせるのはこの行き来の比率だけ。

CCM の代表的なコンバータでは、$G_{vd}$ は概念的にこう書ける。

$$G_{vd}(s) = K_{vd,0}\;\frac{\left(1-\dfrac{s}{\omega_{z,RHP}}\right)\left(1+\dfrac{s}{\omega_{z,ESR}}\right)}{1+\dfrac{s}{Q\,\omega_0}+\left(\dfrac{s}{\omega_0}\right)^2}$$
要素意味
$K_{vd,0}$直流ゲイン。降圧なら $\approx V_i$、昇圧なら $\approx V_i/(1-D)^2$
$\omega_0$LC の固有角周波数。ここで位相が一気に落ちる
$Q$二次系の鋭さ。理想Buck・抵抗負荷なら $\approx R_{load}\sqrt{C/L}$
$\omega_{z,ESR}$ESR による左半平面零点。位相を持ち上げる方向に効く
$\omega_{z,RHP}$昇圧・昇降圧にだけ現れる右半平面零点

降圧には RHP 零点が無いので、その項は消える。

この道具が実際に使っている形

上の閉じた式を書き下すこともできるけれど、この道具はあえて状態空間のまま数値で評価している。理由は ESR と $r_L$ を素直に行列へ入れられるから。閉形式にすると、これらを含めた途端に式が汚くなって書き間違える。

降圧の場合、$a = 1 + r_C/R_{load}$ として

$$A = \begin{bmatrix} -\dfrac{r_L + r_C/a}{L} & -\dfrac{1/a}{L} \\[6pt] \dfrac{1 - r_C/(aR)}{C_o} & -\dfrac{1}{aRC_o} \end{bmatrix},\quad B_d = \begin{bmatrix} V_i/L \\ 0 \end{bmatrix},\quad C_o^{\top} = \begin{bmatrix} r_C/a \\ 1/a \end{bmatrix}$$ $$G_{vd}(j\omega) = C_o^{\top}\,(j\omega I - A)^{-1} B_d + D_{direct}$$

出力コンデンサが1種類とは限らない

上の形はコンデンサが1個+ESRが1個のときのもの。でも実際の基板では、電解と積層セラミックを混ぜて載せることがよくある。この場合、合成して1つの C と 1つの ESR に潰すとまるで足りない

そこで枝 $k$ を「容量 $C_k$ と等価直列抵抗 $r_k$ の直列」とし、状態を $i_L$ と各枝のコンデンサ電圧 $v_{C k}$ に取る。枝が $n$ 本なら $n+1$ 状態になる。出力ノードの電圧はキルヒホッフから

$$v_o\left(\sum_k \frac{1}{r_k} + \frac{1}{R}\right) = D'\,i_L + \sum_k \frac{v_{Ck}}{r_k}$$ $$\frac{dv_{Ck}}{dt} = \frac{v_o - v_{Ck}}{r_k C_k}$$

で決まる(降圧では $D'=1$)。状態が増えるので逆行列は行列式では書けず、各周波数点で $(j\omega I - A)x = B_d$ を複素数の連立一次方程式として解いている(部分ピボット付きのガウス消去)。枝が1本のときは、この一般形が上の2状態モデルと厳密に一致する。

これは実際に外した所だよ。公開されている設計例(電解 220µF + セラミック 22µF + 0.1µF×50 の混載)と突き合わせたとき、補償器の極零も LC共振も分圧比も全部合っているのに、位相余裕だけ 32° と 60° で 28° ずれた。原因は、この3種を単一の C と ESR に潰していたこと。クロスオーバ 17kHz でのコンデンサ群のインピーダンス位相は、3枝のままなら $-63°$、潰すと $-90°$——電解の ESR がちょうどクロスオーバで稼いでいた 27° を、合成した時に捨てていた。枝を持てるようにしたら資料の値に戻った。検証レポートのF節に残してある。

実装:plantSS() が枝の数に応じて行列を組み、ssEvalN() が各 $\omega$ で複素連立を解く。枝は capBranches() が取り出す。

ここが「教科書の理想式と数字が少し違う」理由でもある。損失ゼロの式で計算した位相余裕より、この道具のほうが少し高く出ることがある。ESR が二次系に減衰を足しているぶんで、ズレの向きまで含めて説明がつくなら、それは食い違いではなく前提の違いだよ。

07右半平面零点

昇圧の電力段。出力へ電流が流れるのは Q1 が OFF の間だけ。

昇圧型でデューティ比を増やすと、最終的には出力電圧は上がる。でも増やした直後には一度下がる。順序を追うとこうなる。

  1. $D$ を増やす
  2. OFF期間 $(1-D)T_{sw}$ が短くなる
  3. 出力側へ流れる電流の積分値が一時的に減る
  4. 出力コンデンサへの充電量が減り、$V_o$ が下がる
  5. その後インダクタ電流が増えていく
  6. 十分な電流が溜まって、ようやく $V_o$ が上昇へ転じる
-60-40-200204060101001k10k100k1Mfc 24.7 kHzGvd(s) 電力段T(s) ループ一周ゲイン [dB]-270-180-900101001k10k100k1M位相 [°]周波数 [Hz]PM = 62.7°
逆応答を実際に計算したもの。デューティ比を +0.05 した瞬間に出力が一度沈み、それから上がっていく。この「まず逆へ動く」性質が右半平面零点の正体。

周波数で見ると、右半平面零点 $\left(1-\frac{s}{\omega_z}\right)$ は

$$\left|1-j\frac{\omega}{\omega_z}\right| = \sqrt{1+\left(\frac{\omega}{\omega_z}\right)^2}, \qquad \angle\left(1-j\frac{\omega}{\omega_z}\right) = -\arctan\frac{\omega}{\omega_z}$$

となる。ゲインは普通の零点と同じように上がるのに、位相は逆に遅れる。ゲイン線図だけ見ていると「ここでゲインが持ち上がるからループを強くできそう」に見えて、位相線図では $-90°$ 方向へ食われている。昇圧型で位相線図を見ない設計が危ないのはこれが理由だよ。

なぜ極零相殺してはいけないか

補償器で打ち消そうとすると、$1/\left(1-\frac{s}{\omega_z}\right)$ を入れることになる。これは右半平面の極、つまり不安定極そのもの。逆ラプラス変換すれば

$$\mathcal{L}^{-1}\left[\frac{1}{1-s/\omega_z}\right] \propto e^{+\omega_z t}$$

という発散する成分を含んでいる。数学的にぴったり一致すれば入出力の上では消えたように見えるけれど、実回路では部品ばらつき・動作点・温度で必ずずれるから、わずかなズレで内部の発散モードが残る。

だから RHP 零点は消す対象ではなく、制御帯域を十分離して避ける制約として扱う。設計の出発点としては

$$f_c \;\lesssim\; \min\left(\frac{f_{sw}}{10},\; \frac{f_{z,RHP}}{5 \sim 10}\right)$$

を上限の候補に置く。これは普遍的な安定条件ではなくて、最終的にはループゲイン全体で判断する目安だよ。重負荷・高昇圧比・大きな L のどれもが $f_{z,RHP}$ を低い方へ動かす=制約がきつくなる方へ動かすので、最悪条件で確認するのが要点。

08検出 Kv と変調 Fm

出力電圧をそのまま基準電圧と比べることはできない(5V と 0.8V は比べられない)ので、分圧して落とす。

$$K_v = \frac{R_{btm}}{R_{top}+R_{btm}}, \qquad \text{整定する出力} = \frac{V_{ref}}{K_v}$$

順番が大事で、基準電圧は動かない定数、分圧比が出力電圧を決めている。「目標 5V」という数がどこかに置いてあるのではなく、基準電圧と検出電圧が釣り合う点が結果的に 5V になっている、という向きだよ。だから $R_{btm}$ を E系列に丸めた瞬間、出力は 5.000V ではなくなる。この道具はそれを波形に出す。

$K_v$ はループゲインに直接入るので、含め忘れるとループの絶対値がずれる。逆に、補償器の定義の中に分圧を含めている場合は二重に数えないように気をつける(→ 19節)。

PWM 変調ゲイン

補償器が出すのは電圧、電力段が受け取るのはデューティ比。単位が違うので換算が要る。

$$F_m = \frac{1}{V_{ramp(p\text{-}p)}}$$

ランプ振幅が 1Vp-p なら制御電圧 1V でデューティが 0→1 まで振れる。2Vp-p なら $F_m = 0.5$ で、ループゲインは 6dB 下がる。地味だが忘れやすい項で、落とすと机上と実機がランプ振幅ぶんずれる。

フィードバック節点のノイズ対策でコンデンサを足すのは、制御ループに極を1つ追加することと同じだよ。$\omega_p = 1/(R_{eq}C)$ で、たとえば $R_{eq}=1\,\mathrm{M\Omega}$, $C=0.1\,\mathrm{\mu F}$ なら $f_p \approx 1.6$Hz。電源の制御帯域に対して極端に低く、位相余裕を大きく削る。ノイズはまずレイアウトと実装で抑えて、ループの中に持ち込まないのが順番として先。

実装:sensorEval()(LPF なしなら純粋な分圧)/ fmGain()

09補償器 Gc(s)

補償器の役割は3つに尽きる。

  1. 低周波のゲインを上げる(定常誤差を潰す)→ 原点に極、つまり積分
  2. クロスオーバ付近で位相を戻す(発振させない)→ 零点
  3. 高周波のゲインを落とす(ノイズを追わない)→ 高周波の極
$$G_c^{PI}(s) = \frac{K_p s + K_i}{s}, \qquad G_c^{II}(s) = K_c\frac{1+s/\omega_{z1}}{s\,(1+s/\omega_{p1})}$$ $$G_c^{III}(s) = K_c\;\frac{(1+s/\omega_{z1})(1+s/\omega_{z2})}{s\,(1+s/\omega_{p1})(1+s/\omega_{p2})}$$

零点 $(1+s/\omega_z)$ はゲインを $+20$dB/dec 持ち上げつつ位相を最大 $+90°$ 進める。極はその逆。

電圧モードの電力段には LC の二次遅れがあって、共振を超えると位相が $-180°$ 側へ落ちる。零点1つ($+90°$)では足りないことが多いので、零点2つの Type-III が要る、という順番だよ。Type-III は原点極1・高周波極2・零点2で、数え方としては3極2零点

置き方の目安は、2つの零点を LC 二重極の周辺に、1つ目の高周波極を ESR零点や RHP零点などの制約周波数付近に、2つ目の高周波極をスイッチング周波数の 1/2 以下に。そして $K_c$ で狙った $f_c$ に合わせる。

実装:gcEval()

10ループゲインと安定余裕

ループゲインを 1Hz 〜 $\max(f_{sw}, 1\mathrm{MHz})$ の対数等間隔 4000 点で評価して、そこから読む。

4.84.950100200300400 µs位相余裕 63° — 1回で収まる位相余裕 29° — 4回振ってから収まる補償器は同じ。遅れ Td を足しただけ。Vout [V]負荷ステップからの経過時間
数値例のループゲイン。青が電力段 $G_{vd}$、緑がループ一周 $T$。7.6kHz の LC 共振で位相が落ち、補償器の零点がそれを押し返して、24.9kHz の交差時点で $62.5°$ を確保している。
定義意味
$f_c$$|T(j2\pi f_c)| = 1$制御が効く上限・応答の速さ
PM$180° + \angle T(j2\pi f_c)$遅れに対する余裕
GM$\angle T = -180°$ の点での $-|T|$ [dB]ゲイン増加に対する余裕

$f_c$ は 0dB を下向きに横切る最後の点を取り、前後の点から対数軸で線形補間している。位相も同じ比率で補間して PM を出す。設計開始時の目安は PM が $45°\sim60°$、GM が $6\sim12$dB、$f_c$ はまず $f_{sw}/10$ 以下。ただしこれは規格ではなく出発点だよ。

110dB 交差を数える

ループゲインが 0dB を横切るのは一度とは限らない。共振ピークが高いと、いったん下回ったゲインが押し戻されて再び 0dB を超えることがある。このとき一番低い交差だけを見て「位相余裕 60°」と報告すると、高い方にある危ない交差を見落とす。

-15-10-5051015201001k10k0dB を ±0.06dB でなぞるだけ → 交差 1 回共振で 0dB の上へ戻る → 交差 3 回(本物)|T| [dB]周波数 [Hz]
「かすっているだけ」と「本当に出戻っている」の違い。緑は 0dB 近傍を平坦になぞっているだけで、工学的には一度も横切っていない。橙は共振で確かに 0dB の上へ戻っている。
これは実際に踏んだ。素直に符号の変化を数えたら、何の問題もない設計が「3回横切っている」と報告してきた。調べたら、ゲインが 0dB を ±0.06dB でなぞっていただけだった。数値上は確かに何度も符号が変わるが、工学的には一度も交差していない。±0.5dB のヒステリシスを入れて「かすり」を除いたら、素直な設計は1回、共振で本当に出戻る設計は3回、と正しく分かれるようになった。

実装:loopMetrics()

12自動配置と自己検算

目標のクロスオーバ周波数と位相余裕を与えて、零点・極を機械的に置く方法(k-factor 法)。まず補償器以外($F_m G_{vd}\cdot$検出$\cdot$遅れ)の位相を目標 $f_c$ で測る。それを $\theta_p$ とすると

$$\mathrm{PM} = 180° + \theta_p + \theta_c \quad\Rightarrow\quad \theta_c = \mathrm{PM} - 180° - \theta_p$$

$G_c$ には原点極があってこれだけで $-90°$ 使っているので、そこから持ち上げる分を boost と呼ぶ。

$$\text{boost} = \theta_c + 90° = \mathrm{PM} - 90° - \theta_p$$

零点を $f_c/\sqrt{k}$、極を $f_c\sqrt{k}$ に対称配置すると、零点1・極1の組が稼ぐ位相は $2\arctan\sqrt{k} - 90°$。Type-III は2組ぶんなので

$$\text{boost} = 4\arctan\sqrt{k} - 180° \quad\Rightarrow\quad \sqrt{k} = \tan\!\left(\frac{\text{boost}}{4} + 45°\right)$$

Type-II は1組なので分母が 2 になる。稼げる位相には上限があって、零点1つで $+90°$、2つで $+180°$ に漸近する。これを超える要求には「届かない」と答える。最後に $K_c$ を $|T(j\omega_c)|=1$ から解く。

置いたあとで、必ず自分で確かめる。k-factor は $f_c$ の一点だけで位相を合わせる方法で、それ以外の周波数で何が起きているかは何も保証しない。実際、$f_c$ より上に高いQの共振が残っていると、$|T(f_c)|=1$ は満たしているのに本当のクロスオーバは別の場所に出る。

この道具でも起きた。LC共振 7.59kHz の電力段で $f_c = 5$kHz を狙うと、位相余裕 $-45°$ の不安定な設計を作りながら「置いたよ」と返してきた。必要な位相進みが負になるので零点と極が同じ周波数へ寄って相殺し、ただの積分器になってしまうのが直接の原因だった。

今は置いた後に実際のループを評価して、0dB を複数回横切っていないか・位相余裕が目標から落ちていないかを確かめてから返す。駄目なら理由と実測値を添えて言う。

実装:autoDesign()。後半に自己検算がある。

13実部品 R, C へ落とす

極零を決めても、それだけでは基板にならない。オペアンプ型 Type-III に落とすと部品はこう並ぶ。

オペアンプ型 Type-III 補償器。入力側は $R_1$ に $(R_3+C_2)$ が並列、帰還側は $C_3$ に $(R_2+C_1)$ が並列。$R_4$ が出力電圧の設定を受け持つ。

この回路の交流特性は、分圧の上側 $R_1$ を含んだ形になる。

$$H(s) = \frac{\big[s C_2 (R_1+R_3)+1\big]\big[s C_1 R_2 + 1\big]}{s R_1 (C_1+C_3)\big[s C_2 R_3 + 1\big]\Big[s\,\frac{C_1 C_3 R_2}{C_1+C_3} + 1\Big]}$$
$R_1$ は出力電圧の設定にも、交流特性にも効く。だからこの回路を「分圧 $K_v$」と「補償器 $G_c$」に無理に切り分けると、$R_1$ を二度数えるか逆に落とすかのどちらかをやりがちになる。$H(s)$ として一つで扱うほうが安全だよ。この道具の内部表現との対応は $K_v K_c = 2\pi f_{p0}$($f_{p0}$ は原点極の位置)。

極零 → 部品値

$$f_{p0} = \frac{K_v K_c}{2\pi}$$ $$C_1 = \frac{f_{p2}-f_{z2}}{2\pi R_1 f_{p0} f_{p2}},\qquad C_2 = \frac{f_{p1}-f_{z1}}{2\pi R_1 f_{p1} f_{z1}},\qquad C_3 = \frac{f_{z2}}{2\pi R_1 f_{p0} f_{p2}}$$ $$R_2 = \frac{R_1 f_{p0} f_{p2}}{(f_{p2}-f_{z2})f_{z2}},\qquad R_3 = \frac{R_1 f_{z1}}{f_{p1}-f_{z1}},\qquad R_4 = \frac{R_1}{V_o/V_{ref}-1}$$

$R_1$ は自由に選べて、全体のインピーダンスのスケールを決める。大きくすると消費電流は減るが、フィードバック節点が高インピーダンスになってノイズを拾いやすくなり、寄生容量や入力バイアス電流の影響も増える。小さくすると逆。

E系列へ丸めて、また戻す

計算値は当然 E系列に無い。抵抗を E96、コンデンサを E24 に丸めて、丸めた実部品から極零を逆算し直す。上の $H(s)$ をそのまま読めばいい。

$$f_{z1} = \frac{1}{2\pi C_2 (R_1+R_3)},\quad f_{z2} = \frac{1}{2\pi C_1 R_2},\quad f_{p0} = \frac{1}{2\pi R_1 (C_1+C_3)}$$ $$f_{p1} = \frac{1}{2\pi C_2 R_3},\qquad f_{p2} = \frac{C_1+C_3}{2\pi R_2 C_1 C_3},\qquad K_v = \frac{R_4}{R_1+R_4}$$

ここが、この道具でいちばん実務の匂いがする所だと思う。計算値で設計が終わりではない。手に入る部品で組んだ回路は、狙った極零とは違う所に極零を持っているし、出力電圧すら少しずれる。その差を見てから、もう一度ループを確かめる。

実装:type3ToRC()roundRC()rcToPZ()。丸めは snapE()

14離散化と時間応答

ボード線図と波形が別々の物を見ていたら意味がないので、時間応答側も同じ $G_c(s)$ を離散化して回している

積分(台形則)

$$y[n] = y[n-1] + \frac{K_c T_s}{2}\big(e[n]+e[n-1]\big)$$

進み網(Tustin変換)

$(1+s/\omega_z)/(1+s/\omega_p)$ に $s \to \frac{2}{T_s}\frac{1-z^{-1}}{1+z^{-1}}$ を代入して整理すると、$a = 2/(T_s\omega_z)$, $b = 2/(T_s\omega_p)$ として

$$y[n] = b_0 u[n] + b_1 u[n-1] - a_1 y[n-1]$$ $$b_0 = \frac{1+a}{1+b},\qquad b_1 = \frac{1-a}{1+b},\qquad a_1 = \frac{1-b}{1+b}$$

$z=1$(直流)を入れると利得は 1 になる。進み網は直流を素通しする回路なので、これは正しい。プラント側は平均化モデルを RK4 で積分し、制御周期を20分割して刻んでいる。制御量の更新は制御周期ごとに1回だけ(実装と同じ)。

アンチワインドアップ

デューティ比が上限・下限に張り付いている間も積分を進めると、飽和が解けた後に大きく行き過ぎる。そこで飽和していて、かつ誤差がさらに同じ向きへ押している間は補償器の状態を丸ごと凍結する(積分だけでなく進み網の内部状態も)。単純だが確実な方式だよ。

なぜ負荷ステップが要るのか

13.61516.400.511.522.53 msD を増やす最終的には上がるが、まず一度下がるf_RHP = 0.42 kHzVout [V]デューティ比を +0.05 した時刻からの経過
同じ補償器、違うのは遅れ $T_d$ を足したかどうかだけ。位相余裕 62° なら一度で収まり、29° なら4回振ってから収まる。周波数領域の余裕が、そのまま時間波形の粘りとして見えている。
位相余裕は揺すってみないと波形に出ない。ソフトスタートが緩やかだと、位相余裕 62° の設計と 29° の設計で起動波形がほとんど同じに見えてしまう。負荷を急変させて初めて差が出る。だから負荷ステップは飾りの機能ではなく、安定余裕を目で見るための入口として置いてある。

ステップ後は、最大偏差と、最終値の ±1% に入り切るまでの整定時間を出している。

実装:makeCtrl()(離散化)と simulate()(RK4・飽和・遅延・負荷ステップ)。

15ディジタルの遅れ

マイコンで制御すると、ADCで測って、演算して、PWMレジスタを更新して、それが次の周期に反映される。ゼロ次ホールドの位相遅れもある。この合計を $T_d$ としてループに入れる。

$$\left|e^{-j\omega T_d}\right| = 1, \qquad \angle e^{-j\omega T_d} = -\omega T_d, \qquad \phi_d = -2\pi f_c T_d$$

この項はゲインを一切変えず、位相だけを食う。だからゲイン線図は何も変わらないのに位相余裕だけが削られる。しかも $f_c$ が高いほど食われる量が増えるので、「速くしたい」と「遅れがある」は正面から衝突する。$T_d = 3.75\,\mathrm{\mu s}$、$f_c = 25$kHz なら $\phi_d = -33.8°$。位相余裕が 62° あっても 28° まで落ちる。

この道具は時間応答側にも同じ遅れを入れている。指令したデューティ比をバッファに溜めて $T_d$ ぶん遅らせてからプラントへ渡す(制御周期の非整数倍は前後のサンプルを線形補間)。片方だけに入れると、ボード線図が「位相余裕 28°」と言っているのに波形は綺麗なまま、という嘘をつく道具になる。

ディジタルではこの他に、係数の量子化、ADC/PWM の分解能不足によるリミットサイクル、割り込みのジッタも効いてくる。制御理論上の $G_c(z)$ だけでなく、数値表現と実装まで含めて設計対象だよ。

実装:周波数側は delayEval()、時間側は simulate() 内の遅延バッファ。

16MLCC の実効容量

積層セラミックは DCバイアスで容量が大きく落ちる。公称 10µF が実動作点で 4〜6µF、は珍しくない。温度と経年でも落ちる。容量が減れば $f_{LC} = 1/(2\pi\sqrt{LC})$ は上がるが、補償器の零点は置いた場所から動かない。電力段だけが動いて補償器が取り残される。

公称値で設計した補償器が実機で位相余裕を失うのは、これが理由のことが多い。順番としては、実効容量を確定してから補償器を設計するのが正しい。

実装:drawDerate()

17設計の流れ

  1. 仕様を決める — 入力範囲、出力、最大負荷、$f_{sw}$、許容リップル、負荷急変条件、起動時間
  2. 電力段を設計する — L、飽和電流、$C_o$、ESR/ESL、スイッチ、整流素子。この時点で $G_{vd}$ の大枠が決まる
  3. 小信号モデルを作る — 動作点ごとに $G_{vd}$、$G_{vv}$、$Z_o$。昇圧なら最悪条件の $f_{z,RHP}$ を必ず確認(重負荷・低入力・高デューティ付近)
  4. $K_v$ と $F_m$ を入れる — ループに入る固定ゲインを先に整理
  5. クロスオーバ目標を決める — $f_{sw}/10$ と $f_{z,RHP}/(5\sim10)$ の小さい方、ディジタルなら遅れも見る
  6. 補償器を設計する — 低周波で高ゲイン、$f_c$ で $|T|=1$、そこで十分な位相余裕、高周波でロールオフ
  7. ボード線図で確認 — 代表条件だけでなく、入力電圧・負荷・温度・部品ばらつきを振る
  8. 時間波形で確認 — 負荷ステップ、入力ステップ、起動、停止、短絡、軽負荷遷移
  9. 最悪条件で再評価 — 特に MLCC の実効容量、L のばらつき、遅れ

ボード線図は必要条件であって十分条件ではないよ。位相余裕が 60° あっても、大信号の過渡で補償器出力やデューティ比が飽和すれば別の挙動になる。最後は時間波形で確かめる

18実機でループを測る

計算とシミュレーションが正しくても、実機ではコンデンサの実効値・配線寄生・誤差増幅器・負荷・入力フィルタ・動作モードが違う。だから最終的には実測する。

このときループを直流的に開いてはいけない。開くと出力が目標から外れて補償器出力やデューティ比が飽和し、測りたかった動作点そのものが消えてしまう。だから直流では閉ループを保ったまま、交流の小信号だけを注入して、注入点の両側の電圧比からループゲインを求める。

注入点は、片側から見たインピーダンスが十分低く、もう片側が十分高い場所を選ぶ。一般的な非絶縁電源なら、出力端子と上側フィードバック抵抗の間が候補になる。確認すべきことは:

記録すべきは、グラフだけでなく条件のほう。$V_i$/$V_o$/$I_o$/温度/動作モード、Lと Cの実装構成、注入点と注入振幅、そして $f_c$・PM・GM・0dB交差回数。同じ条件の負荷ステップ波形と並べて残すと、周波数領域の余裕と時間波形の対応が身体に入る。

19混乱しやすい所

やりがちなこと何が起きるか
$G_{vd}$ と $G_c$ を混同する前者は制御対象(電力段)、後者は制御器。補償器は電力段の弱点を見て置くもの
$K_v$ を二重に数える分圧を外付けとして扱うか $G_{c,total}$ に含めるかを混ぜると、ゲインが分圧比ぶんずれる
$F_m$ を忘れるループゲインがランプ振幅ぶんずれる
RHP零点をゲイン線図だけで見るゲインは普通の零点と同じに見えるが位相は逆。昇圧で位相線図を見ないのは危険
ノイズ対策をループの中でやるFB節点のCも高周波極も、位相遅れを増やす。まずレイアウトで抑える
公称容量で設計するMLCC は DCバイアスで容量が落ちる。$f_{LC}$ が動いて位相余裕を失う
DCM を同じモデルで見る軽負荷でモードが変われば $G_{vd}$ の形自体が変わる
ディジタルの遅れを後から思い出す遅れを含めてから補償器を設計する。$f_c$ が高いほど深刻
ボード線図だけで終わる飽和・保護・モード遷移は線形モデルの外。最後は時間波形

20通しの数値例

プリセット「Type-III 教科書例」で、ここまでの手順を全部通すとこうなる。

仕様$V_i \to V_o$ / $I_o$12V → 5V / 2A
$f_{sw}$400 kHz
電力段L / $C_{eff}$ / ESR10µH / 44µF / 10mΩ
D0.417
$f_{LC}$ / $f_{z,ESR}$7.59 kHz / 362 kHz
検出・PWM$K_v$(基準 0.8V)/ $F_m$0.160 / 0.667 V⁻¹
補償器零点 $f_{z1}$ / $f_{z2}$3 kHz / 6 kHz
極 $f_{p1}$ / $f_{p2}$150 kHz / 250 kHz
$K_c$3.43×10⁴ rad/s
結果$f_c$ / PM24.91 kHz / 62.5°
実部品$R_1$/$R_2$/$R_3$/$R_4$10k / 1.5k / 205 / 1.91k
$C_1$/$C_2$/$C_3$18nF / 5.1nF / 430pF
丸めた後$f_{z1}$ / $f_{z2}$3.06 kHz / 5.90 kHz
$f_{p1}$ / $f_{p2}$152 kHz / 253 kHz
整定する出力4.988 V
$f_c$ / PM24.68 kHz / 62.7°

丸めたことで出力が 12mV ずれ、クロスオーバが 0.23kHz 下がり、位相余裕はむしろ少し増えた。丸めは必ずしも悪化ではない——ただ、どちらへ動くかは計算してみないと分からない、というのが要点だよ。

21扱っていないもの

正直に並べておく。ここに書いてあるものは、この道具の数字では判断できない。

この道具は設計の当たりをつけて、考え方を掴むためのものだよ。実機ではメーカーの平均化モデル、スイッチングシミュレーション、そして最終的には実機のループ測定と負荷ステップを、同じ条件で突き合わせて判断してほしい。商用電源や高電圧を扱うなら、安全対策は別途しっかりと。
← ワークベンチへ戻る 検証レポートを見る →