TNJ-073 : たまには手を動かして DDS AD9913 の動作実験をしてみよう(前編)DDS(ダイレクト・デジタル・シンセサイザ)の基礎と信号発生

2021年03月02日
myAnalogに追加

myAnalog のリソース セクション、既存のプロジェクト、または新しいプロジェクトに記事を追加します。

新規プロジェクトを作成

はじめに

回路設計 Web ラボ。このところ「LTI(Linear Time Invariant; 時不変)システム」という視点からすれば、全く同じネタ(LTI)を取り扱ってきたなぁと、深く反省しておりました…。数式が多くつづき、霹靂(へきれき)とされていた方もいらっしゃったのではと、心を痛めておりました。式導出を丁寧に行ったことで、理解いただけていれば幸いとも思っております…。

そこで今回は実際に手を動かして、アナログ(といってもミックスド・シグナルですが)IC の動作実験をしてみましょう。「コイツは理論ネタばっかりだな(はんだごて握れないんじゃないの?)」という嫌疑を払拭する(?)今回の記事なのでありました…。

 

全ては CQ 出版の編集者からのメールから始まった(なんて大げさ…)

とある日、以前名刺交換した CQ 出版の新人編集者の方からメールがありました。「トランジスタ技術誌で『私の部品箱』という 1 ページの連載というか、定番記事があるので、よく使っているICを何か紹介してもらえないか」というものでした [1]。いろいろと考えた末、超ローノイズ OP アンプの AD797 と DDS (Direct Digital Synthesizer)AD9913[2]のふたつの候補を提示し、相談のうえ AD9913 について執筆することにしました。

私は相当まえ、とある機器の製作に AD9913 を使ったことがあったのです。これを製作した経験から『私の部品箱』でAD9913を紹介しようと思ったわけでした。図 1が AD9913を用いて製作したそのクロック発生器です。真ん中に鎮座しているのが AD9913…ではなく、某社のマイコンです(汗)。基板上部中央にちっこく鎮座しているのが、我が AD9913 です。

このような経緯でこの TNJ-073 で DDS AD9913 を取り上げようと思ったのでした。まず AD9913 をご紹介しておきましょう!

AD9913 DDS、250MSPS、10 ビット DAC 内蔵、1.8V、 低消費電力、CMOS

https://www.analog.com/jp/ad9913

【概要】

AD9913 は、携帯機器、ハンドヘルド機器、バッテリ駆動機器の厳しい消費電力制約を満たすように設計された、全機能内蔵型のダイレクト・デジタル・シンセサイザ(DDS)です。最大 250MSPSで動作する 10ビット D/A コンバータ(DAC)を備えています。最新の DDS 技術に高速で高性能な内蔵 DAC を組み合わせ、最大 100MHz で周波数アジャイルなアナログ出力サイン波形を生成できる、デジタル・プログラマブルの完全な高周波シンセサイザを構成します。(後略)

図 1. 相当前に製作した AD9913 を使用したクロック発生器
図 1. 相当前に製作した AD9913 を使用したクロック発生器
図 2. AD9913 のデータシート[2]から抜粋した IC 内部のトップ構造
図 2. AD9913 のデータシート[2]から抜粋した IC 内部のトップ構造

 

DDS とはなんじゃ

まずは DDS をご存知ない方に、DDS の構成を説明いたします。ご存知の方、ご興味ない方は飛ばしてください…。

図 2 は AD9913 のデータシート [2]の Figure 1 から抜粋した IC 内部のトップ構造です。DDS は基本的には DAC(DA コンバータ)です。図 2 にも 10-BIT DAC という文字が見えますが、前段のデジタル信号処理回路で DAC に与える信号(実際は正弦波数値)をデジタル値として生成します。

図 3. DDS ブロック部分を詳細に記述したもの[3]
図 3. DDS ブロック部分を詳細に記述したもの[3]

 

DDS のコアはカウンタ回路

図 2 で DDS と記載されている部分が、上記の「前段のデジタル信号処理回路」です。この動作をまず理解してみましょう。

この部分は正弦波に相当するデジタル数値を出力し、それを 10- BIT DAC に与える機能が必要です。この技術ノートでは、この数値生成の理解をさいしょのゴールとしていきましょう。

