【LTspice入門】電源(V/Bシンボル)を使って自作コンポネントを作成する方法


2021/10/06
蛸壺の中の工作室|電源(V/Bシンボル)を使って自作コンポネントを作成する方法

電気回路シミュレーションにおいて
「電源」の使い方を理解するのは極めて大切です。

前回では、自作のサブサーキットモデルの作成方法と、それを使った回路シミュレーションの基礎を解説していました。

今回はその内容の続きとして、自作サブサーキットモデルで、
「カスタム電圧源」の定義の仕方を説明します。


Vシンボル電源とBシンボル電源?

まずは電圧源のサブサーキットモデル化に際して、VシンボルBシンボルの2つの構成要素について整理しておきましょう。

前回の内容でも触れましたが、SPICEのサブサーキット形式は、プレフィックス記号を用いて特定の電気特性もった構成要素を定義し、その内部接続を記述していくことでモデル化できます。

一般的に独立(一次)電圧源として用いられるのが、
Vシンボルです。

詳しい用法はLTspice公式に記してある通りですが、利用する文法としては、

            V*** [+側のノード] [−側のノード] [電圧波形を表す関数]
        
で利用します。

Vシンボルを使う場合、発生できる電圧波形の種類は限られており、
PULSE(パルス波) / SINE(正弦波) /EXP(指数関数) / SFFM(周波数変調) / PWL(折れ線) の5つの信号で表現できるものになります。

マルチプレックスな混合波形など、より複雑な電圧波形を表現する必要があれば、任意のビヘイビア電圧(または電流)源である
Bシンボルを利用することになります。

ほとんどの回路シミュレーションはVシンボル電圧源で事足りるため、Bシンボルを使う必要のある回路はマイナーかと思います。

Bシンボルが出来ることは幅広く、FFTなどの高度な操作も可能で、一種のフィルターのような作用を回路シミュレーションに持たせることもできます。

用法としては、

            B*** [ノード1] [ノード2] V=[電圧の評価関数]
        
と利用します。

電圧の評価関数の部分にLTspiceの組込み関数が利用できるので、Vシンボルよりも複雑なロジックをもった電圧波形が発生することが可能です。


電圧源①/Vシンボル

まず最初にVシンボルベースの自作電源を作成手順を見ていきましょう。

自作電圧源(Vシンボルベース)

基本的な自作コンポネントの作り方は前回の記事に従い、ここでは要点だけ掻い摘んで解説します。

今回のシンボルファイルを
v1.asy、サブサーキットファイルをv1.subcktとします。

v1.asyは自作電圧源であるような感じのデザインで、以下のようなシンボルを描いてみました。

合同会社タコスキングダム|蛸壺の中の工作室

以下のような3端子の構成です。

            POS: (1)
NEG: (2)
GND: (3)
        
v1.asyをテキストエディタで開くと以下のようになります。

            Version 4
SymbolType BLOCK
LINE Normal 34 -33 -33 34
LINE Normal 0 95 0 47
LINE Normal 97 1 48 1
LINE Normal -97 1 -48 1
CIRCLE Normal 48 47 -48 -47
SYMATTR Description My custom Voltage Source
SYMATTR ModelFile v1.subckt
SYMATTR Prefix X
SYMATTR Value MY_CUSTOM_V1
PIN -96 0 RIGHT 8
PINATTR PinName NEG
PINATTR SpiceOrder 2
PIN 96 0 LEFT 8
PINATTR PinName POS
PINATTR SpiceOrder 1
PIN 0 96 TOP 8
PINATTR PinName GND
PINATTR SpiceOrder 3
        
このシンボルは共通して利用し、以降で矩形波正弦波三角波を3つの例にとって利用法を考えてみましょう。

矩形波

Vシンボル電源でもっとも利用されているのが、PULSE関数を呼び出す使い方かと思います。

            PULSE(V1 V2 Tdelay Trise Tfall Ton Tperiod Ncycles)
    V1: 初期電圧
    V2: 立上電圧
    Tdelay: 開始遅延時間
    Trise: 立上時間
    Tfall: 降下時間
    Ton: 立上電圧の持続時間
    Tperiod: 周期
    Ncycles: 繰返し回数(指定が無い場合は無限)
        
このPULSE関数を使って以下のようなサブサーキットモデルを割り当ててみましょう。

            .SUBCKT MY_CUSTOM_V1 1 2 3
V1 1 3 PULSE(0 10 0 0.0001m 0.0001m 1.0m 2.0m)
.ENDS
        
早速、この自作電圧源が仕上がりましたので、以下のようなAC解析の回路シミュレーションを作ります。

合同会社タコスキングダム|蛸壺の中の工作室

シミュレーションを実行すると、

合同会社タコスキングダム|蛸壺の中の工作室

となり、POSピンから矩形波が発生しています。

正弦波

サイン波形もすこぶる簡単です。

