youtube動画の「伝スパ」 で、図表の特性を読み取ってテキスト化し、それをLTspiceで表示させるTipsが紹介されていました。しばらくたつと、やり方忘れてしまうので備忘録にさせていただきます。
特性図をテキスト化するWebPlotDigitizer
- コンポーネントのDatasheetなどから、所望の図表をカット&ペーストして任意の名前で画像ファイルを用意します。例) SSM3K15FU_Id-Vds.png
- ”WebPlotDigitizer”のWebサイトに画像ファイルをアップロードして、図表の特性を読み取ります。やり方は上記の引用動画や他の紹介記事に倣います。
- 読み取ったデータは、”View Data” をクリックすると下図のように表示されるので、”Sort by X” で昇順に並べてから、”Copy to Clipboard” でクリップボードに取り込みます。
読み取った2次元$(x、y)$ データをLTspiceで表示する
- 2次元データをLTspiceで使うために、LTspice の .func関数 と table関数 を使ってLTspice に読み込ませるテキストデータを作ります。
- LTspiceでの特性表示には、関数定義のできるビヘイビア電源を使います。その関数に上記の.func関数を持ってきます。.func関数の中身がtableで表されているという仕組みです。
.FUNC -- User Defined Functions
Syntax: .func <name>([args]) {<expression>}
Example: .func Pythag(x,y) {sqrt(x*x+y*y)}
table(x,a,b,c,d,...)
Interpolate a value for x based on a look up
given as a set of pairs of points.一対のポイントとして与えられたルックアップ テーブル
に基づいて、x の値を補間します。
table(x,a,b,c,d,...)において、
x: インデックス
” a set of pairs of points ” の意味は、a=(x1, y1), b=(x2, y2).... というx, y座標で表すひとつのポイントで、
a: 1番目の参照キーの値, その対となる参照先の値 = x1, y1
b: 2番目の参照キーの値, その対となる参照先の値 = x2, y2
以下、繰り返し。
と理解したら、わかりやすいです。
つまり、
table(x,a,b,c,d,...) = table(x, (x1, y1), (x2, y2),...)
途中の値は2点間の線形補間により求めているようです。
引用の動画「伝スパ」を見ながら、前項でクリップボードに取り込んだ2次元データをtable化して .func関数の記述にします。これにはExcel(互換のWPS)を使います。
- x, yのペア値を複数行にわたって繰り返すために、LTspiceのフォーマットの "+ " を行頭に付け、行末には ” , ” を付けます。
- 最終行の” , ” はなしで、table をカッコでくくります。さらに .func関数をくくるため中カッコを書きます。つまり、最終行に ”+ ) }” を入れて、table と .func を締めます。
- .func関数の引数 xと table関数の引数 x は同じラベル名にします。
- ビヘイビア電源は、引数 xを入力として、関数 myfunc(x)で表される電圧を出力します。そのときの myfunc(x) は table関数 で定義されます。
Data Table のフォーマットは、
完成した2次元データはエディタに貼り付け、テキストファイルとして所定の場所(LTspiceの回路図ファイル .asc と同じフォルダが良い)に保存します。 例) diagram.txt
そして回路図ファイル .asc から、.inc コマンドでそのテキストファイル diagram.txt を呼び出します。例) .inc diagram.txt
テキストファイル diagram.txt の内容をLTspiceで表示させるため、LTspiceの回路図ではビヘイビア電源を使います。このビヘイビア電源の関数に diagram.txt の冒頭で定義した myfunc(x) を使います。次の事例1 では、V=myfunc(Vg) としています。Vg はソースとなる電源V1の電圧です。
注意点
LTspiceでの表示にはビヘイビア電源をつかうので、表示できる図表は電圧、電流、時間で表されたものに限られます。
と、思っていたのですが、「伝スパ」の管理人様に相談したら、周波数を扱う方法(f特を取り込む方法)をご教授いただけました。※後述の事例2
事例1:TOUSHIBA NMOS SSM3K15FU ドレイン電流
事例2: オペアンプのオープンループ特性
2つの特性をテキスト化する
LTspiceでゲイン特性と位相特性を表示させるためのデータテーブルフォーマットは、(f1,m1,p1)(f2,m2,p2)... です。ひとつの周波数に対して、そのときのゲインと位相がセットで1ポイントのデータとなっています。つまり、同じ周波数でのゲインと位相の値という組み合わせです。
一方、WebPlotDigitizer(使い方を熟知できてはいませんが、)では、複数の図表特性を読み取ることはできるのですが、同じ設定でx軸を指定しても同一の周波数でゲインと位相を読み取ることができませんでした。
そこで、ひと手間の工夫をしました。具体的には、
- デフォルトのDatasheetに加えて、もう一つDatasheetを追加する。(Gain と Phase)
- Data Points 数や図表上の読み取り位置を見ながら、読み取りのAlgorithm でΔx とΔy の値を調整する。(Δx とΔy の数値変更とRunを繰り返す。)
- 2つのDatasheetを切り換えて見比べながら、納得するまでこれを繰り返す。
- 2つのDatasheetそれぞれからテキストデータをコピーして、エクセルに貼り付ける。
Excelでデータを作る
ゲインと位相の周波数を同じにするため、ゲインの周波数における位相となるように、取り込んだ位相データを修正します。下図に示すように、ExcelのFARCAST() 関数 を使って、直線補間でゲインの周波数における位相の値をつくります。
ゲインの周波数での値に位相値を変換するため、ゲイン周波数を挟む3点の位相特性から求めました。推定元の位相の周波数がゲイン周波数を挟むように、WebPlotDigitizerの読み取りを工夫して、x軸の刻み幅を比較的大きく取り、3点での直線補間としています。
+ (f1, m1, p1) ; 周波数、ゲイン(振幅)、位相
LTspiceのデータテーブルフォーマット
特性を重ね書き
赤色線がLTspiceの計算値で、青色線がDatasheetから取り込んだものです。オペアンプはLTspiceにもともと入っているAD795を使いました。特性を比較すると、期待していたほどは一致していません。純正モデルと純正データなのですが、100Hzでシミュレーションは7dBほどDatasheetより低いゲイン特性です。
取り込み方とか、LTspiceの表示のさせ方の問題かとも思って、青色特性とDatasheet特性を数ポイント比較しましたが、それは同じでした。残るは、オープンループ回路モデルが合ってないのも知れませんが、次の事例3: を見ると、それもあてはまりそうにありません。
事例3: NJM4558
もう一例見てみます。NJM4558のSpice model とDatasheet を日清紡マイクロデバイスからダウンロードしました。位相特性の図表はないのでゲイン特性だけですが、ピタリと一致しました。
Data Table では、値のない位相の値がnullではエラーになりましたので、0: ゼロ にしました。