回路シミュレータは物理的実在としての回路と 電圧計、電流計、発信器、オシロスコープ、ネットワークアナライザ、 スペクトラムアナライザなどの組合せで得られる結果を コンピュータによる計算で求めます。
以下、Spice 3f5の使いかたを簡潔な実例を元に解説しますが、 Spice 3f5のマニュアルと見比べながら読んで、 かつ、ご自分のコンピュータで実行してみてください。 すべてのコマンドや機能については説明しませんので、 SPICE 3 Version 3F5 User's Manualや SPICE2のマニュアルを見てください。 また、デバイスモデルについても説明しませんが、 これは他のPSpiceなどでも同じですから、 マニュアルでわからないことは他の市販の書籍で間に合うと思います。
実例はできる限りSpice 3f5のバッチモード(batch mode)と 対話モード(interactive mode)の両方で動くようにしてありますが、 一部は片方でしか動かないとか、 SPICE 2G.6でないと動かないものがあります。
インダクタを短絡、キャパシタを開放して、 DC(直流)動作点(operating point)を求めます。 DC 解析、AC (小信号)解析、過渡解析、ノイズ解析、Pole-Zero 解析の場合は OP 解析も自動的に実行され、 過渡解析の場合は初期値として使われますが、 下記のような場合は明示的に指定しなければなりません。
BRIDGE-T CIRCUIT VBIAS 1 0 12 R1 1 2 10 R2 2 0 10 R3 2 3 5 R4 1 3 5 .OP .control op print all .endc .END
この内容を書き込んだファイルの名前を file として、
spice -b fileの構文で実行すると .control から .endc までの対話モードコマンドが無視されて、 バッチコマンドを実行します。また、-b オプションなしの
spice fileの構文で実行すると、バッチモードコマンド .OP を無視して、 .control から .endc までの対話モードコマンドを実行します。 対話モードコマンドはソースファイルに記述せずに、
Spice 1 -> op Spice 2 -> print all v(1) = 1.200000e+01 v(2) = 8.000000e+00 v(3) = 1.000000e+01 vbias#branch = -8.00000e-01 Spice 3 ->とキーボードから入力することもできます。 既に spice が起動された状態で file を読み込む場合は
Spice 3 -> source fileを使います。
通常、Bridge-T 回路は L, C, R との組合せで、いろいろな用途に使われます。
線形素子だけの回路なら OP 解析は簡単ですが、 (電圧と電流が比例しない)非線形の半導体素子を含むと、 ごく簡単な自己バイアス回路(Auto bias)でも面倒になります。
ONE-TRANSISTOR CIRCUIT Q1 2 1 0 QMOD RC 2 3 1K RB 3 1 200K VCC 3 0 5 .MODEL QMOD NPN IS=1E-16 BF=100 .OP .control op print all .endc .END
バッチモードと対話モードの両方で動作を確認してください。
電圧源ないし電流源を段階的に変化させたときの DC 特性を解析します。
TRANSISTOR VC 1 0 0 Q1 1 2 0 NPN IB 0 2 0 .DC VC 0 1 .01 5U 25U 5U .MODEL NPN NPN() .control dc vc 0 1 .01 ib 10u 100u 20u plot -i(vc) .endc .END
典型的な PNP トランジスタの出力特性をプロットしています。 .MODEL のパラメータで多様なトランジスタの特性を指定することができます。
計算結果を利用したいときは
set nobreak print -i(vc) >outfileなどを追加して任意のファイルに出力できますので、 後からawkなどで必要な部分を抽出、編集します。
TF は DC 電源に小さな変動があった場合の、 指定された入力に対する指定された出力の比(Transfer Function)と、 入力インピーダンス、出力インピーダンスを求めます。
ONE-TRANSISTOR CIRCUIT Q1 2 1 0 QMOD RC 2 3 1K RB 2 3 200K VCC 3 0 5 II 0 1 .MODEL QMOD NPN .TF V(2) II .WIDTH OUT=80 .control run tf v(2) ii print all .endc .END
DC あるいは AC の入力変動に対する出力変動を解析しますが、 spice 3f5では bug が残っていて動きませんので、 これはSPICE2かngspiceで動かしてください。 SPICE で電流を求められるのは電源だけなので、 VMEAS のように電流計がほしい場合は電圧 0 の電源を挿入する手法がよく使われ、 ここでは VMEAS で測定する電流を基準に感度分析を行っています。
CURRENT MIRROR CURRENT SOURCE REF 3 2 4.3K Q1 2 2 0 QMOD Q2 1 2 0 QMOD VMEAS 3 1 VCC 3 0 5 .MODEL QMOD NPN BF=100 VA=50 .OP .SENS I(VMEAS) .WIDTH OUT=80 .END
最も有用な情報は DC SENSITITY ANALYSIS 出力
.. dc sensitivities of output i(vmeas) element element element normalized name value sensitivity sensitivity (amps/unit) (amps/percent) ref 4.300E+03 -2.415E-07 -1.038E-05 vmeas 0.000E+00 -1.927E-05 0.000E+00 vcc 5.000E+00 2.649E-04 1.325E-05 ..基準となる vmeas に 1 % の変動を与える REF や VCC の変動は 10 uA 程度ですから、 Q2 の電流を +-1% に抑えるのは容易です。 current mirror回路は電子回路の基本の一つで頻繁に使われます。
下記の NMOS flip-flop 回路で .NODESET をコメントから出した場合と コメントアウトした場合の V(1) の変化をみてください。
NMOS FLIP-FLOP MI1 2 1 0 0 EMOS W=40U L=10U ML1 3 2 2 0 DMOS W=10U L=10U MI2 1 2 0 0 EMOS W=40U L=10U ML2 3 1 1 0 DMOS W=10U L=10U VDD 3 0 5 .MODEL EMOS NMOS VTO=1 KP=20U .MODEL DMOS NMOS VTO=-3 KP=20U GAMMA=.5 *.NODESET V(1)=0.25 V(2)=5 .OP .WIDTH OUT=80 .OPTION NOPAGE .control op print all .endc .END通常は .NODESET を必要としませんが、 flip-flop のような安定状態を持つ回路で必要になります。 .NODESET は DC 解析でのみ使われることに注意してください。 過渡解析の初期値設定には .IC が使われます。
交流回路で入力周波数を段階的に変えた場合の周波数特性(出力振幅と位相差)を 求めます。
BRIDGE-T CIRCUIT V1 1 0 12 AC 1 C1 1 2 1U C2 2 3 1U R3 2 0 1K R4 1 3 1K .AC DEC 10 10 10K .PLOT AC VDB(3) VP(3) .WIDTH OUT=80 .control run plot vdb(3) vp(3) .endc .ENDここでは振幅を dB 表示にして位相差と同じクラフに入れていますが、
plot AC VDB(3) plot AC vp(3)と分けると細部が見やすくなります。
この回路で C1 = C2 = C、R3 << R4 の場合は
Rx = 1 / (ω*C^2*R)が平衡条件に近くなって、高抵抗測定に使えます、
周波数特性上 -6 dB/oct (-20 dB/dec) のカットオフ周波数が pole、 +6 dB/oct (+20 dB/dec) のカットオフ周波数が zero ですが、 これは伝達イミタンスを j*ω の多項式の分数で表現したとき、 分数の値が無限大になるのが pole、ゼロになるのが zero というのが起源で、 増幅器の安定性などの判断でよく使われます。
BRIDGE T FILTER (batch mode only) V1 1 0 12 AC 1 C1 1 2 1U C2 2 3 1U R3 2 0 1K R4 1 3 1K .OP .PZ 1 0 3 0 VOL PZ .PRINT PZ ALL .ENDこれを実行したときの出力結果
BRIDGE T FILTER (batch mode only) Pole-Zero Analysis Thu Sep 24 13:13:02 2015 -------------------------------------------------------------------------------- Index pole(1) pole(2) -------------------------------------------------------------------------------- 0 -2.618034e+03, 0.000000e+00 -3.819660e+02, 0.000000e+00は rad/sec 単位ですから、周波数に変換すると 2*π で割って
-2.618034e+03 rad/s = -416.67 Hz -3.819660e+02 rad/s = -60.79 Hzになって、直前の周波数特性と比べてみると一致していることを確認できます。
回路のノイズ源はレジスタの熱雑音と半導体の shot noise, flicker noise, burst noise の合計を指定された周波数範囲について計算します。
ONE TRANSISTOR CIRCUIT 96x Q1 2 1 0 QMOD RC 2 3 10K RB 1 3 200K VCC 3 0 5 R1 4 1 10K VS 4 0 AC 1MV .MODEL QMOD NPN CJE=1P CJC=2P .OP .NOISE V(2) VS DEC 10 1MEG 100MEG .PRINT NOISE ONOISE INOISE .WIDTH OUT=80 .control noise v(2) vs dec 10 1MegHz 100MegHz display print inoise_total, onoise_total setplot noise1 print onoise_spectrum inoise_spectrum plot onoise_spectrum .endc .END
.NOISE の出力はSPICE2のほうが情報が多いです。
AC 小信号モードでの歪(高調波)解析を行いますが、 spice 3f5には組み込まれていませんので、 SPCIE2を使うことになります。
ONE-TRANSISTOR CIRCUIT 163 * spice2 only Q1 2 1 0 QMOD RC 2 3 1K RB 1 3 200K VBE 4 0 793.4M VBE1 1 4 AC 1 .MODEL QMOD NPN .OP .AC LIN 1 1K 1K .DISTO RC .PRINT DISTO HD2 HD3 SIM2 DIM2 DIM3 .PRINT DISTO HD2(DB) HD3(DB) SIM2(DB) DIM2(DB) DIM3(DB) .END
指定された時間区間に於ける時間軸波形を求める機能で、 オシロスコープによる測定に対応しますが、 下記では半波整流回路の出力波形を見ています。
1/2 WAVE POWER SUPPLY Vac 10 0 SIN(0 100 50) Vi 10 12 0 D 12 15 MODA .MODEL MODA D(RS=1) Cf 15 0 40U Rl 15 0 1K .TRAN .1M 40M 0 .1M .PLOT TRAN V(15) .control run plot v(15) plot i(Vi) .endc .END
次はコルピッツ発信器。
COLPITS OSCILLATOR RB 1 0 1 Q1 9 1 3 MOD1 VC1 2 9 0 VCC 4 0 10 RL 4 2 750 C1 2 3 500P C2 4 3 4.5N L 4 2 5U RE 3 6 4.65K VEE 6 0 -10 PULSE -15 -10 0 0 0 1 .MODEL MOD1 NPN RC=10 .TRAN 20N 3U .PLOT TRAN V(2) I(VC1) .OPTIONS LIMPTS=5000 ITL5=0 ACCT .control run plot v(2) plot i(vc1) .endc .END
次ぎの例では非安定マルチバイブレータの波形を求めています。 初期条件に注意してください。
ASTABLE BJT CIRCUIT * Output is a square wave Q1 1 2 0 MOD1 Q2 4 5 0 MOD1 Rc1 7 1 1K Rb1 7 2 50K Rc2 7 4 1K Rb2 7 5 50K C1b2 1 5 20U C2b1 4 2 20U Vc 7 0 6 .MODEL MOD1 NPN(TF=10N CJC=1P CJE=1P) .TRAN 0.01 2.5 0 0.01 UIC .IC V(1)=.1 V(4)=6 V(5)=-6 V(2)=0.8 V(7)=6 .OPTIONS RELTOL=0.01 .PLOT TRAN V(1) V(2) .control run plot v(1) v(2) .endc .END過渡解析の初期値は
.TRAN tstep tstopが正しいです。>
過渡解析で得られた波形のスペクトルを求めます。
CMOS INVERTER M1 2 1 0 0 NMOS W=20U L=5U M2 2 1 3 3 PMOS W=40U L=5U VDD 3 0 5 VIN 1 0 SIN 2.5 2.5 20MEG .MODEL NMOS NMOS LEVEL=1 VTO=1 KP=20U + CGDO=.2N CGSO=.2N CGBO=2N .MODEL PMOS PMOS LEVEL=1 VTO=-1 KP=10U + CGDO=.2N CGSO=.2N CGBO=2N .OP .TRAN 1N 100N .FOUR 20MEG V(2) .PLOT TRAN V(2) V(1) (-1,5) .PLOT TRAN I(VDD) .control run tran 1N 100N plot v(2),v(1) fourier 20MEG v(2) plot fourier .endc .END
SPICEの標準温度条件は 27℃ですが、 すべての半導体と抵抗には温度特性がありますので、 動作温度の影響を見たいときは温度条件を変える必要があって、 SPCIE2の場合はTEMPコマンドを使います。
ONE-TRANSISTER CIRCUIT * spice2 only Q1 2 1 0 QMOD RC 2 3 1K RB 1 3 200K VCC 3 0 5 II 0 1 1M .MODEL QMOD NPN IS=1E-16 BF=100 .OP .TEMP 25 -55 125 .WIDTH OUT=80 .ENDこの例では -55℃, 25℃, 125℃ に於ける動作点を求めています。
SPCIE 3F5の場合は .TEMP がなくて、
.OPTIONS TEMP=125あるいは
.OPTIONS TNOM=-55のいずれかを使います。 いずれの場合も同時に複数の温度を指定できませんので、 下記の例では、foreach .. end のループを使って、 SPICE2の「.TEMP 25 -55 125」と同じ結果を得ています。
NE-TRANSISTER CIRCUIT * spice3f5 Q1 2 1 0 QMOD RC 2 3 1K RB 1 3 200K VCC 3 0 5 II 0 1 1M .MODEL QMOD NPN IS=1E-16 BF=100 .control foreach t 25 -55 125 echo "temp =" $t set temp=$t op run print all end .endc .END
例えば、 http://www.mogami.com/unix/spice2g6/spice2g6.html などを見てください。
平林 浩一, 2015-09