【LTspice入門】自作サブサーキットモデルで回路シミュレーションに組み込む


2021/10/04
蛸壺の中の工作室|自作サブサーキットモデルで回路シミュレーションに組み込む

しばらくLTspiceを触るのもご無沙汰しておりまして、久しぶりに触ると思い出す手順が多くて困ってしまう時があります。

今回は自分の防備録も兼ねて、LTspiceの自作コンポーネント作りの基礎的なテクニックを実例を踏まえながら考えてみたいと思います。

なお著者のメインの開発環境はLinux(Debian)上で動作させております。

WindowsやMacOSではインストール版が存在しますのでLTspiceは簡単に利用できますが、Linuxで利用されるのには少し工夫が要ります。

Linuxで利用をしたい方は以前の記事をご覧ください。


サブサーキット形式?

まずは少しSPICEのコンポネントモデルを記述する上で欠かせない、サブサーキット形式をおさらいしておきます。

以前の記事の中で、メーカーサイトから提供されたサブサーキット形式のライブラリファイルのインポートの行い方に触れました。

今回の趣旨では自作のサブサーキットファイルを作って、コンポネントシンボルに割り当てることが狙いです。

ので、まず以下のような何もしないサブサーキットファイルを作成しましょう。

            *
* ①作成者のコメント・利用方法などを記述
*
.SUBCKT [②コンポネント名] [③...ピンアサイメント]
*
* ④内部要素の特性を定義
*
.ENDS
        
まずサブサーキット形式はSPICEで利用されるライブラリのコンポネントの記述形式の一つです。

*から始まる行はコメントとして扱われます。

上の基本フォーマットで①の箇所は、利用者に向けた情報を記述してある場合が多いようですが、無くても構いません。

②の箇所は回路図面で利用させるコンポネントの名前です。

この名前はシンボルファイルのアトリビュートで
Valueでも利用されるので、ライブラリ内の他のコンポネントの名前と重複しないような命名をする必要があります。

③はコンポネントが外部から接続されるためのピンの名称を配列で記述します。

④の部分が内部要素ごとの電気特性とノード(接続点)間の接続関係を記述していくエリアになります。

SPICEではまさにこの④の部分の実装が奥深く、回路シミュレーション結果の良し悪しに直結することになります。

以降ではじっくりとこの④の実装をどう読み解けば良いのかの基礎に触れていこうと思います。

最低限覚えて置くべきは、最小の構成要素の種類は、行頭の頭文字(Prefix;プレフィックス)で表現されるということです。

一部ですがよく使う主要なプレフィックスとしては、

プレフィックス

対応要素

C

容量

D

ダイオード

J

JFET

L

インダクタ

M

MOSFET

Q

バイポーラ・トランジスタ

R

抵抗

V

独立電圧源

X

外部サブサーキット要素

以降の節からは自作のサブサーキットモデルをどのように回路シミュレーションへ取り込むのかを簡単な例をもって説明していきます。


自作コンポーネントのシンボル作成

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はシンボルファイルのお約束なのでこういうものだと思ってもらって、次の行に目をやるとSymbolTypeBLOCK(デフォルト)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をLTspiceで利用するために、LTspiceのインストール先のフォルダ直下の./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] [抵抗値(Ω)]
        
となります。

先の素子内部イメージでいうと、
R1R2の両端の接続ノードと、その内部抵抗値をそれぞれ定義しているというだけのことです。

もう少し詳しいLTspiceの抵抗の定義については、
R. Resistor|LTspice WIKIでご覧になれます。

この修正を
1.subcktに適用させて、以下のようなテスト回路で簡単にDC動作点解析(.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だけしか使いませんでしたが、他にも様々な種類の基礎メソッドが存在していますので、気になる方は
LTspice Annotated and Expanded Help*|LTspice WIKIのヘルプなどで詳しい用法を確認してください。

簡単な内部構成のコンポーネントでは手動による実装も可能ですが、より複雑な内部構造を持つモデルの構築には、図面階層化のテクニックを使うほうが現実的です。

とはいえ、今回のやり方はSPICEの理解を深めるには良いやり方です。

じっくり学習したい方は自作のモデルをテキストファイルで記述していくことに慣れるところから始めると効果的です。
記事を書いた人

記事の担当:taconocat

ナンデモ系エンジニア

電子工作を身近に知っていただけるように、材料調達からDIYのハウツーまで気になったところをできるだけ細かく記事にしてブログ配信してます。