2018年10月20日土曜日

KiCadで基板作成: 作図と基板製造の依頼

前記事でEeschemaから出力したネットリストを読み込み、基板設計に進みます。KiCad Step by Step Tutorial日本語訳、Pcbnewリファレンスマニュアル日本語版KiCad実習テキスト「KiCad Basics」を主に参考にしました。

基板エディタPcbnew

図面設定・デザインルールの設定

  • File ⇒ Page Settingsで用紙サイズ、図面タイトルをセット
  • 数値の単位は Prefernces ⇒ Generalで変更できますが、図ではミリメートルです。
  • デザインルールエディタ Design Rules ⇒ Design Rules でデフォルト設定。Net Classes EditorとGlobal Deisgn Rulesタブのそれぞれにセットします。中華基板製造各社のデザインルールを参考にしました。

Net Classes デフォルト値


Net Classesを追加・修正


Global Design Rules デフォルト値


Global Design Rulesを追加・修正

はんだマスク


  • Dimensions ⇒ Pads Mask Clearance



ネットリストの読み込み

  • Tools ⇒ Netlist ⇒ Read Current Netlist としてネットリストを読み込みます。すると、部品を一カ所にまとまって配置されてしまうので、これを分散して配置させる操作をします。

Pcbnewでネットリストを読み込んだところ

ツールバー Mode footprint: manual and automatic movement and placementとして、右クリック Global Spread and Place ⇒ Spread All Footprints

マニュアルモードに変更

部品が分散して配置されました


ラッツネストが非表示になったら左側のアイコンをクリック


レイヤ

F.Cu 部品面(Front) 配線パターン
B.Cu はんだ面(Back) 配線パターン
F.Adhes 部品面 SMD等仮止め用ボンド塗布工程用
B.Adhes はんだ面 SMD等仮止め用ボンド塗布工程用
F.Paste 部品面 はんだペースト(Pcbnewが自動生成)
B.Paste はんだ面 はんだペースト(Pcbnewが自動生成)
F.SilkS 部品面 シルクス
B.SilkS はんだ面 シルク
F.Mask 部品面 はんだマスク
B.Mask はんだ面 はんだマスク
Dwgs.User 任意目的に使用できる汎用レイヤ 図Drawings
Cmts.User 任意目的に使用できる汎用レイヤ コメントComments
Eco1.User 任意目的に使用できる汎用レイヤ 設計変更指示 Engineering Change Order
Eco2.User 任意目的に使用できる汎用レイヤ 設計変更指示 Engineering Change Order
Edge.Cuts 基板外形
Margin 基板端部からパターンや部品までの所要の余白を示す
F.CrtYd 部品面 部品が物理的に占有する領域(Courtyard)を示す
B.CrtYd はんだ面 部品が物理的に占有する領域(Courtyard)を示す
F.Fab 部品面 製造用補足情報(Fabrication, 基板には表示されない)
B.Fab はんだ面 製造用補足情報(Fabrication, 基板には表示されない)


原点座標の設定

グリッドの原点、ドリルファイル、実装ファイルの原点を同じポイントに合わせます。原点の場所はどこでも良いみたいなので、基板の領域外で左下に原点を定めることにします。画面右側ツールバーの2つのアイコンで原点座標を設定します。Place the origin point for drill and place files, Set the origin point for the grid。


使い方

  • 部品を移動中にもラッツネストを表示させるには、左ツールバーHide footprint ratsnestをアクティブにします。

ラッツネストを表示


  • 距離の測定。ウインドウ右下の相対座標値は、スペースキーでゼロにリセットできる。距離を測るのに便利です。

