トップページへ        電子工作の目次へ
   DDS について
 
DDS入門

しばらく前に 7MHz QRP トランシーバ(下記写真)を作りました。 作った、動いたで感激したもののケースには入れずにそのままにしてあります。何しろパーツで一番高価なものはケースですから。 といって菓子やキャンデーの空き缶では中身が可哀想です。
1号機は何かと不満な部分があります。では2号機をと思ったのですが、最近ではDDSについて細かいことは忘れがちです。 復習するつもりでこの頁を書きました。

 
 
DDS-IC を使ってみました
   
ANALOG DEVICES社(米国)製 DDS-IC(以下 DDS )AD9851とAD9835 を入手、RF信号を発生させるテストをしました。
 
DDSとは直接デジタル信号発生器(Direct digital synthesis)のことで、数値制御によりサイン波(コサイン波)の周波数を発生させ、波形の位相も設定できます。

 
DDS の原理
DDS は或る周波数のアナログ・サイン(コサイン)波形出力を、IC に内蔵しているコサイン波メモリと高速デジタル・アナログ(D/A)コンバータにより発生させるものです。
コサイン波形は位相角度 0 のとき+1から始まり、πのときは−1になり1周期の2πでは再び+1になる波形曲線です。
 
位相について描くと第1図の下の図形のように鋸歯状波(のこぎり波)になります。
 
LC発振器などでは3角関数波(コサイン波)を歪みなく作り出すのは容易ではありませんが、歪みのない鋸歯状波は容易に作れます。
 
鋸歯状波の位相 0から2π に対応したコサイン曲線の振幅値をあらかじめ、メモリに入れておき、鋸歯状波の位相変化に対する値をメモリから取り出せばデジタル信号化されたコサイン波が出力されます。
このデジタル信号を内蔵したデジタル・アナログコンバータに通してリニアリテイの高いコサイン波が得られます。
これらの動作を行える機能を持ったものが DDS です。
 
コサイン波=Cos(ωt)、DDS の出力周波数 Fout、ω=2πFout のとき
微小部分の位相は ΔPhase=ωδt  となります。
 
これを ωに付いて解くと

  ω=ΔPhase/δt=2πFout −−−−−@
 
式@を Fout について解くと

  Fout=ΔPhase/(δt x 2π) −−−−−A
   となります。
 
AD9851やAD9835は32ビットの位相アキュームレータがあり、0〜2πを2^32(2の32乗)に分けた値の各位相々当の Cos波出力を内蔵のメモリから取り出します。
(32ビット=2^32=4294967296)
 
2πを 2^32 とし、 δt=1/System Clock を上の式Aに入れると次のようになります。

  Fout = (ΔPhase x System Clock)/ 2^32 −−−−−B
 
System Clock は DDS に供給するクロック周波数です。 クロック周波数と、取り出したい周波数 Foutが決まれば計算でΔPhase の値が得られます。
 
ΔPhase の値を DDS に書き込めば求める周波数出力が得られます。
DDS は全てデジタル制御で、速く正確に周波数出力が得られ、非常に高い精度で、自由に出力周波数を変えるともできます。
 
DDS では System Clock の上下に所要周波数 Fout のイメージが出ます。
例えば System Clock=100 MHz 、 Fout=20 MHz とすると
100 MHz ±20 MHz の 80 MHz(第1イメージ)と 120 MHz(第2イメージ)が現れます。
さらにSystem ClockのK倍高調波±Fout のイメージが出ます。このため DDS の出力回路にはローパスフイルタを設ける必要があります。

  
AD9851( CMOS 180MHz DDS/DAC Synthesizer )
AD9851は注入したクロック発振器の入力周波数をそのまま使うほか、内蔵の6逓倍器により 180MHzまでのクロック周波数で使うことができます。
出力波形は周波数を変更しても位相は変りません。
  
AD9851の基本的なブロックダイアグラムと信号の流れは第1図のようになります。

  
DDS回路はシステムクロック周波数によって決定されるデジタル周波数分割機構と数値N(チューニングワードのビット数)が基本です。AD9851へのチューニングワード書込みはパラレル伝送とシリアル伝送の二通りが可能です。 AD9851 のピン配置は第2図のとおりです。
 
AD9851 はピン間隔が 0.65mm と狭いのでハンダ付けに苦労します。どっぷりとハンダを盛ってから、ハンダ吸取り網線を並んだピンに平らに当てて余分なハンダを吸取るとうまくハンダ付けができます。

