Analog Discovery 3 〜スクリプトエディタの使い方

Analog Discovery用の「WaveForms」アプリには「スクリプトエディタ」という機能があり、スクリプトを記述することで、各計測器機能の設定や測定を自動で実施できます。
今回は、「Analog Discovery 3」で、この「スクリプトエディタ」機能を試してみたいと思います。


以下の処理を自動で実施できるようにしてみます。

  • Wavegen機能でDC電圧を出力し、可変抵抗に供給する。
  • Scope機能のCH1で可変抵抗への供給電圧を、CH2で中間電圧を測定する。
  • WavegenのDC電圧を変動させてScopeでの測定を繰り返す。
  • 測定データのうちCH1を横軸に、CH2を縦軸にしてグラフ表示する。
  • 測定データをCSVファイルに保存する。

まずはスクリプトを記述できる状態にセットアップします。

  • USBケーブルでPCとAnalog Discovery 3を接続し、「WaveForms」アプリを起動します。
  • 「Welcome」タブで、左の「Scope」ボタンをクリックして「Scope 1」タブを開きます。
  • 「Welcome」タブに戻り、左の「Wavegen」ボタンをクリックして「Wavegen 1」タブを開きます。
  • 「Welcome」タブに戻り、左の「Script」ボタンをクリックして「Script」タブを開きます。
  • 「Script」タブで、上の「View」>「Add plot」を選択して「Plot 1」ウィンドウを開きます。

この「Script」タブのスクリプトエディタに、JavaScriptコードを記述していくことになります。

clear();
  • 「Output」ウィンドウに表示されている内容を消去します。
if(!('Wavegen' in this)) throw "Please open a Wavegen instrument";
if(!('Scope' in this)) throw "Please open a Scope instrument";
if(!('plot1' in this)) throw "Please open a plot window";
  • 「Scope」タブ、「Wavegen」タブ、「Plot 1」ウィンドウが開いていることを確認します。
var vch1 = [];
var vch2 = [];
  • 測定した電圧を格納するリストを準備します。
Scope.Time.Base.value = 0.01;
  • Scopeの横軸の範囲を指定します(10ms)。平均電圧値を測定する場合は、この期間の平均値を取得することになるようです。
Scope.Channel1.Range.value = 10.0;
Scope.Channel2.Range.value = 10.0;
  • Scopeの縦軸の範囲を指定します(10V)。電圧の測定は、この電圧範囲で実施することになります。
Scope.Trigger.Trigger.text = "None";
  • Scopeのトリガ方法を設定します(トリガなし)。
Wavegen.Channel1.Simple.Type.text = "DC";
  • Wavegenの出力波形タイプを設定します(DC)。
Wavegen.Channel1.Simple.Offset.value = 0.0;
  • Wavegenの出力電圧を指定します(0V)。
var minV = Tool.getNumber("Min voltage[V]:", 0.0, 0.0, 5.0, 3);
var maxV = Tool.getNumber("Max voltage[V]:", 3.0, 0.0, 5.0, 3);
var stepV = Tool.getNumber("Step[V]:", 0.1, 0.0, 5.0, 3);
  • この記述で、数値取得用のフォームが3回開きます。測定する際の「最小電圧値」「最大電圧値」「きざみ幅」を取得します。
var filePath = Tool.getSaveFile("Output CSV file", "", "CSV (*.csv)");
  • この記述で、ファイル名取得用のフォームが開きます。測定データを保蔵するためのCSVファイル名を取得します。
FileWriteLine(filePath, "V-supply,V-out");
  • CSVファイルの先頭行に「V-supply,V-out」と書き込みます。
Wavegen.run();
Scope.run();
  • WavegenとScopeを実行します。
