お手軽ツールで今更学ぶアナログ(146) WaveForms、電圧/電流計スクリプト

Joseph Halfmoon

「アナデバ社(ADI社)のWeb記事『StudentZone』を初回からすべて読む」は前回2022年12月号の実習を終えたので再び日本語ページの先端に追いつきました。新たな日本語ページが発行されるまで、第142回で述べたようにDigilent社、WaveFormのスクリプトの使い方を練習したいと思います。今回は単純な電圧計、電流計として動かしてみました。

※「お手軽ツールで今更学ぶアナログ」投稿順 indexはこちら

※ 今回使用している「学習用」万能測定ツールは、Digilent製 Analog Discovery 2です。その制御ソフトウエアはVersion 3.18.1のWaveForms(Windows版)です。

今回スクリプトでやってみること

Analog Discovery2の2チャンネルのオシロ端子組、(CH1+, CH1-)、(CH2+, CH2-)を使って、電圧と電流を測定して表示してみます。CH1の方がシンプルに電圧[V]表示、CH2の+-間に既知の値の抵抗が挿入されている前提でCH2は電流[mA]を計算して表示するようにしてみます。

動作確認用の治具

Analog Discovery2のCH1、CH2に以下の回路図のような簡単な治具を接続して動作確認をしてみました。R1には、1Ωの比較的高精度な抵抗があったハズなのでそれを使おうと思っていたのですが、目の前に別件で使ったE24系列の10kΩと可変抵抗を接続したものがあったのでそれをそのまま流用してしまいました(在庫を探すのがメンドかっただけ。)

VAMeterJig

Script記述にあたって

WaveFormsソフトウエアのスクリプト(JavaScript)でAD2を制御する方法は、Digilent社の以下のページの後ろの方に掲載されてます。

WaveForms Reference Manual

上記には必要なオブジェクト、プロパティ等のお名前は列挙されているものの、詳しい意味とかは書かれてないので、自前で調べる必要があります。今回、オシロ(Scope)の設定について調べたところでは、

    • Scopeタブを開いておかないとScopeオブジェクトは存在しないみたいなので、必ず開いておく
    • 測定時間については、Scope.Time.Base.valueで指定する。ここにScopeの左端と右端の時間幅、単位は秒で値を設定する
    • Scopeの上下のレンジについては、Scope.Channel#.Range.valueにScopeの上限-下限の電圧幅、単位Vを設定する
    • Scopeのオフセットについては、Scope.Channel#.Offset.valueにScopeのオフセット電圧、単位Vを設定する。
    • 設定後、1回だけデータを取得するには Scope.single()で行える。
    • Scope.Channel#.dataに取得したデータの配列が格納されている。
    • 上記のデータ配列を直接計算処理することも可能。しかし、平均値などのよくつかう測定値はScope.Channel#.measure()関数に取得するべき値の名称を渡せば値を得られるので自分で計算する必要はない。

といったところです。

今回作成の「電圧計・電流計」スクリプト

今回は10ms期間の電圧の平均値から求めているDC向けの設定であります。AC測定はまた今度かね。

// Voltmeter CH1 / Ammeter CH2
clear();
print("Voltmeter/Ammeter");
if(!('Scope' in this)) throw "Please open a Scope instrument";
Scope.Time.Base.value = 0.01;
Scope.Channel1.Range.value = 20.0;
Scope.Channel2.Range.value = 20.0;
Scope.Channel1.Offset.value = 0.0;
Scope.Channel2.Offset.value = 0.0;
var ch2Res = Tool.getNumber("CH2 Shunt Resistance[Ohm]:",1,0.001,1000000,3);

Scope.single();
if(!Scope.wait()) throw "Stopped";
var ch1V = Scope.Channel1.measure("Average");
var ch2V = Scope.Channel2.measure("Average");
print("CH1 Voltage:", ch1V.toFixed(3), " [V]");
print("CH2 Voltage:", ch2V.toFixed(3), " [V]");
print("CH2 Current:", (ch2V/ch2Res*1000).toFixed(2), " [mA]");

スクリプトを走らせると、Scopeタブが開いている(表に見えていなくともタブが存在していればよい)かどうかまずチェックして、開いていないと「開いてね」ということで実行は終わります。その後、以下のようなポップアップウインドウが開くので、電流測定用に挿入した「シャント抵抗」の値を記入してOKします。初期値は1.000Ωになってます。

vaMeterPOPUP

実行確認

上記のスクリプトを実行すると、以下のような測定結果がスクリプトタブの下の方にあるOutputウインドウに出力されます。

vaMeterResult

まあ、電圧、電流の測定は雰囲気でている?

お手軽ツールで今更学ぶアナログ(145) 前回回路を改造、16逓倍PLLじゃ、ホントか? へ戻る

お手軽ツールで今更学ぶアナログ(147) LEDをライトセンサとして使う、既視感? へ進む