AD9851の周波数チューニングワードΔPhaseは次の式から計算で求めます。

   Fout = (ΔPhase x System Clock)/ 2^32 より
   ΔPhase=Fout(MHz) x 2^32/System Clock(MHz)

DDSから取出せる周波数出力信号は、発生するイメージ周波数の影響を受けない範囲でSystem Clock の2分の1より低い周波数となります。(DDS の出力側にバンドパスフイルタを使ってSystem Clock より高い周波数のイメージ信号を取り出すことは可能でしょう。 試したことはありません。)

AD9851の発振周波数を決める設定ワードと周波数チューニングワードは40ビットのデータで構成されます。
データ書き込みのデフォルトはパラレルモードになっています。

40ビットのデータを
パラレルモード で書き込む場合
最初に 1バイト(8ビット) のAD9851 設定ワードを送信します。

設定ワードの1バイトは次の通りです。
bit7〜3  位相 MSB〜LSB (=’00000’のとき位相変更なし)
bit2    パワーダウン(=1 パワーダウン、 =0 パワーアップ)
bit1    ロジックゼロ (常時ゼロにしておく)
bit0    6倍クロック設定 (=1のとき6倍)

次に4バイト(32ビット)の周波数チューニングワードを上位バイトから下位バイトの順に送信します。

合計5バイトのデータを送信する前に AD9851 のリセットを行います。
RESET(ピン22)を5システムクロック以上 “High” にするとリセットが行われます。

書き込みは、入力 D7〜D0ピンへ上記5バイトの値を1バイトずつ入れて W_CLK (ピン7)に off → on(min 3.5 nSec) → off のパルスを送ります。5バイトの書き込みが終了したら FQ_UD (ピン8)に off → on(min 7.0 nSec) → off のパルスを送ると書き込みは終了します。

40ビットのデータをシリアルモードで書き込む場合シリアルモードで使うには ハードウエアで D1 ピン と D2 ピン を結び、それを抵抗器 10KΩで +V に プルアップしておきます。
40ビットのシリアル信号データは D7ピンへ入れます。

シリアルモードでの書き込みでは AD9851 をリセット後、5バイトに入れた40ビットのチューニングワードを1ビットずつ、書き込みクロック W_CLK off → on → offで送信し、40ビットのデータ送信が終了後、FQ_UP ピンに off → on → off のパルスを送って送信は完了です。

シリアルモード はパラレルモードの時とデータの送信順が逆で、次のように下位バイトから上位バイトの順に送信します。

周波数チューニングワードと設定ワード
・32 ビット の周波数チューニングワード(LSB〜MSB)
・8 ビット のAD9851 設定ワード
この8 ビット の内訳は 6倍クロック設定、ロジックゼロ 1bit 、パワーダウン 1bit 、位相 LSB〜MSB x 5bit となります。

周波数発生テスト例 (シリアルモード)
周波数 Fout = 4 MHz の信号を AD9851 から得る方法
System Clockは 30 MHz 水晶発振器の出力を REF CLOCK ピンに入れAD9851 は6倍クロックに設定します。

   周波数チューニングワードは前出の式から
   ΔPhase = F out x 2^32/ System Clock 
   = (4 x 2^32)/180 = 95443718 = H’05 B0 5B 06’

         
上の値を AD9851 へ
シリアルモード を書き込むにはPICなど、マイクロコントローラに 5つのレジスタ WD0 〜 WD4 を用意します。
そのうちの4つのレジスタ WD0〜WD3 へ周波数チューニングワードΔPhaseの低位の値 LSBから MSBの値順に入れます。上のワードの場合は次のようにします。

WD0 = H'06'
WD1 = H'5B'
WD2 = H'B0'
WD3 = H'05'

WD4 レジスタには設定ワード B’00000001’ = H’01’ を入れます。
この設定の内容は
 位相ゼロ ’00000’ 、パワーアップ ‘0’ 、Logic ‘0’、6倍クロック使用 ‘1’ です。
(ここでは使いませんが位相の設定最小単位は 11.25°です)

AD9851 のリセットピンにリセット信号 ‘1’ を送って、 WD0 から WD4 までの順に
右回しで各レジスタの値を1ビットずつクロック信号(W_CLK)と共に AD9851 へ送り、最後に書き込み信号 ‘1’(FQ_UD)を送れば周波数の設定が完了します。

