ttl.png



過渡解析とループ利得

.AC 解析を行って負帰還増幅器のループ利得を調べる方法は examples/Educational の LoopGain.asc や LoopGain2.asc で紹介されています。 いっぽう SW レギュレーター回路 は .AC 解析できません。 このループ利得を調べるには、どうしたらいいでしょうか。


次の回路の方程式を、大ざっぱに考えて解きます。
 1.png

 V(x) = (R2/(R1+R2))*(-Avol)*V(y)
 (1/2)*Avol = -V(x)/V(y)

第一近似として -V(x)/V(y) がループ利得を表します。 しかし V1 の存在 は U1 に余分な出力電流を要求してしまいます。

○ examples/Educational/LoopGain.asc では R. D. Middlebrook の方法を使っています。
 .func Gi()=I(V3)/I(V4)
 .func Gv()=-V(x)/V(y)
 .func middlebrook(x,y) = (x*y-1)/(x+y+2)
として、middlebrook(Gi(),Gv()) の値がループ利得です。

○ 同 LoopGain2.asc では Michael Tian ら発表の、修正された方法を使っています。
.step を使うので、回路を2つ並べて書く必要がありません。 加え て loop gain プローブの向きを逆にしても結果が変わらないという性質があり ます。 -1/(1-1/(2*(I(Vi)@1*V(x)@2-V(x)@1*I(Vi)@2)+V(x)@1+I(Vi)@2)) がループ利得です。

 Middlebrook developed his formula for a loop with no backward transmission.
 Tian has generalized this formula for loops with backward transmission.
 As we have no backward transmission in this example, Tian's formula
 gives exactly the same result as Middlebrook's.
 (LTspice User Group の files/Examples/Educational/LoopGain_Probe/LoopGain_Probe.asc、Frank Wiedmann 氏による解説の抜粋)


○ さらに、LTspice User Group の files > Examples > Educational > LoopGain_others/LoopGain3.asc で mindbendingpuzzles 氏はもっと 簡便な方法を紹介しています。 LT1001 OP アンプを使った例では 40MHz 付近 まで M. Tian の方法と同様な結果が得られます。

 If your circuit has a point with a high input impedance at all frequencies of interest
 Then you can add an AC source before that point to inject a disturbance.
  ・・・
 To run the comparison execute the simulation and plot:
 V(Out)/V(In)
 for the simple method
 and
 1/(1-1/(2*(I(Vi)@1*V(x)@2-V(x)@1*I(Vi)@2)+V(x)@1+I(Vi)@2))
 for the Tian method.

 2.png

この簡略方法なら .TRAN 解析もできそうです。

ところで、LT1001 の負荷が 100Ω とは小さすぎます。 結果の比較をするのに負荷が 重いほうが差がはっきりする、とかいう事情があって 100Ω にしたところ、それを引用する 人は、もう勝手に変えられなくなってしまったのでしょうね。


前記の Tian の方法および簡便な方法を使って (.AC および .TRAN) 解析結果の違いを確認しておきます。 OP アンプには LM358 を使用します。 モデルは LTspice User Group の Files > Lib > LM358 > Supply current simulation から入手した LM358_NS_BV.MOD を使いました。 LpGain.zip の Lg1.asc を参照して下さい。
  step	ti()  at                 (Tian の方法)
(50.4319dB,-89.6261°) 1000
(30.4317dB,-90.7205°) 10000
(10.3912dB,-97.6377°) 100000
(4.25077dB,-105.2°) 200000
(0.000488809dB,-113.876°) 317400
(-4.50428dB,-126.728°) 500000
(-12.8273dB,-156.531°) 1e+006

step -v(out)/v(in) at (簡略法)
(50.4412dB,-89.6259°) 1000
(30.4411dB,-90.7186°) 10000
(10.4002dB,-97.6192°) 100000
(4.25862dB,-105.164°) 200000
(0.00606205dB,-113.82°) 317400
(-4.5043dB,-126.645°) 500000
(-12.8555dB,-156.423°) 1e+006
 
ご覧の通り、上記の2つはかなりよく一致しています。

