2018年5月13日日曜日

KiCadで回路図作成: 部品コンポーネントとフットプリントを自動連携

DesignSpark PCBでいくつか基板を作ってきて、等長配線に非対応など少し不満も感じてきたので、KiCadを試してみることにしました。
これまでKiCadを選ばなかったのは、部品コンポーネントにフットプリントを手作業で関連づけなくてはいけないことに嫌気が差したためです。ところが調べていくうちに、部品コンポーネントでフットプリントを予め指定しておけば、関連づけ作業を省略できることに気がつきました。それなら使用を躊躇する理由はありません。以下に、使いながら気付いたことを記します。

プロジェクトマネージャKiCad

  • 記事作成時点でのStable Release最新バージョンは4.0.7です。 
  • まずはプロジェクトを作成し、そのプロジェクトの中から回路図エディタ等を起動していきます。 
  • ヘルプがとても実践的。Preferences ⇒ Language ⇒ Japanese としておくと日本語版ヘルプを見られます。ただ、日本語メニューと英語が混在する場面では混乱することもあるだろうと考えEnglishにして使っています。 
  • デフォルトのテキストエディタを設定 Preferences ⇒ Set Text Editor 
  • 新規プロジェクトの作成時はテンプレートファイル(C:\Program Files\KiCad\share\kicad\template\kicad.pro)の内容が参照されます。その後、プロジェクトで変更した各種の設定はそのプロジェクトファイルに書き込まれます。それの設定を他のプロジェクトに引き継ぐには、テンプレートそのものを修正してしまうか、プロジェクトファイルをコピー・リネームして使い回すなどが考えられます。テンプレートの内容を変更するにはKiCadを管理者として起動し、kicad.proを開き設定を変更します。

回路図エディタEeschema

操作と環境設定

  • 日本語版リファレンスマニュアルは、こちらです。
  • 新たなコンポーネント・ライブラリの参照を追加したり表示順序を設定 Preferences ⇒ Component Libraries
  • 図面の作図範囲(用紙設定)や図枠のタイトルなどを変えるにはFile ⇒ Page Settings
  • 図面枠デザインを変更するにはプロジェクトマネージャで Tools ⇒ Run Page Layout Editor(PI_EDITOR)
  • キーボードのショートカットを多用して操作するのが基本です。面倒くさいようで、意外に慣れるのは早かったです。"a": 部品コンポーネントの呼び出し、"r": 回転、"v": 定数編集、"e": 詳細プロパティ編集、"Delete": 削除、"c": コピー、"m"キー: (配線を切り離して)移動、"g": (配線を繋いだまま)移動など。コンポーネントにカーソルを重ねて右クリックでも同じ事ができます。 
"?"キーでショートカットキーリストを表示

”?”キーでショートカットリストを表示

  • グリッド設定は50milが基本です。コンポーネントのピンがグリッド上に乗らないと配線できなくなるためです。特にインチとミリを間違えると悲惨なことになります。要注意です。 
  • 電源とGNDシンボルは、Place ⇒ Power Portまたは、"p"キーで選びます。 電源やGNDのそれぞれには、どこか一カ所で部品としてPWR_FLAG(general power-flag symbol)をパラに付けておきます。(ERCのエラー対策) 
  • 同じラベル名の配線は接続されているものと見做されます。Place ⇒ Labelまたは"l"キーです。ただし、電源とGND配線については接続されている電源オブジェクトで暗黙的に定義されているためラベルは不要。 
  • バス配線は、接続する各々のラベル名を合わせることで実現します。部品ピンにラベル名を直に付けることもできます。 
  • 部品の未接続端子は、No Connect Flag(Place ⇒ No Connect Flag)を付けておきます。 
  • コンポーネント名がライブラリ間で重複していると、想定外のコンポーネントが配置されるときがあります。