図 3 は図 2 の DDS 部分をもう一歩、詳細に記述したものです [3]。 図中の ACCUMULATOR は、日本語で「累積器」を意味します。 TUNINGWORD で設定したデジタル値のステップでカウント・アップするカウンタ回路、と考えたほうが腹落ち感があるでしょう。つまり TUNINGWORD はカウンタのカウント・アップの増分だと考えるとよいです。

図中の D-F/F(Dフリップ・フロップ)出力を Qとします。仮にこのビット幅を𝐶 = 8ビットとすると(AD9913 は𝐶 = 32ビット 幅です)、この回路はカウント動作をおこなう 8 ビット・カウンタだと考えることができます。図中の SAMPLE CLOCK は DDS 動作クロックです(以降は CK とか 𝑓𝑆𝑌𝑆𝐶𝐿𝐾と表現します)。

たとえば TUNINGWORD = 2 とすれば、8 ビット・カウンタであ る Q 出力は CK の立上りエッジ(立ち上がりで D-F/F がラッチするものとして)で「0, 2, 4, 6, 8, …」とカウント・アップしていきます。そうすると 128 CK でカウンタが 1 周します。

TUNINGWORD = 16 とすれば、8 ビット・カウンタである Q 出力は CK の立上りエッジで「0, 16, 32, 48, 64, …」とカウント・アップしていき、16 CK でカウンタが 1 周します。TUNINGWORD = 64とすれば、8ビットの Q出力は CKの立上りエッジで「0, 64, 128, 192, 0, …」とカウント・アップしていき 4 CK でカウンタが 1 周します。

ちょっと上品に学術的に書いてみると

数式1

ここで𝑄𝐶は𝐶ビット幅のアキュムレータ(累積器)Q 出力、𝑛は時間ステップ、𝐹𝑇𝑊は TUNINGWORD の数値です…などと式で表現することもできます(汗)。このように書くと拒否反応が生じますよね…(汗)。なお以降では TUNINGWORDを FTWとして示していきます。FTW はアナログ・デバイセズの DDS 製品 での標準的な用語で、Frequency Tuning Word(周波数設定値)の頭文字をとったものです。

 

DDS のもうひとつのコアは位相→正弦値変換回路

そうすると TUNINGWORD; FTW を変えると、カウンタが一周する CK 数を変えられる回路を構成することができます。

このQ出力を図3にあるANGLE-TO-AMPLITUDE CONVERSION 回路(ここもデジタル回路)に加えます。この回路は入力値(カウンタの Q 出力)を正弦波の位相として(𝐶 = 8ビット幅であれば 256 を 360°だとして)、相当する正弦波の振幅に比例するデジタル値を出力するものです。たとえば FTW = 16 でこの回路の入力である 8 ビット・カウンタ出力が「0, 16, 32, 48, 64, …」と変化していくなら、

数式1-2

さらに「…, 80, 96, 112, …」と続く

という出力値が得られます。ここでは出力デジタル値のビット数を考えずに、単純に本来の位相値から出力正弦波振幅値をそのまま計算しています。実際は出力ビット数で表されるデジタル値のうち、最も近い値に丸められます。

 

このように DDS 部分の構成は単純

このように図 1 の DDS 部分は「カウント・アップ増分を指定できるカウンタ」と「カウンタ出力を位相値と考えて、その位相値に相当する正弦波振幅を出力する回路」から構成されていると考えることができます。これをより本格的には「数値制御発振器」Numeric Controlled Oscillator (NCO)と呼びます。

このように基本的かつ実践的な説明をすれば、DDS IC のコアである NCO の構成は非常に簡単なものであることが分かります。ここで説明した「8 ビット幅」を DDS IC 内部で取り扱うビット幅(図 3 では記号𝐶)に拡張して考えればよいだけです。 AD9913 では𝐶 = 32、つまり 32 ビット幅になっています。

32ビット幅カウンタは 232ステップですから、TUNINGWORDの設定値を𝐹𝑇𝑊と表現すれば、AD9913 のデータシート [2]の式(1) のように、出力周波数𝑓𝑂𝑈𝑇

数式2

と表現できます。𝑓𝑆𝑌𝑆𝐶𝐿𝐾は DDS 動作クロック(つまり CK)です。DDS 出力周波数というのは結局、ここまで示してきたように(AD9913 では 32 ビット幅の)カウンタが 1 秒間に何周するかということなのです。