簡略法を過渡解析下で使います。 Lg2.asc をご覧下さい。 のこぎり波を与えてフーリエ変換し、 データ処理で -V(x)/V(y) を計算します。 .FOUR の実行に少し時間がかかります。 データ 処理には専用のプログラム t5.exe を使いました。 t5.c がソース です。 LpGain.zip
  1.000kHz  50.72dB  -89 deg.
  10.00kHz 30.73dB -90.71 deg.
  100.0kHz 10.69dB -97.98 deg.
  200.0kHz 4.560dB -105.93 deg.
  317.0kHz 340.2mdB -115.11 deg.
  318.0kHz 311.6mdB -115.19 deg.
  500.0kHz -4.134dB -129.18 deg.
  1.000MHz (測定していません)
 
3.png

どうでしょうか。 「とても正確」とは言いがたいのですが、なんとか使えるように思えます。


実際の SW レギュレーターで試しました。 教科書 的な +5V → +12V の昇圧型 PWM コンバーターで、スイッチング周波数は 約 100kHz です。 V2 が基準電圧、U1 が誤差増幅器で、利得 は R8, R9 で設定しています。(Lg3.asc)

4.png

まずは、現在はコメント化されている右下の Spice Directives を使って一応安定動作することを 確認しておきます。 I1 の上側の出力をノード「o」につなぎ変えると、負荷がステップ変動 したときの応答を調べることができます。

開始後 400us ほど経てば動作が安定することがわかりましたので、それに合わ せて V3 (プローブ) のパラメーターや .TRAN の終了時間を設定します。(左下の Spice Directives)

プローブ電圧 (のこぎり波) の極性によって結果が異なります ので、a=-0.01 および a=0.01 両方の場合について調べました。
  a = -0.01
  1.000kHz 15.29dB -87.86 deg.
  2.000kHz 10.09dB -95.24 deg.
  3.000kHz 5.812dB -98 deg.
  4.000kHz 3.376dB -99.3 deg.
  5.000kHz 2.490dB -109.47 deg.
  6.000kHz 427.7mdB -114.73 deg.
  7.000kHz -372.1mdB -117.88 deg.
  8.000kHz -2.490dB -125.13 deg.
  9.000kHz -3.042dB -130.48 deg.
  10.00kHz -4.093dB -131.03 deg.
  12.00kHz -5.709dB -143.16 deg.
  14.00kHz -7.489dB -144.86 deg.
  16.00kHz -9.924dB -153.19 deg.
  18.00kHz -11.09dB -158.24 deg.
  20.00kHz -11.34dB -158.08 deg.
  a = 0.01
  1.000kHz 20.38dB -71.43 deg.
  2.000kHz 15.23dB -93.93 deg.
  3.000kHz 11.02dB -104.03 deg.
  4.000kHz 9.254dB -104.09 deg.
  5.000kHz 6.116dB -113.26 deg.
  6.000kHz 5.405dB -111.06 deg.
  7.000kHz 3.340dB -118.28 deg.
  8.000kHz 2.980dB -115.86 deg.
  9.000kHz 2.634dB -120.59 deg.
  10.00kHz 926.2mdB -123.11 deg.
  12.00kHz -1.546dB -133.85 deg.
  14.00kHz -2.850dB -136.96 deg.
  16.00kHz -3.490dB -143.54 deg.
  18.00kHz -4.874dB -144.68 deg.
  20.00kHz -5.309dB -146.88 deg.
 
過渡解析の V(op) 応答波形を見 ても、a = 0.01 の場合のほうが発振に対する位相余裕が少ないとわかり ます。(オーバーシュートがやや大きい。) そのほか、30kHz あたりまでの 数値を見ていくと、どうもうねりがあるように見えます。 周波数が高い領域では平均化を 行ったほうが正確な値が求まりそうです。 グラフに描いて視覚的に平均化してしまう 手もあります。

V(op) および V(o) の過渡応答波形 a = -0.01
5.png

同 a = 0.01
6.png

パラメーター a の大きさは、OP アンプがひどく飽和したりしない範囲で大きく 設定します。 上記の例では飽和させず、かつ次段コンパレーターで比較する鋸波の電圧変化 範囲 (0.1 〜 0.9V) に収まるようにしています。

表形式の振幅・位相データをグラフ表示することもできます。 (Draft1.asc)
7.png
8.png