for(v = minV; v <= maxV; v = v+stepV) {
  Wavegen.Channel1.Simple.Offset.value = v;
  wait(0.1);
  ave1 = Scope.Channel1.measure("Average");
  ave2 = Scope.Channel2.measure("Average");
  print("V-supply : ", ave1.toFixed(3), ", V-out : ", ave2.toFixed(3));
  FileAppendLine(filePath, ave1.toFixed(3) + "," + ave2.toFixed(3));
  vch1.push(ave1);
  vch2.push(ave2);
}
  • Wavegenの出力電圧を指定し、0.1秒待ってから、ScopeでCH1とCH2の平均電圧値を測定します。
    測定した電圧値は、小数点以下3桁に丸めた上でOutputウィンドウに表示し、CSVファイルにも追記します。
    測定した電圧値は、先ほど準備したリストにも格納します。
    この処理を、先ほど取得した「最小電圧値」「最大電圧値」「きざみ幅」の範囲で繰り返し実行します。
Wavegen.stop();
Scope.stop();
  • WavegenとScopeを停止します。
plot1.X.data = vch1;
plot1.X.Range.value = 5;
plot1.X.Offset.value = -2.5;
plot1.Y1.data = vch2;
plot1.Y1.Range.value = 5;
plot1.Y1.Offset.value = -2.5;
  • 測定したデータを「横軸=CH1の電圧」「縦軸=CH2の電圧」で、「Plot 1」ウィンドウにグラフ表示します。

全体をまとめると以下のようになります。

clear();

if(!('Wavegen' in this)) throw "Please open a Wavegen instrument";
if(!('Scope' in this)) throw "Please open a Scope instrument";
if(!('plot1' in this)) throw "Please open a plot window";

var vch1 = [];
var vch2 = [];

Scope.Time.Base.value = 0.01;
Scope.Channel1.Range.value = 10.0;
Scope.Channel2.Range.value = 10.0;
Scope.Trigger.Trigger.text = "None";
Wavegen.Channel1.Simple.Type.text = "DC";
Wavegen.Channel1.Simple.Offset.value = 0.0;

var minV  = Tool.getNumber("Min voltage[V]:", 0.0, 0.0, 5.0, 3);
var maxV  = Tool.getNumber("Max voltage[V]:", 3.0, 0.0, 5.0, 3);
var stepV = Tool.getNumber("Step[V]:",        0.1, 0.0, 5.0, 3);

var filePath = Tool.getSaveFile("Output CSV file", "", "CSV (*.csv)");
FileWriteLine(filePath, "V-supply,V-out");

Wavegen.run();
Scope.run();

for(v = minV; v <= maxV; v = v+stepV) {
  Wavegen.Channel1.Simple.Offset.value = v;
  wait(0.1);
  ave1 = Scope.Channel1.measure("Average");
  ave2 = Scope.Channel2.measure("Average");
  print("V-supply : ", ave1.toFixed(3), ", V-out : ", ave2.toFixed(3));
  FileAppendLine(filePath, ave1.toFixed(3) + "," + ave2.toFixed(3));
  vch1.push(ave1);
  vch2.push(ave2);
}

Wavegen.stop();
Scope.stop();

plot1.X.data = vch1;
plot1.X.Range.value = 5;
plot1.X.Offset.value = -2.5;
plot1.Y1.data = vch2;
plot1.Y1.Range.value = 5;
plot1.Y1.Offset.value = -2.5;

今回は、単に以下のように可変抵抗にWavegenとScope CH1, CH2を接続し、供給電圧を横軸(vch1)、中間電圧を縦軸(vch2)としてグラフ表示してみます。

ウィンドウ右上の「→」(Run all instruments)をクリックすると、数値取得用フォーム(3回)とファイル名取得用フォームが表示され、それぞれに値を入力すると処理が実行されます。

このように、所望のとおり電圧値が取得でき、グラフ表示されました。

なお、スクリプト実行後に「Scope」タブを表示すると、スクリプトで指定したとおり、横軸範囲は10ms、縦軸範囲は10Vになっていることが確認できます。

また、「Wavegen」タブを表示すると、スクリプトで指定したとおり、波形タイプはDC、オフセット値は最後の処理が行われたときの4.8Vとなっています。

比較的簡単に、測定の自動化ができました。
同じような測定を何度も行わなければならない時などには、この「スクリプトエディタ」機能はとても重宝しそうです。