今回はアナデバ様の日本語版記事アップ待ちで、Analog Discovery2のスクリプト機能試用に戻ります。スクリプトはScriptタブから実行だけでなく、「Scopeタブ」の中「Measurements」からも測定用のスクリプトを走らせることが可能です。今回はチャネル間をまたく測定に挑戦?挑戦ってほどでもないっす。
※「お手軽ツールで今更学ぶアナログ」投稿順 indexはこちら
いつもお世話になっているScope-Measurementsの中のCustomとな
Digilent社製Analog Discovery2(AD2)のオシロスコープ機能こそは、その制御ソフトであるWaveFormsの中心であります。そのScope画面において時間波形を観察するのにお役立ちなのがMeasurementsという機能です。Defined Measurementsの中を探れば、振幅測定、平均、RMSなど電圧方向の測定項目だけでなく、周波数、デューティ、立ち上がり、立下り時間など時間方向の測定項目も多数。だいたいの測定はこれらをクリクリしていたら十分な感じです。
十分な測定項目があるので、いままで見て見ぬふりをしてきましたが、Defined Measurementsの下にCustom ChannelとCustom Globalという2項目もあるのでした。これらこそScriptを使って測定項目をカスタマイズするためのものであります。Custom ChannelはCH1、CH2の個別チャネルの測定項目をカスタマイズするためのもののようです。今回使用してみるのはCustom Globalという項の方です、それぞれのチャネルに限定されない測定を行うためのもの。
Custom Globalを開くと、Measurement用のスクリプトエディタが登場しました。ほれこのように。
開くとエディタ画面にはPhaseという名のサンプル的なスクリプト(リードオンリ)がロード済です。CH1、CH2間の位相差を度単位で表示してくれるもの。
このサンプルスクリプトを編集し、NameやUnits、Precisionなどを変更し、Addボタンを押すことでMeasurementウインドウにNameに書かれた測定項目が現れます。なお、
スクリプトの最後に求めた値が自動的に測定値となる
みたいです。また、既にScopeウインドウに測定済のデータが表示されていれば(保持されていれば)、上記のスクリプトエディタ・ウインドウ内のABC(緑のチェックマーク)ボタンを押すことでスクリプトが実行され、そのデータに対するお答えがボタン横に表示されます。なお、上部のScriptというプルダウンメニューからロード、セーブ、Optionsメニューからはコード補完、デバッガなども呼び出すことが可能みたいっす。まだあまり使っておらんけれども(デバッガ呼ぶだけで「ツマラン」エラーを発見してくれるのでありがたし。)
今回実験のスクリプト
今回作成したのは、CH1の立ち上がりからCH2の立ち上がりまでの遅延を自動測定するスクリプトです。
-
- 遅延はVDD50%点で規定するのが通常だと思いますが、自動化したかったのでmeasure(“High”)とmeasure(“Low”)の間の50%点を測定点としています。
- Scope画面の「ビジブル」なデータをチャネル毎に古い方から見て行って最初に見つかったLOWからHIGHへと上記50%点を超える位置の時刻を推定(2点間を線形に案分)してます。
- 上の推定時刻の差を測定値として表示してます。
AD2 Waveforms風味のJavaScriptコードが以下に。
var ch1 = Scope.Channel1 var ch2 = Scope.Channel2 var data1 = ch1.visibledata var data2 = ch2.visibledata var cnt = data1.length var mid1 = (ch1.measure("High")-ch1.measure("Low"))/2 var mid2 = (ch2.measure("High")-ch2.measure("Low"))/2 var tim1 = 0 var tim2 = 0 var idxH1 = 0 var idxH2 = 0 for(idxH1 = 0; idxH1 < cnt; idxH1++){ if (data1[idxH1] > mid1) { break; } } if (idxH1 > 0) { var s1 = ch1.TimeOfVisibleIndex(idxH1-1) var e1 = ch1.TimeOfVisibleIndex(idxH1) tim1 = s1 + ((s2 - s1) * (data1[H1]-mid1)/(data1[idxH1]-data1[idxH1-1])) } for(idxH2 = 0; idxH2 < cnt; idxH2++){ if (data2[idxH2] > mid2) { break; } } if (idxH1 > 0) { var s1 = ch1.TimeOfVisibleIndex(idxH1-1) var e1 = ch1.TimeOfVisibleIndex(idxH1) tim1 = s1 + ((s2 - s1) * (data1[H1]-mid1)/(data1[idxH1]-data1[idxH1-1])) } tim2 - tim1
テキトーな波形を題材に動作確認
波形ジェネレータで、適当な矩形波を作ってその差を「遅延時間」ということで測定してみます。上記のスクリプトなど使わなくても以下のようにカーソルを表示して、測定したい2点にカーソルを合わせれば以下のようにX2Δ1などという形で時間表示されます(以下では125.92μsec。)
さて、上記スクリプトをMeasurementウインドウにAddした後のScopeウインドウの様子が以下に。
自動測定しているみたいです。でも手動でカーソルもってくるくらい大した手間ではないよ。