LTspice メモ

revised Jul. 28, 2007.

LTspice/SwitcherCAD III のサブサーキット周りのあれこれ。 Spice model と symbol の連係のさせかたにおおむね 4 通りほどあり、 しかも微妙な表記の違いで取り扱いが変化する、そのことから。

シンボルの attributes

シンボルファイル (.asy) は単なるテキストで、中身はこんな感じ。
Version 4
SymbolType CELL
LINE Normal 48 80 48 96
... 略
SYMATTR Value NMOS
SYMATTR SpiceModel ../local_sub/NMOS
SYMATTR Prefix X
SYMATTR Description Dual gate N-Channel MOSFET transistor
PIN 48 0 NONE 0
PINATTR PinName D
PINATTR SpiceOrder 2
.. 略
回路図に置かれる絵と、attributes と、ピンの情報が書かれてる。 このうちの attributes で今興味があるもの: サブサーキット(.subckt)と連係させる場合は Prefix は常に X になる。のこりについて。

Attributes をまったく含まないシンボル

SpiceModel 〜 ModelFile まで、いずれの attributes も持たない場合、 シンボルファイル (.asy) と同じディレクトリにある同じ名前の回路図 (.asc) がサブサーキットとして扱われる。 ... 工夫の余地も誤解の余地もない。

Value のみをもつシンボル

SpiceModel, Value2 のいずれかが欠け、また ModelFile も無い場合。 標準配布では例えば opamp.asy がそうだ。

この場合、value がサブサーキット名として扱われる。 もちろん、そのサブサーキットは回路上に存在していなければならない。

... つまり、大概は opamp.asy の description にあるように、 手でモデルファイルを include することになる。

opamp.asy の場合で言えば、

Prefix X
Description Ideal single-pole operational amplifier. You must .lib opamp.sub
Value opamp
で、その subckt 名 "opamp" に対応するシンボルだが、 どこにあるかというと Description のとおり opamp.sub に入っているので 回路上に .lib opamp.sub などと書いてやると動くようになる。

本来 SpiceModel をサブサーキット名とし、value, value2 のいずれかを欠き、 かつ ModelFile がない状態として扱うのが本道だと思う。 が、配布ファイルでは何故か SpiceModel を空欄として value にサブサーキット名を置いている。 こうすると確かに value がサブサーキット名になる(後述)んだが、... まぎらわしい慣習ではある。

SpiceModel,Value,Value2 を含むシンボル

標準配布ファイルの例では LTC660.asy など。

この 3 つの attributes を同時に含むと特別扱いになる。
... こいつの特別扱いが、モデルの書法の分類が複雑怪奇になっている諸悪の根源で、 Help に明記されているが読んでる奴は居ないのだろうなぁ。

となって、SpiceModel で指定したファイルを自動的に include するようになる。ModelFile は指定しても無視される。

回路図上の名前と spice 上の名前を別にすることができる (後述の NJM2360.asy) かわり、 回路上からこのシンボルを open することはできなくなる。 他に spiceline やらなんやらで変数指定してあったとしても、それらを回路図側から変更できない。

標準配布の LinearTechnology のデバイスのほとんどがこの形式で、まあ、手でいじることはないし、 いじってほしくはない時に使う形式ってことで。

この形式の場合、回路図上から open symbol して .asy ファイルにたどり着くことはできない。 もっとも File → Open して直接開くぶんには問題ない:

... とはいえ、最近は SwitcherCAD III 経由せず、手で .asy ファイルの中身をいじってるけど。 どーせ SYMATTR をちょこちょこ直すだけ。

ModelFile を含むシンボル

標準配布ファイルの例では 1pole.asy など。

Value, Value2, SpiceModel のいずれかが欠け、かつ ModelFile を含む場合。

こちらも ModelFile で指定したファイルを自動的に読み込む。 それ以外の SpiceModel 〜 SpiceLine2 については attributes として本質的な違いはなく、 サブサーキット呼び出しの時に文面としてこの順に並べられる:
XU1 1 2 3  SpiceModel value value2 spiceline spiceline2 
というだけなので、SpiceModel が空なら Value がサブサーキット名になる。 たいがいのとこ、SpiceModel にサブサーキット名、Value を空として Value2 にオプションを置くような感じにするらしい。 Value は回路図上に表記されるが Value2 は回路図上には現れないという(デフォルトの)挙動に合わせてあるのかな。