回路図を複数シートに分割する

  • 階層シート機能を使います。EeschemaにてPlace⇒Hierachical Sheetとし、回路図上に四角い枠を配置し追加する図面ファイル名を入力します。追加した図面を開くには、親回路図で作成した枠をクリックするか、ツールバーでNavigate Schematic Hierarchyにより階層ナビゲータを使います。
  • 階層シート間の配線接続はGlobal Labelを使います
  • 階層シート間で回路図をコピーするには、まず選択範囲を指定し、右クリックメニューから ブロックの保存Save Blockとし、コピー先のシートで、ツールバーの貼り付けPasteする

階層シートを追加

階層ナビゲータ

ツールバーPaste

回路図作成が終わったら

  • アノテーション機能(Tools ⇒ Annotate Scematic)で部品番号を振ります。部品番号の振り直しもできます。 
  • ERC(Tools ⇒ Electrical Rules Checker)を走らせます。 
  • ネットリスト(Tools ⇒ Generate Netlist File)を出力します。 
  • 必要に応じて部品表BOMを出力します。Tools ⇒ Generate Bill of Materials Fileとし、Add Pluginでc:\Program Files\KiCad\bin\scripting\plugins\bom2csv.xlsを指定してGenerateします。そのままではXML形式となるので、コマンドラインでxsltproc -o "%O.csv" "C:\Program Files... のように付け加えるとCSV形式でプロジェクトフォルダに出力されます。 
  • CvPcbを開き、フットプリントが未割当のコンポーネントが無いことを確認します。フットプリントをCvPcbで割当変更したときは、再度Eeschemaでネットリストを出力しないと Pcbnewで情報を読み込めません。

部品コンポーネントPart Library editor

ローカルドライブにライブラリを置く

  • 私は、使用するコンポーネントを独自のライブラリにインポートして、それを使う運用にしています。また、標準ライブラリに存在しない部品は自分で作成することになります。操作に関してはヘルプが詳しいほか、ライブラリの要件にはいちど目を通しておいた方が良いです。
  • ライブラリファイルを新たに作成するには、既存のコンポーネントをコピーして作るのがやりやすいようです。抵抗を例に取ると、Part Library editorのSelect Working Libraryアイコンで"device"を選び、Load component to edit from the current libraryアイコンで"R [Resistor]"を指定します。そして、Save current component to new libraryアイコンで名前を付けてライブラリを保存します。新しいライブラリをアプリに認識させるため Preferences ⇒ Component Libraries にてComponent library filesに追加します。追加したら適宜優先順位を変更します。
  • 登録済みコンポーネントを編集するには、Part Library EditorのSelect working libraryアイコンでライブラリファイルを指定し、Load component to edit from the current libraryアイコンで編集対象を呼び出せます。
  • コンポーネントを自作するときはグリッド間隔50milで編集を行い、ピンをグリッド上に配置するようにします。グリッド間隔はPreferences ⇒ Library Editor Options で設定。

予めコンポーネントのフットプリントを指定する

  • 後の工程で、CvPcbを使いコンポーネントとフットプリントを割り付ける作業が控えていますが、コンポーネント毎にフットプリントを予め指定しておけば、この工程を省略可能です。これを行うには、フットプリントに一対となるコンポーネントを作成します。チップ抵抗を例にすると、1005から3216までそれぞれのパッケージに対応したコンポーネントを作成し、プロパティのフットプリント項に、ライブラリ名:フットプリント名 という書式で記載します。

フットプリント毎に抵抗コンポーネントを登録