これだけデータがそろうと、位相補正をして ループゲインを大きくしてみたくなります。 R10, C5 を追加し、R8 は 20k → 47k と 大きくしました。 (Lg4.asc)

9.png

過渡応答波形を次に示します。 (a = -0.007, a = 0.007)
10.png

11.png

フーリエ変換+データ処理結果は:
  a = -0.007
  1.000kHz 22.00dB -88.25 deg.
  2.000kHz 15.79dB -84.84 deg.
  3.000kHz 12.61dB -93.05 deg.
  4.000kHz 9.696dB -90.48 deg.
  5.000kHz 9.043dB -104.94 deg.
  6.000kHz 7.625dB -99.97 deg.
  7.000kHz 5.702dB -106.9 deg.
  8.000kHz 4.082dB -113.24 deg.
  9.000kHz 4.192dB -111.95 deg.
  10.00kHz 2.999dB -114.97 deg.
  12.00kHz 1.171dB -117.74 deg.
  14.00kHz 183.9mdB -130.05 deg.
  16.00kHz -1.794dB -133.82 deg.
  18.00kHz -1.936dB -146.95 deg.
  20.00kHz -2.602dB -149.71 deg.
  a = 0.007
  1.000kHz 24.46dB -88.29 deg.
  2.000kHz 18.28dB -85.34 deg.
  3.000kHz 15.71dB -92.67 deg.
  4.000kHz 12.92dB -100.95 deg.
  5.000kHz 12.32dB -98.33 deg.
  6.000kHz 8.441dB -99.02 deg.
  7.000kHz 8.799dB -101.55 deg.
  8.000kHz 7.063dB -87.38 deg.
  9.000kHz 6.946dB -105.85 deg.
  10.00kHz 4.711dB -101 deg.
  12.00kHz 2.544dB -113.11 deg.
  14.00kHz 5.215dB -117.83 deg.
  16.00kHz 4.207dB -110.59 deg.
  18.00kHz 1.935dB -132.43 deg.
  20.00kHz 1.857dB -117.92 deg.
 
おやおや、a = 0.007 の場合、0dB の点 が 20kHz を超えてしまったようです。 もう少し先を見ると:

21.00kHz 1.997dB -107.05 deg.
22.00kHz 1.669dB -137.11 deg.
23.00kHz 1.632dB -127.68 deg.
24.00kHz 883.3mdB -135.77 deg.
25.00kHz 684.8mdB -146.55 deg.
26.00kHz -1.118dB -149 deg.
27.00kHz 50.10mdB -149.18 deg.
28.00kHz -725.7mdB -137.6 deg.
29.00kHz -1.649dB -150.29 deg.
30.00kHz -1.848dB -152.29 deg.

にわかには信じられない数値が並びます。 しかし 24 〜 28kHz のあたりで 0dB に なり、位相角は -140°程度と見積もられます。 ちょっと心配ですので、I1 出力を「o」に つなぎ変えて負荷をステップ変動させて見ました。

12.png

これを見る限り、過渡応答波形は問題ありません。(余裕がないのは確かですが。)
12V 最大 200mA 出力の電源で、負荷電流変動 40mA 時の出力電圧変動 が 12.005V - 11.992V = 13mV ですから、13mV/12V = 0.001083 = 0.11%。 元の 負荷変動は 40mA/200mA = 0.2 = 20%、負荷レギュレーションは 0.11/20 = 0.0055 [%/%] です。

出力リップル電圧は 50mV p-p 程度です。 出力フィルターコンデンサを大きくすれば 出力リップル電圧を減らせますが、OP アンプの利得や位相補正部品の定数も見直した ほうがいいでしょう。 出力フィルターコンデンサの容量精度・温度特性や ESR のことも お忘れなく。

もっとループ利得を上げたい場合は GBW の大きな OP アンプを使用し ます。 GBW 10MHz の OP アンプなら位相補正なしでも R8 を 100kΩ にできることを確認 しています。 また別に、SW 周波数を高くすれば高速応答のレギュレーターが作れます。


ごめんなさい。 今まで使ってきた SW レギュレーターの 回路は、V(o) の初期値を小さくしたり初期値を指定しなかった場合、妙な動作をしていま した。 これを修正しました。 LpGain.zip の Lg5.asc を御覧下さい。


もどる
Valid HTML 4.01!