【LTspice】最大値や平均値などを求める『.measコマンド』の使い方

スポンサーリンク

LTspiceでシミュレーション実行後、測定した電圧や電流の最大値や最小値を求める時に便利なコマンドが『.measコマンド』です。この記事ではこの『.measコマンド』について構文やシミュレーション例などを詳しく説明します。

.measコマンドとは

【LTspice】カーソル測定の場合
LTspiceでシミュレーション実行後、測定した電圧や電流の最大値や最小値を求める時に便利なコマンドが『.measコマンド』です。

上図は『周波数1Hz振幅10Vの正弦波V_1Hz』、『周波数10Hz振幅2Vの正弦波V_10Hz』、『周波数1Hz振幅1.0Vの正弦波V_100Hz』の合成波を作成しており、出力ノードをOUTとしています。

シミュレーション実行後、合成波の最大値を測定するために、カーソルを使用することがあります。しかし、カーソルを使用した場合、そのカーソルが波形の最大値を測定しているとは限らず、正確な値を測定することができません(カーソルでも大雑把な値は測定可能です)。

正確な値を測定するためには『.measコマンド』を使用します。『.measコマンド』を使用すると、カーソルを使用することなく自動で正確な値を取得することができます。

.measコマンドの使い方

先ほど示した合成波の最大値を『.measコマンド』で測定してみます。『.measコマンド』の使い方は以下のようになっています。

  1. SPICE directiveで『.measコマンド』を入力する
  2. シミュレーションを実行する
  3. シミュレーション後、『View→SPICE Error Log』を選択してログファイルを開く

それぞれ詳しく説明していきます。

1.SPICE directiveで『.measコマンド』を入力する

【LTspice】measコマンドの使い方
ツールバーの『Edit→SPICE directive』をクリックして、『.measコマンド』を入力します(回路図上で「s」を押してもSPICE directiveが開きます)。

今回は最大値を求めるために以下のコマンドを入力します(構文については後ほど説明します)。

.meas TRAN A MAX V(OUT)

このコマンドの意味は

TRAN解析においてノードOUTの電圧V(OUT)の最大値を「A」とラベル付けして出力する。

という意味となっています。なお、『.meas』ではなく、『.measure』と入力してもOKです。

2.シミュレーションを実行する

シミュレーション結果は以下のようになり、『.measコマンド』入力前と結果は同じです。
【LTspice】measコマンドを使用してもシミュレーション結果は変わらない

3.シミュレーション後、『View→SPICE Error Log』を選択してログファイルを開く

【LTspice】measコマンドのログファイル
波形表示画面や回路表示画面で右クリックを押して、『View→SPICE Error Log』を選択するとログファイルが開きます。

ログファイル内の赤枠で囲まれた部分に最大値が記載しています。赤枠内は

a: MAX(v(out))=12.8212 FROM 0 TO 1

と記載してあり、V(OUT)の最大値が12.8212Vとなっています。先ほどのカーソルとは多少値が異なっていますね。このように『.measコマンド』を使用すると簡単にかつ正確に最大値などを求めることができるのです。

では次に『.measコマンド』の構文を説明します。

構文

『.measコマンド』は以下の2種類の構文があります。

  • 横軸のある特定ポイントを測定する構文
  • 横軸上の範囲を測定する場合で構文

です。

横軸のある特定ポイントを測定する場合の構文は以下のようになっています。
【LTspice】measコマンドの構文01

横軸上の範囲を測定する場合の構文は以下のようになっています。
【LTspice】measコマンドの構文02

実際に上記の構文をシミュレーションして『.measコマンド』の様々な使用方法を見ていきましょう。

横軸のある特定ポイントを測定するシミュレーション例

FINDを使用して、電流と電圧の瞬時値を求める

【LTspice】FINDを使用して、電流と電圧の瞬時値を求める01
上図にシミュレーション回路図とシミュレーション結果を示します。『周波数1Hz振幅10Vの正弦波電圧V_1Hz』に対して10Ωの抵抗ROUTを接続し、その出力電圧のノードをOUTとしています。また、『2sで10VになるPWL波形電圧V1』の出力ノードをOUT1としています。今回は、t=400[ms]でのOUT端子の電圧V(OUT)や抵抗ROUTに流れる電流I(ROUT)を『.measコマンド』で求めています。

