AD9850 DDSモジュールをArduinoでコントロールする実験
2015年2月 JH7UBC
サインスマートのAD9850 DDSモジュールを購入しました。(Amazonで1980円でした)
クロック125MHzで正弦波0〜40MHzを発生させることができます。
このモジュールを選んだのは、安価なのとArduinoにはAD9850のライブラリがあるからです。
このモジュールをArduinoでコントロールする実験を行いました。
AD9850 DDSをコントロールする方法は2つあります。
一つは、データを1バイト(8ビット)ずつパラレルに5回送る方法です。
もう一つは、8バイト(40ビット)のデータをシリアルに送る方法です。
今回は、シリアルで送ることにします。
この場合、下の図のようにArduinoとAD9850 DDSモジュールを接続します。
Arduinoのどのピンを割り当てるかは任意で、スケッチ上で指定します。
正弦波の出力はZOUT2です。
実際の配線の様子です。実験ですので、ブレッドボードを使い、ジャンパーワイヤで接続しています。
1MHzを発生させています。(最小桁は、誤差の範囲)
発生させた1MHzの波形です。
では、どのようにプログラムするのでしょうか。
EF_AD9850というライブラリを利用することにより、簡単に制御することができます。
まず、EF_AD9850ライブラリを、ArduinoのWeb PageのForumのここからダウンロードします。
次にダウンロードしたライブラリをArduino IDEのライブラリに追加します。
追加する具体的な方法は次のとおりです。。
#include <EF_AD9850.h> EF_AD9850 AD9850(9,10,11,8) //CLK ,FQ_UP,RESET,DATAの順にArduinoのピン番号を記載 void setup() { AD9850.init();//AD9850の初期化 AD9850.reset();//AD9850リセット } void loop() { AD9850.wr_serial(0x00,7000000); //周波数(7000000Hz)をセット } |
回路図です。周波数は、LCDに表示します。DDSの出力に簡単なバッファをつけました。
実験したブレッドボードです。一番下が周波数を変えるボリュームです。
参考までにスケッチです。
7MHz ダイレクトコンバージョン受信機にVFOの代わりにDDSを接続してみました。
アナログVFOと同じように受信できました。
ただ、LCDからのノイズでしょうか、若干ノイズが増えたような気がします。
また、100Hzステップではチューニングがやや荒く感じられます。