AT90S4414によるDDS 1999.10.16 (最終更新1999.10.16)

ddslpf.jpg

これはATMEL AVRマイコン(AT90S4414-8PC)で作ったDDS(Direct Digital Synthesizer)です。

仕様は次の通りです。

標本化周波数 524288Hz (=2^19Hz)
出力周波数 1Hz 〜 65535Hz
周波数分解能 1Hz
出力振幅 2.5Vp-p
出力インピーダンス 600Ω
電源電圧 ±7V 〜 ±15V

DDSのアルゴリズムをソフトウエアで実現しているので低周波しか出力できませんが、
出力周波数が正確で安定しているので用途によっては便利だと思います。

写真で3つ写っているディップスイッチは周波数の設定用で、実際には2つしか使っていません。
内部の周波数分解能は1/32Hzですが、周波数設定値の下位5ビットを0に固定して6ビット目から
ディップスイッチの設定値を入れることで見かけの周波数分解能を1Hzにしています。
ディップスイッチを3つ使って内部の周波数設定値を全ビット設定できるようにソフトウエアを
変更すれば、1/32Hzまで周波数分解能を上げられます。

ソフトウエア(ディップスイッチのビットと内部の周波数設定値のビットの対応)の変更の他に
LPFの遮断周波数も変更すれば、出力周波数の上限は標本化周波数の1/4〜1/3まで上げられると
思います。

CPU自体は5V単電源動作なので、出力にDCオフセットがあっても構わないか、容量結合にしても
構わなければ全体を単電源動作にできますが、むしろその方が良かったかもしれません。

波形の測定はテクトロニクスのオシロスコープTDS220で行っています。
スペクトラムの測定はPCのサウンドカードを使ってFFTで行っています。
FFTソフトはefuさん制作の WaveSpectra です。基本波を0dBとして正規化しています。

1000Hz出力時のスペクトラムが通常の例で、8192Hz出力時のスペクトラムは特別な例です。
内部の周波数設定値が2のべき乗になる場合のみ、このように綺麗なスペクトラムになります。
DDSのLSIには、ディザでスプリアスのスペクトラムを拡散し、個々のスプリアスのピークレベルを
小さくする機能をもつものがありますが、そんな機能を組みこんでみるのも面白そうです。

65535Hz出力時のスペクトラムは測定できないので波形のみです。振幅が少し小さいのは
LPFのリプルとDACのsin(x)/xロールオフ特性のためかと思います。

LPFは定K型5次の遮断周波数が約87.7kHzのもので、周波数特性はあまりよくありませんが
DACの分解能が8ビットなのでこんなところで妥協しました。
回路シミュレーションはMicro-Cap 5で行っています。

回路図
プログラム

1000HzLPFWF.jpg
1000Hz出力時の波形(600Ω終端)です。

1000HzLPFSP.gif
1000Hz出力時のスペクトラムです。

8192HzLPFWF.jpg
8192Hz出力時の波形(600Ω終端)です。

8192HzLPFSP.gif
8192Hz出力時のスペクトラムです。

65535HzLPFWF.jpg
65535Hz出力時の波形(600Ω終端)です。

65535HzWF.jpg
LPFを通る前の65535Hz出力時の波形です。

avrddslpffc.gif
LPFの周波数特性のシミュレーション結果です。
縦軸の単位はdB、横軸の単位はHz、下側は通過域の拡大図です。

back