LTspiceではかなり重要なコマンドの1つである.paramコマンドについて説明します。
『.paramコマンド』とは
.paramコマンドとは、ユーザー定義の変数を作成するコマンドです。
『.paramコマンド』を用いるメリットは大きく2つあり、
- 数値に変数を関連付けることで分かりやすくする。
- 『.paramコマンド』をサブサーキット定義の内部に組み込むことができる。
となります。
『.paramコマンド』で作成した変数を呼び出すには、変数を「{」と「}」で囲みます。例えば、『.paramコマンド』で変数xの値を10と定義し、その変数xを抵抗R1の値とする場合、下図のように値に{x}と記述します。
補足
『.paramコマンド』の構文
構文において「<」と「>」で囲まれたパラメータは省略できません。また、「[」と「]」で囲まれたパラメータは省略できます。
『.paramコマンド』のコマンド例
以下に『.paramコマンド』のコマンド例を示します。
→変数Aを「1」と定義する。
→変数Aを「1」、変数Bを「2」、変数Cを「A+B」と定義する。変数Cは『A+B=1+2=3』となる。
→変数Aを「4」、変数Bを「sqrt(A)」と定義する。変数Bは『sqrt(A)=sqrt(4)=2』となる。このように、『.paramコマンド』で定義した変数は関数の中にも使用することができます。
補足
.param B=2
.param C=A+B
のように『.paramコマンド』を分けて記述しても、.param A=1 B=2 C=A+Bと同じになります。
『.paramコマンド』の記述方法
『.paramコマンド』は[SPICE Directive]で記述します。
ツールバーの[SPICE Directive]をクリックする(または、回路図ウィンドウ上で「S」を押す)と、[Edit Text on the Schematic]が表示されます。チェックが[SPICE directive]になっていることを確認して、例えば、『.param VIN=10 ROUT=1』と入力します。OKボタンを押すと、回路図ウィンドウ上に『.param VIN=10 ROUT=1』が表示されます。
なお一度、『.param』と記述した後に、右クリックを押すと、『.param Statement Editor』が表示されます。そこに『変数名』と『値』を記入すると、自動的にコマンドが作成されます。
『.paramコマンド』のシミュレーション例
上図は『.paramコマンド』を使用して、変数VINを”10”、変数ROUTを”1”に定義しています。また、電圧源V1に抵抗R1を接続し、電圧源V1の値を{VIN}、抵抗R1の値を{ROUT}とすることで変数を呼び出しています。
シミュレーション結果は抵抗R1にかかる電圧と流れる電流をプロットしています。抵抗R1に10Vかかり、10A流れていることから、電圧源V1が10V、抵抗R1が1Ωであることが分かります。
補足
『.paramコマンド』と『.funcコマンド』の違い
『.paramコマンド』と似たようなコマンドに『.funcコマンド』があります。『.paramコマンド』はユーザー定義変数で、『.funcコマンド』はユーザー定義関数です。以下に違いを示します。
- .paramコマンド:変数の定義を行うコマンド
- .funcコマンド:関数の定義を行うコマンド
【例】.param A=1
→変数Aを「1」と定義する。
【例】.func myfunc(x,y) {x+y}
→関数myfunc(x,y)を「x+y」と定義する。
『.funcコマンド』については以下の記事を参考にしてください。
【LTspice】関数の定義をする『.funcコマンド』の使い方
【その他】『.paramコマンド』をサブサーキット定義の内部に組み込むことができる
上図に示すネットリストはサブサーキットRCfilterの呼び出し行に『.paramコマンド』で定義した「変数x&変数y」とサブサーキットRCfilterに渡すパラメータ「RF&CF」が記述されています。このように『.paramコマンド』をサブサーキット定義の内部に組み込むことができます。
では、このネットリストの説明を行います。
- 『.param x=1k y=1u』では変数xを1k、変数yを1uと定義しています。
- 『X1 1 2 0 RCfilter RF=x CF=y』はサブサーキットの呼び出し行です。『RF=x CF=y』と記述することで、パラメータRFとパラメータCFをサブサーキットRCfilterに渡しています。
- サブサーキット内では『R1 IN OUT {RF}』のように渡されたパラメータを丸括弧で囲みます。
このように、『.paramコマンド』で定義した変数を直接サブサーキットに送るのではなく、式を用いて送るのが一般的です。
なお、以下のプログラムのように直接サブサーキットへ送ることもできます。
V1 1 0 PULSE(0 10 0 10n 10n 20m 40m)
X1 1 2 0 RCfilter
.subckt RCfilter IN OUT G
R1 IN OUT {x}
C1 OUT G {y}
.ends
.tran 100m
.end
また、ネットや参考書を見ると、下のネットリストのようにparamsを使用しているのを見かけます。『.paramコマンド』は『.param x=1k y=1u』でも『.params x=1k y=1u』のどちらでも動作しますが、サブサーキットの呼び出し行や、サブサーキットの定義の箇所は『param』ではなく、『params』と"s"が必要になります。
なお、『params:RF=1 CF=1』はなくてもあっても良いです。結局は『X1 1 2 0 RCfilter params:RF=x CF=y』から渡されたパラメータを参照します。
V1 1 0 PULSE(0 10 0 10n 10n 20m 40m)
X1 1 2 0 RCfilter params:RF=x CF=y
.subckt RCfilter IN OUT G params:RF=1 CF=1
R1 IN OUT {RF}
C1 OUT G {CF}
.ends
.tran 100m
.end