SINE関数を利用します。

            SINE(Voffset Vamp Freq Td Theta Phi Ncycles)
    Voffset: オフセット電圧
    Vamp: 振幅の大きさ
    Freq: 周波数(Hz)
    Td: 遅延時間
    Theta: 位相の重み係数
    Phi: 位相差
    Ncycles: 繰り返し回数(指定が無い場合は無限)
        
サブサーキットモデルを以下のように修正します。

            .SUBCKT MY_CUSTOM_V1 1 2 3
V1 1 3 PULSE(0 10 0 0.0001m 0.0001m 1.0m 2.0m)
.ENDS
        
シミュレーション内容はそのままに、再度解析実行をかけると、以下のような正弦波がPOSピンから生成されていることが分かります。

合同会社タコスキングダム|蛸壺の中の工作室

三角波

回路によっては三角波やノコギリ波も欲しい時があります。

実はVシンボル電源でも
「裏ワザ」として三角波をPWL(折れ線波形)で生成することが可能です。

PWL(Piecewise Linear)は折れ線関数で、基本的用法が
PWL(t1 v1 t2 v2...)として、任意の時間と電圧値を点として繋いでいくだけの用法しか公式では記されていません。

しかしPWL関数にはL、Tspice Wiki公式のリファレンスには触れられていない
非公式の裏ワザが存在します。

            同じパターンを5回繰り返す:
    PWL REPEAT FOR 5 (0 0 1m 1 2m 1 3m 0) ENDREPEAT

同じパターンを連続して繰り返す:
    PWL REPEAT FOREVER (0 0 1m 1 2m 1 3m 0) ENDREPEAT

時間軸を半分に、高さを2倍にする:
    PWL TIME_SCALE_FACTOR=0.5 VALUE_SCALE_FACTOR=2 (0 0 1m 1 2m 1 3m 0)
        
知ってる人は知っている非公式のテクニックらしいのですが、これを積極的に利用するのもどうなのだろうか...と思います。マクロっぽい文法も混乱しやすいので利用の際は注意して使いましょう。

折角ですのでシミュレーションに使ってみますと、例えばv1.subcktを以下のように書き換えます。

            .SUBCKT MY_CUSTOM_V1 1 2 3
V1 1 3 PWL REPEAT FOREVER (0 0 1m 10 2m 0) ENDREPEAT
.ENDS
        
この内容を適用し、回路シミュレーションを走らせると、

合同会社タコスキングダム|蛸壺の中の工作室

となり確かに周期性をもった三角波が表現できています。

とはいえPWLはリストアップされた点同士を線形補間してそれらしく見せているだけなので、補間点上で得られた値を回路シミュレーションで使うのには、少々信頼性が心許ない...という人も多いと思います。

個人的には後述するBシンボル電圧源で組込関数を使った三角波での回路シミュレーションのほうが少しだけ安心感があります。


電圧源②/Bシンボル

続いてBシンボルベースの自作電源を作成手順を見ていきましょう。

自作電圧源(Bシンボルベース)

前節と同様にまずはシンボルから作成します。

シンボルファイルを
b1.asy、サブサーキットファイルをb1.subcktとして使っていきます。

b1.asyは自作電圧源であるような感じのデザインで、以下のようなシンボルを描いてみました。

合同会社タコスキングダム|蛸壺の中の工作室

先程のv1.asyと同じように以下のような3端子の構成です。

            POS: (1)
NEG: (2)
GND: (3)
        
b1.asyをテキストエディタで開くと以下のようになります。

            Version 4
SymbolType BLOCK
LINE Normal 0 64 0 32
LINE Normal 64 0 32 0
LINE Normal -64 0 -32 0
RECTANGLE Normal 32 32 -32 0
ARC Normal -32 -32 32 32 32 0 -32 0
SYMATTR Prefix X
SYMATTR SpiceModel MY_CUSTOM_B1
SYMATTR Description My practice #1
SYMATTR ModelFile b1.subckt
PIN -64 0 RIGHT 8
PINATTR PinName NEG
PINATTR SpiceOrder 2
PIN 64 0 LEFT 8
PINATTR PinName POS
PINATTR SpiceOrder 1
PIN 0 64 TOP 8
PINATTR PinName GND
PINATTR SpiceOrder 3
        
前節との比較で、このシンボルは共通して利用し、以降で矩形波三角波を2つの例にとって利用法を考えてみます。

矩形波①

Vシンボル電源では表現できない電源電流波形をもった回路では、Bシンボル電源を利用して複雑な波形を生じることができます。

BシンボルのVシンボルにはない特性の一つが、
ノードを指定した電圧値参照です。

例えば回路中で定義したノード3の電圧値を参照したい場合は
V(3)、また回路中で定義したノード4とノード5の電位差を参照したい場合にはV(4,5)というように引き出せます。

この機能から、Vシンボル電源を一次電源に、Bシンボル電源は二次電源(フィルター)として利用されるケースも多いと思います。

つまりこの考え方を先程のb1.asyで利用すると、内部の構成イメージを以下のような回路で捉えることもできます。

合同会社タコスキングダム|蛸壺の中の工作室

本来は矩形波程度でBシンボルを使うことはありませんが、理解促進のためにb1.subcktを以下の内容にしてみます。

            .SUBCKT MY_CUSTOM_B1 1 2 3
