【LTspice入門】電源(V/Bシンボル)を使って自作コンポネントを作成する方法
※ 当ページには【広告/PR】を含む場合があります。
2021/10/06

電気回路シミュレーションにおいて
「電源」
今回はその内容の続きとして、自作サブサーキットモデルで、
「カスタム電圧源」
Vシンボル電源とBシンボル電源?
まずは電圧源のサブサーキットモデル化に際して、
一般的に独立(一次)電圧源として用いられるのが、
Vシンボル
詳しい用法はLTspice公式に記してある通りですが、利用する文法としては、
V*** [+側のノード] [−側のノード] [電圧波形を表す関数]
で利用します。
Vシンボルを使う場合、発生できる電圧波形の種類は限られており、
PULSE
SINE
EXP
SFFM
PWL
マルチプレックスな混合波形など、より複雑な電圧波形を表現する必要があれば、任意のビヘイビア電圧(または電流)源である
Bシンボル
ほとんどの回路シミュレーションはVシンボル電圧源で事足りるため、Bシンボルを使う必要のある回路はマイナーかと思います。
Bシンボルが出来ることは幅広く、FFTなどの高度な操作も可能で、一種のフィルターのような作用を回路シミュレーションに持たせることもできます。
用法としては、
B*** [ノード1] [ノード2] 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
このシンボルは共通して利用し、以降で
矩形波
正弦波
三角波
矩形波
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(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
前節との比較で、このシンボルは共通して利用し、以降で
矩形波
三角波
矩形波①
Vシンボル電源では表現できない電源電流波形をもった回路では、Bシンボル電源を利用して複雑な波形を生じることができます。
BシンボルのVシンボルにはない特性の一つが、
ノードを指定した電圧値参照
例えば回路中で定義したノード3の電圧値を参照したい場合は
V(3)
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
ここでは

ただし積分する時には、周期性を計算する項目(
time/tper
これにより積分結果と回路シミュレーションのグラフ表示の単位系の不一致が生じる可能性があります。
また電圧を時間積分しているため、本来物理的に考えるとその結果は仕事量(もしくは電力)の次元を持ちます。
「電圧(矩形波)を積分して、それを別の電圧(三角波)として再利用する」というのはある意味無謀なことをやっています。
そんな細かい物理学的な厳密さには目を瞑るとして、積分で得られた三角波のピーク値を期待した値にするためには補正係数(ここでは
amp
まとめ
以上、今回はV/Bシンボル電源でサブサーキットモデルをハードコーディングして回路シミュレーションに利用するための方針を簡単な例で説明していきました。
Vシンボル電源でモデル化するか、あるいはBシンボル電源を採用するかは、出力値さえ正しく得られれば特に作成者の好みで決めてよい代物です。
基本的にはVシンボル電源で作成し、ファンクションジェネレータなどはBシンボル電源をフィルター的に噛ませると良いと思います。