【LTspice入門】自作サブサーキットモデルで回路シミュレーションに組み込む
※ 当ページには【広告/PR】を含む場合があります。
2021/10/04

しばらくLTspiceを触るのもご無沙汰しておりまして、久しぶりに触ると思い出す手順が多くて困ってしまう時があります。
今回は自分の防備録も兼ねて、LTspiceの自作コンポーネント作りの基礎的なテクニックを実例を踏まえながら考えてみたいと思います。
なお著者のメインの開発環境はLinux(Debian)上で動作させております。
WindowsやMacOSではインストール版が存在しますのでLTspiceは簡単に利用できますが、Linuxで利用されるのには少し工夫が要ります。
Linuxで利用をしたい方は以前の記事をご覧ください。
サブサーキット形式とは?
まずは少しSPICEのコンポネントモデルを記述する上で欠かせない、
サブサーキット形式
以前の記事の中で、メーカーサイトから提供されたサブサーキット形式のライブラリファイルのインポートの行い方に触れました。
今回の趣旨では自作のサブサーキットファイルを作って、コンポネントシンボルに割り当てることが狙いです。
ので、まず以下のような何もしないサブサーキットファイルを作成しましょう。
*
* ①作成者のコメント・利用方法などを記述
*
.SUBCKT [②コンポネント名] [③...ピンアサイメント]
*
* ④内部要素の特性を定義
*
.ENDS
まずサブサーキット形式はSPICEで利用されるライブラリのコンポネントの記述形式の一つです。
*
上の基本フォーマットで①の箇所は、利用者に向けた情報を記述してある場合が多いようですが、無くても構いません。
②の箇所は回路図面で利用させるコンポネントの名前です。
この名前はシンボルファイルのアトリビュートで
Value
③はコンポネントが外部から接続されるためのピンの名称を配列で記述します。
④の部分が内部要素ごとの電気特性とノード(接続点)間の接続関係を記述していくエリアになります。
SPICEではまさにこの④の部分の実装が奥深く、回路シミュレーション結果の良し悪しに直結することになります。
以降ではじっくりとこの④の実装をどう読み解けば良いのかの基礎に触れていこうと思います。
最低限覚えて置くべきは、最小の構成要素の種類は、行頭の頭文字(Prefix;プレフィックス)で表現されるということです。
一部ですがよく使う主要なプレフィックスとしては、
以降の節からは自作のサブサーキットモデルをどのように回路シミュレーションへ取り込むのかを簡単な例をもって説明していきます。
自作コンポーネントのシンボル作成
LTspiceで自作のサブサーキットモデルを回路の要素としてつかうためには
シンボル
今回は仮想的なシンボルとして、以下のような部品を考えてみましょう。

この自作部品は4つのピンを持った特に意味はない抽象的な部品です。
INP (1)
OUT (2)
VCC (3)
GND (4)
まずはこのシンボルの作成方法をおさらいしましょう。
シンボルファイルの作成手順
LTspiceの初期画面で、
[file] > [New symbol]

このシンボルエディタ上でシンボルの作成作業が可能です。
基本は右クリック(メニューバーからでも選択可能)から必要な作業ツールが選択できます。

このツールはいくつかありますが、今回は適当に
四角([Draw] > [Rect])
線([Draw] > [Line])
描く基本図形を選んで、描き始めの座標で左クリック、描き終わりで右クリックです。

とりあえず適度にお絵描きしたところで、このシンボルを
1.asy
Version 4
SymbolType CELL
LINE Normal -64 0 -32 0
LINE Normal 0 -64 0 -32
LINE Normal 64 0 32 0
LINE Normal 0 64 0 32
RECTANGLE Normal 32 32 -32 -32
ファイルを見ていただければ分かるように、asyファイルも特定のフォーマットを持ったテキストだと分かります。
現時点では四角一つと直線4つを適当に書き入れただけですので、中身を覗くとなんとなくお分かりかと思います。
Version 4
SymbolType
BLOCK(デフォルト)
CELL
このブロックか、セルか、の使い分けは、シンボルとして使う要素に階層化回路図面(ブロック図面)を仕込むかどうかで判断が分かれます。
今回はどちらに設定しても構いませんが、回路の階層化はここでは解説しませんので、
CELL
シンボルの作図を進めましょう。
右クリックから
Add Pin
このピンと呼ぶ特別なノードにより、回路図上でシンボルが外部の要素に接続できるようになります。