フットプリントを指定した例



    BOMに必要なコンポーネント属性を追加する

    • DesignSparkPCBはRSが提供するだけあって、発注関係の属性が充実していました。KiCadでも必要な属性を追加できます。EeschemaからPreference ⇒ Schematic Editor Options ⇒ Template Field Names。

    発注関係の属性を追加

    発注関係の属性を追加したコンポーネントの例


    フットプリントエディタFootprint Editor

    • 標準のライブラリが充実しています。特に、手はんだ用のフットプリントが用意されているのはホビーユースにとって実践的です。これはDesignSparkPCBにはない利点です。
    • コンポーネントとフットプリントのピンが本当に対応しているのか確認しづらいです。ひとつの画面で俯瞰できる機能があれば安心ですね。
    • 標準のフットプリントライブラリは、GitHubを参照しているため予期せぬライブラリ アップデートに巻き込まれないようローカルディスク上の情報を参照するようにしたいです。私は、使用するフットプリントを独自のライブラリにインポートして、それを使う運用にしています。
    • 新たなフットプリントが必要になったら、まず標準のライブラリを探します。もし無かったら、PCB Parts Library(RSが提供する無料サービス。登録が必要。)を探し、それでも無ければ標準のライブラリで似たような物を手直しして使っています。
    • ライブラリは間違いがあるときがあります。端子数やピンのピッチなど、最低限のチェックはしておきましょう。
    • チップベンダが配布するBXLファイル(TI, ADI, MAXIM, RENESAS等が)をKiCad形式に変換できるUltra Librarian(Free Reader/Online Reader)があるようです。

    2018年3月10日土曜日

    1GHz DDS AD9957を外付けSGで動かす

    前記事でPLLの基準クロックに起因するスプリアスが多数生えていて、広帯域SFDRを押し下げていたので、何とかならんのかと試行錯誤してみました。
    懸念は、基準クロックオシレータとAD9957のアナロググランドを直結したことで、基準クロックでPLLを揺さぶっていることになっているのでは?という点です。そこで、オシレータからクリスタルに置き換えと外付けSGの接続を試してみました。

    クリスタルに置き換え

    ジャンク箱にあった19.6608MHzクリスタルを取り付けてみました。基板のパターンを変更してXTAL_SELを有効、オシレータを休止にします。51逓倍として1002.7008MHzでPLLを動作させます。
    ご覧の通りクリスタルの配線が長すぎますから、そこは割り引いてみることにしますが、それでも細かなスプリアスがもじゃもじゃと生えています。

    クリスタルに置き換え


    出力100MHz(CENTER 200MHz, SPAN 400MHz)


    出力100MHz(SPAN 1MHz)


    外付けSGを接続

    同軸ケーブルを直結してSGから1GHzを供給します。基板の消費電流は0.26Aでした。
    スプリアスの出方は私のイメージ通りです。スプリアスは当然ありますが、PLLを付く場合と比較すると、スッキリしています。

    外付けSGからクロックを入力


    出力400MHz(CENTER 500MHz, SPAN 1GHz)


    出力400MHz(CENTER 250MHz, SPAN 500MHz)


    出力100MHz(CENTER 250MHz, SPAN 500MHz)


    出力100MHz(SPAN 25MHz)


    出力30MHz(CENTER 100MHz, SPAN 200MHz)


    出力20MHz(CENTER 100MHz, SPAN 200MHz)


    出力10MHz(CENTER 100MHz, SPAN 200MHz)


    NCO係数の影響は?

    AD9957では、NCO出力が32ビットに対して波形テーブル入力は14ビットのようで位相の丸め誤差が発生します。それなら、NCO係数FTWの上位14ビットだけを使う場合と、下位ビットにも係数を与える場合とを比較すれば丸め誤差の影響を見られるのではないか?と試してみました。
    まずは、DDS出力125MHz(0x20000000)と101.55MHz(0x1A000000)です。これらのスプリアスは、丸め誤差とは無関係のものです。DACやトランス等の非直線性による、高調波や折り返し成分との混変調ではないかと考えます。

    出力125MHz(FTW=0x20000000)


    出力101.55MHz(FTW=0x1A000000)

    次いでFTWの上位14ビットだけを使う場合と、下位ビットにも係数を与える場合とを比較してみます。下位ビットでは、スプリアスの周波数間隔が狭まっているように見えますが、明確に丸め誤差だと言えるようなスプリアス成分はよくわかりませんでした。下位ビットを使った途端、スプリアスがにょきにょき生えてくればわかりやすいですが、そんなことはありませんでした。

    丸め誤差なし(0x20040000)


    丸め誤差あり(0x20020000)


    丸め誤差あり(0x20010000)


    位相雑音について

    DDSを通すと、位相雑音が低減するのか確認しました。10kHz以上はスペアナの測定限界なので1kHz以下に着目すると、確かに20 log(100/1000) = -20dB となっています。それはさておきSGの位相雑音が劣化してるような。

    AD9957の位相雑音(出力100MHz)


    SGの位相雑音(1GHz)


    まとめ

    AD9957内蔵のPLLがSFDR悪化を招いている原因だ!と思い込んでいましたが、広帯域SFDRは、クリスタル+PLLでもデータシートに近い特性が得られました。このため、クロックオシレータ+PLLのスプリアスが多いのは基板設計が課題であろうと再確認できました。
    次に外部SGからクロックを供給すると、SFDR値はクリスタル+PLLと概ね同じ結果となりました。ただ、PLLと比較して目につくスプリアスの数は少ないので、狭帯域SFDRは有利です。


    2018年3月4日日曜日

    1GHz DDS AD9957をシングルトーンモードで動かす

    1GHz動作できるDDSチップとして、AD9957をご存じの方は多いと思います。私もご多分に漏れず入手してみたものの、ピン数が多いことと消費電力に怖じ気づいて放置状態でした。ところが、CQ出版のTRX-305はヒートシンクを付けることも無くフツーに使っているではないですか。これを見て自分でも何とかなるんじゃないかとその気になり試作に取り組むことにしました。

    基板は、FPGA開発・学習ボードDE0-NanoのGPIO端子に取り付けて使用するスタイルです。(ねじ穴は合わないもののDE10-Nanoにも対応)AD9957のデジタルアップコンバータ機能を使いDE0-NanoからのIQ信号を任意の周波数に変換して出力できます。とりあえずの応用例として例のごとくFMトランスミッタを念頭に置いていますが、別の実験でも使えるよう出力ローパスフィルタを省略しました。
    またAD9957の設定用としてAVRマイコンも付いていますので、シングルトーンモードであればDE0-Nanoなしにスタンドアロンで任意の周波数を生成することができます。

    試作基板


    試作した基板の回路構成

    この基板は、DE0-NanoのGPIO端子からIQ波形を18ビットのパラレル信号を受け取り、AD9957内でアップサンプリング。デジタル処理でNCO波形にQAM変調を掛けることで、任意の周波数に周波数変換して14ビットD/Aコンバータで出力します。
    基板は1.6mm厚の4層、基板CADはDesignSpark PCB、製造依頼先はJLCPCBです。

    AD9957のブロック図(データシートより)

    試作基板回路図(QDUC部)

    試作基板回路図(制御部)

    試作基板回路図(電源部)

    システムクロックの検討

    音声信号のサンプルレート、IQ波形のサンプルレート、AD9957のシステムクロック周波数、PLL逓倍器の使用有無など検討事項は盛りだくさんです。
    FMステレオコンポジット信号処理を行う前提として、音声信号のサンプルレートはデジタルオーディオで馴染みのある192kHzを選びました。これをFPGA内で16倍にサンプルレート変換して3,072kHzでAD9957に渡します。
    ところでFM放送周波数は76~90(95)MHzです。この周波数を直接生成するため、AD9957内部D/Aコンバータの動作クロック(システムクロック)は、少なくともその4倍以上にしたいところです。そのような周波数で位相雑音の低いクロックを用意するのは大変なので、AD9957内蔵のPLL逓倍器を使用することにします。その場合、基準クロックは60MHz以下という条件があり、49.152MHz(192kHz×16)としました。
    PLL逓倍器にも動作条件があります。動作周波数は420MHzから1GHz、逓倍数は12から127倍です。さらにAD9957をQAM変調器モードで動作させる場合、IQ波形のサンプルレートからのサンプルレート変換比の上限は252です。これらの条件から、今回はシステムクロック737.28MHz(逓倍数15かつサンプルレート変換比240)としました。

    PLL逓倍器の設計

    AD9957 Evaluation Board向けのPLL Loop Filter Toolを使ってみました。周波数等の緒元を入れてループフィルタ部品の抵抗やコンデンサの値を選ぶとループフィルタのカットオフ周波数や位相余裕などが表示される便利ツールです。このツールによると位相余裕は45~60度が一般的だとメモがありましたが、カットオフ周波数については記述がありません。Webで調べたところわかりやすく解説したページを見つけました。これを参考にVCO周波数737.28MHzに換算した位相雑音をグラフにプロットしてみました。
    AD9957内蔵VCOの単体特性についてはデータシートに記載がありませんが、PLL使用時のものはグラフが載っています。2MHz付近の盛り上がりより高い周波数はVCOの単体の特性で低い周波数はPLLによって基準クロックの特性が見えているのかなと考えました。

    AD9957の位相雑音(VCOの裸の特性はこれより悪いはず)


    基準クロック TAITIEN OY-Uの位相雑音


    これらの結果から、今回選定したTAITIEN OY-U発振器はほぼ全周波数にわたりAD9957内蔵PLLよりも位相雑音が低くみえます。これならカットオフ周波数を低くする必要もありません。まずは1MHz以上を目安にして設計することにしました。PLL Loop Filter Toolの画面を示します。

    PLL Loop Filter Tool その1

    PLL Loop Filter Tool その2

    PLL Loop Filter Tool その3


    電源の設計

    AD9957の電源は、3.3Vデジタル、3.3Vアナログ、1.8Vデジタル、1.8Vアナログの4種類が必要です。類似のデバイスですがAD9910に関するWebページ(How to use DDS evaluation Board AD9910/PCBZ)によると、内蔵PLLを使用する場合、信号品質は1.8Vアナログ電源の品質に大きく影響を受けるとされる一方で、内蔵PLLを使用しない場合は、もっぱら基準クロックの品質で決まるそうです。今回は1.8Vデジタル電源をのぞき、各々にLDOレギュレータLP5907を使いました。
    さて、問題は1.8Vデジタル電源です。システムクロック1GHzのとき610mAも流れます。この1.8Vをリニアレギュレータで5Vから落とす場合、電力損失2Wと放熱器が必要になりそうです。大きな放熱器はコンパクトな基板には不釣り合いかと思い、電力変換効率のよいスイッチング式DC-DCコンバータを考えました。とはいえ、スイッチング式にノイズはつきものです。仮にノイズが影響したとして、FMの音声帯域に入り込むのは面白くないので、スイッチング周波数600kHzで1.8V出力の電力変換効率85%以上が見込めるムラタパワーソリューションズOKL-T/3-W5N-Cを選定しました。ところがDC-DCコンバータの漏れ磁束がPLLに影響を与えたためリニアレギュレータLM350Tを外付けすることで解決しました。(後述)
    シングルトーンモードでの消費電流は、システムクロック786.432MHz、DDS出力73.92MHzのとき5Vで約0.29A。AD9957の表面温度は室温から13度上昇しました。

    電源コネクタとして、マイクロUSBコネクタを使いました。USBバスパワー電流は標準で0.5Aですが、スマホ充電用などで1Aを超えるUSB電源アダプタを想定しています。そこで気になるのがマイクロUSBコネクタの電流容量です。今回は定格電流1.8Aで秋月でも扱いのあるヒロセZX62を使いました。さらに大電流のものとしてはWurth Electronicsに3A対応品があります。

    AD9957をシングルトーンモードで動作させる

    まずは動作確認のためにシングルトーンモードとしてCW波を出力させ信号品質を確認しました。

    ブロック図(シングルトーンモード)


    AD9957のSPI通信

    AD9957の初期設定は、ボード上のAVRマイコンATmega328からSPI通信で行います。コマンドは、4本の信号でシリアルポートバッファにいったん書き込み、さらにI/O_UPDATEピンをHにするとデータが内部レジスタに転送されます。
    レジスタのデータ長は16/32/48/64ビットなんですが、データシートではデータ長8ビットの例が書かれていて困惑します。結局、そのまま続けて送れば動作すると実験的に確認しました。不親切だなーと思いました。なお、この基板ではCS(とI/O_RESET)は常時L固定で動作させています。
    ところで日本語版のデータシートはRev.Aで、肝心な説明がなかったり文章がわかりづらいことがあって、英語版Rev.Eを見たら情報が増えていた、ということに気がつきました。確かに、Revision History見ると、情報の追加、改訂がたくさん書かれています。どうも説明不足だなーと感じたら最新のデータシートをみるのが大切と感じました。

    AD9957のシリアル制御インターフェース


    AD9957レジスタ設定

    周波数等の設定は複数のPROFILEレジスタに格納できますが、この基板ではPROFILE=0だけを使います。

    CFR1レジスタ 動作モード設定


    CFR2レジスタ インターフェース関係の設定


    CFR3レジスタ リファレンスクロック設定


    Auxiliary DACレジスタ DACゲイン設定


    Profile 0レジスタ シングルトーンモード設定


    レジスタ設定で一カ所はまったところがありました。CFR3で、OPENとされたビットのデフォルト値が1になっているところがあります。これにOPENだからと0を書き込んだら動作しないんです。とにかく動かないのではんだ付け確認、EXPOSED PADの再はんだ、デバイスの故障?、書き込み手順のミスか等々疑心暗鬼が募るばかり。それに気付くまで1週間くらい無駄にしました。未定義のように見えるビットでもデフォルトを尊重するというのが世間のお作法、トラブル防止の自衛手段だと勉強になりました。
    それから、REFCLK Input Divider Bypass時にREFCLK Input Divider ResetBを0にするとこれまた動作しなくなります。Bypass回路は、単なるセレクタではないのでしょう。

    レジスタのデフォルト値にご注目


    ノイズ・スプリアス対策

    (1)LDOの発振

    またやってしまいました。LDOレギュレータLP5907の発振です。データシートによると、出力に1uF以上のバイパスコンデンサを付けることになっています。今回、LDO出力に0.1uFを付け、貫通コンデンサを挟んで負荷付近に10uFをぶら下げる設計としましたが、この貫通コンデンサを入れたことで負荷の10uFが見えなくなり、バイパスコンデンサの所要容量を満たせなくなったため発振したようです。そこでC89を1uFに交換したら発振は止まりました。

    LDO発振によるスプリアス


    発振した回路


    LP5907標準使用例(入出力に1uFのバイパスコンデンサが必要)


    ところで、発振箇所の特定のためにセミリジッドケーブルと貫通コンデンサを組み合わせた直流カット測定ツールをつくりました。スペアナに接続して、あちこち当てまくってノイズ源を特定します。つまらないものですが便利です。

    スペアナ用 直流カット測定ツール


    測定ツールの材料


    (2)スイッチング式DC-DCコンバータのノイズ

    PLL回路にスイッチング式DC-DCコンバータを使うのは初めてです。高周波出力にスイッチング周波数617kHzがばっちり乗っています。DC-DCコンバータモジュールのトランス付近にフェライトや金属(文鎮)を載せるとノイズ量がぴょこっと変化するので、原因はコイツに間違い有りません。

    DC-DCコンバータによるスプリアス(その1)


    DC-DCコンバータによるスプリアス(その2)

    ノイズの混入ルートとしては、DC-DCコンバータ出力または入力から流れ出るものと、トランスからの漏れ磁束が考えられます。まずは、望み薄かと思いつつ、モジュールの入出力に挿入されたフェライトビーズをインダクタに交換してみましたが、変化なしです。とすると漏れ磁束が内蔵PLLに影響を与えているに違いありません。磁束の遮蔽は難しいので物理的に離すしかなく部品追加等では対策が困難です。仕方なく、リニアレギュレータLM350Tを外付けして1.8Vを供給することで解決しました。

    DC-DCコンバータ入出力にインダクタを入れてもダメ


    外付け基板からデジタル1.8Vを供給して解決


    DC-DCコンバータの使用NGと決めつけるのは簡単ですが、電源効率を考えると選択肢から外すのは勿体ないと思います。ノイズ量をあと20dB下げられれば使えるのではないでしょうか。後学のため、磁界プローブを製作してノイズ量を調べてみることにしました。セミリジッドケーブルをループ状に巻き、ループを構成するよう端末で芯線と外皮を接続しています。黄色い熱収縮チューブをかぶせるとそれらしい仕上がりになりました。直径27mmの小さなループですが、携帯電話の電波がたくさん入ってきます。

    磁界プローブでノイズ調査


    製作した磁界プローブ

    DC-DCコンバータのノイズ


    AD9957のノイズ


    さて肝心なDC-DCコンバータのノイズですが、離隔45mmで-61dBmでした。これを20dB下げるには、単純に考えると100mmほど離隔を取れば良いことになります。でも基板サイズが100mm以下なのでそれはムリです。あるいは、磁束による起電力が小さくなるよう基板パターンを工夫することでしょうか。試作を重ねないと難しいアプローチだと思います。


    (3)基準クロックの飛び込みと混変調

    スペアナで広帯域のスプリアスを見たところ、基準クロックに関係する3次混変調が多数並びSFDR -59dBcとなっていました。そこでかねてから気になっていた、ループフィルタ付近を走る基準クロックのパターンを同軸ケーブルで分離するとSFDR -65dBcまで改善できました。

    広帯域SFDR(対策前)


    広帯域SFDR(対策後)


    基準クロックのパターンを同軸ケーブルで分離


    どうやらPLLに基準クロックが乗っていることがスプリアスの主因と思えます。そういえば基準クロックとPLL付近のアースはくっついていて、今さら分離することもできないので、外付け基板から基準クロックを供給してみましたが、変化はありませんでした。これ以上は打つ手なしです。

    基準クロック49.152MHzを外付け


    (4)DE0-nanoのノイズ

    なかなか原因を掴めなかったものがこれです。DE0-Nanoのクロックモジュール50MHzと基準クロック49.152MHzの差848kHzが出力に混変調として現れていました。この基板では50MHzを使用していないのでアースや信号ラインに乗り移ってきたものが影響しているようです。こんなものまで影響するのか!?という思いです。外付けMCUで変調処理する場合など、AD9957と別のクロックを使う場合には注意が要ります。


    スプリアス測定

    データシートの参考値と比較して出力を85MHzにセットしたときのSFDRは4dBほど、100MHzでは10dBほど良くない結果となりました。

    出力85MHz(SPAN 20MHz)


    出力85MHz(CENTER 200MHz, SPAN 400MHz)


    出力100MHz(SPAN 20MHz)


    出力100MHz(CENTER 200MHz, SPAN 400MHz)


    Wideband SFDR参考値(データシートより)


    まとめ

    • 内蔵PLLは位相雑音がどうなのかと心配していましたが、スペアナで観測して見劣りするようなことはありませんでした。ただ、基準クロックの起因のスプリアスがSFDRの数値を押し下げています。さらに、DE0-Nanoのノイズの影響まで受ける始末で、部品レイアウトやパターンの配置をよく検討する必要があります。50MHz以下の基準クロックを使えるPLLは魅力的ですが、スプリアス面では手慣れた玄人向けかもしれません。
    • DC-DCコンバータのスイッチングノイズは凄まじく、ノイズに敏感なPLLと基板上で同居させるのは課題があります。ただ、電源を別基板にするなど離隔をとったり、たとえばSi5338のようなフットプリントの小さなクロックジェネレータチップであれば影響の受け方は異なるのではと考えます。
    • QDUC(直交変調)モードについては別記事で纏めたいと思います。


    制御用Arduinoスケッチ

    #define DAC_RESET  5
    #define DAC_CS  6
    #define DAC_SCK  7
    #define DAC_MISO  8
    #define DAC_MOSI  9
    #define DAC_UPDATE  10
    #define DAC_REFLOCK  2
    //#define VR1  A2
    #define LED1  4