Quantcast
Channel: JH7UBCブログ
Viewing all articles
Browse latest Browse all 440

ArduinoでAD9834DDSその2

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

Viewing all articles
Browse latest Browse all 440

Trending Articles