なお DDS の周波数分解能としては、AD9913 を例とし、𝐹𝑇𝑊 = 1とおくことにより、

数式3

図 4. 今回実験してみる DDS AD9913 基板 ADKK-TM002A(本文 に示すパネル de ボードから購入可能)
図 4. 今回実験してみる DDS AD9913 基板 ADKK-TM002A(本文 に示すパネル de ボードから購入可能)
図 5. 図 4 に示した ADKK-TM002A のブロック図
図 5. 図 4 に示した ADKK-TM002A のブロック図

と表すことができます。𝑓𝑆𝑌𝑆𝐶𝐿𝐾を 32 ビット幅で割った値となります。かなり細かいですね!AD9913 の DDS 最大動作クロックである𝑓𝑆𝑌𝑆𝐶𝐿𝐾 = 250MHzにしても、なんと∆𝑓𝑂𝑈𝑇 = 0.058Hzの微細な周波数ステップを実現できるのです!

 

実際に DDS IC AD9913 を動かしてみる

 

実験に使用したのは「パネル de ボード」のモジュール

図 1 に示したクロック発生器はすでに手元にありません…。そこで以前、株式会社ピーバンドットコムと組んで実現した「パ ネル de ボード」という WEB サービス

https://www.p-ban.com/panel_de_board/

で作成した図 4 のようなモジュール基板を用いて実験してみます。今でも ADKK-TM002A でご購入いただけます。上記の URL にアクセスし、項目:標準モジュール、つづいて分類 1:タイマ・発振回路から選択してください。図 5 に図 4 のモジュール基板のブロック図を示します。今回は源振(発振源)には 25MHz の XTAL(水晶振動子)を使用してみました。

AD9913 は設定用プログラミング・インターフェース(I/F)をシリアル方式かパラレル方式で選択できます(今回はシリアル I/Fを使用)。マイコン側のI/F電圧レベルは5Vなので、AD9913 の動作電圧の 1.8V に基板上で分圧しています。

シリアル I/F は SPI(Serial Peripheral Interface)ですが、情報デー タ SDIO ピン(29 ピン)は入出力共用になっています。これをこのまま 1.8V のロジック入力として、書き込み一方向(専用)で使用することもできますが(今回はこの技で行きます)、通常マイコンの SPI は MOSI、MISO の 2 線で相互通信する方法です。そのためSDIO信号をレベル変換器(トランジスタなど)で 5V にレベル変換し、マイコンに戻す方法も考えられます。このモジュール基板にはその回路も用意されています。

図 6. AD9913 の設定レジスタとポイントとなる設定ビット(クロック逓倍なし)
図 6. AD9913 の設定レジスタとポイントとなる設定ビット(クロック逓倍なし)

 

まずは内蔵 PLL を用いずに信号出力

AD9913 には PLL(Phase Locked Loop)で構成されたクロック逓倍器(PLL Multiplier)が内蔵されています。外部からのクロック入力に対して DDS動作クロック𝑓𝑆𝑌𝑆𝐶𝐿𝐾を 1倍~64倍に逓倍させることができます。25MHz の XTAL を源振とし、このクロック逓倍器で 10 倍に逓倍すれば、AD9913 の DDS 最大動作クロックである𝑓𝑆𝑌𝑆𝐶𝐿𝐾 = 250MHz (250Msps)を実現できます。

しかしまずここでは、この内蔵 PLL クロック逓倍器を用いずに、源振 25MHz を DDS 最大動作クロックとして一番基本的な動作を確認してみましょう。

図 6 に Control Function Register; CFR1, CFR2 の設定を示します。赤枠で囲んだビットを 1 としていますが、図 6 枠内の機能表現と論理状態は正論理/負論理が混在していますので、詳しくはデータシートの「REGISTER BIT DESCRIPTIONS」の節を参照してください。

これらとあわせて、𝐹𝑇𝑊 = 0x10000000(表記は 16 進)とすることで、32 ビット幅アキュムレータが 16 CK(16/𝑓𝑆𝑌𝑆𝐶𝐿𝐾)で 1 周するようになります。出力からは 25MHz / 16 = 1.5625MHz が得られます。

