« 宇宙そのものよりも年老いた星? | トップページ | Arduino互換機を作りたい(1) »

2013年8月25日 (日)

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

九工大さんの簡易オシロスコープ Kyutech Arduino Scope で相変わらず遊んでます。GR-SAKURAで生成した矩形波だけ見ていても、トリガーが理解できないのでちょっと違う波形を見てみたいと。真っ先に思いつくのは正弦波だけど、どうやってArduinoに入力しよう。。。と探していたら、やはり世の中には素晴らしい人が。efuさんという方がテスト信号発生ソフトの WaveGeneというものを作って公開してくださっていました。こちらからダウンロードさせていただきました。Windows上のアプリから内蔵スピーカやヘッドフォン端子から様々な波形を出力することができるものです。

起動するとこんな感じです。 

Wavegenesin100hz
ここでは、100Hzの正弦波をLチャンネルから出力しています。
PCのヘッドフォン端子の3.5mmステレオミニジャックにケーブルを挿してステレオミニプラグケーブル経由で Arduino に信号を入れます。プラグの根本からGND,R,Lですので、根本のGNDをブレッドボード上で Arduino のGNDと接続し、先端のLに Kyutech Arduino Scope の CH1のプローブを接続します。
そして見えたのはこんな感じ。

Scopesin100hznobias

がーん!
正弦波の上半分しか見えていません。。。。Arduinoのアナログ入力は、0Vからプラス5Vなのでこなるんですね。
それはそうとトリガーとは何?の方をもう少し追求。

Scopesin100hznobiasnormal254v

これ↑は、TRIG mode を normal に変更したところ。「waiting」のまま動かず。WaveGeneはちゃんと正弦波出してます。やっとトリガーの秘密に近づいたか?
これって、トリガーが引かれなくて「waiting」してるってことですよね?ということは、TRIG level 2.54Vというのが気になります。slop 「rising」ともあるし。これって、電圧が2.54Vを下から上に届いたらトリガーを引く、測定するってことでは?
ということで、TRIG level を変えてみました↓。

Scopesin100hznobiasnormal030v

振幅が、0.4V-0.5V程度なので、TRIG level = 0.30Vにしてみたところです。「running」になって波形が表示されました。電圧が、下から上がってきて(slope=rising)0.30Vになったときにトリガーが引かれて測定が開始されたみたいですね。risingの意味を確かめるために slope=fallingに変えてみます↓。電圧が上から下へ落ちてきて0.30Vになったときに測定が開始されると期待。

Scopesin100hznobiasnormal030vfallin

期待どおりのようです。
ちょっとここで、振幅が小さくて波形がみすぼらしいので調整。CH1のvolts/divを 1.0V/div から 0.1V/div へ変更します。ついでに TRIG level も 0.12Vに変えてみます。slopeはrisingです。

Scopesin100hznobiasnormal012vscalin

見やすくなりました。上の画像では、0.12Vから描画されていませんが、実際の画面では、0.12Vから描画されたり上の画面のように遅れたりを交互に繰り返しています。原因はよくわからず。わかったのは、normal では、完全に波形を止めて観察しているわけではなくて、継続的にTRIG level と TRIG slopeを満たすと描画が開始されるようです。それで、「running」なんですね。
スペースキーを押すと、測定が止まり表示される波形も固定されます↓。

Scopesin100hznobiasnormal012vscal_2

止めると、TRIG levelの 0.12Vで(始まる波形で)止まるようです。
さて、ここで100Hzっていうのもなんだな~ということでWaveGeneで生成する正弦波の周波数を1KHzにしてみます↓。

Wavegenesin1000hz

上は、wavegenのスクリーンショットです。

Scopesin1000hznobiasnormal012vscali

じぇじぇ。凄いノイズですね。下側のグラフは、FFTしたものですがなんか凄いことになってます。正の電圧しか測れないArduinoのアナログ入力に0Vを中心とした交流信号を送り込むのはこの辺でやめておきましょう。

ということで、こんな↓回路を組んで入力交流信号に直流電圧の下駄を履かせることに。

Biascircuittrim

LTSpiceで作った回路図です。V1は、Arduino の5V端子を使います。V2が信号源でPCのヘッドフォン端子のLチェンネル。単純な抵抗分圧回路で5Vから2.5Vを作って入力がマイナスにならないようにします。先程のKyutech Arduino Scopeの測定だと、正弦波の上半分で振幅は0.5Vないくらい。全部見えても1V程度と推定。ちなみに、PCの音量は最大が50のところを40で出力しています。コンデンサは、直流成分がPCへ流れ込まないように。こういうときの静電容量の決め方がわからないので、LTSpiceでシミュレーションしてみました。

Biascircuitsim

これは、0.1μFのときの波形。これより小さくすると振幅が小さくなり、これより大きくても変わらないで、0.1μFに決定。こういう決め方は邪道な気もするけどとりあえずっと。
それが測定結果です↓。

Scopesin1000hzbiasnormal254vauto

うまくいったみたいです。正弦波が見えています。
これは、TRIG mode=autoです。autoだと波形がどんどん流れていってるみたいですが正弦波だと規則的なので確信持てず。
他の波形を試す前に、TRIG mode=normal にしてみます↓。

Scopesin1000hzbiasnormal254vnormal

前と同じようにTRIG levelのあたりで繰り返し表示しているようです。
TRIG mode=singleにしています↓。TRIG level も 2.60Vに変更しました。

Scopesin1000hzbiasnormal260vsinglew

これは、まだwavegeneから正弦波を入れていない状態です。waitingとなっています。TRIG level に達していないので測定が開始されていないんですね。
wavegenから正弦波を入力します↓。

Scopesin1000hzbiasnormal260vsingles

ただちに stopped となって波形が表示されました。TRIG level=2.60Vとslope=risingの条件が整ったので波形を止めて表示しているんですね。
CH1のvolts/divとpositionを調整して見やすくするとこんな感じです↓。

Scopesin1000hzbiassingle266vstopped

ということで今日わかったことは
  • Arduino のアナログ入力はプラスの電圧のみなのでマイナスに振れる場合は工夫が必要。
  • TRIG mode = normal は、TRIG level、TRIG slope の条件を満たすと画面左から描画し、その後も描画し続け、また、条件に合致すると画面左から再描画するということを繰り返しているらしい。
  • TRIG mode = single は、TRIG level、TRIG slope の条件を満たすと一画面分だけサンプルを取り、画面左から描画して停止する。次に条件を満たす波形が来ても再描画することはない。最初に条件を満たした波形だけを表示しているらしい。
  • TRIG mode = auto は、よくわからないが トリガーと関係なくひたすらAD変換した値を描画し続けているような感じがする。
ということでした。

今日は、ここまで。

« 宇宙そのものよりも年老いた星? | トップページ | Arduino互換機を作りたい(1) »

Aruduino」カテゴリの記事

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

コメント

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

トラックバック


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

« 宇宙そのものよりも年老いた星? | トップページ | Arduino互換機を作りたい(1) »