DDS: Direct Digital Synthesizer

2005-12-18 初版
2006-11-20 加筆

はじめに

Analog Devices の AD9835 をサンプルで入手できたので、PIC でコントロールしてみました。
DDS とは正弦波を D/A で高精度に周波数制御しながら出力するものです。
最大 50MHz で駆動でき、10bit 精度があります。
従来のアナログOPアンプを使った正弦波発信器より高精度です。
48.8KHz まで10bit精度
97.7KHz まで9bit精度
195KHz まで8bit精度
391KHz まで7bit精度
781KHz まで6bit精度
1.56MHz まで5bit精度
3.125MHz まで4bit精度
AD9835 は機器への内蔵を想定しているため、表面実装のTSSOP(Thin Shirink Smole Outline Package)になっています。
5.1mm x 6.2mm と非常に小さいため、扱い易いように DIP へ変換アダプタを作りました。

PIC と AD9835 とは3つの線(SCLK, SDATA, FSYNC)で接続し、コントロールには16ビットのコマンドで行います。
AD9835には6つのレジスタがあります。
FREQ0 REG32bitsFREQ0 用の周波数レジスタ
FREQ1 REG32bitsFREQ1 用の周波数レジスタ
PHASE0 REG12bitsPHASE0 用の位相オフセット
PHASE1 REG12bitsPHASE0 用の位相オフセット
PHASE2 REG12bitsPHASE0 用の位相オフセット
PHASE3 REG12bitsPHASE0 用の位相オフセット
ピンで2つの周波数切り替えと位相を切り替えることができます。
今回は FREQ0 とPHASE0 に固定しています。

32ビットレジスタの構造
H MSB(8bits)L MSB(8bits)H LSB(8bits)L LSB(8bits)

12ビットレジスタの構造
MSB(4bits)LSB(8bits)

データレジスタへの書き込み
D15D14D13D12D11D10D9D8D7D6D5D4D3D2D1D0
C3C2C1C0A3A2A1A0B7B6B5B4B3B2B1B0
SYNC と SELSRC の設定
D15D14D13D12D11D10D9D8D7D6D5D4D3D2D1D0
10SYNCSELSRCXXXXXXXXXXXX
Sleep, Reset, Clear コントロール
D15D14D13D12D11D10D9D8D7D6D5D4D3D2D1D0
11SLEEPRESETCLRXXXXXXXXXXX

アドレスとコマンドを指定することで、レジスタ操作をします。
A3A2A1A0Register
0000FREG0 L LSB(8bits)
0001FREG0 H LSB(8bits)
0010FREG0 L MSB(8bits)
0011FREG0 H MSB(8bits)
0100FREG1 L LSB(8bits)
0101FREG1 H LSB(8bits)
0110FREG1 L LSB(8bits)
0111FREG1 H LSB(8bits)
1000PHASE0 LSB(8bits)
1001PHASE0 MSB(8bits)
1010PHASE1 LSB(8bits)
1011PHASE1 MSB(8bits)
1100PHASE2 LSB(8bits)
1101PHASE2 MSB(8bits)
1110PHASE3 LSB(8bits)
1111PHASE3 MSB(8bits)
C3C2C1C0Command
0000Phase 16ビット(8ビットバッファーを含む)の書き込み
0001Phase 8ビットバッファーへの書き込み
0010Register 16ビット(8ビットバッファーを含む)の書き込み
0011Register 8ビットバッファーへの書き込み
0100SELSRC=1 のときD9(PSEL0)とD10(PSEL1)を使用/SELSRC=0のときPSEL0とPSEL1ピンを使用
0101SELSRC=1 のときD11(FSELECT)を使用/SELSRC=0のときFSELECTピンを使用
0110SELSRC=1 のときD9(PSEL0)D10(PSEL1)D11(FSELECT)を使用/SELSRC=0のときPSEL0,PSEL1,FSELECTピンを使用
0111予約
制御ソフトでは、浮動小数点演算が不可欠であり、Microchip の Application Note AN575 を利用しました。
最近の PIC はFLASHの容量が増えたので、浮動小数点も容易に扱うことができます。


仕様

出力波形正弦波、矩形波(Duty可変)
周波数1Hz - 1MHz
周波数可変単位1Hz,10Hz,100Hz,1KHz,10KHz,100KHz,1MHz
最大振幅3.5Vpp
周波数の上限は振幅が小さくなることを気にしなければ10MHzでも利用可能。

回路図


部品表

型番Parts備考
0.01u2C4,C7セラミックコンデンサ, (秋月)
100u4C1,C2,C5,C6縦型電解コンデンサ,耐圧16V (秋月)
SC1602B1LCD116桁2行表示LCD, (秋月)
10K3R1,R2,R3カーボン抵抗1/4W (千石)
3.9K1R4カーボン抵抗1/4W (千石)
5001VR1ボリュームB (千石)
10K1VR2ボリュームB (千石)
NJM29301U13端子レギュレータ5V, (秋月)
16F881U2PIC(秋月)
JXO1U3CMOS水晶発信器 50MHz, KCJOX7-50.0000 キンセキ(サンエレクトロ)
AD98351U4Analog Devices (サンプル)
LM63651U5高速オペアンプ(秋月)
Case1Caseポリカーボネート・ケース、117x84x28mm (秋月)
SW3SWボタンスイッチ(千石)
RCA2RCARCAジャック(千石)
AD9835 入手方法の問い合わせを多く受けますが、アナログデバイセズ のホームページをご覧ください。英語能力が必要です。

ファームウェア

DDS.zip(3.3KB)
エラー処理をしていません。たとえば、周波数がマイナスになるような操作すると動作は不定になります。


基板例


外見



使用方法

  1. 周波数の変更する桁にアンダーラインが表示されます。
  2. RANGEボタンを押すごとにアンダーラインの位置が変わります。
  3. 周波数をUP/DOWNボタンで変更します。
  4. 周波数は電源OFFしても保持されます。
  5. 周波数をリセット(100KHz)するにはRANGEボタンを押しながら電源ONします。


評価

出力波形をデジタル・オシロスコープ(PicoScope2104)で確認してみました。
左図が波形、右図がスペクトラムです。
1Hz単位で周波数を設定でき、波形も見ての通りです。スプリアスもほとんどみあたりません。
デジタル・オシロスコープは便利ですね。周波数とピーク電圧も同時に測定してくれます。
波形を画像として保存できるので、貼り付けも簡単です。








矩形波(1KHz)


感想

以前はオペアンプを使ったアナログ正弦波発信器を使っていましたが、 高い周波数での波形鈍りと不安定さに悩まされていました。
目的の周波数に合わせるのも苦労していました。
技術は進歩するもので、DDS では周波数の安定性と1Hz単位での設定が可能になりました。
しかも1MHzでも波形に鈍りはみられません。 むしろ、下手なオペアンプをバッファーに入れると波形が鈍ってしまいます。
さすがに、1MHz 以上になると振幅にも影響がみられ、小さくなっていきます。
Analog Devices にはAD9835より優れたDDSもありますが、急激に消費電流が大きくなることと ピン数が多くなるため、アマチュアとしてはAD9835が最適のように思います。
周波数は非常に高精度でこれから重宝しそうです。

1Hz単位で周波数を指定できることから、123456Hzということもできます。有名な発振器用ICのMAX038ではこのようなことは難しいでしょう。


(C)2005-2006 All rights reserved by Y.Onodera. inserted by FC2 system