みなさま、お疲れ様です。
本記事では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
これで準備完了。
シミュレーションを実行するとワーストケースシミュレーションが始まります。
超簡単な例題で詳細解説
超簡単な例を見ながらだとすぐ理解できると思います。
回路例はこんなのです↓。
この回路でやっているシミュレーションは
「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回としてみましょう。
エクセルで計算すると以下の通りになりました。
run | index=0(素子R1) | index=1(素子R2) |
---|---|---|
0 | 0 | 0 |
1 | 1 | 0 |
2 | 0 | 1 |
3 | 1 | 1 |
4 | 0 | 0 |
この表にwc関数を組み合わせて考えると、run=numrunsのときはnominalを実行して、それ以外の0はminで、1はmaxです。
その通りにさきほどの表を書き換えます。
run | index=0(素子R1) | index=1(素子R2) |
---|---|---|
0 | min | min |
1 | max | min |
2 | min | max |
3 | max | max |
4 | nominal | nominal |
全条件を網羅的に振れていることが分かります。試しにシミュレーションを実行してみます。
いいですね。ちゃんとワーストケースのシミュレーションが出来ています。
素子を増やしたい場合
もし、ばらつかせる素子を増やしたい場合はその素子に{wc(nominal値,tol,3)}とindexを増やして追加します。さらにnumrunsを2^3=8に設定すればOKです。
例えばR=5の抵抗をもう一個増やしたい場合はこんな感じですね↓。
はい、以上で本記事は終わります。誰かの参考になれば幸いです。最後までお読みいただきありがとうございました!!!