ピンの設定は
Label(ピンノードのラベル名)
Netlist Order(リスト番号)
後はラベル名をどの位置に表示するかを調整する場合には
Pin Label Justification欄
ピンノードの設定ができたら、
[OK]

この内容を変更後に
1.asy
*...中略
PIN -64 0 RIGHT 8
PINATTR PinName INP
PINATTR SpiceOrder 1
また、設定したピンの属性で座標・ピンノード名・ノード番号もそれぞれ設定されていることが分かります。
同じ手順で残りの3つのピンノード(
OUT/VCC/GND

この時点で、追加した4つのピンノードの定義部分を抜き出すと以下のようになります。
*...中略
PIN -64 0 RIGHT 8
PINATTR PinName INP
PINATTR SpiceOrder 1
PIN 64 0 LEFT 8
PINATTR PinName OUT
PINATTR SpiceOrder 2
PIN 0 -64 BOTTOM 8
PINATTR PinName VCC
PINATTR SpiceOrder 3
PIN 0 64 TOP 8
PINATTR PinName GND
PINATTR SpiceOrder 4
まだサブサーキットライブラリとのリンクさせるためのシンボル属性の設定は済んでおりませんが、この
1.asy
./lib/sym
$ tree -L 3
.
└── LTspiceXVII
├── examples
│ ├── Educational
│ └── jigs
└── lib
├── cmp
├── stamp.bin
├── sub
└── sym #👈シンボルファイルの保存先
空のサブサーキットでテスト
自作のサブサーキットファイルを作って、先程のシンボルに割り当てる作業から説明します。
まず以下のような何もしないサブサーキットファイルを作成しましょう。
.SUBCKT MY_CUSTOM_R1 1 2 3 4
* (中身は空っぽ)
.ENDS
コンポネント名は
MY_CUSTOM_R1
このファイルを
1.subckt
モデルファイルの保存先も特定の場所以外では、LTspiceのシンボルはプログラム外部の呼び出しができません。
LTspiceのインストール先のフォルダ直下の、
./lib/sub
$ tree -L 3
.
└── LTspiceXVII
├── examples
│ ├── Educational
│ └── jigs
└── lib
├── cmp
├── stamp.bin
├── sub #👈サブサーキットファイルの保存先
└── sym
./lib/sub
今回は自作ライブラリというとで、
MY_CUSTOM
1.subckt
シンボルにモデルを紐付け
それではこのサブサーキットモデルを、先程作成したシンボル(
1.asy
再びシンボルエディタから
1.asy
右クリックして、
[Attributes] > [Edit Attributes]

Symbol Attributes Editor
Prefix: X
Value: MY_CUSTOM_R1
Modelfile: MY_CUSTOM/1.subckt
これらの属性を軽く解説すると、まず
Prefix: X
Value
この
Value
MY_CUSTOM_R1
ModelFile
先程
./lib/sub
MY_CUSTOM/1.subckt
sub
シンボルの属性を入力後に
[OK]
この変更内容を適用後、
1.asy
*...中略
SYMATTR Prefix X
SYMATTR Value MY_CUSTOM_R1
SYMATTR ModelFile MY_CUSTOM/1.subckt
*...略
LTspiceの自作コンポネントを利用する場合、.asyファイルと.subsktファイルの扱いが重要になります。
特にリソースファイルの配置は重要で、今回だと以下のようになっています。
$ tree -L 3
.
└── LTspiceXVII
└── lib
├── sub
│ └── 1.subckt
└── sym
└── 1.asy
これで通常通りの図面作成でライブラリから
1.asy

悪乗りでこのまま、この空のシンボルを使って適当な回路図を描いてみます。

当然、今のままではモデル定義も空ですので、内部の配線は全て断線している状態です。 無理矢理測定を実行してみると解析エラーが発生します。

サブサーキットモデルの作成
シンボルファイルの作成の話で前置きが長くなりましたが、ここからはサブサーキットモデルの作成手順を説明していきます。
自作のコンポーネントを正常に動作させるために、サブサーキットを適切に内部の要素定義と配線を行っていけば良いわけです。
なおLTspiceでは、一般にコンポーネントの内部定義を作る方法として、
1. サブサーキットファイルを手動でハードコーディング
2. 階層化回路を埋め込む
の2つ方法があります。
1のやり方が基本になります。 今回の内容も1の方法で解説しています。
もう一つの2のやり方はかなり複雑な構造を持つICプロダクトなどのモデル化に無くてはならない手法です。 LTspiceにある程度使い慣れてきてから試してみるのが宜しいかと思います。
抵抗の直列モデル
初歩的な回路でサブサーキット回路の中身を埋めて、モデル化の理解を深めてみましょう。
まずここでは2つの抵抗を利用して以下のような内部構成を持つ素子(と呼ぶにはあまりにシンプル)モデルを作成します。

この模式図は、INP(ピン1)とOUT(ピン2)の間に2つの抵抗R1とR2を直列で接続し、その中間の接続ノードを5という構成を表しています。
VCC(ピン3)とGND(ピン4)に関してはまだ未接続にしておきます。
ではこのイメージを念頭に、内部構造のサブサーキットファイル
1.subckt
.SUBCKT MY_CUSTOM_R1 1 2 3 4
*ここから回路の実装を追記
R1 1 5 30
R2 5 2 100
*実装終わり
.ENDS
今回は定抵抗だけ構成されていますが、回路素子の記述方法は種類によって規約があります。
抵抗(プレフィックス:
R
R** [接続ノード1] [接続ノード2] [抵抗値(Ω)]
となります。
先の素子内部イメージでいうと、
R1
R2
もう少し詳しいLTspiceの抵抗の定義については、
この修正を
1.subckt
.op

分圧計算が実行されて、それらしい結果が得られていることが分かります。
抵抗の並列モデル
次に先程直列に繋いでみた抵抗を並列繋ぎで試してみます。

このイメージから、先程の
1.subckt
.SUBCKT MY_CUSTOM_R1 1 2 3 4
*ここから回路の実装を追記
R1 1 2 30
R2 1 2 100
*実装終わり
.ENDS
再度DC動作点解析をかけると、

並列繋ぎにした分、抵抗値が小さくなってそうな結果が見て取れます。
ホイルストーンブリッジ風
もう少しサブサーキットを複雑化させて、まだ未使用だったVCC(ピン3)とGND(ピン4)も使ってみましょう。

このイメージ回路から、
1.subckt
.SUBCKT MY_CUSTOM_R1 1 2 3 4
*ここから回路の実装を追記
R1 1 3 30
R2 3 2 100
R3 1 4 30
R4 4 2 100
*実装終わり
.ENDS
シミュレーション用の回路も接続を以下のように修正し、三度DC動作点解析をかけると、

と分圧計算の結果をエラー無く得ます。
まとめ
以上、手動でテキストファイルをハードコーディングしていくスタイルのサブサーキットモデルの作り方を、もっとも簡単な自作のコンポーネント作成方法を解説していきました。
今回は抵抗プレフィックス・Rだけしか使いませんでしたが、他にも様々な種類の基礎メソッドが存在していますので、気になる方は
簡単な内部構成のコンポーネントでは手動による実装も可能ですが、より複雑な内部構造を持つモデルの構築には、図面階層化のテクニックを使うほうが現実的です。
とはいえ、今回のやり方はSPICEの理解を深めるには良いやり方です。
じっくり学習したい方は自作のモデルをテキストファイルで記述していくことに慣れるところから始めると効果的です。