なお、ModelFile は回路図から開いたエディタからは操作できない。 シンボルエディタからでないと見えないので、同じ名前の subckt を ModelFile 換えてとっかえひっかえってことはできない。 HC CMOS がそういう風に使ってくれとばかりに model file が 3 種類用意されてんだけど、だめ。
そういう場合は ModelFile を空欄にして、陽にモデルファイルを include してくれってことらしい。

物事の心構え

ここまで(ここからも)壮絶に読み辛いと思うが LTspice の ATTR の組合せによる挙動変化が実際に面倒なものだからなのであって そのへん間違いの無きよう。特別扱いとか、ほんとに Help にそう書いてあるし。

モデルファイルのカレントディレクトリ

いくつかのシンボルファイルの幾つかの形式では自動的に読み込むモデルファイルを指定できるが、 相対パスで指定する場合、基点となるカレントディレクトリは 回路(.asc) のあるディレクトリでもシンボル (.asy) の置いてあるディレクトリでもない。

回路にシンボルを置く時、ANDゲートのアイコンを叩いて "Select Component Symbol" の窓を開くが、 ここに表示される "Top Directory" が基点になる。

シンボルの置いてあるディレクトリとどう違うかと言うと、 ここの下のディレクトリ (Comparators/ とか Digital/ とか) のシンボルを使う場合でも、 そのシンボルが置かれたサブディレクトリが基点になったりはせず、"Top Directory" のままである。

サブサーキットは標準では "Top Directory" からみて "../sub/" の位置にあるだろうから、 ModelFile には "../sub/NE555.sub" などといったパスで書くことになる。

ただし自作のモデルファイルを "../sub/" に置くと LTspice の update の時に このディレクトリにあるファイルを調べてまわるので warning が鬱陶しい。 原則、別のディレクトリにしておく。 この項や、これより後の項で .asy 例を挙げている場合、モデルファイルは "../local_sub/" の位置にあるとしている。

.asc ファイルの spice model 化

attributes を指定しない形式で .asc を spice model として使うことはできるが、 同じディレクトリに同じ名前で置かないといけないなどの制約が煩い。 ModelFile で指定して別ディレクトリにほうりこむためには、netlist にしなければならないが ...

Tools → Export netlist を選んではいけない。 必要なのは View → Spice NetList のほうである。 Tools → Export netlist して作成した .net ファイルの netlist は論理情報だけでなく 部品配置の物理情報なども含むため、spice 用に書き換えるのは辛い。

.asy ファイルを作成し、一度以上 run していれば .net ファイルが出来ているからこれでもいいし、 .asy を修正後一度も run していないなら代わりに View → Spice NetList すれば .net ファイルが作成される。

.net ファイルにしたあとは .subckt 〜 .ends でくくればおっけ。 サブサーキットレベルで初期値指定したいケースでも .ic コマンドごとくくっていい。上記の場合はこんな風。

* D:\works\LTSpice\xtal.asc
.subckt XTAL A B
L1 A N001 0.6m Rser=35
C2 A B 30p
C1 N001 B 0.5p
.ic I(L1)=100n
.ends

ちなみに HC-49U/S 10MHz用の水晶振動子モデルである。

トランジスタ、ダイオード、FET

おまけ。サブサーキットでない、spice 組み込みのモデルでの話。 lib/cmp/ 下に存在する standard.jft, standard.mos, standard.dio, standard.bjt がモデルファイルで、 シンボルとしては、sym/ 下の npn.asy などが使われる。

standard.jft 等は只のテキストファイルなので、新たなモデルは手で書き加えることができる。

* Copyright 2000, 2001, 2002 Linear Technology Corporation.   All rights reserved.
*
* Fairchild のデータから。
.MODEL KSC2756 NPN IS=1.12202E-15 BF=196.2 NF=1 BR=3 NR=1 
+                  ISE=2.754229E-15 NE=2 ISC=2E-16 NC=1.5 VAF=42.5 VAR=20
+                  IKF=0.0251189 IKR=0.01 RB=200 RBM=17.083 IRB=5.623413E-6
+                  RE=1 RC=49 CJE=3.062267E-12 VJE=0.5631449 MJE=0.1266402
+                  FC=0.5 CJC=2.165298E-12 VJC=0.3986185 MJC=0.1723729
+                  TF=1.87E-10 XTB=1.7679 EG=1.1938 XTI=3 XCJC=0.7087
+                  mfg=Fairchild

