Si5351/AD9952 Signal Generator 【2023.10.12】 |
最近常用のSSGであるHP8657に不安を覚えています。寒い時期に一台のHP8657が変調も掛けていないのにFM変調のような信号を生成する事例が発生していました。これは時期にもよりますが通電して内部が暖くなってくるとこの現象は消失し、夏の間は殆ど起きませんでした。
流石に名器HP8657も寿命が近いのかとも思って、サービスマニュアルを読み込んだりしましたが、この修理とは別に、突然の不具合発生に備える意味でSSG(標準信号発生器)とまではいかずとも、SG(信号発生器)程度でいいからバックアップを作っておこうと思い立ちました。
いくらSSGまではいかなくてもいいとは言え、TXのIMDとRX感度を測ることができないと私としては時間を掛けて「作る」意義を見いだせないので、そこは外さないように考えてみました。
しかし、感度測定には信号を極めて微小なレベルまで絞り込まないとイケません。いつものバラック構造では、とってもリークで感度測定は不可能だろうと思っていました。ただ、その程度感を確認するために、バラック構造の発振器で調査してみました。
昔作ったDDS評価用実験機
この実験機は大昔にBASCOMでDDSを動かしていたころのDDSチェックのためのバラックセットです。はじめは当時はやりだった支那製のAD9850/9851の安価なモジュールの動作確認を行うためのものでした。あとからAD9952の基板も評価できるように、機能追加しました。これを用いて、裸のバラックセットでどこまで信号が漏れて、感度測定が「できないか」確認することにしました。
右下の同軸ATTは20dBのものを4個ばかりシリーズに接続して、それを押しボタン式ステップアッテネータ(20+20+10+5+3+2+1dB)に通してRXのトップに給電します。すると、期待に反して(!)-100dBm入力時のSINAD値は同じ値をHP8657で出力した場合とまったく変わりません。このことは、こんなに空間的にオープンなバラックな信号発生源でも感度が測れるということであり、一種の驚きです。
これに気をよくしたので、SGをDDSやらSi5351やらを使って作っていくことにします。
昔作ったArduino習作の信号発生器
ずいぶん前に、Arduinoを弄り始めたころに、作ってみた信号発生器がこれです。DDS、Si5351、RE、TFT表示器、KBDを使えるようになるための習作でした。最終的にはArduinoでAD9952を動作させるためのヘッダーファイルAD9952.hなんかも自作してみて、なんとなーくArduinoの動作を実地で確認したモデルです。ただ、時間があまり無かったので、TFT-LCDの表示のまとまりが無いのと、KBDのインターフェースが洗練されていないので、SGとしての使い勝手はあまりよくありません。
ただ、これをベースにSGをでっち上げるのが、時間的には一番の近道のようなので、これを分解、改修することに決めました。
使う発信源はAD9952DDSとSi5351PLLとしました。この選択は異論もあるかもしれませんが、既存のCodeを最大限利用するという制限から決めました。
ということでSi5351の実装について見てみましょう。
Si5351をシールドケースに実装する
安価な支那製モジュールをジャンクのアルミくりぬきケースに詰め込んでみました。リレーを使った-50dBのATTも写真右半分に詰め込んであります。このモジュールは後で基準信号の25MHzの内蔵Xtalを取っ払って、外部からOCXOの25.6MHzの安定化された信号を入力できるようにSMA端子も有して居ます。
AD9952用AMPとATTの様
これは一方のAD9952モジュールを内蔵し、-50dBのATT/Through/20dBのAMP(μPC1654)を内蔵した基台です。あとからこれに壁を建ててシールドするためのモノです。
F特性
これは青線がThroughで黄線がAMP有の様子です。スパンは200MHzですが、これ以上の周波数は、私はあまり使わないので、空中配線のATTを考えると、こんなものでも十分だと考えました。
ということで、AD9952DDSモジュールを基台に固定して、更に壁を立ててシールドを画策します。実際には上面も銅板をかぶせて完璧を期すことにします。
AD9952DDSをケースに収容
このシールドボックスに収容した状態で元の制御部に接続して、動作を確認しています。
動作確認
さて、発振部のシールドができたので、これらをケースに収容していきます。しかしここで、ふと考え込んでしまいました。最初はSGらしく、それなりの形をした測定器ケースを求めようかと思ったのですが、今日日、市販のケースを買うとなると、けっこうな出費になります。ちょっとしたものでも諭吉君が飛んでいってしまいます。なので、コンパクトなケースにとどめてしまえと方向転換をします。
ケース内レイアウトと内部構造の検討
上図に示すように、安価な蓋つきシャーシーを使って、それも、当初から必須な部分と、拡張して機能向上させる部分を分けて、まずは当初SGを構成するうえでの最小部分を作ってしまえ・・・あとの拡張は気分が乗ったときでいいや・・・と考えました。
追加部分は電源とOCXO、400MHzあたりのAD9952DDSクロック生成回路、場合に寄ったらピュアな電源としての電池パック等を想定してあります。これらを二階建てで蓋つきケースを結合しようと思っていました。
上部の蓋つきシャーシには、AD9952DDS,Si5351PLL、KBD、TFT-LCD、RE、同軸ATT(2台)と、SGとして必須な部分を収容することを考えました。
モジュールとATTの位置決め
えいやっと配置
こんな感じに主要パーツを配置して、必要な配線をします。元はバラック基板に配線してあったモジュールの配線を再構築するだけなので、あまり面倒なことはありません。
最終の外形
内部配線を終了して、前面の操作、表示関係の文字入れを終了してSG必須部分を完成させることができました。
2トーン波形
最後に、この2CHのSGの波形を見ておきます。2kHz離れのRF 2-toneを発生させてみました。左がSi5351、右がAD9952のスペクトラムです。IMDの発生も少ないので良好なテスト信号源になると思われます。HP8657だと近傍ノイズ特性が醜いので10kHzは話さないと気分がよくありませんでしたが、これだと音声帯域幅のRF2-toneを生成できるので、この点はご満悦です。測らずも両者のスペクトラムの違いも明らかになりました。
一応、RX感度も測ってみましたが、事前の検討通り、全く問題なく測ることができました。
と、ここまでくれば、棚に収容して運用に入るわけですが、作ってから数か月経って、かなりの出動機会を得ています。使い物にはなっているようで良かった良かった(笑)。
<小改造> 【2025.5.13】
このSGですが、けっこうちょこちょこ使っています。HP8657がちょっとよれてきたので、逝ってしまった場合の救急対応ができるようにと作ったのですが、昨今では受信感度も送信IMDもこれ一つでこなしてきます。もっともHP8657も相当のお年を召しているので、逝った場合は修理不能となる確率が高いでしょうから、その善後策を整えて置くのは必須でしょう。なにせ、2002年にはもう在宅していたのでそれからでも23年、製造からは35年以上経過していると思います。これで、大きな不具合が出ないで動いているだけでもびっくりですね。
さて、このSSGですが、もともとはArduinoの習熟用にSi5351,AD9952,RE、LCDを動かす練習をしたバラックが発祥元で、当時はえいやっと作ったので、ちょっと制限がありました。その一番大きな問題が周波数安定度とその正確性、ならびにDDSの発生周波数範囲の狭さ(~60MHz)でした。これは今後使っていくうえで相当な制限として意識されるので、一番先に改善しないとイケマセン。ということで、主に基準発信源を強化することにしました。
考え方としては、スペアナがルビジウム標準を持っているのでこの出力(10MHz)を使ってロックさせ、また、スペアナが動いていない場合は12.8MHzのOCXOを動作させて、とりあえずの安定度を得ようという魂胆です。あとは流石に当時の習熟用に使っていてArduino Uno互換(名前はBINBODEINO笑)機をもう少し速度の速いMPUに交換することにしました。
MPUですが、最初に考えたのが、UNO R4なる48MHzのCPUを搭載したUNOの最新バージョンの採用です。CPUスピードで3倍になってるのだから、レスポンスもきっと俊敏になるだろうと思って、CPU速度の割には値段が高めだなぁと思いながらも純正品を買ってみました。
純正のUNO R4 Minima
これを使って、表示とロータリーエンコーダをつなげて表示の様子を見てみました。
LCD表示とロータリーエンコーダの接続
UNOだとLibraryはArduino UNO(AVR)と互換性が完全にあるわけではなく、動くモノを選択しなければなりません。いままで使っていたLCD表示用Ug8ライブラリはどうもUNO R4では動かなそうなので、一番基本的なAdafluitのライブラリを使ってみたら、偉く表示が遅くて往生しました。ある表示ブロックを黒塗りするだけで、写真のように動作が写真に撮れてしまいます。だめだこりゃ。いや、なにか設定するれば速くなるのかもしれませんが、あまり情報もないので、このMPUの採用は諦めてしまいましょう。
さて困ったのですが、Arduinoあたりだと高速化できそうなソリューションが無さそうなので、異なるMPUに乗り換えるのも「手」かもしれません。いろいろ迷うのも時間がもったいないので、前から使ってみたいと思っていたラズパイPicoを弄ってみます。Picoも最近バージョンが上がって速度も上がっているようですが、オリジナルのPicoが133MHzなので、これで充分だと思います。
ラズパイPicoで動かしてみる---3
ラズパイPicoはArduino OSが動くので、使っていたUno用スケッチがどこまで動くのか探っていきます。
いままで、ロータリエンコーダはAVR固有の割り込みを使っていましたが、これをPICOでも動くライブラリに変えて動作させました。Si5351に関してはAVR用のArduinoのライブラリが動くので、これも問題無しでした。表示はUNOで使っていたAdafruitのILI9341ライブラリがそのまま動くようです。動作は充分速いので、これ以外のライブラリを探さなくても良さそうです(凝る気はないので)。
あとはAD9952ですがこれも、AD9851.cpp/hから私が改造したAD9952.cpp/hが問題なく動きました。これで、重要なコンポーネンツの動作が確認できたので、制御部の目鼻が立ちました。
AD9952をラズパイPICOで動かしてみる
次はSi5351とAD9952の周波数リファレンスを構成してみます。
主要部品---2
ここで用いるのはThe ショーワなパーツ達です。基準はルビジウムからの10MHzの信号と独立用の12.8MHzのOCXOです。これから、AD9952の数百MHzのクロック、Si5351の25MHzクロックを作り出す必要があります。OCXOとルビジウム出力は切り替えて使い、スペアナを使わない時はOCXOでしのぎます。
AD9952はオクで入手してあった310MHz帯のVC-TCXOをルビジウム出力かOCXO出力を基準にPLLを組むことにします。
昭和のICですが、12.8/10MHzの基準発振の分周はTC9122、310MHz帯のVC-TCXOを分周するプリスケーラはµPC571C コンビのパルススワロー対応の分周器はTC9198、移相比較器はTC5081です。いぞれも20年くらい前にはよく使っていた懐かしいICです。ちなみに移相比較周波数は10kHzとなっています。
380MHz帯DDSクロックの様子
これを、スペアナからのルビジウム発振器の10MHzでロックさせてみました。314.58MHzを生成させています。
DDSクロックを生成---2
流石にルビジウムの高安定信号らしく、キャリア近傍の純度は充分です。精密な測定にも適応可能と考えます。
次はスペアナを用いない場合の独立な基準信号を考えます。12.8MHzのOCXOがジャンクであるのですが、これを使います。先のAD9952DDS用の信号源はスペアナ/OCXOのいずれでも選択できて、Si5351用にはOCXOのみとします。
最初はSi5351用にも25MHzのPLLを組もうかと思ったのですが、たかがSi5351用にそこまでするのももったいないと思いなおして、この基準源はOCXO「のみ」としました。Si5351のクロックは、以前(2016年)にPin2に入力すれば、外部から供給可能であることを確認してありましたので、この方法を採用します。
また、基準周波数は25MHzですが、これにはOCXOの12.8MHzを二逓倍して供給することを考えます。制御Codeの中で基準クロックを規定する部分を25.6MHzに変更すれば、何の問題も無く動作させることができます。
2逓倍器の様子
上図は12.8MHzのOCXOと2逓倍器です。逓倍器の初段はこれまた昭和のTRである2SC945、バッファが2SK241というラインアップ。懐かしいですなぁ(笑)。
逓倍器のスペクトラム
逓倍器のスペクトラムを見てみます。-40dBくらいしかスプリアスが低減できていませんが、通常のSSGでもこんな感じ(?)なので、良しとします。もともとスプリアス満載のSi5351用ですからこれで充分です。
モジュールを再結線してみる
外観(OCXOと逓倍器、PLLをバックパック)
さて、ここで今までのモジュールを再配線してSG本体の裏ブタに固定できるようにネジ止めをします。もともとこの機器は立てて使うようにしていますので、奥行が増えたことで立てた場合の安定感が増してGoodです。最後にDDSで生成した100MHzのスペクトラムを挙げておきます。基準はルビジウムです。狭帯域の近傍でもクリーンで気持ちのいいスペクトラムです。これでとりあえず、私の使用用途はカバーできそうな感じです。
DDSによる100MHzのスペクトラム