【LTspice】変数を定義する『.paramコマンド』の使い方

スポンサーリンク

LTspiceではかなり重要なコマンドの1つである.paramコマンドについて説明します。

『.paramコマンド』とは

.paramコマンドとは、ユーザー定義の変数を作成するコマンドです。

『.paramコマンド』を用いるメリットは大きく2つあり、

  • 数値に変数を関連付けることで分かりやすくする。
  • 『.paramコマンド』をサブサーキット定義の内部に組み込むことができる。

となります。

『.paramコマンド』で作成した変数を呼び出すには、変数を「{」と「}」で囲みます。例えば、『.paramコマンド』で変数xの値を10と定義し、その変数xを抵抗R1の値とする場合、下図のように値に{x}と記述します。
『.paramコマンド』の使い方

補足

“{”と“}は波括弧と呼ばれています。また、LTspiceの英文マニュアルでは、“{”と“}のことをカーリー・ブランケット(Curly Bracket)と呼んでいます。

『.paramコマンド』の構文

.param <ユーザー定義の変数名>=<値or式> [<ユーザー定義の変数名>=<値or式>…]

構文において「<」と「>」で囲まれたパラメータは省略できません。また、「[」と「]」で囲まれたパラメータは省略できます。

『.paramコマンド』のコマンド例

以下に『.paramコマンド』のコマンド例を示します。

  • .param A=1
  • →変数Aを「1」と定義する。

  • .param A=1 B=2 C=A+B
  • →変数Aを「1」、変数Bを「2」、変数Cを「A+B」と定義する。変数Cは『A+B=1+2=3』となる。

  • .param A=4 B=sqrt(A)
  • →変数Aを「4」、変数Bを「sqrt(A)」と定義する。変数Bは『sqrt(A)=sqrt(4)=2』となる。このように、『.paramコマンド』で定義した変数は関数の中にも使用することができます。

    補足

    .param A=1
    .param B=2
    .param C=A+B

    のように『.paramコマンド』を分けて記述しても、.param A=1 B=2 C=A+Bと同じになります。

    『.paramコマンド』の記述方法

    『.paramコマンド』の記述方法01
    『.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コマンド』の記述方法02

    『.paramコマンド』のシミュレーション例

    『.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コマンド:変数の定義を行うコマンド
    • 【例】.param A=1
      →変数Aを「1」と定義する。

    • .funcコマンド:関数の定義を行うコマンド
    • 【例】.func myfunc(x,y) {x+y}
      →関数myfunc(x,y)を「x+y」と定義する。

    『.funcコマンド』については以下の記事を参考にしてください。
    【LTspice】関数の定義をする『.funcコマンド』の使い方

    【その他】『.paramコマンド』をサブサーキット定義の内部に組み込むことができる

    『.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コマンド』で定義した変数を直接サブサーキットに送るのではなく、式を用いて送るのが一般的です。

    なお、以下のプログラムのように直接サブサーキットへ送ることもできます。

    .param x=1k y=1u

    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』から渡されたパラメータを参照します。

    .param x=1k y=1u

    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

    スポンサーリンク