各コマンドの意味は以下のようになっています。

  • .meas TRAN A1 FIND V(OUT) AT 400m
  • →t=400[ms]におけるV(OUT)の値を「A1」とラベル付けして出力する。

  • .meas TRAN A2 FIND I(ROUT) AT 400m
  • →t=400[ms]におけるI(OUT)の値を「A2」とラベル付けして出力する。

  • .meas TRAN A3 FIND V(OUT)*I(ROUT) AT 400m
  • →t=400[ms]におけるV(OUT)*I(ROUT)の値を「A3」とラベル付けして出力する。なお、このコマンドは以下のように括弧を用いても良いです。

    .meas TRAN A3 FIND (V(OUT)*I(ROUT)) AT 400m
  • .meas TRAN A4 PARAM A1/A2
  • →ラベルA1/ラベルA2の計算結果を出力する。

次に、When、TD、CROSS、RISE、PARAM等を用いた場合のシミュレーション回路図とシミュレーション結果を下図に示します。このシミュレーションではOUT端子の電圧V(OUT)とOUT1端子の電圧V(OUT1)が等しくなった時のV(OUT)の電圧を『.measコマンド』で求めています。
【LTspice】FINDを使用して、電流と電圧の瞬時値を求める02

各コマンドの意味は以下のようになっています。

  • .meas TRAN B1 FIND V(OUT) WHEN V(OUT)=V(OUT1)
  • →条件「V(OUT)=V(OUT1)」を初めて満たした時におけるV(OUT)の値を「B1」とラベル付けして出力する。

  • .meas TRAN B2 FIND V(OUT) WHEN V(OUT)=V(OUT1) TD=0.1 CROSS=2
  • →条件「V(OUT)=V(OUT1)」を2回満たした時におけるV(OUT)の値を「B2」とラベル付けして出力する。なお、時間t=0.1[s]後からカウントを開始する。

  • .meas TRAN B3 FIND V(OUT) WHEN V(OUT)=V(OUT1) RISE=LAST
  • →V(OUT)が増加して、V(OUT1)に近づいている場合において、条件「V(OUT)=V(OUT1)」を最後に満たした時のV(OUT)の値を「B3」とラベル付けして出力する。

  • .meas TRAN B4 FIND V(OUT) WHEN V(OUT1)=V(OUT) RISE=LAST
  • →V(OUT1)が増加して、V(OUT)に近づいている場合において、条件「V(OUT1)=V(OUT)」を最後に満たした時のV(OUT)の値を「B4」とラベル付けして出力する。上記と異なるのは電圧増加を見ているのがV(OUT)かV(OUT1)かの違いである。

  • .meas TRAN B5 WHEN V(OUT1)=V(OUT) RISE=LAST
  • →条件「V(OUT)=V(OUT1)」を最後に満たした時の時刻を「B5」とラベルして出力する。『FIND V(ノード名)』を用いない場合の出力は時刻となります。

DERIVを使用して電流・電圧の微分値(スルーレート)を確認する

【LTspice】DERIVを使用して電流・電圧の微分値(スルーレート)を確認する
上図は以下のパルス電圧V1のシミュレーション結果となっています。

  • Low電圧:0[V]
  • High電圧:1[V]
  • 立ち上がり時間:1[us]
  • 立ち下がり時間:1 [us]

この電圧波形の立ち上がりのスルーレートは1[V/us]=1×10^6[V/s]となっています。これをmeasコマンドで確認するためには以下のようにコマンドを入力します。

  • .meas TRAN SLEWRATE DERIV V(OUT) WHEN V(OUT)=0.5 TD=100u RISE=1
  • →V(OUT)の1回目の立ち上がりにおいて、条件「V(OUT)=0.5」におけるスルーレートを「SLEWRATE」とラベルして出力する。なお、時間t=100[us]後から立ち上がりのカウントを開始する。

カーソルの結果とmeasコマンドの結果が一致していることが確認できます。

