今年の2月、ArduinoでAD9850DDSを動かす実験をしました。記事はこちら。
今回使うAD9834をコントロールする方法は、それとはまったく違っています。
AD9834の日本語データシート(pdf)を見て制御方法を勉強します。
このデータシートは、AD9834BUR(最高クロック50MHz)ですが、今回使うAD9834BRUZ(最高クロック75MHz)と原理は同じだと思います。
AD9834は、内部に周波数セット用のレジスタを2つ(FREQ0とFREQ1)、位相変調用のレジスタを2つ(PHASE0とPHASE1)そしてDDSをコントロールするためのコントロールレジスタを持っています。
AD9834のデータは16ビットで3線式のSPI通信で送ります。
16ビットデータの最初の2ビット(D15,D14)で、データの収納先のレジスタを指定します。
D15=0,D14=0(00)ならコントロールレジスタを01ならFREQ0を10ならREQ1を11ならPHASEレジスタを示します。
更にPHASEレジスタは2つありますので、D13が0のときは、PHASE0を1のときは、PHASE1を示します。
FSYNC,SCLK,SDATAのシリアルタイミングは、次の図のようになります。なお、詳細はデータシートを見てください。
FSYNCをLOWにしてからデータを送ります。16ビットのデータ(D15~D0)は、SCLKの立ち下がりで内部のシフトレジスタに送られます。
D15から送り込むというのは、MSB(最上位ビット)から順に送るということです。Arduinoでは、shiftOutという関数でこれを行うことができます。
さて、肝心な周波数データは、どのように計算するのでしょうか。
これについては、前回のAD9850DDSの時と同じ計算で行うことができます。
Arduinoは計算機能が強力ですので、簡単に計算できますが、今後PICでコントロールする予定なので、マスタークロックは、67.108864MHzに設定しています。
このことにより、一番下の行のとおり、希望周波数 f を32ビットの変数に格納して、左に2ビットシフトすれば、周波数データΔPhaseが得られることになります。
実際にAD9834にデータを送る方法(プログラム)は、次回書きます。