書き込み信号 ‘1’(FQ_UD)はクロック信号(W_CLK)より 最低 7nSec 遅れることと、長さは最低 7.0 nSec であることが必要です。

以上の例は単一周波数の発生テストで、周波数をこまかく変えたい場合は、変更する周波数単位の周波数ワードを基本周波数ワードに加え(または減じ)、その値を再度書き込むようにします。
  
AD9835( 50MHz CMOS Complete DDS )
AD9835 はデータシートによれば、 50MHz までのクロックレートがサポートされた DDS で、 25MHz までの Sin (Cos) 波が発生できます。 位相アキュームレータや位相オフセットレジスタが内蔵されていて、位相変調もできます。

この DDS は RF 通信システム用に作られていて、異なる2つの周波数を交互に発生さ、ロータリエンコーダなどで周波数の変更ができます。 例えばトランシーバなどで、送信時の「送信周波数」と受信時の「局発周波数(受信周波数±中間周波数)」の発振器として使用でききます。
AD9835 のピン配置は第3図のとおりです。

  
出力周波数とシステムクロック、周波数チューニングワード相互の関係は次の様に決められています。

       Fout = ΔPhase x System Clock/ 2^32

   ΔPhase=Fout(MHz) x 2^32/System Clock(MHz)

AD9835 の周波数チューニングワードや設定ワードの書き込みはシリアルデータ送信によりおこないます。
周波数チューニングワードや設定ワードは16ビットを2回に分けて送信します。最初に送信した8ビットは AD9835のレジスタに貯えられ、次に8ビットを送信すると、16ビットワードとして AD9835 にロードされます。

書き込みデータの内容を第4図に示します。

 
周波数チューニングワードの設定    
D15〜D12に入れるC3〜C0は「0」か「1」の値の組み合わせで次のコマンドになります。

C3 C2 C1 C0
0  0  0  0    2度目の8ビットを位相レジスタへ書き込む
0  0  0  1   最初の8ビットの位相データを書き込む
0  0  1  0    2度目の8ビットを周波数レジスタへ書き込む
0  0  1  1   最初の8ビットの周波数データを書き込む

ここではC3は常に「0」です。 C2が「1」のときは位相関係か AD9835 テスト用です。
注:位相関係の設定は AD9835 を使った製作テストをしていないため以後すべて省略します。

D11〜D8に入れるA3〜A0は次の通り書き込むレジスタの選択に使います。

C3 C2 C1 C0 A3 A2 A1 A0
0  0  1  1  0  0  1  1   FREQ0 レジスタ H MSBs
0  0  1  0  0  0  1  0   FREQ0 レジスタ L MSBs
0  0  1  1  0  0  0  1   FREQ0 レジスタ H LSBs
0  0  1  0  0  0  0  0   FREQ0 レジスタ L LSBs

0  0  1  1  0  1  1  1   FREQ1 レジスタ H MSBs *
0  0  1  0  0  1  1  0   FREQ1 レジスタ L MSBs *
0  0  1  1  0  1  0  1   FREQ1 レジスタ H LSBs *
0  0  1  0  0  1  0  0   FREQ1 レジスタ L LSBs *
 2009.2.23 訂正
 2009.2.28 修正

D7〜D0には周波数チューニングワードの値を入れます。

周波数設定ワードは1周波数あたり
H MSBs, L MSBs, H LSBs, L LSBs のアドレスの後に後述の計算による周波数チューニングワードをつけて AD9835 へシリアル送信します。

C3〜C0 と A3〜A0を組み合わせた周波数書き込みアドレスは次のようになります。
FREQ0 チャンネル
H MSBs = 00110011 = H’33’
L MSBs = 00100010 = H’22’
H LSBs = 00110001 = H’31’
L LSBs = 00100000 = H’20’

FREQ0 FREQ1チャンネル 2009.2.23訂正
H MSBs = 00110111 = H’37’
L MSBs = 00100110 = H’26’
H LSBs = 00110101 = H’35’
L LSBs = 00100100 = H’24’

SYNC と SELSRC の設定
D15を「1」、D14を「0」にするとSYNC と SELSRC の設定ができます。
この設定は周波数と位相レジスタのコントロールと同期に関するものです。ここでは省略します。

