LTspiceを使った回路設計手法3 :ライブラリの構造と変更法
 

ここでは、LTspiceでファイルの階層構造を使ってオリジナルの回路や素子を部品として使う方法を検討します。
まずはLTspiceがどのような仕組みで動いているのかを理解し、そのうえでどう変えるかを確認します。


●準備として、WindowsによるLTCフォルダの制限を解除

LTspiceに新しく回路や素子モデルを追加することは、多少なりともファイルの中をいじることになります。
オリジナルのProgram Filesフォルダ配下のアプリケーションフォルダを温存して、ミラーのフォルダ(VirtualStore)内で
作業もできるようですが、いちいちオリジナルとの差分を気にしていては煩わしいので、オリジナル上で作業します。

インストール後は「C:\Program Files (x86)\LTC\LTspiceIV」あたりに必要なファイルが入っています。
このLTCフォルダを右クリックしてプロパティを開き、セキュリティの設定を編集で自分のユーザー名に対して
フルコントロールに変更します。(最初は書き込みと変更が拒否されている状態) →これで自由に変更ができる。


●互換性に関する注意点

LTspiceに後から加えたオリジナルな部品は、そのPCでしか動きません。
他のPCで動かすには、変更したライブラリも一緒に取り込むか、ライブラリに頼らずに回路図ファイルの中に
すべての情報を入れるかの2通りです。

WEBからライブラリを取り込んで実行する機能もあるので、公開する回路にオリジナルな部品や集積回路(SUBCKT)を
入れたいときはこれを利用すべきでしょう。


●ライブラリの構造を知る

LTspiceをUPDATEすると、オリジナルに変更を加えた部分が壊される事も考えられるので、独自に変更する内容を
フォルダで分けて別に管理したくなります。その場合、正しく動すにはファイル構造を良く理解して内部動作に
合わせることが必要です。

回路の解析に必要な部品に関する定義ファイルは、\LTC\LTspiceIV\lib\ の中に入っています。

・cmp\ フォルダ:standard.bjt など標準の部品ライブラリ群を入れる。
 ここに入っているファイルが標準の部品の特性を定義しています。
 standard.bjtなど、.cap, .jft, .mosのファイルタイプが部品種別(Q,C,J,Mなど)に対応し、
 LTspiceは種別ごとに特別なメニュー表示を出すように動作します。(特別扱いの部品)

・sub\ フォルダ:4N25.sub、 LT1083.lib などcmp以外の部品ライブラリが全部入っている。
 この沢山のファイル群が、.subで定義される回路ブロックの情報です。
 部品種別"X"と"A"がこのフォルダで定義されます。
 .libは.subをたくさん含むライブラリで、LTCのOPアンプなどが定義されています。
 単に.subを呼び出すときはこのフォルダがデフォルトになり、階層を変えるときにはこのフォルダからの
 相対パス、または絶対パスでのファイル指定が必要です。

・sym\ フォルダ:ここにある.asyのファイルが回路図のシンボルとNetlistとの結びつきを定義しています。
 第一階層のシンボル:ここに置いたシンボルは、すぐ拾える所に表示されます。
 一階層下のフォルダ内:一旦フォルダを選択してからシンボルを拾う操作になります。
 (AutoGenerated\ 、Opamps\ 、Misc\など)


●ファイル名(タイプ)の整理:LTspiceで使われているファイルのタイプのまとめ

.asc 画面で書いた回路図全体のファイル。中身はテキストで、scad3が絵を書くのに必要な情報だけ。
   実行すると、実際にシミュレーションする"SPICE Netlist"を作成して解析を行う。
   ファイルを置く場所は任意。

.sub 集積回路(SUBCKT)のspiceモデル定義ファイル。中身はSPICE Netlistとほぼ同じ、テキスト情報。
   sub\フォルダに入れることで、実行時に.netの指定から呼び出される。一部はバイナリ。

.lib 複数の.subを含むライブラリ集。sub\フォルダに入れる。.subと同じ働き、中身はテキスト。