出力で得られた時間軸波形を図 7 に示します。この測定はIOUT 端子(20ピン)とIOUT端子(19ピン)の差動信号を差動プローブ(1.5GHz 帯域幅 テクトロニクス P6247)で観測しました。高周波のノイズが見えていたので、オシロスコープは入力帯域を 250MHz に制限し、波形を綺麗に表示させてみました。

図 7 の時間軸波形では波形が階段状になっていることが分かります。1 ステップは 1/25MHz = 40ns で、DDS 動作クロックごとに DAC 出力値が変化しているようすが分かります。

図 8 にこの波形をスペクトラム・アナライザ(以降、「スペアナ」)で観測したスペクトルを示します。ここも差動プローブでの測定です。狭帯域(スパン 10kHz)での測定ですが、中心周波数から 100Hz ほどのズレがあります(汗)。これは 25MHz の XTAL 自体の周波数ズレです。計算すると 64ppm 程度ですから、少し大きめですが、まあこんなものでしょう…。XTAL 周囲の発振用容量を大きくすれば、発振周波数を低下させること はできます。XTAL の発振容量パラメータを考慮せず(手持ちの XTALだったので、パラメータが分からず…)、AD9913データシート記載 [2]の 39pF をそのまま使ったことが理由と考えられます。

その周波数ズレは目をつぶるとして(笑)、図のスペクトルをご覧ください。通常の PLL で発生させる信号と比較しても、サイドバンド(SSB)位相ノイズ、つまり信号近傍のノイズ盛り上がりが殆んど観測されていないことが分かります。クロック逓倍器(Clock Multiplier)である内蔵 PLL をオフにした状態で動作させていますので、XTAL でのジッタの無いクロックで DDS が駆動されているため、サイドバンド(SSB)位相ノイズが殆んど観測できないレベルになっているのです。

図 9 のスペクトルでは 0MHz から 25MHz までの広帯域スパンで観測したものです。1.5625MHz と併せて、25MHz-1.5625MHz = 23.4375MHz のところにスペクトルが現れていることが分かります。これは TNJ-014 [4]や TNJ-015 [5]にも示しましたが、サンプリング(離散)システムにおける折り返し成分です。このような成分を、不要要素として「スプリアス」と呼びますが、折り返しによるこのスプリアス成分は、後段に設置する LPF で除去することが一般的です。それ以外の高調波は非常に低くなっています。3倍の高調波も-60dB 以下です。

なお低域でノイズ・フロアが上昇していますが、これは差動プローブ P6247で発生する内部ノイズです。P6247出力をスペアナに接続するため「差動プローブ電源ユニット」というものを使っているのですが、この電源ユニットから差動プローブ自体を外すとノイズ・フロアが低下したことから、原因は差動プローブの内部ノイズだと特定ができました。

図 7. 出力で得られた時間軸波形(周波数 1.5625MHz。差動プローブでの測定。オシロスコープは信号帯域を 250MHz で制限)
図 7. 出力で得られた時間軸波形(周波数 1.5625MHz。差動プローブでの測定。オシロスコープは信号帯域を 250MHz で制限)
図 8. 出力で得られた信号のスペクトルを測定(差動プローブでの測定。スパン 10kHz、 10 回のアベレージング)
図 8. 出力で得られた信号のスペクトルを測定(差動プローブでの測定。スパン 10kHz、 10 回のアベレージング)
図 9. 出力で得られた信号のスペクトルを測定(差動プローブでの測定。スパン 25MHz、 10 回のアベレージング)
図 9. 出力で得られた信号のスペクトルを測定(差動プローブでの測定。スパン 25MHz、 10 回のアベレージング)

 

内蔵 PLL を用いて高い周波数の信号出力

次に内蔵 PLL をオンにしてスペクトルを見てみましょう。AD9913 自体は DDS動作クロックとして𝑓𝑆𝑌𝑆𝐶𝐿𝐾 = 250MHz まで動作します。そこでこの PLL によるクロック逓倍器の周波数を 250MHz にするため、図 10 に示す逓倍率(PLL Multiplication Factor)を 10 にします(CFR2 のビット 14 から 9 を 01010)。 CFR2 のビット 15 が出力を 1/2 にする設定、ビット 3 が PLL 参 照周波数を 1/2にする設定なので、ピュアに動作させるためこれらは「0」に設定し、機能をオフにします。

