【LTspice】ワーストケースシミュレーションをする方法

みなさま、お疲れ様です。

本記事ではLTspiceでワーストケースシミュレーションをする方法を解説します。

ワーストケースシミュレーションとは素子のばらつきのmin/maxを網羅的にシミュレーションしまくって、ばらつき含めても大丈夫だよね?を確認する方法です。

LTspiceでばらつきsim(ワーストケースシミュレーション)をしたい!

とお悩みの方の参考になれば幸いです。参考はここですね。

スポンサーリンク

【結論】ワーストケースシミュレーションのやり方

  • 回路図上に
    .func wc(nom,tol,index) if(run==numruns,nom,if(binary(run,index),nom*(1+tol),nom*(1-tol)))
    .func binary(run,index) floor(run/(2**index))-2*floor(run/(2**(index+1)))
    と二つの関数を定義する。
  • ばらつかせる素子に{wc(nominal値,ばらつき幅,index)}を記入する。
  • .param tol=でばらつき値を記入する。(例えば5%ばらつきなら.pram tol=0.05)
  • 試行回数を以下の通り記述する。Nが素子数。
    .step param run 0 2^N 1
    .param numruns 2^N

これで準備完了。

シミュレーションを実行するとワーストケースシミュレーションが始まります。

超簡単な例題で詳細解説

超簡単な例を見ながらだとすぐ理解できると思います。

回路例はこんなのです↓。

単純な分圧回路です。v=5Vになります。

この回路でやっているシミュレーションは

「R1とR2の抵抗をそれぞれ±5%ばらつかせる」

です。

どうやってるの?だと思いますので、順番にまずwc関数を見てみます。

.func wc(nom,tol,index)           //引数はnominal値、ばらつき、インデックス
     if(run==numruns,
          nom,                    //run=numrunsのときはnominal値を返す。
          if(binary(run,index),   //run≠numrunsのときはbinary関数を実行
               nom*(1+tol),       //binary=1のときは高い側にばらつかせる。
               nom*(1-tol)))      //binary=0のときは低い側にばらつかせる。

ふんふん。と。なんとなく雰囲気は把握したけど、これで行けるんかいな?という感じでしょうか。

次にbinary関数を見てみます。

.func binary(run,index)
     floor(run/(2**index))-2*floor(run/(2**(index+1)))

式をちゃんと書くと以下です。

$$\small{
floor \left( \frac{run}{2^{index}} \right) -2floor \left( \frac{run}{2^{index+1}} \right)
}$$

floor関数は要するに整数を取ってるだけです。

でもアホにはわからんので、ためしに計算してみます。試行回数を今回のシミュレーションと同じように5回としてみましょう。

エクセルで計算すると以下の通りになりました。

runindex=0(素子R1)index=1(素子R2)
000
110
201
311
400

この表にwc関数を組み合わせて考えると、run=numrunsのときはnominalを実行して、それ以外の0はminで、1はmaxです。

その通りにさきほどの表を書き換えます。

runindex=0(素子R1)index=1(素子R2)
0minmin
1maxmin
2minmax
3maxmax
4nominalnominal

全条件を網羅的に振れていることが分かります。試しにシミュレーションを実行してみます。

いいですね。ちゃんとワーストケースのシミュレーションが出来ています。

素子を増やしたい場合

もし、ばらつかせる素子を増やしたい場合はその素子に{wc(nominal値,tol,3)}とindexを増やして追加します。さらにnumrunsを2^3=8に設定すればOKです。

例えばR=5の抵抗をもう一個増やしたい場合はこんな感じですね↓。

はい、以上で本記事は終わります。誰かの参考になれば幸いです。最後までお読みいただきありがとうございました!!!