.asy シンボル定義ファイル。sym\フォルダに入れることで実行時に.ascから呼び出される。

.net 回路図.ascを実行する際に生成される、SPICE Netlist。
.raw 回路図.ascを実行する際に生成される、波形データ。
.log 回路図.ascを実行する際に生成される、SPICE Error Log。
.fft 波形データをFFTしたファイル。

 この4つは、回路図.ascをRUNすると同じフォルダ内に自動で作成されます。
 (初期設定を変えると、回路図を閉じるときに全部を自動で消去することもできる。)

.plt グラフの設定情報を保持するファイル。(グラフ設定を保存指定すると作成)



ここからは、実例を使ってLTspiceの動作を確認します。

●実際に動かす回路の説明
 

右の「Draft1.asc」が、説明用に作った回路図である。回路マクロの"X1"と"U1"を含み、それぞれの回路シンボルはその下の「TwinT.asc」、「HPF.asc」を呼び出す構造となっている。

最初の回路図中には半導体のD1,D2,Q1,Q2があるが、これも新規に定義した部品である。

U2=LT1002のみは最初から用意されている部品で、回路ライブラリからの参照の仕方の違いを比較するために使用した。

D1=1SS133, Q1=C1815, Q2=A1015の3個は、cmp\内のstandardライブラリを直接書き換える方法で追加。

D2=1N60は、回路図中に".model"コマンドを使って定義してある。
この方法は、すでに用意されている品番に対しても有効なので、部品の特性を変化させてみたいときに便利に使える手法である。

X1=TwinT.ascは、"Draft1.asc"と同じフォルダ内に回路図を置いて、"TwinT.asc"を参照する方法でシンボルを作成、 U1=HPF.ascは、sub\フォルダ内に"HPF.sub"という回路定義ファイルを作成してこれを参照するようにシンボルを作成した。(この方法なら、元の回路図の場所を気にする必要がない)

この回路図は、実際に動くようになっているが、その為には何をどうすればよいのか、内部動作を検証しながら説明する。


まず、Draft1.ascが、内部でどう動くかを調べるために、ファイルをテキストとして(メモ帳で)開いた内容がこれ。
 
【.ascファイルそのもの】

Version 4
SHEET 1 880 680
WIRE 336 -16 80 -16
WIRE 432 -16 336 -16
・(長いので途中省略)
FLAG 80 304 0
FLAG -144 400 Vout
FLAG -160 144 Vin
FLAG -144 432 Vin
FLAG 480 432 Vdist
SYMBOL voltage 432 -16 R0
WINDOW 123 0 0 Left 2
WINDOW 39 0 0 Left 2
SYMATTR InstName V1
SYMATTR Value 30
SYMBOL voltage -144 176 R0
WINDOW 3 -55 163 Left 2
WINDOW 123 0 0 Left 2
WINDOW 39 0 0 Left 2
SYMATTR Value SINE(1.5 1 1k)
SYMATTR InstName V2
SYMBOL Opamps\\LT1002
  80 64 R0
SYMATTR InstName U2
SYMBOL diode 192 48 R0
SYMATTR InstName D1
SYMATTR Value 1SS133
SYMBOL diode 192 144 R0
WINDOW 3 36 40 Left 2
SYMATTR Value 1N60
SYMATTR InstName D2
SYMBOL npn 272 0 R0
SYMATTR InstName Q1
SYMATTR Value C1815
SYMBOL pnp 272 256 M180
SYMATTR InstName Q2
SYMATTR Value A1015
SYMBOL res -48 176 R0
SYMATTR InstName R1
SYMATTR Value 1k
SYMBOL res -48 0 R0
SYMATTR InstName R2
SYMATTR Value 9k
SYMBOL res 192 208 R0
SYMATTR InstName R3
SYMATTR Value 1k
SYMBOL res 416 208 R0
SYMATTR InstName R4
SYMATTR Value 600
SYMBOL TwinT 16 416 R0
SYMATTR InstName X1
SYMATTR Value2 gain=10 fc=1k
SYMBOL AutoGenerated\\HPF
 320 432 R0
