プログラマブル波形発生器 AD9833を入手したのでRaspberry Pi Picoで遊んでみました。
AD9833は、低消費電力のプログラマブル波形発生器で、サイン波、三角波、および矩形波の出力を生成できるプロセッサです。
SPI接続で制御できるようになってます。
今回はAD9833単体ではなく、25MHzクロックやローパスフィルタ等周辺回路を実装した基板を使用しました。
Aliexpressで購入したのですが、Amazonで販売しているものと同じものと思われます。
Raspberry Pi Pico からMicroPytonで制御しました。
ライブラリはいくつか見つけたのですが、一番簡単そうなAD9833-MicroPython-Moduleを使用しました。
github.com
Raspberry Pi Picoとの接続はこのライブラリの通りにしてみました。
Pico 3.3V to AD9833 Vin Pico Gnd to AD9833 DGND Pico IO2 SCLK to AD9833 SCLK Pico IO3 to AD9833 SDATA Pico IO1 to AD9833 FSynch
IO1,IO2,IO3はそのままGP1,GP2,GP3に対応してます。
ここで問題があったのですが、購入した基板の問題かわかりませんが、このままでは動作せず、SCLKとSDATAを入れ替えたら動作しました。
説明通りに接続して動作しない場合は試してみてください。
サンプルプログラムをさらに単純化して色々試してみました。
from AD9833 import AD9833 import utime as time ad9833 = AD9833(sdo = 3, clk = 2, cs = 1, fmclk = 25) # setup frequency and phase registers ad9833.set_frequency(1000,0) #ここでクロックを設定(Hz) ad9833.set_phase(0, 0, rads = False) delay = 1.5 # number of seconds to display each feature time.sleep(delay) # freq 0 Sin wave output ad9833.select_freq_phase(0,0) ad9833.set_mode('SIN') #ここで波形を設定 (SIN, SQUARE, TRIANGLE)
7行目で周波数を設定してます
ad9833.set_frequency(1000,0)
1000の部分が周波数(Hz単位)
0の部分はチャンネル。この基板は出力が1個なので0固定
15行目で波形の種類を設定してます。
ad9833.set_mode('SIN')
SINの部分が波形
サイン波:SIN 矩形波:SQUARE 三角波:TRIANGLE
出力を購入したばかりのオシロスコープ(RIGOL DHO802)で見てみます。
blog-e.uosoft.net
サイン波は基本となる波形のせいか1MHzでも綺麗に出力されます。
4MHzでブレてきました。
この辺が限度でこれ以上の周波数では形が崩れてしまいました。
5MHzの波形
1KHzの波形
矩形波は割と高周波は難しいようです。
1MHzの波形
500KHzの波形
100KHzの波形
1KHzの波形
三角波は1MHzでは角が丸くなってしまいました。
2MHzではほとんどサイン波です。
500KHzの波形
100KHzの波形
1KHzの波形
プロセッサ自体は12.5MHZまでの出力に対応してるので、周辺回路次第でもっと精度の良い波形が出せると思います。
数100KHzまでの単位で使用するなら簡単に使えるのでお手軽な基板だと思いました。