AD9835 のパワーダウン、リセット及びクリヤの設定
D15を「1」、D14を「1」にするとD13、D12、D11 で SLEEP, RESET, CLR の設定ができます。D11D10〜D0 は使われていないので「0」を入れます。
2009.2.23訂正
 
D13 「1」のとき SLEEP 「0」のときスリープから覚醒
D12 「1」のとき RESET 「0」のときリセットしない
D11 「1」のとき CLR   「0」のとき CLR リセット

周波数発生テスト例    
7 MHz QRPトランシーバ用として次の二つの周波数を作り出すテストをしました。

受信機局発 11.015 MHz を AD9835 の FREQ0 から取り出し、 
送信周波数 7.015 MHz を同様に FREQ1 から取り出す設定をテストしました。
(注:受信機局発は受信周波数 7.01 5MHZ + 中間周波数 4.000 MHz)
AD9835 のシステムクロック周波数は32 MHz (=2^32 MHz) としました。

受信用局発周波数チューニングワード
ΔPhaseRX = (F out x 2^32)/ System Clock 
      = (11.015 x 2^32)/ 2^5 = 11.015 x 2^27
      = 1478408273.9 = H’58 1E B8 52’

送信用周波数チューニングワード
ΔPhaseTX = (F out x 2^32)/ System Clock 
      = (7.015 x 2^32)/ 2^5 = 7.015 x 2^27
      = 941537361.9 = H’38 1E B8 52’

先に説明したC3〜C0 と A3〜A0によるデータのアドレスと周波数データを合わせ、マイクロコントローラ(PIC)から AD9835 へ
左回しに1ビットずつ送信します。

データ送信の最初は書き込み準備命令(B’11111000 00000000’ = H’F8’)を送信します。
この内容は第4図にあるパワーダウン、リセット及びクリヤの設定を
D15=1
D14=1
D13=1 (スリープ:内部のクロックやDACを停止してパワーダウン)
D12=1 (リセット:内部の位相アキュームレータをゼロにする)
D11=1 (クリヤ:SYNC と SELSRC 入力をゼロにする) 
D10〜D0は使わないのですべて「0」とします。

データ送信の最後は書き込み命令(B’11000000 00000000’ = H’C0’)を送信して全てのデータを AD9835 に書き込みます。
書き込み命令は書き込み準備命令のスリープをパワーアップにし、リセットおよびクリヤは何もしない設定です。

AD9835 へのデータ書き込み順序は次のようになります。

書き込み準備命令 = H’F8 00’

FREQ0 チャンネル
H MSBs のデータ = H’33 58’
L MSBs のデータ = H’22 1E’
H LSBs のデータ = H’31 B8’
L LSBs のデータ = H’20 52’

FREQ1 チャンネル
H MSBs のデータ = H’37 38’
L MSBs のデータ = H’26 1E’
H LSBs のデータ = H’35 B8’
L LSBs のデータ = H’24 52’

書き込み命令 = H’C0 00’

マイクロコントローラ(PIC)から AD9835 へ送られる信号線は第5図のようになります。
AD9835 へのデータ書き込み中は FSYNC を LOW にします。

周波数データを書き込んだ後、FSELECT を LOW にすると周波数 FREQ0 が出力され、HIGE にすると周波数FREQ1 が出力されます。

AD9851 と AD9835の入手
AD9851 はアナログデバイセス社(米国)にインターネットでサンプル請求をして1個送ってもらいました。英文で「原子力に使うか」とか「ミサイルに使うか」、「後日、何個くらい注文してくれるか」、「会社名は」などに答えなければなりませんでした。
一度は、面倒くさくなり中止しましたが、市販で入手が難しそうだったため、意を決し(おおげさですね)改めて申し込みをしました。

会社名は「RADIO STATION JA1HHF」、将来の購入数量は「Unknown」としておきました。申込み後5日くらい経って、東南アジアからサンプルが送られてきました。

AD9835 はエリスネット社から通販で購入しました。この会社は初めての取引のとき個人情報などの文書の提出をしてから口座が開かれます。
(
2009.12.7注記:エリスネット社は’09年8月より通販を終了した様です。 現在では、ANALOG DEVICES社からネット通販で購入できる模様です。)

AD9851 と AD9835 の内容は ANALOG DEVICES社がホームページ上で公開しているデータシートを見れば詳しく知ることができます。

このHP、
電子工作の頁に AD9851を使ったDDS テスト基板
  DSW-U-40用AD9835コントローラの記事があります。

  
2007.7.21