図表の特性を読み取りLTspice に取り込む 私の備忘録

published_with_changes 更新日: event_note 公開日:

labelLTspice Tips

youtube動画の「伝スパ」 で、図表の特性を読み取ってテキスト化し、それをLTspiceで表示させるTipsが紹介されていました。しばらくたつと、やり方忘れてしまうので備忘録にさせていただきます。


【伝スパ】LTSpice必帯のWebPlotDigitizer

【伝スパ】LTSpice必帯のWebPlotDigitizer

データを扱う人の強い味方世の中にこんな便利なものあるなんて今日まで知らなかったグラフの画像から、データを復元するWebベースのソフト得られたデータをLTSpiceに繋げるまでの手順を紹介します。



特性図をテキスト化するWebPlotDigitizer

手順
  1. コンポーネントのDatasheetなどから、所望の図表をカット&ペーストして任意の名前で画像ファイルを用意します。例) SSM3K15FU_Id-Vds.png
  2. WebPlotDigitizer”のWebサイトに画像ファイルをアップロードして、図表の特性を読み取ります。やり方は上記の引用動画や他の紹介記事に倣います。
  3. 読み取ったデータは、”View Data” をクリックすると下図のように表示されるので、”Sort by X” で昇順に並べてから、”Copy to Clipboard” でクリップボードに取り込みます。



読み取った2次元$(x、y)$ データをLTspiceで表示する

手順
  1. 2次元データをLTspiceで使うために、LTspice の .func関数table関数 を使ってLTspice に読み込ませるテキストデータを作ります。
  2. LTspiceでの特性表示には、関数定義のできるビヘイビア電源を使います。その関数に上記の.func関数を持ってきます。.func関数の中身がtableで表されているという仕組みです。

.func関数はHelpに次のように書かれています。この数式<expression>のところに table関数をつかいます。

.FUNC -- User Defined Functions

Syntax: .func <name>([args]) {<expression>}

Example: .func Pythag(x,y) {sqrt(x*x+y*y)}

table関数 のフォーマットはHelpによると下記なのですが、なにやら意味不明です。ネットを探し回ったら、少しわかってきました。


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関数の引数 table関数の引数 x は同じラベル名にします。
  • ビヘイビア電源は、引数 を入力として、関数 myfunc(x)で表される電圧を出力します。そのときの myfunc(x) は table関数 で定義されます。



Data Table のフォーマットは、

   .func myfunc(x) { table (x, ; myfunc() は任意の関数名
   + x1, y1, ; , で区切る
   + x2, y2,
     :
     :
   + xE, yE ; 最終行は , はなし。すぐ下の )でくくっている。
   + )}


完成した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 ドレイン電流



青色線が上の図表から取り込んだ特性(25℃)で、赤色線がシミュレーション結果です。当然、一致しています。0.2A以上は図表データがないので、青色線が飛んでいます。



事例2: オペアンプのオープンループ特性

オペアンプのオープンループ特性は周波数特性ですので、グラフの横軸が周波数になり事例1: の方法ではLTspiceでの表示はできません。周波数特性の図表を取り込んで、LTspiceでグラフ化する方法を「伝スパ」の管理人様から教えていただきました。要点は動画時間 10:00 あたりからのくだりです。ビヘイビア電源に FREQ というコマンドが使えるので、テキスト化した横軸周波数の特性が描けます。 


【伝スパ】LTSpice必帯のWebPlotDigitizer

さあ始めようLTSpice Helpにも掲載されていない隠されたfreq機能見つけた!

ヘルプに掲載されていない電源(信号源)の機能を発見しました。 かなりマニアックな話かもしれませんが、こんなこともできるよと言う話です。 信号源のテーブルとしてtable関数やPWLがありますが、これらは時間軸がベースです。 周波数軸のテーブル表現は無いと思っていましたが、その機能は実際にありました。 今回はそれらの使い方を説明します。



ゲインと位相の2つの特性をLTspiceで表示させようとすると、tableデータの読み込みに工夫がいりました。

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点での直線補間としています。


   .TEXT ACtable="Freq
   + (f1, m1, p1) ; 周波数、ゲイン(振幅)、位相
   + (f2, m2, p2)
   + (f3, m3, p3)
             :
             :
   + (f1, m1, p1)"

LTspiceのデータテーブルフォーマット





完成した3次元データはエディタに貼り付け、テキストファイルとして所定の場所(LTspiceの回路図ファイル .asc と同じフォルダが良い)に保存します。

そして回路図ファイル .asc から、.inc コマンドでそのデータファイルを呼び出します。

特性を重ね書き

赤色線がLTspiceの計算値で、青色線がDatasheetから取り込んだものです。オペアンプはLTspiceにもともと入っているAD795を使いました。特性を比較すると、期待していたほどは一致していません。純正モデルと純正データなのですが、100Hzでシミュレーションは7dBほどDatasheetより低いゲイン特性です。

取り込み方とか、LTspiceの表示のさせ方の問題かとも思って、青色特性とDatasheet特性を数ポイント比較しましたが、それは同じでした。残るは、オープンループ回路モデルが合ってないのも知れませんが、次の事例3: を見ると、それもあてはまりそうにありません。







事例3: NJM4558

もう一例見てみます。NJM4558のSpice model とDatasheet を日清紡マイクロデバイスからダウンロードしました。位相特性の図表はないのでゲイン特性だけですが、ピタリと一致しました。

Data Table では、値のない位相の値がnullではエラーになりましたので、0: ゼロ にしました。








Powered by Blogger | Designed by QooQ

keyboard_double_arrow_down

keyboard_double_arrow_down