sf を使った分布定数回路動作のシミュレーション

分布定数回路は理解し難いものです。伝送線路の理論などで説明されますが、これは周波数領域での説明になってしまいます。(ここの Web ページは周波数領域の説明としては良くまとまっています。)この方法は定存波などの説明には適していますが、反射などのダイナミックな回路の挙動は解り難い説明となります。

ここではプリント基板 1mm 幅で 5 cm 長・開放端の分布定数回路を L, C, R 5 素子の集中定数回路で近似し、500MHz 矩形波の電圧入力を与えたときの挙動を sf でシミュレーション計算し、結果を gnuplot で図示します。今までとは異なった視点からの分布定数回路の説明です。sf の威力が良く分かる例だと思います。

基板の分布定数回路を L,C,R で近似する

ここ などのデータを根拠に、片側がグランドべたで 1m 幅配線パターンのプリント基板は 1 cm あたり下の抵抗とインダクタンス 容量を持つものとします。
R = 0.0024`Ω # Ω /cm
L = 0.005`uH      # 5nH /cm
C = 1`pF      # pF /cm
このような基板で 5 cm の長さの直線で片側が開放のパターンに 1V 500MHz のクロック電圧を与えたときの電圧と電流のシミュレーション計算を sf で行います。分布定数回路を下のような L C R 素子 5 組で近似します。
------------------ 図 1 ------------------

ステップ応答とサンプリング周期 Δt

一組の L C R 素子へのステップ電圧入力が加わったときの電流応答を考えます。 ------- 図 2 --------

高周波領域において電流値を制限しているのは抵抗 R ではなくインダクタンス L です。このことが原因となって分布定数回路では、抵抗が主に聞いてくる多くの集中定数回路では発生しない、反射などの現象が発生します。

最初は I[t,1] == 0 の単純な状態を考えます。V[0,1] == 0 の状態で V[t,0] 入力に 1 ボルトのステップ電圧が加わったときの応答電流 I[t,0] は下のように計算されます。

I(t,0) == 1/s (V(t,0)- V(t,1)0)/(R + s L)
       == 1/s (V(t,0)- V(t,1))/(L(R/L + s ))
       == (V(t,0)- V(t,1))/L 1/s exp(-R/L t)
       == (V(t,0)- V(t,1))/(L R/L) (1- exp(-R/L t))
       == (V(t,0)- V(t,1))/R (1- exp(-R/L t))

下のようにプリント基板の L と R は約 2 uS の時定数で 1volt/R ==416 ampere の電流値に落ち着くような時定数になっています。Δt = 0.02 nS 経過した時点では 1`pF のコンデンサには 0.04 volt の電圧上昇しか発生しないような電流しか流れていません。L を含まない R C だけによる時定数は 2.4e-15 sec == 0.000002 nS と非常に短いのですが、L による電流制限が働いてしまうので、0.02 nS の短い時間では 0.04volt 分しか上昇できていません。Δt == 0.02 nS で誤差の小さなシミュレーションができそうです。

L/R
< 0.000416667 >

1 `volt/R
< 416.667 >

R C
< 2.4e-015 >
Δt = 0.02`nS, Δt(1`volt- 0`volt)/R (1- !exp(-R/L Δt))/2 1/C < 0.0399998 > ∵ # Δt 秒後に流れる電流は 0.004mA です。 (1`volt- 0`volt)/R (1- !exp(-R/L Δt)) < 0.00399998 > # Δt 秒までにコンデンサに C==1 pF にたまった電荷は 4e-14 coulomb です。 Δt (1`volt- 0`volt)/R (1- !exp(-R/L Δt)) 1/2 < 3.99998e-014 >

このように定めた Δt と L R C の値を元に分布定数回路を 1volt 500MHz のクロックでドライブしたときの様子をシミュレーションします。

分布定数回路のシミュレーション

図 1 の L R C 素子が 5 組シリーズにつないだ回路動作のシミュレーションをするときは、V[200,6] の電圧行列を設けます。V[*,0] に 1 volt 500MHz の方形波を設定します。V[*,1],.. V[*,5] には V[t,1],.. V[t,5] のシミュレーションで計算された時刻毎の電圧値が入ります。また I[200,5] の電流行列を設け、I[*,0],.. I[*,4] には I[t,0],.. I[t,4] のシミュレーションで計算された時刻毎の電流値が入ります。

蛙飛び法(flog leap) で計算するため最初の I[0,0] だけは 0.5 Δt のタイミングでの電流値とします。下の sf 式で V, I をシミュレーション計算できます。L C R を 5 組連ねた一方の端は開放端であるとします。

//@@
/s
R = 0.0024 # Ω /cm
L = 5e-9   # nH /cm
C = 1e-12 # pF /cm
Δt = 1e-11 # 0.01nS と決める