SYMATTR InstName U1
TEXT 56 -56 Left 2
 !.model 1N60 D(Is=.1n N=1.5)
TEXT -192 -56 Left 2 !.tran 10m

【実行時に作成される .netファイル】

* C:\Program Files\LTC\LTspiceIV\
 ?n¢\Draft1.asc
V1 N001 0 30
V2 Vin 0 SINE(1.5 1 1k)
XU2 Vin N003 N001 0 N002 LT1001
D1 N002 N004 1SS133
D2 N004 N005 1N60
Q1 N001 N002 Vout 0 C1815
Q2 0 N005 Vout 0 A1015
R1 N003 0 1k
R2 Vout N003 9k
R3 N005 0 1k
R4 Vout 0 600
XX1 Vout Vin N006 twint params:
 gain=10 fc=1k
XU1 N006 Vdist HPF fo=1k

* block symbol definitions
.subckt twint dist_in sin_in dist_out
E2 N005 0 N004 0 1
E3 N006 0 N003 0 1
E4 dist_out 0 N001 0 1
R1 N002 N004 {R}
R2 N003 0 {R}
R3 N001 N005 {R}
C1 N004 0 {C}
C2 N002 N003 {C}
C3 N001 N006 {C}
B1 N002 0 V=v(dist_in)-v(sin_in)*gain
.param fo=1k gain=1
.param R=1e6/2/pi C=1e-6/fo
.ends twint

.model D D
.lib C:\PROGRA~2\LTC\LTSPIC
 ~1\lib\cmp\standard.dio
.model NPN NPN
.model PNP PNP
.lib C:\PROGRA~2\LTC\LTSPIC
 ~1\lib\cmp\standard.bjt
.model 1N60 D(Is=.1n N=1.5)
.tran 10m
.lib C:\Program Files (x86)\LTC
 \LTspiceIV\lib\sub\Mysub\HPF.sub
.lib LTC.lib
.backanno
.end

【中身の違いと解説】

.ascファイルは配線の座標を定義する
"WIRE"が延々と続くので、ほとんど
を省略。

.ascファイルの中身は、
 配線ワイヤの位置
 フラグの位置と名前
 部品シンボルの位置と名前が記入
 されているテキスト(電圧源は設定
 値も)が基本であり、それ以外は
 シンボルのファイルが第二階層に
 ある場合の相対パス
 (Opamps\\LT1002)
が付け加えられているだけである。

これ「だけ」の情報から、.netが実行
時に生成されるのであるが、その内
容を見ると様々な新しい情報が付け
加わっている。これらの情報がどこ
から参照されたかが分かればLTspice
の動作が推測できる。

新しい情報は、以下。

・ノード番号:配線情報から自動抽出
・XU1のパラメータ値:シンボル設定から
・"twint"の.subcktファイル:
 →これば、.subを作成していない
 TwinT.ascから自動で作られたもの
 これを作成するための.ascファイル
 を捜索する範囲が同じフォルダ内に
 限定されているので、この方法を
 使う場合は同じフォルダに参照する
 回路を置かなければならない。

・半導体モデル.libや.subファイル
 への絶対パス:
 →sub\ フォルダ直下にある
  "LTC.lib"のみはパスが省略
  されている。
 新たに作成したHPF.subは、
 sub\Mysub\の階層に置いたので
 絶対パスに変換されている。


つまり、回路図のシンボル名から
sym\フォルダ内の .asy=シンボル
定義ファイルが呼び出され、これの
指示によりsub\フォルダ内の
spiceモデル定義ファイルへの
アクセス情報が.netファイルに反映
されるのである。

したがって、シンボル定義ファイル
には「正しい」アクセスパスが得ら
れるように関連付け(sub\フォルダ
内のspiceモデルのパス名)を正確
に記載しなければspiceは動かない。