.model 2N4124 NPN(Is=6.734f Xti=3 Eg=1.11 Vaf=74.03 Bf=495 Ne=1.28 Ise=6.734f Ikf=69.35m ...
...
てな具合に加える。 LTspice から update かけると LT のページにアクセスしにいってモデルファイルを新しいのにしてくれるが、 このとき、自前で加えたぶんはちゃんと残るので問題ない
.... こともなくて、ちょっとした問題がある。

モデルひとつについて 1 行にまとめられてしまうため、上のようにインデントいれて継続行 ('+' ではじまる行) な整形してても無意味なのと、 コメント文( "*" で始まる行) はファイル頭に入っている Linear Technology の Copyright 以外はぜんぶ消える。
モデルをどこから拾ってきたかとかいろいろ書いておいたのに update したらきれいさっぱり消えてしまった:

* Copyright 2000, 2001, 2002 Linear Technology Corporation.   All rights reserved.
*

.MODEL KSC2756 NPN(IS=1.12202E-15 BF=196.2 NF=1 BR=3 NR=1 ISE=2.754229E-15 NE=2 ISC=2E-16 ...
.model 2N4124 NPN(Is=6.734f Xti=3 Eg=1.11 Vaf=74.03 Bf=495 Ne=1.28 Ise=6.734f Ikf=69.35m ...
...
けっこう悲しかった。そら実害は無いけどさ。

コイル、コンデンサ、抵抗

lib/cmp/ 下に存在する standard.ind, standard.cap, standard.res がモデルファイル。 シンボルは cap.asy 等。 トランジスタが無問題だからといって似たようなこっちを開こうとするとバイナリファイルなのでつまずく。

SwitcherCAD 上から open すると、リストの形で開け、そこで修正追加する。

File から New Library 選ぶと新しいファイルが作れるが、作れてもあんまり嬉しいことはない。 参照されないし。

トランジスタ等のファイルも CAD から開けるが、 リストの形でなくただのテキストファイルで開けるだけなので、普通のエディタ使ったほうが楽。

水晶振動子

LTspice には xtal なる component があることになっているが、実体はない。 Description によれば、
Piezoelectric crystal. Set C, Lser and Cpar to set series and parallel resonances. This is actually the same as a capacitor.
モデル的にはキャパシタと全く同じってのはちょっと目から鱗だったが、肝腎のパラメータが無いのでは使えん。
モデルの形 (C, L, R の直列に C が並列) は同じなので、数値だけ CircuitMaker からひっぱってきた。 Tina Pro からでもいいかな。

数値は CircuitMaker の Models/CRYSTAL.SUB、Tina Pro の SPICELIB/CRYSTEK.LIB で多少違っていたが、これはつまりどちらが正しいとかではなくて、 本物のほうもそれくらいはバラつくのでどちらのモデルを使っても ちゃんと動くように回路を作らないといけないということだろう。

xtal.net は lib/local_sub/ に、xtal*.asy は lib/sym/ (か、そのサブディレクリ) に置いて使う。

xtal10.asy は 10MHz 用で、そこの Freq=10MegHz てのを Freq=1MegHz にすると 1MHz のクリスタルになればよかったんだけど そうはならない。
共振回路自体の等価的 C や L は正しい値でも、 等価直列抵抗や並列キャパシタが 1MHz の水晶と 10MHz の水晶ではぜんぜん違って、 10MHz の定数 (35Ω、35pF) のままでは発振しない。1MHz では 540Ω と 13pF くらいだそうだ。 というわけで、xtal1.asy では SpiceLine も 1MHz 用に書き換えた。 ... 他の周波数も以下同様っつーか、めんどくせ。

VTEMP付き MOS FET

Fairchild の低電圧用 MOS FET FDN337N、MOUSER で一個 50円位、の spice model 冒頭部分。
*FDN337N at Temp. Electrical Model
*-------------------------------------
.SUBCKT FDN337N 20 10 30 50
*20=DRAIN 10=GATE 30=SOURCE 50=VTEMP
Rg 10 11x 1
Rdu 12x 1 1u
...
Dual gate なんぞではない普通の 3 ピンの MOS FET だが、 モデル上で端子が drain, gate, source, vtemp と何故か 4 本ある。

そのあたりの説明書きはこのあたり にあることになっていて、 "50" というノードは "Power dissipation input node" だというのがなんとなくそれっぽいが、 その直前に "3" が Drain terminal だってんだから notation は全く別物だろう。

また、ここで 同じことを疑問に持つ人は居て、 返答あって曰く「ネーミング的にダイ温度っぽい。プローブ繋いでみ」とあるが繋いでみれば ピタっと 0 に張り付く。モデル実装的にも出力ピンでなく入力ピンぽいし。

OrCAD や Tina Pro がどうしてるかといえば、 上述の Fairchildの説明書きページにある FSDMOS のほうを使っている。こちらは VTEMP ノードの無い 3 ピンのモデルと、 thermal 専用モデル (らしいんだが、ノードの説明がないので使い方が分からん)。

両者に含まれる FDV301N で比較してみると、 本家から拾えるモデル(Rev B1; 2002 5/15) と FSDMOS のモデル(Rev A; 1997 6) では前者のが新しそうだが内容は後者はテーブルがあったりして凝ってんな。閑話休題。

とりあえず vtemp に適当に代入してみると、 Vgs - Id 特性での温度設定用変数らしい。それっぽく変化した。

ただデータシートと振る舞いは異なる (データシートでは 3 本の交差が 1.7V-4.5A にあるが 上記グラフでは 1.6V-3.6A にある) し、Vds - Is や Vgs - Ron 特性への効果もないようだ。 VTEMP 変えてもグラフに変化がない。

FSDMOS のモデルはというと Vds - Is や Vgs - Ron 特性にも効果があってかなり正しいが Vgs - Id 特性への影響は出鱈目に近いな。う〜、なんでこんな変なモデルポリシーになってんだろう。

てことで、こんな感じかなぁ:

*FDN337N at Temp. Electrical Model
*-------------------------------------
.SUBCKT FDN337N 20 10 30
*20=DRAIN 10=GATE 30=SOURCE 50=VTEMP
Vtemp 50 0 {TEMP}
Rg 10 11x 1
Rdu 12x 1 1u
...
vtemp のピンを削り、ノード 50 に TEMP (volt) の電圧を掛ける。 これで TEMP (度) を指定したことになる。 上のグラフはこのモデル使ってるのでパラメータには TEMP を指定してる。 もちろん LTspice の TEMP のデフォルトは普通に 27 (度)になっている。

余談。
スイッチの過渡特性の肩の具合 (D-G 間の貫通電流と G-S 間の貫通電流の出方の時間差) まで実物と良く合って、 モデルの出来はけっこう良い。 ... 温度のことは、まあ、しょうがないんだろう。27 度で使うぶんにはデータシートぴったりだし。
で、そうなってくると Pch の FDN302P/304P のモデルがやや不安定で、ゲート抵抗を大きくすると収束しなくなるのが気にかかる。 Pch だから不安定ってことはなく、FDN338P はふつーに安定して使えるんで、 FDN304P って実は (モデル同様) 本物のほうも御し難い石だったりするんかいなと思っていたりもする。
FDN337N のコンプリてことになっている FDN338P より FDN304P のが低抵抗で良さげなんだけどな。

MC34063

1.5A 級汎用 DC-DC。セカンドソースに NJM2360 てのがあって、秋葉で 1 個 100 円くらい。 Spice model もメーカーに存在する。が、エラーが出て使えない。 エラーになる問題の表現はこんなの (2 箇所ある):

B3 9 0 V=(v(6,90) > 3) ? v(diff,90) > 1 ? 0 : v(vdd)
3 項演算子 ?...:... が二つ重なっているらしいが、":' が 1 個しかなく、条件分岐の後半が省略されている。 ヤマカンで
B3 9 0 V=(v(6,90) > 3) ? v(diff,90) > 1 ? 0 : v(vdd) : v(vdd)
こんなんにしてみたところ、エラーにはならないものの収束しない。 DC-DC のシミュレーションが遅いのは覚悟の上だが、1 ステップも進まないのはイヤすぎる。てか、 この修正でいいのかどーか自信ないし。

というわけで、旧版をここ から拾ってきて使っている。Basso 氏の "Spice Switch-Mode Power Supply SPICE Simulation Cookbook" の概覧なページ。 この旧版(ver 1.0) と今のオンセミにある ver1.1 とをつきあわせれば訂正の仕方は分かるはずだが、 ... つーか、上の修正で良いっぽいんだが、動かないもんは動かないんである。よーわからん。

ところで。データーシートにある回路を組んでちょいと変換効率をみればデーターシートの数値をかなり下回った。 世の中そんなもんと拗ねたくなったが、 DC-DC の入力電流は DC-DC の出力電圧よりも遥かにゆっくりと定常値に向かうので、 出力が安定して定常状態に入ったようにみえても、 入力電流はまだかなり過大評価になっているというオチだった。 初期値指定して加速してなおシミュレーションがとっても遅いので、出力が安定したところで打ち切りたくなるからねぇ。

左端時点でシミュレーション開始から 6ms が経っている。6.5ms くらいで出力は安定したようだが、 入力電流はシミュレーション開始から 30ms 経過してもまだ安定してない。この時点で効率 78% ってとこで、 もうすこし良いだろう。データシートによれば 87.7% だそうだが、 インダクタに抵抗成分 (60mΩ) があるとしたので最終的な結果はデータシートをやや下回るはずだから、 まずこんなもの。 回路図上では何気に入手性のよい NJM2360 を名乗るが、 呼びだされるサブサーキットは MC34063 である。 そのモデルファイルの MC34063.lib のほうは上述 URL からどーぞ。

EL4083

Elantec の 4 象限アナログ乗算器。秋月で 1400円。

データシートに spice model が載っているのがさりげなくとっても良い。
... んだけど OCR で吸い上げたっきりなのか誤字だらけだったりするので ちゃんとモデルファイルのほうを使いましょう(当然だ)。
モデルファイルの存在をしらなくてデータシートから起こして書き直した人がここに居るがな(泣)。

ところで、このモデル、GND ピンがなく、内部的に基準GNDの 0 直結になっている。 気分的にアレだったので、0 を GND に直して GND ピンを追加した。

GND ピン追加しといて 0 に落しているが細かいこと気にしてはいけない。
GND を 0 にしておくのを前提とするモデルなら、 どっちみち GND を浮かしての動作での CMRR 特性のシミュレーションとかに期待は出来ない。 ここでの GND ピンはほとんど消費電流監視のためにある。

74HC04/14

HC CMOSシリーズのインバーター。 Philips から。 ほんとは VHC のほうが欲しいんだが、作ってないものはおいてない訳で。 Fairchild の VHC モデルは Vcc=3.3V に対応しとらんようなので意味なし ... と思っていたが、 そもそも圧縮みたいなのがかかっていて LTspice で使えん。FET は普通に汎用的だっただけに HSPICE 専用とは意表。
それはともかくアナログモデル的に必要なのは HC04/HCU04/HC14 の 3 種。あとは別にデジタルでも困らんてことで、 とりあえずこいつらだけ作った。

デバイスモデルが fast/normal/slow と 3 種類あり、モデルファイルを切替えて使うようになっている。 ... なにがどう違うのか知らない (中身のサブサーキット名が同じなのでそのままでは同時に使えず、比較できない)が、 どーせ VHC 代替で使うモデルなので fast 固定で使ってたり。

ほとんど 1 行かそこらしか違わないので量産が効く(笑)。 モデルファイルの HC_TFAST.CIR (or HC_TNORM.CIR, HC_TSLOW.CIR) は Philips の hc.zip から。

Wine

LTspice/SwitcherCAD III は windows 用のソフトである。 が、何も考えずとも wine で素直に動くので linux 上から使っている。 System フォントでは waveform で文字が出なかった (Ariel フォントにすると出た) のと、 点線の描き方が下手 (Bode 図でちょち困る) なのがちょっとナンだっつーくらい。

CircuitMaker student ed. も wine でふつーに動くので、この手のシミュレータは大丈夫なんかと思ったが、 OrCAD lite や Tina Pro はダメだった。む〜。

References


[日記へ] [目次へ]