中華DDSのALC ― 2016年01月31日 11:19
はじめにお読みください。→当サイトのリンクと免責事項
一時流行った中華DDSもあまり話題に上らなくなりました。それでも秋月電子で扱いが始まり変わらぬ需要があると思われます。秋月さんのは「サインスマートAD9851使用DDSモジュール」です。aitendoさんのは「DDSモジュール [AD9850-M] 」で同じ値段です。
私は最近ヤオフクでAD9850の二つ目を購入しました。値段は半額程度です。
さて、安いので手軽に使えるので便利なのですがそれなりのところもあり一工夫が必要です、それが面白いのですが。
そんな一工夫にDDSの出力特性があります。いろいろなサイトで指摘されているように出力フィルターがAD9851モジュールと同じ設定になっています。オリジナルの特性は下図のようになりました。
AD9850のモジュールの場合はフイルターの周波数を下げなければなりません。そこでICのデータシートに載っている42MHzのLPFに変更します。Lはフェライトコアを使います。Cは現状のCに2.5Pを抱き合わせます。そして最後の段を取ります。

この結果の出力特性が下図のようになりました。
これはこれで良いのですが30Mhzまでの減衰がちょっと大きすぎます。最初に購入したモジュールはこんなに下がってはいません。他のサイトをみるとこの位のデータはあちこちで見ます。
もともとDACで発生させているために必ず出力は変化しますデータシートに載っている図12のとおりナイキスト・サンプリング定理に従ってレベルは変化します。リファレンス125MHzで30MHzでは1dBほど下がります。詳しくはメーカーの解説書をご覧ください。
中華DDSの出力はこの結果以上に減衰していきます。あるサイトに書かれているようにグランドパターンが弱いためかも知れませんが私にはよく分かりません。
アプリケーションによってはこれは特に問題ではありません。常にレベルを読みながら計算したり補正したりすればよいからです。私の場合3MHzから30MHzまでRLを直読したいので可能であれば出力一定にしたいところです。
それによってソフトへの負担が減ります。ハードに大きな負担がなければぜひそうしたいところです。
このモジュールに広帯域アンプをつけ、それをALC制御する方法があります。可変ゲインRFアンプもありますが高価であること、回路が複雑になることからそれは止めてWEBサイトを調べました。
アメリカのMidnight Design Solutions,LLC.という会社が提供しているMicro908というアンテナアナライザのキットがあります。その中のREFLというサブシステムでDDSのALC制御をしています。
またCWTD(Chat With The Designers)というサイトの68) Automatic Level Control (ALC) Techniques for DDS-based DesignsにアメリカのHAMが提案しているALC制御があります。(注:このページはIEでは開きませんEdgeで開きます。なぜでしょうか、不思議です。)
またオーストラリアのHAMが自身のホームページでDDS Signal Generatorの記事中のUpdate 16 July 2012の中で先のREFLの回路を改良した内容が載っています。
これらは共にDDSチップの出力レベルはRSET抵抗によって設定されることを利用しています。
ICのドキュメントにもAN-423 APPLICATION NOTEにRSETを使ってAM変調できることが示されています。この記事中で2N7000を電子抵抗としてRSETの外付抵抗にしているため、上記のすべての記事は2N7000を使っています。
国内でもJA2NKDさんが自身のサイトでAM変調の実験されています。この方も2N7000を使われています。
回路も簡単なので私もそっくりコピーして実験しました。
この特性はモジュールの基板上のRSETがオリジナルの392の状態です。FETを使った電子可変抵抗制御の理論通り線形領域で抵抗として変化しています。飽和領域ではVdsを上げても出力は変化しません。
ICの規格では絶対最大定格DAC Output Currentは30mAです。IOUT=39.93/RSETですのでRSETは1.331kΩが最小です。基板の392はフル・スケール出力電流を10mAにするためです。先のAN423文書のAM変調では1.5kΩにしています。(この図のDC OR AUDIO INPUTはオフセット2.3Vで1.5Vp-pの入力です)

推奨動作でも最大20mAとしていますのでRSETは2kΩになります。そこで多少電気は食いますが1.8KΩにしてみます。下の特性を見ても2.3Vのセンターはいい塩梅ですね。ただこのデータはシングルエンドのフイルター後の出力です。ただ2N7000の個体差によっては変わるかも知れません。
1.8kΩだと30MHzでも0.4Vp-p得られます。3.9kΩと1.8kΩで出力電圧範囲が重なる部分がありますのでRSETの設定で出力を一定にできます。
そこで30MHzの最大出力0.4Vp-pになるように他の周波数でRSETを変えます。
さて、ではどのようなロジックでコントロールするかですが前述の記事はすべてフィードバックループによって制御しています。出力電圧をコンパレータで判定し2N7000のVgsを変えています。それでもいいのですが出力電圧を検出する回路とループゲインを調節する回路が必要です。そこまで実験したくなかったのでその辺のところはソフトで対応します。
つまりDDSの周波数設定ルーチンに出力を設定する電圧を出し周波数と出力レベルを決め打ちします。フィードバックでなく開ループです。そのためにMPUのDACを2N7000に与える回路とします。
ということでできたのが次の回路です。ただ心配なのはDACの分解能でいけるかどうかです。
DDSモジュールの後にRFアンプ(LHM6702)をつけ増幅した後の出力レベルが一定になるように周波数ごとにDACの電圧を変化させた特性が次です。
参考までに波形の写真です。上が3MHz、下が30MHzです。
私の要求ではこれで十分です。Mhzオーダーで制御すればよいので先ほどの周波数対DAC電圧の特性を関数化して計算するよりも高々30データなのでテーブルで持って周波数設定ごとに読み出せば済んでしまいます。これでソフトも相当簡略になりました。
/**************************/
今回初めてR8C/38AのDACを使いました。当初電圧が出ずに悩んだのですが、マニュアルを読み直してびっくり、DACのポートは入力に設定しなければなりませんでした。結局ADCと同じロジックのようです。他のMPUもそうなのかしら。
/**************************/