以上から、シンボル定義ファイル .asyの内容作成が非常に重要である事が分かる。
(回路図からのシンボル名とピン接続の受け渡し、ライブラリへのアクセス情報を握る)

なお、シンボルを作る際にアクセスパスを記載しなくても、回路図中に「.inc」や「.lib」でモデル定義ファイル .subを参照する指示を書けば、.netファイルに反映されるので動かすことができる。
(世の中にはこの方法を推奨している所が多いが、シンボルに定義するほうがスマート。)



●回路図を直接参照する.SUBCKTのシンボルの作り方

1、まず、新しい回路図を「TwinT.asc」として
  最初に紹介した内容で作成


例題の「Draft1.asc」と同じフォルダに「TwinT.asc」の回路図を置き、TwinT.ascを開いた状態にします。

2、次に、回路図を登録するシンボルを作成する

 メニューの「Hierachy」から「Open this Sheet's symbol」を選び、「シートのシンボルがないので、作りますか?」の問いに「はい」で答えて「TwinT.asy」の編集画面を出します。(右図参照)

四角の枠と入出力端子、InstNameはすでにあるので、メニューの「Draw」コマンドのTextで"TwinT filter"を書き加えます。(dist_out端子の位置も下に移動)

キーボードの"Control+A"で「Symbol Attribute Editor」を出して、「Value2」にデフォルト設定値である"gain=1 fo=1k"を書き込みます。

OKで閉じた後、キーボードの"Control+W"で「Attribute Window to Add」を出して「Value2」を選び図の下に表示を追加します。
  →これでgainなどの設定が回路図上から見え、後で編集できる。

 なお、回路図から参照するシンボルでは、「Symbol Attribute Editor」の「Value2」と「Description」以外は空白のままとします。
 →PrefixやValueはNetList作成時に自動で付くので入れるとかえっておかしくなる。ModelFileは、そもそも作らないので指定しない。


3、システムにシンボルを登録する

 上の2つの手順で"TwinT.asc"と"TwinT.asy"の2つのファイルができますので、"LTspiceIV\lib\sym\"のフォルダの中に"TwinT.asy"をコピーします。ここに入れると、シンボルがすぐに拾えるので便利です。
標準で入っているシンボルに混じるのがいやなら、"Misc"や"MySymbol"などのフォルダに入れて整理します。

(注意)
  sym\ の中のフォルダ構造をいじると、.ascからのパス名が迷子になる場合があります。
  フォルダ階層が変わったシンボルは、一度消去してからピックアップし直さないと.ascのパス名が更新されません。

以上の手順で、回路図上に"TwinT filter"の回路を部品として呼び出せます。
gain=1 fc=1kのパラメーター値は回路図上で変更でき、.net上でデフォルト値に対して上書きされます。

この方法では、常に同じフォルダ内に参照する回路ブロックを置かないといけないのが面倒。
 


●シンボルを作らないで直接.subを回路図に書く方法

既存の適当なシンボルを流用して、回路図上で別の回路ブロックを定義する方法もあります。

この方法は、上で説明した回路図から呼び出される.subcktのソース
-------------------------------------------------
* block symbol definitions
.subckt twint dist_in sin_in dist_out
E2 N005 0 N004 0 1
E3 N006 0 N003 0 1
E4 dist_out 0 N001 0 1
R1 N002 N004 {R}
R2 N003 0 {R}
R3 N001 N005 {R}
C1 N004 0 {C}
C2 N002 N003 {C}
C3 N001 N006 {C}
B1 N002 0 V=v(dist_in)-v(sin_in)*gain
.param fo=1k gain=1
.param R=1e6/2/pi C=1e-6/fo
.ends twint
----------------------------------------------
をそのまま回路図中に.opボタンで貼り付けるので、規模の大きな回路はちょっと邪魔に見えます。
spiceの動作としては、実行時に作成する.subcktのソースを代わりに作ってやるだけなので、全く同じ。