これで先と同じように TUNINGWORD を𝐹𝑇𝑊 = 0x10000000 (表記は 16 進)とすれば、16 CK(𝑓𝑆𝑌𝑆𝐶𝐿𝐾)で 32 ビット幅アキュムレータが 1 周します。これにより出力から 250MHz / 16 = 15.625MHz が得られます。

この波形をスペアナで観測したスペクトルを図 11 に示します。ここでも差動プローブでの測定です。狭帯域(スパン 10kHz)での測定ですが、中心周波数から 64ppm ほどのズレがあるのは 図 8 と同じです。今回の測定では、スペクトルが中心にくるようにスペアナの中心周波数を調整してみました。

今度は PLL によるクロック逓倍器で DDS 動作クロックを発生させているのですが、図 8 で示した XTAL 発振のみの 1.5625MHz のケースと比較して、サイドバンド(SSB)位相ノイズが「ほんの少し」増加しています。意外と低い増加レベル(1kHz 離調 で-101dBc/Hz 程度)です。

図 10. AD9913 の設定レジスタでクロック逓倍に関わる設定ビット
図 10. AD9913 の設定レジスタでクロック逓倍に関わる設定ビット
図 11. クロック逓倍器で動作クロックを 250MHz とし出力で 250MHz / 16 = 15.625MHz が得られるように設定した信号のスペクトルを測定 (差動プローブでの測定。スパン 10kHz 、10 回のアベレージング。クロック源が周波数同期していないので、スペクトルが中心にくるように中心周波数を調整)
図 11. クロック逓倍器で動作クロックを 250MHz とし出力で 250MHz / 16 = 15.625MHz が得られるように設定した信号のスペクトルを測定 (差動プローブでの測定。スパン 10kHz 、10 回のアベレージング。クロック源が周波数同期していないので、スペクトルが中心にくるように中心周波数を調整)

使用したスペアナ 8560E のサイドバンド(SSB)位相ノイズ・フロア(測定限界)は。1kHz 離調で-105dBc/Hz 程度です [6]。-101dBc/Hz という数値はスペアナのサイドバンド(SSB)位相ノイズ・フロアに近く、スペアナのノイズ・フロアが測定結果として得られていたとも言えます。とはいえこれは、次回でも別の条件で測定してみます。

より高性能な最近の PLL IC(アナログ・デバイセズでも多数取り揃えております)を外部に設置し、それから AD9913 に直接 250MHz の DDS 動作クロックを供給すれば、さらに良好なサイドバンド(SSB)位相ノイズが実現できるはずです。また次の技術ノート TNJ-074 に示すような、アナログ・デバイセズの最新 DDS 製品をお使いいただくと、より良好な性能が得られます。

なおクロック逓倍器である内蔵 PLL は、PLL がロックしているかしていないかを、リード・オンリのレジスタで確認することができます。データシートにも PLL LOCK INDICATION という節があり、ここで CFR2 のビット 0 で PLL のロック状態を確認できますと説明されています。出力周波数が正しいかどうかを確認できる、大事なステータス・ビットです。そうでなくてもロックしない状態だと、DDS 動作クロックが自動的に源振の周波数に切り替わりますので、アンロック状態を認識できます。

 

整数倍にならない条件で信号出力してみる(まずは AD9834 での実験)

説明してきたように図 11 では、DDS 動作クロック 250MHz に対して、その 1/16 の周波数「250MHz / 16 = 15.625MHz」を出力させていました。発生周波数設定は𝐹𝑇𝑊 = 0x10000000(表記は 16 進数)であり、式(2)から出力周波数𝑓𝑂𝑈𝑇

数式4

と得られます。この設定では𝑓𝑂𝑈𝑇と𝑓𝑆𝑌𝑆𝐶𝐿𝐾との関係は 1:16 になっており「整数倍」です。整数比ということは、1 周期の波形発生が終わると、またもとの電圧数値(出力位相とも言えます)に戻る、同じ条件の繰り返し動作(周波数設定)になります。

しかし任意の周波数を発生させたい場合には、いつも整数倍になることはありえません。

 

AD9834 での記事執筆において奇妙なスプリアスが発生した

ところで以前、2012 年になりますが、[7]の書籍の執筆を行いました。そのとき用いたデバイスは AD9834 というものです[8]。 AD9834 をご紹介しておきましょう。