V1 4 3 PULSE(0 10 0 0.0001m 0.0001m 1.0m 2.0m)
B1 1 3 V=V(4)
.ENDS
        
このサブサーキットモデルは、V1の波形をそのままB1が出力しているだけです。

あとは前節と同様に、以下のAC解析回路シミュレーションを作成します。

合同会社タコスキングダム|蛸壺の中の工作室

結果は当然のことですが、(Vシンボル電源から得られた)矩形波がPOSピンから出力されています。

合同会社タコスキングダム|蛸壺の中の工作室

矩形波②

Bシンボル電源の任意のノードの電圧電流値参照の機能はとても便利ですが、本来のビヘイビアという意味で様々な組込関数を利用して電圧電流を柔軟に発生させる機能も強力です。

先程のような一次電源にVシンボル電源を補助をすることなしに、Bシンボル電源単独で理想的な矩形波を発生させてみましょう。

b1.subcktを以下のように修正してみます。

            .SUBCKT MY_CUSTOM_B1 1 2 3
.params tper=2.0m vamp=10
B1 1 3 V=vamp*if(time/tper-int(time/tper), 1, 0)
.ENDS
        
なおここで利用したif関数は以下ような関数です。

            if(x,y,z) If x > .5, then y else z
        
またtimeはシステム変数であり、解析時の時間座標値をキャプチャすることができます。

先ほどと違い、Bシンボル電源単体で電圧波形を出力していることに留意してください。

b1.subcktの変更を保存した後で、AC解析を再度実行すると矩形波出力の結果を得ます。

合同会社タコスキングダム|蛸壺の中の工作室

三角波①

Bシンボル電源の扱いに慣れてくれば、おおよその周期関数も、組込関数の組み合わせを発想次第で実現できるようになってきます。

前節でVシンボル電源による三角波の発生を考えてみましたが、Bシンボル電源でもまた別のアプローチでサブサーキットモデルを作ってみましょう。

例えば周期T=2ms, 振幅10Vの三角波は以下のような関数で与えることができます。

            .SUBCKT MY_CUSTOM_B1 1 2 3
.params tper=2.0m vamp=10
B1 1 3 V=vamp*(1-2*abs(0.5-time/tper+int(time/tper)))
.ENDS
        
利用している組込関数はabs関数とint関数です。

合同会社タコスキングダム|蛸壺の中の工作室

ここでの電圧評価関数で何が起こっているのかを簡単に解説すると、

            1. int(time/T) としてステップ関数を生成
2. int(time/T) - time/T で振幅の大きさ1の鋸歯状波を作る
    (ただしマイナス側のオフセット)
3. 0.5 + int(time/T) - time/T で y=0 中心とした鋸歯波に補正
4. 絶対値(abs)をとり三角波(振幅は半値)に変形
5. 三角波が原点を通過するように 1 - 2 * (三角波) で調整
        
三角波までの構成が分かりにくい場合には、順に1〜5までの波形を個別に試していただくと理解できると思います。

三角波②

Bシンボル電源では微積分が利用できます。

単純に矩形波を積分(idt)すると三角波が得られます。

逆にいうと欲しい三角波形の微分形が表現できさえすれば、後は積分関数にお任せすることでより簡潔な表現のサブサーキットモデルも作成できるようになります。

b1.subcktを以下のように修正します。

            .SUBCKT MY_CUSTOM_B1 1 2 3
.params tper=2.0m vamp=10 amp=1.0e3
B1 1 3 V=amp*idt(vamp*if(time/tper-int(time/tper), -1, 1))
.ENDS
        
ここでは前節で解説した矩形波を発生させる関数を単純に積分(idt)することで三角波に変換しています。

合同会社タコスキングダム|蛸壺の中の工作室

ただし積分する時には、周期性を計算する項目(
time/tper)で積分区間が無次元化しています。

これにより積分結果と回路シミュレーションのグラフ表示の単位系の不一致が生じる可能性があります。

また電圧を時間積分しているため、本来物理的に考えるとその結果は仕事量(もしくは電力)の次元を持ちます。

「電圧(矩形波)を積分して、それを別の電圧(三角波)として再利用する」というのはある意味無謀なことをやっています。

そんな細かい物理学的な厳密さには目を瞑るとして、積分で得られた三角波のピーク値を期待した値にするためには補正係数(ここでは
amp)や積分定数(オフセット)を考慮しなければならないことに注意してください。


まとめ

以上、今回はV/Bシンボル電源でサブサーキットモデルをハードコーディングして回路シミュレーションに利用するための方針を簡単な例で説明していきました。

Vシンボル電源でモデル化するか、あるいはBシンボル電源を採用するかは、出力値さえ正しく得られれば特に作成者の好みで決めてよい代物です。

基本的にはVシンボル電源で作成し、ファンクションジェネレータなどはBシンボル電源をフィルター的に噛ませると良いと思います。
記事を書いた人

記事の担当:taconocat

ナンデモ系エンジニア

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