1、.subcktのソースを作る

回路図TwinT.sacを開いてメニューの"View"から"SPICE Netlist"を選ぶと、回路のNetListが 表示されます。
* C:€Program Files€LTC€LTspiceIV€???W€????????v€TwinT.asc
E2 N005 0 N004 0 1
E3 N006 0 N003 0 1
E4 dist_out 0 N001 0 1
R1 N002 N004 {R}
R2 N003 0 {R}
R3 N001 N005 {R}
C1 N004 0 {C}
C2 N002 N003 {C}
C3 N001 N006 {C}
B1 N002 0 V=v(dist_in)-v(sin_in)*gain
.param fo=1k gain=1
.param R=1e6/2/pi C=1e-6/fo
.backanno
.end

これをメモ帳にコピーし、TwinT.txtとして保存します。
そして、.SUBファイルとしての書式に合わせるため、最初の行と最後の2行のみを書き換えます。
(上の自動作成された.subcktのソースと比べると、何が違うかが分かる)

.SUBCKT TwinT dist_in sin_in dist_out
(.backannoは削除)
.ends twint

これで内部回路の定義ができたので、元のTwinT.ascは削除しても構いません。

2、.subcktのソースを対応付けるシンボルの接続を確認する

この回路は2入力、1出力なのでシンボルの[Opamps]のカテゴリの最後にある"opamp"が使えます。

C:\Program Files (x86)\LTC\LTspiceIV\lib\sym\Opamps\opamp.asyを開き、端子の四角を右クリックしてそれぞれの端子の"Netlist Order"の番号を確認します。
 invin =1
 noninvin =2
 out =3
となっていました。

上の.subcktソースでは、「 .SUBCKT TwinT dist_in sin_in dist_out」なので、
 invin =1 =dist_in
 noninvin=2 =sin_in
 out =3 =dist_out
が対応するピン配列となります。希望と違う場合は、ソースの順番で調整します。

3、回路図の部品名に希望の番号を指定する

回路図にopampのシンボルを配置し、部品名を「TwinT」とします。
さらに、回路図中の空きスペースに作った.subcktのソース(テキスト)を.opボタンで貼り付けます。

これで動くはずですが、RUNするとエラーが出ます。
回路図のシンボルを右クリックしてシンボルのAttributeを確認すると、Valueの値が"opamp"になっています。これが原因で、実行時に .SUBCKT TwinTが呼び出されなかったのです。

Valueの値をtwintにすれば、OK。
この他にもSpecLine, SpecLine2の値にopamp用の設定が記入されているので、TwinTの回路で使っているパラメータのfo=1k gain=1の値をここに書けば、subcktで定義しているデフォルト値を変えることが出来ます。

例題では.subsktのソースが見えているのでそちらを書き換えるのが早いですが、.subや.libで定義したソースに既存のシンボルを割り付けた場合には、この方法でパラメータを指定するのが正しい方法です。



●回路図を参照しない(.SUBで定義)のシンボルの作り方

もう一つの方法として、.subを使うやりかたを説明します。これが一番スマート。

1、 .subファイルを作る

上と全く同じ方法で回路図 HPF.ascから .subcktのソースを作り、保存した .txtファイルの名前をHPF.subと変え、LTC\€LTspiceIV\€lib\€sub\Mysub\€ に放り込みます。

2、シンボルを作成する

LTspiceを立ち上げて、"OPEN"でC:\Program Files (x86)\LTC\LTspiceIV\lib\sub\Mysub\HPF.sub を開きます。
「.SUBCKT HPF」の部分が緑で表示されていますので、この部分を右クリックすると「Create Symbol」 が現れ、これをクリックして新しいシンボルを作成します。→こちらは自動で枠内が黄色になる。

このシンボルにはすでにPrefix, Value, ModelFileの値が自動で付いています。
手動でValue2の値にデフォルト値のfo=1kを記入して、回路図から見えるように下に配置します。
なお、自動的に表示されたシンボル上の「HPF」は要らないので、文字を右クリックして"Justification"を"(not visible)"とすれば表示されなくなります。→「Delete」で消すと、"Value"の値も消えるので注意。