横軸のある区間を測定するシミュレーション例

INTEGを使用して、ある区間の積分値(面積)を求める

【LTspice】INTEGを使用して、ある区間の積分値(面積)を求める01
上図は以下のようにパルス電圧V1を生成することで三角波を出力した際のシミュレーション結果となっています。

  • Low電圧:0[V]
  • High電圧:1[V]
  • 立ち上がり時間:1[s]
  • 立ち下がり時間:1 [s]
  • オン時間:0[s]
  • 周期:1 [s]

この電圧波形のt=2[s]から4[s]における三角波の面積は底辺2[s]、高さ1[V]なので「1」となります。これをmeasコマンドで確認するためには以下のようにコマンドを入力します。

  • .meas TRAN A INTEG V(OUT) FROM 2 TO 4
  • →t=2[s]から4[s]におけるV(OUT)の積分値(面積)を「A」とラベルして出力する。なお、FROMを省略した場合、『.measコマンド』はデータの全範囲にわたって測定を行います。

次に、TRIGとTARGを使用した場合のシミュレーション結果を下図に表示します。
【LTspice】INTEGを使用して、ある区間の積分値(面積)を求める02

TRIGは増加時、TARGは減少時に条件を満たした時を取得します。一例として以下にコマンドを示します。

  • .meas TRAN A INTEG V(OUT) TRIG V(OUT)=0.5 TD=1.5 RISE=1 TARG V(OUT)=0.5 TD=3 FALL=1
  • →1.5[s]経過後にV(OUT)が初めて0.5Vに増加するまで、および3.0[s]経過後にV(OUT)が初めて0.5Vに減少するまでの期間の積分値(面積)を「A」とラベルして出力する。なお、TRIGとTARGを省略した場合、『.measコマンド』はデータの全範囲にわたって測定を行います。

ある区間の最大値(MAX)、最小値(MIN)、平均値(AVE)、実効値(RMS)、振幅(PP)を求める

【LTspice】ある区間の最大値(MAX)、最小値(MIN)、平均値(AVE)、実効値(RMS)、振幅(PP)を求める
上図はDCオフセット10[V]、振幅2[V]、周期[s]の波形となっています。
この電圧波形の平均値(AVE)、最大値(MAX)、最小値(MIN)、実効値(RMS)、振幅(PP)を『.measコマンド』で確認するためには以下のようにコマンドを入力します。

  • .meas TRAN A MAX V(OUT) FROM 1 TO 5
  • →t=1[s]から5[s]におけるV(OUT)の最大値を「A」とラベルして出力する。

  • .meas TRAN B MIN V(OUT) FROM 1 TO 5
  • →t=1[s]から5[s]におけるV(OUT)の最小値を「B」とラベルして出力する。

  • .meas TRAN C AVG V(OUT) FROM 1 TO 5
  • →t=1[s]から5[s]におけるV(OUT)の平均値を「C」とラベルして出力する。

  • .meas TRAN D RMS V(OUT) FROM 1 TO 5
  • →t=1[s]から5[s]におけるV(OUT)の実効値を「D」とラベルして出力する。

  • .meas TRAN E1 PP V(OUT) FROM 1 TO 5
  • →t=1[s]から5[s]におけるV(OUT)の振幅を「E1」とラベルして出力する。なお、全てに共通することですが、ラベルの名前は予約語(「V」とか「E」などのSPICEですでに使用されている変数)以外にしないとエラーとなります。「E」はSPICEの予約語なので使用不可で今回は「E1」としています。

その他の使い方

PARAMを使用して数式を計算する

【LTspice】PARAMを使用して数式を計算する
PARAMを使用することで数式も計算することができます。

PARAMを使用して連立方程式を計算する

【LTspice】PARAMを使用して連立方程式を計算する
40秒で40増加するPWL電圧V3の出力ノードを「X1」とします。このノードX1をビヘイビア電源に用いることで連立方程式の計算を使用することもできます。
上図は
『V=2×X1』と『V=-2×X1+40』の連立方程式を解くシミュレーションとなっています。

スポンサーリンク