NS @= 5 #段数 number of section
N @=200, V @=[[N,NS+1]], I @=[[N,NS]]
#1V の電圧を 100 Δt の期間だけかけて、また 0V に戻す
V[<0,N/2,NS+1>] = <<1,N/2,0>>
#1/2 Δt だけ経過したときの 0 point の電流
I[0,0] = 1/R (1- !exp(-R/L 0.5Δt))

<<1,N-1,1 @k |\
    V[] = V[< (k-1) (NS+1)+1, NS,1>] + (I[k-1,*]-~shift(I[k-1,*],-1) )1/C Δt
    I[k,*] = I[k-1,*]+(~shift(V[k,*])-V[k,*])[<1,NS,1>]1/R (1- !exp(-R/L Δt))
>>
mtV = V
mtI = I
//@@@

上の sf 計算式では、計算を高速化するために電圧行列、電流行列をテンポラリ変数にし、計算が終わった後で mtV, mtI ファイル行列変数に代入しなおすテクニックを使っています

電圧の変化の様子が入っている mtV 計算結果を gnuplot を使って三次元表示します

gspl mtV

開放端で反射している様子が見られます。

また下の操作によって開放端での電圧の変化だけを gnuplot を使って二次元表示します

V[*,5]
gdsp

高周波でのクロック信号をオシロで見たときに良く見られる波形です。リンギングやオーバーシュートが見られます。オシロで観測されるこれらのノイズ信号は基板上にある一様ではない L C R 成分によるものであることが良く分かります。

開放短での電流値の時間変化も確認できます

    I[*,4]
gdsp

もう、クロック電圧との相似性さえもなくなっています。電流も 100 mA のオーダーで流れています。プリント基板のインピーダンスが 10 オームのオーダーになってしまうわけです。500MHz になるとプリント基板での信号伝達に対して L と C のほうが利いてくることなどが良く分かります。現代のコンピュータ マザー ボードにおけるパターン設計の難しさの一端が理解されます。

ダンピング抵抗の効果のシミュレーション

上のシミュレーション回路では 0 - 1 volt 入力のはずが 2 volt peak to peak の波形になってしまっています。これでは 時間が経過すると IC も壊れてしまいます。これを避けるために、クロック回路に 10Ω 程度のシリーズ抵抗を入れることがあります。そのとき信号波形がどのように変わるかシミュレーションしてみます。
//@@
/s
R @= 0.0024 # Ω /cm
L @= 5e-9   # nH /cm
C @= 1e-12 # pF /cm
Δt @= 0.2e-11 # 0.01nS と決める
R0 @= 10   # dumping 抵抗

NS @= 5 #段数 number of section
N @=200, V @=[[N,NS+1]], I @=[[N,NS]]
#1V の電圧を 100 Δt の期間だけかけて、また 0V に戻す
V[<0,N/2,NS+1>] = <<1,N/2,0>>
#1/2 Δt だけ経過したときの 0 point の電流
I[0,0] = 1/(R+R0) (1- !exp(-(R+R0)/L 0.5Δt))

<<1,N-1,1 @k |\
    V[] = V[< (k-1) (NS+1)+1, NS,1>] + (I[k-1,*]-~shift(I[k-1,*],-1) )1/C Δt
    I[k,0] = I[k-1,0]+       (V[k,0]-V[k,1]) 1/(R+R0) (1- !exp(-(R0+R)/L Δt))
    I[] = I[<(k-1)NS +1,NS-1,1>]+(~shift(V[k,*])-V[k,*])[<2,NS-1,1>]1/R (1- !exp(-R/L Δt))
>>
mtV = V
mtI = I
//@@@
gspl mtV

信号の伝達遅れが倍以上になるけれど、波形の暴れがずっと少なくなるのが分かります。オーバーシュート、アンダーシュートとも 0.2V 以下です。これならば IC が壊れることはありません。

最後に

分布定数回路動作を sf の数値計算によりシミュレーションしてみました。この Web ページを読んだだけでは分布定数回路の理解に抜けが残るはずです。gnuplot の 3D 表示は自分でマウスを使って波形のドラッグ操作を行い、波形を様々の視点から見るべきです。回路の端末に抵抗やコンデンサを接続して、そのときの波形の変換を観察すべきです。

sf では `volt, `nS など "`" で始まる単位系定数を使えます。このプリント基板の定数回路系シミュレーションでも提示したように、回路記述数式に単位系を含められることは、計算式自体のドキュメント性を高めます。後で計算式を見直したときに数値の意味を単位系から読み取れるからです。こんなことができるのは sf だけだと自負しています。 ぜひとも、sf をダウンロードして御自分で試してください。


メールは「kenji◆□nasuinfo.or.jp の◆□部分を半角のアットマークに変えたアドレスに送っててください

ホーム ページに戻る