これを保存すると、勝手にLTC\LTspiceIV\lib\€sym\€AutoGenerated\€ のフォルダが作成され、この中に先ほど作ったHPF.asyが入っています。(これですべて完了)

3、作った回路ASSYを使う

回路図でシンボルを配置するときに、ピックアップリストの一番左に[AutoGenerated]の項目ができているのでこれをダブルクリックすると、「HPF」というシンボルをピックアップできます。

【余談】
標準で定義されているLT製の部品を見ると、「Symbol Attribute Editor」の「ModelFile」ではなくて、「SpiceModel」の欄に.subファイルへのパスが記入されています。
新たに作ったシンボルで同じ所にパスを記入するとうまくいきません。

実行時の.netを確認すると分かるのですが、本来「Value」があるべき所に「SpiceModel」の指定が現れてしまい、リンクが 壊れてしまうのです。これはLT製品を特別扱いする、LTspiceの「仕様」と思われます。

実際、attribute欄のSpiceModelからSpiceLine2までの5行に書かれた情報は、.netの作成時に単純に1列で並んで出てくるだけです。 したがって、「Value」の値が1番目に出てくるようにしてやれば、その下の部分には何を書いても大丈夫。

この辺りのAttribute属性の書き方がかなり複雑怪奇なので、ちょっと整理してみました。
その他の注意点も含めて、参考としてください。

   →参考資料: 回路図シンボルの"Attribute"属性についてのまとめ


●既存のシンボルに.SUBや.libで定義した回路を割り付ける方法

基本的に、上で説明している手順の組み合わせです。

.subファイルを用意した後、「シンボルを作らないで直接.subを回路図に書く方法」の手順2と3で既存のシンボルを割り当てます。シンボルのAttributeを確認して、「Value」の値が定義した.subのファイル名と一致していること、「ModelFile」の値が、.subを置いたパス名を正確に表しているかが重要。

この方法は、WEBで調べると沢山の事例が報告されています。



●ダイオードやトランジスタの品種追加

これは非常にシンプルです。 C:\Program Files (x86)\LTC\LTspiceIV\lib\cmp\standard.bjtを開いて、
モデルパラメータの値:
.model C1815 NPN(Is=12f Bf=250 Vaf=250 IKF=.40 Rb=50 Rc=1.0 Cjc=4.5p Cje=18p TR=.3u TF=.3n Itf=.5 Vtf=2 Xtf=6 Br=5 Vceo=50 Icrating=150m mfg=Toshiba)
.model A1015 PNP(Is=12f Bf=250 Vaf=100 IKF=0.25 Rb=30 Rc=1.5 Cjc=10p Cje=12p TR=.4u TF=.5n Itf=0.5 Vtf=2 Xtf=4 Br=5 Vceo=50 Icrating=150m mfg=Toshiba)
を書き込むだけです。

ダイオードは\LTC\LTspiceIV\lib\cmp\standard.dioに、
.model 1SS133 D(Is=.1n Rs=.4 N=1.5 Cjo=2p M=.4 tt=5n Iave=200m Vpk=80 mfg=Rohm type=silicon)
を記入します。
オリジナルに改変した部分は、テキストファイルでバックアップを取っておきましょう。

なお、回路図上でシンボルのPrefix=QN(やOP,MN,MP,JN,JP,Dなど)を"X"に変更して、上で説明した方法で.sub(または.lib, .ckt, .model)を関連付ければ、新しいダイオードやトランジスタを.subcktとして追加できます。

この後は、トランジスタなどの個別モデルパラメータの意味をじっくり検討します。
(上記モデルの"Itf=.5 Vtf=2 Xtf=6 Br=5"などの値の根拠)

    前の項目に戻る     トランジスタのモデルに進む       アンプ設計のTOPに戻る