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


※ 当ページには【広告/PR】を含む場合があります。
2021/10/04
【LTspice入門】電源(V/Bシンボル)を使って自作コンポネントを作成する方法
蛸壺の中の工作室|自作サブサーキットモデルで回路シミュレーションに組み込む



しばらくLTspiceを触るのもご無沙汰しておりまして、久しぶりに触ると思い出す手順が多くて困ってしまう時があります。
今回は自分の防備録も兼ねて、LTspiceの自作コンポーネント作りの基礎的なテクニックを実例を踏まえながら考えてみたいと思います。
なお著者のメインの開発環境はLinux(Debian)上で動作させております。
WindowsやMacOSではインストール版が存在しますのでLTspiceは簡単に利用できますが、Linuxで利用されるのには少し工夫が要ります。
Linuxで利用をしたい方は以前の記事をご覧ください。

合同会社タコスキングダム|蛸壺の技術ブログ
【LTspice】Debian LinuxでLTspiceをインストールしてみる

LTspiceをDebian Linuxにインストールして起動させてみる手順をまとめます。


サブサーキット形式とは?



まずは少しSPICEのコンポネントモデルを記述する上で欠かせない、
サブサーキット形式 をおさらいしておきます。
以前の記事の中で、メーカーサイトから提供されたサブサーキット形式のライブラリファイルのインポートの行い方に触れました。


合同会社タコスキングダム|蛸壺の技術ブログ
【LTspice】サブサーキットファイルでのモデル追加 〜 LM358の場合

実例をとりながらLTspiceにサブサーキットモデルを追加する手順を解説します。




今回の趣旨では自作のサブサーキットファイルを作って、コンポネントシンボルに割り当てることが狙いです。
ので、まず以下のような何もしないサブサーキットファイルを作成しましょう。

            *
* ①作成者のコメント・利用方法などを記述
*
.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の理解を深めるには良いやり方です。
じっくり学習したい方は自作のモデルをテキストファイルで記述していくことに慣れるところから始めると効果的です。