Spice 3f5 の使い方 (2)

回路シミュレータは物理的実在としての回路と 電圧計、電流計、発信器、オシロスコープ、ネットワークアナライザ、 スペクトラムアナライザなどの組合せで得られる結果を コンピュータによる計算で求めます。

以下、Spice 3f5の使いかたを簡潔な実例を元に解説しますが、 Spice 3f5のマニュアルと見比べながら読んで、 かつ、ご自分のコンピュータで実行してみてください。 すべてのコマンドや機能については説明しませんので、 SPICE 3 Version 3F5 User's ManualSPICE2のマニュアルを見てください。 また、デバイスモデルについても説明しませんが、 これは他のPSpiceなどでも同じですから、 マニュアルでわからないことは他の市販の書籍で間に合うと思います。

実例はできる限りSpice 3f5バッチモード(batch mode)と 対話モード(interactive mode)の両方で動くようにしてありますが、 一部は片方でしか動かないとか、 SPICE 2G.6でないと動かないものがあります。

1. OP - DC 動作点解析 (operating point analysis)

インダクタを短絡、キャパシタを開放して、 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

バッチモードと対話モードの両方で動作を確認してください。

2. DC - DC 掃引特性 (DC-sweep analysis)

電圧源ないし電流源を段階的に変化させたときの 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などで必要な部分を抽出、編集します。

3. TF - 伝達関数解析 (Transfer Function analysis)

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

4. SENS - 感度解析 (sensitivity analysis)

DC あるいは AC の入力変動に対する出力変動を解析しますが、 spice 3f5では bug が残っていて動きませんので、 これはSPICE2ngspiceで動かしてください。 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回路は電子回路の基本の一つで頻繁に使われます。

5. DC 解析の初期値設定

下記の 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 が使われます。

5. AC - AC 掃引特性 (Small Signal Analysis)

交流回路で入力周波数を段階的に変えた場合の周波数特性(出力振幅と位相差)を 求めます。

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. PZ - 極-零点解析 (Pole-Zero Analysis)

周波数特性上 -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
になって、直前の周波数特性と比べてみると一致していることを確認できます。

7. NOISE - ノイズ解析 (Noise Analysis)

回路のノイズ源はレジスタの熱雑音と半導体の 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のほうが情報が多いです。

8. DISTO - 歪解析 (AC distortion analysis)

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

9. TRAN - 過渡解析 (Transient Analysis)

指定された時間区間に於ける時間軸波形を求める機能で、 オシロスコープによる測定に対応しますが、 下記では半波整流回路の出力波形を見ています。

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
過渡解析の初期値は
  1. .TRAN コマンドで UIC の指定がなければ .OP を実行
  2. .UIC の初期設定を行う
の順序で行われます。SPICE3f5 User's Manualの .TRAN 構文ではUICキーワードの記述が抜けていますが
  .TRAN tstep tstop > 
が正しいです。

10. FOUR - フーリエ解析 (Fourier Analysis of Transient Analysis)

過渡解析で得られた波形のスペクトルを求めます。

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

11. TEMP - 温度依存性 (Temperature dpendency)

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

12. 注

12.1. 注1 - SPCIE2の入手

例えば、 http://www.mogami.com/unix/spice2g6/spice2g6.html などを見てください。

平林 浩一, 2015-09