先日のPIC18F14K50で制御したかったチップは、今回のお題であるアナデバのADF4351です。このチップはVCOを内蔵したPLLシンセサイザチップで、内蔵ディバイダとの組み合わせで、35MHzから4400MHzまでと非常に広帯域な周波数範囲を出力可能です。ちょこっと発振器が欲しいとき、任意の周波数を設定できるのはとても便利です。
VCOを内蔵しているので、チップに若干のCRを付加するだけでPLLシンセサイザが構成できてしまうのは驚きです。ちょっと前はVCOを単体で作ってPLLを作るのは、特に高い周波数では大変なことでした。
このチップを自分のお道具箱に入れておくために、PICと組み合わせた基板を作ってみました。基板の設計と注文、ならびに部品の確保は今年の4月にしてあったのですが、なんとなくそのまま放置していました。bladeRFがようやく手元に来ましたが、これでHFを受信するコンバータを作るのに300MHz程度のLoが必要なので、ようやくこの基板の製作に手をつけました。
このチップは、リードが外部に出ていないQFNまたはMLPと呼ばれるパッケージを採用しています。最近はこのようなパッケージのチップも多くあります。この基板を作成したのは、このようなチップを自作で使えるよう練習するという意味もありました。
回路はPIC18F14K50にUSBを付けて、SPIでADF4351と接続するだけです。電源はデータシートの通り、デジタル、アナログ、VCOの3分割しておきます。リファレンスはTCXOにしたいところですが、まずは実験なのでとりあえず普通のXOとします。USBで使うPICのクロックは、12MHzまたは48MHzのいずれとせねばなりません。このPICは内蔵RCによる16MHzを生成できますが、この周波数ではUSBを駆動できないという、なんともいえない残念な仕様です。余ったピンは外部にシリアルやIOとして出しておきます。これを使えばLCDやスイッチと接続して使うことができるはずです。
ADF4351の出力はトランスによる出力としてみました。以前RTLドングルのダイレクトサンプリングで使ったトランスは実はこれのために用意していたものでした。ADF4351には出力が2つあるので、両方を使えるようパターンを用意しておきます。
ループフィルタの定数は、アナデバのサイトで配布されているADIsimPLL でシミュレーションして検討します。チップを選択して、諸条件を入力するだけですので泣きたくなるほど簡単です。とりあえず比較周波数を1MHzとして、ループ帯域幅が10kHz程度で位相余裕が30°程度確保できるようにしてみました。位相ノイズが原因別にグラフ表示されるのは素晴らしい。シミュレーションで知りたかったのは素子感度ですが、あまりシビアではないようです。なので普通の部品で適当に定数を決定してみました。(上の回路図には定数を反映していませんのでご注意ください。)
先にレイアウト済ませ発注してできたのが以下の基板です。いつものように2層板です。
ここで半年の間が空いた後、ようやく再開。まずはPICとUSB関連部分だけ実装してみます。
先日用意したMPLabXでまずはLチカを作成、うまくいったらMicrochipが提供するサンプルをベースにUSBを動作させて、HID経由でPC(Mac)とインターフェースできるようにしました。クロックの周波数が違うくらいで、あとは前回と同じものを動かすことができました。
HID経由でSPIを制御できる目処がたったところで、QFNパッケージであるADF4351の実装にチャレンジします。当初はホットエアソルダーを使う予定で、そのために保護用のカプトンテープも貼ったのですが、いざ使おうとしたときに故障が判明。急遽普通のハンダコテで実装することにしました。YouTubeの動画でイメージトレーニングをしてから挑みます。パターンとピンの両方に予備ハンダしておいてから念入りに清掃、そしてフラックスを十分に与えて、位置合わせ。そしてチップを押さえながら、少量のハンダを付けておいたこて先で、一辺を撫でるように這わせてハンダ付けします。位置がズレていないことを確認して、残りの辺を同様にハンダ付け、最後にルーペで確認して、必要であれば修正します。
裏面の放熱GNDパッドは、基板に1.5mmの大穴を空けておいたので、ここにハンダを流して埋めておきます。
ADF4351のハンダ付けができたので、その周辺のCR等々を実装しました。とりあえず片方の出力だけトランスとコネクタを実装しています。実装してからAUX側に付けてしまったことに気がつきました。
基板上の3つのLEDはそれぞれ、電源、USBステータス、PLLロックのつもりです。
さっそく実験してみます。HIDによる制御はいつものようにpythonで、ライブラリとしてcython-hidapi というパッケージを使いました。PICはSPIとHIDのブリッジとして動作させ、ADF4351に設定するレジスタの内容はpython側で生成するよう、コマンドを作成しました。このコマンドは1234MHzを設定したければ、下記のように使います。e6は指数表記です。
./adf4351usb.py 1234e6
リファレンスは48MHz、比較周波数は1MHzにしました。このPLLのフラクショナル動作は、2^12がmodになるので、10^6 / 2^12 で約250Hzステップで周波数を設定することができます。もっと細かく設定したければ比較周波数を下げる必要がありますが、とりあえず十分です。
事前にSPI単体での実験を十分にしていたので、一発で動かすことができました。とりあえず昔作ったカウンタで出力を見ています。
いろいろ設定をしてみます。上限は4530MHzまで周波数が伸びました。使ったトランスはMini-CircuitsのTC4-1TGで、300MHzまでのものですが、それなりに信号は出ているようです。本来はトランスではなく、LとCによる出力にすべきのようです。
下限は33MHz程度のようです。32.5MHzにはロックしませんでした。
とりあえず動作しているようです。ちょっと試した感じだと、信号がかなり漏れているようなので、シールドケースが欲しいところです。それとPC無しの単独でも動作させられるよう改善したいです。もうちょっといろいろと試してみたいと思います。
このPLLシンセサイザはなんといっても35M〜4400MHzにわたって250Hz程度の解像度で任意の周波数を設定できますので、例のあれと組み合わせれば、うまくいけばあれと似たようなものが低コストで作れるはずです。そのためにもpythonで制御できるようにしているわけです。早くやってみたいところなのですが、なかなか時間が取れないので、少し余裕ができたら取りかかりたいと考えています。
ついでながら、写真の周波数カウンタについて補足しておきます。上のは高校生の時に作った秋月キット+MB506、下はPIC16F876+HMC363S8Gによる10年前の自作品です。自作品ですので精度は推して知るべしですが、信号が出ているかの確認には便利に使えています。これのプリスケーラはHittiteからわざわざ直輸入して作ったのにもかかわらず、直後に秋月でも販売するようになりました。12GHzと高い周波数までカウントできるのは素晴らしいのですが、2GHz付近中間帯域の感度が低く使い勝手はいまいちです。なので初代が引退できずにいまだに現役のままです。
リファレンス
- Analog Devices ADF4351 https://www.analog.com/jp/rfif-components/pll-synthesizersvcos/adf4351/products/product.html
- ADIsimPLL PLLシミュレータ(要登録)。 https://form.analog.com/Form_Pages/RFComms/ADISimPll.aspx
- PIC18F14K50 https://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en533924
- 秋月で扱っています https://akizukidenshi.com/catalog/g/gI-03031/
- pythonによる設定スクリプト https://gist.github.com/edy555/6797579
- PICのファーム。まだ半端な状態ですが置いておきます。 https://github.com/edy555/PIC-USB-ADF4351
- QFNハンダ付け動画 https://www.youtube.com/watch?v=-1jmYkNXOAI
- 「ぴるる」(有)電子研によるPLLシンセサイザボード。https://web.kyoto-inet.or.jp/people/kadoh/denshiken/new_item.html#index07
- ぴるるの評価記事が掲載されたブログ。マイクロ帯NAを製作されているようで他の記事も大変興味深いです。https://blogs.yahoo.co.jp/ngydx785/17394051.html
- ojisankoubou SAE-1 ローカルにADF4351を使用した周波数コンバータ。Webサイトには掲載されていませんが、トラ技2013/10月号記事にて触れられていました。掲示板に若干のコメントがありました。https://ojisankoubou.bbs.fc2.com/