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