モデルの追加

プロジェクトファイル等一式

FET,OPアンプ等の計算をする場合には,モデルが必要となる.
自分でモデルを作るのは大変なので,インターネットから探してダウンロードしてくる.
一般的なSPICEモデルであれば,ngSpiceでも使えると思う.
(若干分布が違ったりして書き換える必要がある場合もある)
例)ADG779モデルの場合
VSWITCH IN OUT CTLR+ CTLR- "model"

ASWITCH CTRL+ (IN OUT) "model"
に書き換える.

または,
.model Switch vswitch(Von=1.505,Voff=1.495,ron=0.001,roff=1e6)
等を
.model Switch SW(VT=1.5,VH=0.01,ron=0.001,roff=1e6)
と書き換える.(こっちの方が簡単??)
VT = (Von+Voff)/2 ... ON/OFF電圧
VH = |Von-voff|/2 ... ヒステリシス

また,
.model Rideal res(T_ABS=-273)
はエラーになるので,
.model Rideal r(TNOM=-273)
とする.(TNOMで本当にノイズ計算参照温度が-273°Cになるのか要調査)


まずは,ダウンロードしたモデルを,適当なディレクトリに保存する.
モデル内にかかれているのは,SPICEのネットリスト.
モデルファイルの中を見ると
  :
* PINOUT ORDER +IN -IN +V -V OUT
* PINOUT ORDER  3   2   7  4  6
.SUBCKT "モデル名" 3 2 7 4 6
	:
みたいに "SUBCKT"(サブサーキット)が定義されている.
このサプサーキットの入出力ピンは,上のコメントにあるように +IN, -IN, +V, -V, OUT の順番でならんでいる.

これを,使う際には,
XU2  Vin Vout2 5V -5V Vout2 "モデル名"		
みたいにする.
上の例だと,XU2がコンポーネントのIDであり,モデル"モデル名”が使用される.
ピンの対応は,
ノードVin が SUBCKTの +IN ピン
ノードVout2 が SUBCKTの -IN ピン
ノード5V が SUBCKTの +V ピン
ノード-5V が SUBCKTの -V ピン
ノードVout2 が SUBCKTの OUT ピン
といったように,ネットリストの引数と,SUBCKTの引数が順番に対応することになる.
まずは,KiCADにこれに対応するモデルを登録させる.
Tools -> Library editor でライブラリエディタを開く
(もし,既存のライブラリに追加するのなら Select Working Library で既存のライブラリを開く)


つぎに,回路シンボルを書く.



【重要】ここで,モデル(SUBCKT)のピンの順番と,回路図のピン番号が一致するようにすること
たとえば,
  :
* PINOUT ORDER +IN -IN +V -V OUT
* PINOUT ORDER  3   2   7  4  6
.SUBCKT "モデル名" 3 2 7 4 6
	:
と記述されているなら,上の図のように,”+IN” は1番ピン, ”ーIN”は2番ピンといった具合に対応させる.
モデルファイル内の数値(上の例なら, 3, 2, 7, 4, 6)に惑わされないように!!!
これは,SUBCKT内の番号(もしくは,実デバイスのピン番号).

(もし,既存のライブラリに追加するのなら) "Update current component in current library"ボタンを押して,既存のライブラリに部品を登録する.
(もし,新規ライブラリを作るのなら)"Save current component in new library"ボタンを押す.

このモデルを使用するためには,まず,上でつくった(もしくは既存の)ライブラリを読み込む必要がある.
ライブラリの読み込みはここと同じ方法でできる.



すると,他のデバイスと同じように今つくったモデルを回路に追加できる.


回路図は下のようになる.


ダウンロードしてきたモデルを読み込むために,"-SPICE"のところに, ".include (モデルファイル)" を記述する.
出力されたネットリストは,以下のようになる.

.param  Tres=100
.include ./Libs/OPA211.mod		 モデル(SUBCKT)の読み込み  

*If 1/f noise is added to the resistnace
*.model R_flicker  KF=1e-25 AF=1.0

* Sheet Name: /
V1  Vin 0 DC 0 AC 1  sin(0  1.0  100k)		
XU1  Net-_R2-Pad1_ Net-_R1-Pad2_ 5V -5V Vout OPA211		  読み込んだモデル(SUBCKT)をここで使う  
R1  Vin Net-_R1-Pad2_ 100		 
R3  Net-_R1-Pad2_ Vout 1000		
R2  Net-_R2-Pad1_ 0 1		
V2  5V 0 DC 5 AC 0  		
V3  0 -5V DC 5 AC 0  		
XU2  Vin Vout2 5V -5V Vout2 OPA211		   読み込んだモデル(SUBCKT)をここで使う  

.include ./run.com

.end

AC解析

AC解析の場合には,以下のようなコマンドを利用する(run.com)
.options temp=20 tnom=20

* .ac DEC [NUM division] [start freq] [stop freq]
.AC dec 10  1k 100Meg

.control
run

*set filetype=ascii
wrdata AC.txt V(Vin) V(Vout)

plot mag(V(Vout)) ph(V(Vout))
プロットすると以下のようになる.(Gnuplotコマンド


設計どおり,ゲイン10(20dB)となっている.
また,OPアンプの周波数特性から,高周波側ではゲインが落ちているのがわかる.

ノイズ解析

たとえば,ノイズ解析をするならば,run.comは以下のようにする.

.options temp=20 tnom=20

.noise V(Vout) V1 dec 10 1 100meg

.control
run

*
* noise analysis
* > set plot
* > display
*

setplot noise1
plot onoise_spectrum loglog 
*plot inoise_spectrum loglog 

wrdata noise.dat noise1.onoise_spectrum noise1.inoise_spectrum
解析結果は下のようになる.


ダウンロードしてきたモデルがちゃんとしたものであれば,このように複雑なノイズ分布の解析もできる.