t-hom’s diary

主にVBAネタを扱っているブログ…とも言えなくなってきたこの頃。

Arduino DueのDAC機能を使ってでオシロスコープに円を描いてみた。

今回はオシロスコープのXYモードを利用してArduino Dueで円を描いてみた。

オシロスコープのXYモードでは2つのアナログ電圧を座標としてプロットすることができる。

CH1をX軸、CH2をY軸として、それぞれの電圧の位置に輝点が現れる。

電圧を変化させると新しい場所に輝点が現れるが、古い輝点は一定時間画面に残り続けるため、これを使うと任意の絵を表示させることができる。

どれくらいの時間輝点が残るかは波形を同時に表示させると分かりやすい。
円を描くための電圧としてCH1にサイン波・CH2にコサイン派を入力しているのだが、下図では谷・山のパターンが7回ほど繰り返されているのが分かる。


波形の横軸1マスが50ミリ秒という設定にしているので50ミリ×12マスで600ミリ秒。約0.6秒間輝点が残る計算である。
つまり、見ている瞬間は7周分の円が重なって描かれていることになる。

これを1マス10ミリ秒(全体で0.12秒)に変更しても1周分は確保できるのでキレイに円が描ける。

1マス5ミリ秒(全体で0.06秒)では1周分の波形が確保できないので欠けた円がくるくる回転するような表示になる。

原理的にはこんな感じ。

あとはアナログ電圧をどうやって確保するかが問題である。
Arduino Uno R3やRaspberry Piでアナログ電圧を出すのは外部にデジタル・アナログコンバーター(DAC)を準備する必要があるので割と面倒くさい。

Arduino Uno R3のアナログピンは入力専用で、出力の調整はPWMしか用意されていない。PWMでは固定電圧をON・OFFする間隔を調整することで疑似的に出力を落としてモーター速度やLED照度の調整に使っているのだが、これをオシロで見ると出力どおりON・OFFの矩形波になってしまう。

最近発売されたArduino Uno R4には本当のアナログ出力ができるDACが付いているのだが、DACに使えるピンが1つしかないため今回やりたりX・Yの二軸出力はもう一つDACピンが欲しい。

そこで今回はArduino Dueという製品を調達してきた。
これはArduinoシリーズの中でもDACが2つ付いている珍しいタイプで今回の目的にちょうど良い。

他にもESP-WROOM-32にもDAC出力ピンが2つあるらしいのでそちらを持っている方はそちらでも良いと思う。

コードはこんな感じ。

double i=0.0;
void setup() {
  analogWriteResolution(12);
}
void loop() {
  analogWrite(DAC0, 2048 + 2048 * sin(i));
  analogWrite(DAC1, 2048 + 2048 * cos(i));
  i+=0.01;
}

オシロの初期の設定だとマス目の中心が0Vなので右上に小さく表示されてしまう。

オシロのつまみでCH1とCH2をそれぞれ位置とサイズを調整することで画面いっぱいに表示できる。

今回はシンプルなコードでただの円を表示させただけだが、今後はもう少し何か絵っぽいものを表示させてみたい。
また今回は手軽にやりたくてデジタルオシロを使ったけど、アナログオシロの方が味があって良さそうだ。
KENWOODのCS4135というオナログオシロを持っているので暇があれば試してみたいと思う。

参考サイト:
rokkophysicsclub.github.io

以上

当ブログは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。