« 超簡単!無線マイコン TWE-Lite DIP 動いた! | トップページ | SmartOSをVMware Playerで動かしてみた! »

2013年9月 7日 (土)

Aruduinoで作るオシロスコープ(4)

九工大簡易オシロスコープ Kyutech Arduino Scope のトリガー機能について実験しながら勉強(お遊び)中です。

これまでにトリガーについてわかったことは↓です。

  1. TRIG mode = normal は、TRIG level、TRIG slope の条件を満たすと画面左から描画し、その後も描画し続け、また、条件に合致すると画面左から再描画するということを繰り返しているらしい。
  2. TRIG mode = single は、TRIG level、TRIG slope の条件を満たすと一画面分だけサンプルを取り、画面左から描画して停止する。次に条件を満たす波形が来ても再描画することはない。最初に条件を満たした波形だけを表示しているらしい。
  3. TRIG mode = auto は、 トリガーと関係なくひたすらAD変換した値を描画し続けているらしい。
トリガー以外で大事なことは↓でした。
  • Arduino のアナログ入力はプラスの電圧のみなのでマイナスに振れる場合は工夫が必要。
まだ、わからないこと(わからないと気がついていること?)は↓です。
  • 簡易オシロスコープ Kyutech Arduino Scopeのページにある「トリガ用機能回路」 って何?何してるの?
  • トリガの外部入力はちゃんと機能するの?
  • delayは、トリガーイベントから実際に掃引開始するまでの遅れらしいけど、確かめていない。
トリガーの外部入力の確認と1,2,3の再確認を兼ねて外部からパルスを入れて、これをトリガーにしてみました。Kyutech Arduino Scope は、Arduino UNOで動かし、パルスの発生には、Arduino Leonardo を使いました。Arduino Leonardo のデジタルピンを1m秒の間Highにして、5Vピークの矩形波を簡易オシロスコープ Kyutech Arduino ScopeのページにあるEXTトリガ入力へ入れてみました。測定対象は、 Aruduinoで作るオシロスコープ(3) のときと同じWaveGeneの出力をPCのヘッドフォン端子から出力し、抵抗分圧で作った約2.5Vの仮想グランドで嵩上げしたものをKyutech Arduino Scopeチャネル1で測定しました。結果はこうなりました↓。
TRIG mode = auto は、 Arduino Leonardo からの入力とは関係なくひたすらPCのヘッドフォン端子から出力される正弦波を描き続けました。上の3が正しいことが確認できました。
TRIG mode = normal はArduino Leonardo から矩形波を入れると描画されて波形が停止し、次にまた矩形波を入れると再描画されて波形が停止しました。上の1.のとおりと確認できました。
TRIG mode = single はArduino Leonardo から矩形波を入れると描画されて波形が停止し、次にまた矩形波を入れても再描画されることはありませんでした。上の2のとおりと確認できました。そのときのスクリーンショットです↓。

Kyutechscopeext

チャンネル2で、外部トリガーをモニタしています。外部トリガが立ち上がったところでチャンネル1のWaveGeneからの正弦波の掃引が始まっています。そして、波形上部の赤い部分に表示されているとおり一画面分描画したところで掃引が停止しています。

ここで、横軸の目盛を変えてみます。一目盛200マイクロ秒にしてみます。

Kyutechscopeexthorz

チャンネル2(CH2)の外部トリガの波形を見てみると、横軸の一目盛は200マイクロ秒なので、900マイクロ秒分しか描画されていないことがわかります。矩形波は、1ミリ秒(1000マイクロ秒)Highになるように作っていますので、どうやらdelayで指定されているとおりトリガ検知から100マイクロ秒後から掃引されていりうようです。試しに、delay を 200マイクロ秒に変えてみました↓。

Kyutechscopeexthorzdelay200u

チャンネル2(CH2)の外部トリガの波形を見てみると800マイクロ秒分しか描画されていません。delay は定義のとおりに機能しているようです。

残る課題は↓です。
まず「トリガ用機能回路」のコンデンサと抵抗の真ん中の部分をKyutech Arduino Scope自身でモニタしてみました。常に2.54Vとなっていてトリガがあってもなくても、波形が流れていても流れていなくても何も変わらないようです。ここで、2.54Vが気になります。トリガレベルに設定(デフォルト)されている値です。上のスクリーンショットの TRIG level です。さらにきになるのは、Arduino互換機を作りたい(1) で紹介した記事(Arduino’s AnalogWrite – Converting PWM to a Voltage )です。Arduinoの AnalogWite()は、アナログ出力といってもPWM(パルス幅変調)です。この記事は、これをCR回路で平滑化するというものです。「トリガ用機能回路」ってこれではないでしょうか?つまり、九工大のサイトにある回路図のD6は、デジタルI/Oピンとして使っているのではなくAnalogWite()でPWMを出力していて、これをCRで平滑化して、その電圧をA0で読み取ってトリガにしているのではないでしょうか?

ということで、チャンネル2(CH2)でCとRの中間点(D6、A0もつながっている)をモニタしながらTRIG level を変えてみました。

Kyutechscopelevel3v

TRIG level は、3Vです。Kyutech Arduino Scope のチャンネル2、つまり、「トリガ用機能回路」のCRの中間点も3Vになりました(一目盛が1Vで最下段が0Vです)。TRIG levelに設定した電圧がここに現れることから予想が正しいことが確認できました。ところで、なぜこんなことをしているのでしょうか?推測ですがArduinoの機能(AnalogRead())でトリガ波形をモニタしてトリガ電圧を超えたら(fallingのときは下回ったら)何かをするという処理は時間が掛かり過ぎるのでトリガ電圧が印加されているA0ピンとトリガ波形が入ってくるA1、A2ピン(外部トリガならA3ピン)の電圧をAtmega328P-PUの「高速な」何らかの機能で比較してトリガ条件を満たすことを高速に検知しているのではないでしょうか。いずれ確かめてみたいと。

わかったことを改めてまとめるとこうなります。

  1. TRIG mode = auto は、 トリガーと関係なくひたすらAD変換した値を描画し続ける
  2. TRIG mode = normal は、TRIG level、TRIG slope の条件を満たすと画面左から描画し、その後も描画し続け、また、条件に合致すると画面左から再描画するということを繰り返している
  3. TRIG mode = single は、TRIG level、TRIG slope の条件を満たすと一画面分だけサンプルを取り、画面左から描画して停止する。次に条件を満たす波形が来ても再描画することはない。最初に条件を満たした波形だけを表示している。スペースキーを押すと次のトリガイベントを待つ。
  4. 「トリガ用機能回路」は、TRIG levelに指定したトリガ電圧を作っている。
  5. トリガの外部入力を使うことで測定対象のCH1、CH2以外の信号源をトリガにできる
  6. delayは、トリガーイベントから実際に掃引開始するまでの遅れ
  7. Arduino のアナログ入力はプラスの電圧のみなのでマイナスに振れる場合は、グランドを持ち上げる工夫が必要

« 超簡単!無線マイコン TWE-Lite DIP 動いた! | トップページ | SmartOSをVMware Playerで動かしてみた! »

Aruduino」カテゴリの記事

電子工作」カテゴリの記事

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: Aruduinoで作るオシロスコープ(4):

« 超簡単!無線マイコン TWE-Lite DIP 動いた! | トップページ | SmartOSをVMware Playerで動かしてみた! »