AD9834 DDS,全機能内蔵, 2.3V~5.5V, 75MHz, 20mW 消費電力

https://www.analog.com/jp/ad9834

【概要】

AD9834 は 75MHz、低消費電力の DDS デバイスで、高性能なサイン波および三角波出力を提供する機能があります。このデバイスはまたコンパレータも内蔵しており、クロック発生のための矩形波を生成することが出来ます。消費電力は、3V駆動時で、わずか 20mW ですので、電力の厳しいアプリケーションにとっては理想的な候補デバイスといえます

位相変調および周波数変調に対する機能も提供されます。周波数レジスタは 28 ビット長で、75MHz のクロック・レートで 0.28Hz の分解能が実現できます。

AD9834 は𝑓𝑆𝑌𝑆𝐶𝐿𝐾 = 75MHz (75Msps)が最大の DDS 動作クロックになります。𝑓𝑆𝑌𝑆𝐶𝐿𝐾 = 75MHzで𝑓𝑂𝑈𝑇 = 21MHz の周波数を発生させてみると、図12のような余計なノイズ成分、図8や図9、 図 11 では見えなかった奇妙なスプリアスが観測されることが分かります。実験に使用した基板は [7]に付属していたものを改造したものです。

これは、発生する信号𝑓𝑂𝑈𝑇の 1 周期が DDS 動作クロック𝑓𝑆𝑌𝑆𝐶𝐿𝐾 の整数分の 1 で「ない」からです。𝑓𝑆𝑌𝑆𝐶𝐿𝐾 = 75MHzで𝑓𝑂𝑈𝑇 = 21MHz だと、1/3.57142857 となります。

一方で整数分の 1 の条件、1/4 = 75MHz/4 = 18.75MHz だと図 13 のようにきれいなスペクトルが観測されます(右側に見えるのは 2 次高調波)。いったい、図 12 のスプリアスは何なのでしょうか。

図 12. AD9834 で 21MHz の信号のスペクトルを測定 (スパン 40MHz。10 回のアベレージング)
図 12. AD9834 で 21MHz の信号のスペクトルを測定 (スパン 40MHz。10 回のアベレージング)
図 13. AD9834 で整数分の 1 の周波数 18.75MHz のスペクトル を測定(スパン 40MHz。10 回のアベレージング)
図 13. AD9834 で整数分の 1 の周波数 18.75MHz のスペクトル を測定(スパン 40MHz。10 回のアベレージング)

 

まとめ

今回は「DDS の動作実験をしてみよう」の前編として、基本的な動作を確認してみました。比較的簡単に出力波形が得られ、フレキシビリティの高い周波数設定が可能ということがご理解いただけたものかと思います。

また最後に示したように、残念ながら DDS では原理的に𝑓𝑂𝑈𝑇と𝑓𝑆𝑌𝑆𝐶𝐿𝐾が整数倍でないと、スプリアスが多めになってしまいます。実はこのスプリアスは「Phase Truncation(位相打ち切り)」という DDS の動作が原因なのです。次回はこの Phase Truncation(位相打ち切り)のようすをより詳しくみていきたと思います。

なお次回に説明するように、最近のアナログ・デバイセズの DDS(高速 DAC製品は高分解能になっていますので、このスプリアスは低減します。それも覚えておいていただけると良いと思います。

さてこのスプリアス、AD9913ではどうなるでしょうか!次回はこの原因と理由を詳しく説明し、そしてさらに AD9913 のより本格的な使用方法もお話ししていきたいと思います。

著者について

石井 聡
1963年千葉県生まれ。1985年第1級無線技術士合格。1986年東京農工大学電気工学科卒業、同年電子機器メーカ入社、長く電子回路設計業務に従事。1994年技術士(電気・電子部門)合格。2002年横浜国立大学大学院博士課程後期(電子情報工学専攻・社会人特別選抜)修了。博士(工学)。2009年アナログ・デバイセズ株式会社入社、現在に至る。2018年中小企業診断士登録。
デジタル回路(FPGAやASIC)からアナログ、高周波回路まで多...

最新メディア 20

Subtitle
さらに詳しく
myAnalogに追加

myAnalog のリソース セクション、既存のプロジェクト、または新しいプロジェクトに記事を追加します。

新規プロジェクトを作成