相対座標値はスペースキーでゼロにリセット


  • 層数の変更、基板厚の変更 Design Rules ⇒ Layer Setup

    4層に変更


    • 部品面またははんだ面のコンポーネントを非表示にするには、画面右側Layers ManagerのRenderタブで、Footprints Front/Footprint Backのチェックを外す。配線の表示/非表示は、Layerタブで指定します。部品面だけ、半田面だけの作業に注力したいとき、他のレイヤの表示を一括非表示にできる仕組みがあれば便利だと思うんですが、あいにく無いみたいです。

    • 部品を部品面からはんだ面に移動するには、右クリックメニュー Flip


    • 配線を引こうとして、どうやっても確定できないときは、ERCに引っかかっている可能性があります。(画面左下にエラーメッセージが出ます)そういうときは配線の幅を変えて再チャレンジ。配線の幅を変えるには、右クリックメニュー Select Track Widthまたは画面左上のツールバーであらかじめ指定します。配線幅の選択候補は、Global Design RulesのCustom Track Widthに登録したものしか選べません。プロパティなどで任意に数値に変更できる手法は探した限り見つかりませんでした。
    • 既存の配線の幅を変更するにはSelect Track Widthで変更し、当該の配線にカーソルを合わせ右クリックメニューかからChange Track WidthあるいはChange Segment Widthとします。
    • ビアを打つには、配線中に右クリックメニューでPlace Through Via、またはVキー。GNDにビアを打つときは、GNDから配線を延ばしながらVキーを押します。後からサイズ変更する方法は配線と同じです。ビアは配線の一部なので単独で打つことはできません。
    • 配線削除はDELキー、配線のセグメント削除はBSキーです。
    • ベタグラウンドを作成するには、まずベタグラウンド領域の設定を行います。右ツールバーAdd filled zonesを選び、領域設定の1カ所目をクリックすると設定画面が出るのでレイヤやネット名などを指定した上で領域設定を終えます。領域設定が終わったら、ショートカットB で塗りつぶし。Ctrl + Bで塗りつぶし解除です。何度でも繰り返せます。

    さらにベタグラウンドにしたくない領域キープアウトエリアを指定できます。右ツールバーAdd keepout areasです。が、、、何故か期待通りの動きをせずベタ設定ができてしまいます。

    そこで、ベタグラウンドの中抜きエリアを追加するには、作成済みのベタグラウンドの輪郭線で右クリックメニューからZones ⇒ Add Cutout Areaとし、中抜き領域を設定後にいったんCtrl + Bで塗りつぶし解除を行ったのち、ショートカットB で塗りつぶしてください。



    基板の外形と取付穴

    • グリッドを1mmなど適切に設定します
    • Edge.Cutsレイヤに切り替えます
    • 右ツールバー Add graphic line or polygonアイコンをクリックし基板外形を描画します。基板角を面取りしたいときは、DXFファイルのインポート機能を使うしか無さそうです。基板の外形は、移動禁止にはできないっぽいです、残念。
    • 基板サイズの寸法線を参考に入れます。Dwgs.Userレイヤに、画面右側のツールバーAdd dimensionアイコンを使って書き込みます。
    • 基板端は配線できないのキープアウトエリアとします。FusionやELECROWでは0.3mmとなっていますから、0.4mm迄を配線・ビア・塗りつぶし禁止にセットします。導体レイヤで、画面右側ツールバーAdd keepout aresをクリックし、No tracks, No vias, No copper pourを部品面、はんだ面それぞれについて指定します。

    • 配線穴は、フットプリント(Mounting_Holesライブラリ)を追加することで実現します。ただしPcbnewでフットプリントを追加すると、ネットリストの再読み込み時に回路図には無い部品として削除されてしまうため、当該フットプリントのプロパティでMove and PlaceオプションをLock footprintにしておきます。また、レファレンス番号はアノテーションされないので手動で指定します。

    基板外形をDXFファイルで取り込む


    • タカチのPFケースに内蔵する基板を設計することにします。ケースの図面に推奨基板形状が記載されています。これをアレンジしてオリジナルの基板をつくります。タカチのサイトからダウンロードしたCADファイルをDraftSightでアレンジしてDXF形式で保存します。基板のカドを面取りするならここで済ませましょう。(例:R0.5)
    • KiCadの配線との相対位置を合わせるため、相互の基準点を決めておきます。まずは、基板外形図で基準点を原点にセットし、DXFファイルで保存します。ファイル形式はR2013 ASCII 図面(*.dxf)としてみました。

    タカチ ネットワークケースカタログより

    ネットワークケースの推奨基板形状

    オリジナル基板の形状


    • KiCadでインポート先の絶対座標をカーソルで確認しておきます。
    • DXFファイルをインポートします。フォルダ名等に日本語が含まれているとダメです。File ⇒ Import ⇒ DXF File
    • オプションでUser defined positionとし、インポート先の絶対座標をセット。基板外形なのでLayerはEdge.Cutsにします。



    DXFファイルをインポートできました


    フットプリントの自動配置

    • 基板の外形を作成
    • 位置を固定すべきコンポーネントを手作業で配置しロックする。フットプリントモードでフットプリントを右クリックしてLock Footprint、またはフットプリントのプロパティでLock Footprintする
    • 大きなフットプリントなど重要なコンポーネントも基板の特定の場所に配置しておく
    • 自動配置する 右クリックメニュー Global Spread and Place ⇒ Antomatically Place All Footprints
    • 次の例は、スイッチとコネクタをロックして行いました。わかりにくいですが、IC・抵抗・コンデンサの位置が変わっています。

    フットプリントの自動配置前


    フットプリントの自動配置後


    押しのけ配線

    • 配線を引くときに限り、支障となる他の配線を押しのけることができます。
    • OpenGLモードに設定 View ⇒ Switch Canvas to OpenGL
    • 配線アイコンAdd tracks and viasにて右クリック ⇒ Routing Options ⇒ Shoveモード

    押しのけ配線作業中



    KiCad内蔵オートルータ

    • 画面上のツールバーで Mode track: autoroutingとしておき、右クリックメニューでAutoroute ⇒ Automatically Route All Footprints とすると、グリッド設定に沿って自動配線してくれます。
    • 正直な感想としてもうひとがんばり!というところで、リファレンスマニュアルですら使い方が書かれていませ。その代わり、外部のオートルータとのインターフェースが備わっています。詳しくは次項で。

    オートルータ freerouting

    ソフトウエアの準備

    • Java Runtime Environmentをインストール
    • FreeRouting.jarをダウンロードしfreeroute.jarにリネームしたものをC:\Program Files\KiCad\binに置きます。
    • PcbnewツールバーでFast access to the FreeROUTE external advanced routerをクリックし、Export/Import to/from FreeRouteダイアログにExport a Specctra Design and Launch FreeRouteの文字があることを確認します。(参考Web

    Fast access to the FreeROUTE external advanced routerメニューを起動


    Export a Specctra Design and Launch FreeRouteが現れる

    使い方

    • オートルータはあくまでも補助ツール。面倒な細かな配線をやらせるべきで、すべてをお任せにはできないとされています。なので大事な配線は予め自分で配線しておきます。また、freeroutingは日本語非対応です。部品名などに日本語を含めないよう注意します。
    • 未アノテーションの部品があると怒られるので適宜修正します。
    • PcbnewツールバーからFast access to the FreeROUTE external advanced router ⇒ Export a Specctra Design and Launch FreeRouteにてDSNファイルをエクスポートすると freerouting が自動的に起動します。

    sesファイルをインポート


    オートルータ前


    オートルータ作業中


    グローバルDRCチェックを行う

    • 配線忘れやDRC違反が残っていないか、Tools ⇒ DRC で確認しましょう。
    • 一番大事なのは、エラーメッセージの Unconnected タブの内容です。次いでProblems/Markersをぼちぼちと潰して行きましょう。
    • キープアウトエリアに配線が入っているよ、というならどかせば良いですが、困ったのはPad near pad エラーです。QFN32ピンのパッド間が近接しているというもの。デザインルールでパッド間クリアランスの数値を変えればエラー除去できますが、そのままでは基板製造会社のデザインルールを割り込んでしまいます。仕方ないので、フットプリントを調整して回避することにしました。


    ところがフットプリントをアップデートしたのに、Pcbnewに反映されません。Pcbnewでフットプリントのプロパティにて、Change Footprint(s)でApplyしたところあっさりアップデートされました。ここでQFNのパッドの形をRectangularからOvalに変更するだけでDRCをパスできるようになりました。




    ガーバーファイルの作成

    2020.10.18 KiCad5用にアップデートしました

    普段使いにしているJLCPCBに掲載された手順を参考にしました。
    • Pcbnewにて不要な配線やビアを削除します 編集(E) ⇒ 配線とビアをクリーンアップ(l)

    • グローバルDRCチェックをしておきます 検査(I) ⇒ デザイン ルール チェッカー(D)


    • ガーバーファイルを出力します。ファイル(F) ⇒ プロット(l)
    出力フォーマット: ガーバー
    出力ディレクトリー: (絶対パスで指定)
    含まれるレイヤー:
     F.Cu, In1.Cu(4層の場合), In2.Cu(4層の場合), B.Cu, F.SilkS, B.SilkS, F.Mask, B.Mask, Edge.Cuts にチェック

    全般オプション:
     フットプリントの定数をプロット 設計によりチェックあり or なし
     フットプリントのリファレンスをプロット チェックあり(部品番号を表示)
     基板外形レイヤーのデータを他のレイヤーから除外 チェックあり
     ビアのテンティングを禁止 チェックなし(ビアにレジストあり)
     原点に補助座標を使用 チェックなし
     プロット前にゾーンの塗り潰しをチェック チェックあり

    ガーバーオプション
     Protelの拡張子を使用 チェックなし
     シルクをレジストで抜く チェックなし
     座標フォーマット 4.6, 単位 mm

    出力メッセージ
     すべてのオプションにチェックを入れる


    • 製造ファイル出力 をクリックするとガーバーファイルが作成されます
    • 続いてGenerate Drill Fileをクリック、各種オプション指定後に ドリル ファイルを生成します。


    • 生成されたファイルをすべてzipに圧縮し、製造を依頼します。
    • ファイルは任意のガーバビューワで妥当性を検証しておきます。JLCPCBでの注文画面でOnline Gerber Viewerにより簡易チェックも可能です。

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

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

    • Parts Library Editorでフットプリントを指定します。ツールバーでTマークをクリックしFootprintフィールドに書き込みます。久しぶりにKiCadに触れて、この画面に辿り着くまで苦労してしまいました。文字を書き込むアイコンにしか見えないし、Menuから行けないなんて間違ってます。(2019/7/29)






    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は有利です。