Top Page ADF4001発振モジュールで基準信号器を作る
自作工程のメモとして
13.Dec.2017


 これも二つ前の「トランスバータ」関連で、当初はOCXOとPLL発振器で116MHzを作ってみるつもりで準備した「ADF4001 local oscillator module 80M-200M output frequency synthesizer PLL control program」(以下、ADF4001モジュールと略す)(AliExpress手配)を別途紹介予定のOCXOとともに手配しました。
その間に今まで基準と考えていた信号が間違いで有るということに気づき、別に手配した116MHzのTCXOでも十分な安定度が確保できることが分かりました。
この後しばらく温度変化の基準に使うこともあり、OCXOとPLL発振器を汎用的な基準信号として使えるように、ケースに収納することにしました。
また、当初ADF4001を使おうとしたときに、とりあえず動かせるスケッチをネット上で探しましたが見つからなかったので、簡単では有りますがプログラミングの情報も掲載いたします。


ケースに収納した基準信号器です。(別途、10MHzのOCXOが必要です。)

microUSBの穴は、ヤスリで削りすぎて大きくなっています。そのため表面にパウチで前後パネルシールを作り、開けすぎた穴をカバーしています。
最終設定周波数は、144.050MHzにセットしました。

Edit by bluegriffon3.0.1(フォント指定を入れています。)

1.入手したADF4001基板

 AliExpressでVCOを内蔵しているようなADF4001モジュールを見つけました。
その他にもADF4001基板とVCO基板を別々に手配する品もありましたが、希望する周波数(116MHz又は144MHz)が1枚で発振できるような気がしたので、半信半疑で注文してみました。
入手するまでに、ADF4001のデータシートとAD社提供の「ADI PLL Int-N」ソフトを手にして、Arduinoでパラメータのセットスケッチを組んで準備をしていました。


■ ADF4001モジュール基板

基板内の水晶発振器は30MHz・VCO部はMC1648でした。
商品ページの「取引情報」を見ても6か月以内に注文した人が居ないようでしたので、思いっきり五つ星の「フィードバック」を入れておきました。




2.ADF4001モジュールの動作確認

 Web上でそのまま動作させるようなスケッチを見つけることはできませんでしたが、日本語のデータシートを見ながらArduinoから信号線を4本出してそのまま制御すると、内部クリスタル(30MHz)を使ってそのまま発振させることができました。


■ 動作の仮実験

 
信号線(4本)のほか、5VとGの6本で制御できます。
動作確認後は、水晶発振器(30MHz)と電源用のネジこみターミナル(緑色)は外しました。


■ Analog Devices社のツール「ADI Pll Int-N」


VFO的(ただし20KHzステップ等)な動きの場合は、Arduinoで計算する必要が有りますが、簡易的な基準信号作りが目的のため、このツールだけで十分間に合っています。


■ 発振周波数指定の簡単なスケッチ

// Analog Devices ADF4001を使用するための簡単スケッチ
// "Arduino Nano, ATmega328P(Old Bootloader)"
// USB-SERIAL CH340(COM3)
// 目的周波数の設定は、「ADI Pll Int-N」 V7.7.4(Windows)ソフトで計算する。
// 元のリファレンス=30MHz
// 1.08KHz低い  PtoP150mV
// スタートの設定
// Device             :ADF4001
// -------------------------------
// RF VCO OUT         : 116MHz
// PFD Frequency      :200KHz  (Min 20KHz)
// Reference Frequency:10MHz
// Write R Counter Latch :0xC8        // Reference Frequency:10MHz
// Write R Counter Latch :0x190       // Reference Frequency:20MHz
// Write R Counter Latch :0x258       // Reference Frequency:30MHz
// Write N Counter Latch :0x24401
// Write Function Latch & Write Initialization Latch  :0xD8092
// -------------------------------
// 144.00MHz(PFD=200KHz REFf=10MHz) R_Latch = 0xC8; N_Latch = 0x22D001; InitLatch = 0xD8082;
// 144.02MHz(PFD=20KHz REFf=10MHz) R_Latch = 0x7D0; N_Latch = 0x3C2101; InitLatch = 0xD8082;
// 144.05MHz(PFD=50KHz REFf=10MHz) R_Latch = 0x320; N_Latch = 0x2B4101; InitLatch = 0xD8082;
// 116MHz(PFD=100KHz REFf=10MHz) R_Latch = 0x190; N_Latch = 0x248801; InitLatch = 0xD8082;
// 100MHz(PFD=100KHz REFf=10MHz) R_Latch = 0x190; N_Latch = 0x248801; InitLatch = 0xD8082;
//
/*
#include <Wire.h>
#include <Time.h>
*/
// この下の4つのラッチに設定数をセットして「マイコンボードに書き込み」動作を行う。
// FuncLatchは使用せず。
const unsigned long R_Latch = 0x320;        // 32bit
const unsigned long N_Latch = 0x2B4101;     // 32bit
const unsigned long FuncLatch = 0xD8082;   // 32bit
const unsigned long InitLatch = 0xD8082;   // 32bit
unsigned long WriteBuff;         // 32bit

// Port definition 実ポートに書替えること。
#define P_DA 2
#define P_CL 3
#define P_LE 4
#define P_CE 5

void setup() {
  pinMode(P_DA, OUTPUT);   // 出力に設定
  pinMode(P_CL, OUTPUT);   // 出力に設定
  pinMode(P_LE, OUTPUT);   // 出力に設定  LE ハイ・レベルになると、ロードされます。
  pinMode(P_CE, OUTPUT);   // 出力に設定

//シリアルモニタでデバックするときの準備(通常は未使用)
//  Serial.begin(9600);
//  while (!Serial) ; // wait for Arduino Serial Monitor
  delay(200);
  digitalWrite(P_CE, LOW);
  digitalWrite(P_LE, LOW);
  digitalWrite(P_CL, LOW);
}
void loop() {
  delay(500);
  WriteBuff = InitLatch;    //  順番は「Init」==>「R」==>「N」
  WriteLatch();
  WriteBuff = R_Latch;
  WriteLatch();
  WriteBuff = N_Latch;
  WriteLatch();

  delay(500);
  while (1) {
    int a = 0;
  }
}
// ラッチへの書込み
void WriteLatch() {
  int hl;
  for (int n = 23; n >= 0; n--) {
    hl = bitRead(WriteBuff, n);
    digitalWrite(P_DA, hl);
//    Serial.print(hl);
    digitalWrite(P_CL, HIGH);
    digitalWrite(P_CL, LOW);
  }
  digitalWrite(P_CE, HIGH);
  digitalWrite(P_LE, HIGH);
  digitalWrite(P_LE, LOW);
//  Serial.println("");
}
// 一部ラッチ名をL_LatchとしていたのをN_Latchに修正しました(2018/01/17)
短いステップで簡単に動作してしまいました。
各周波数を実験した後は、144.050MHzにしておきます。
なお、あまりPDFの周波数を小さくすると発振しませんでした。私の場合はPDFの最小値は20KHzのようでした。
仮実験の後は、ArduinoをNanoに換えてケースに収納していきます。



3.ケースへの収納

 ケースへの収納は、ADF4001モジュールが小さいのと、Arduino Nanoを使うことからタカチのYM-100を使うことにしました。
高周波コネクタはSMAも有りましたが、BNCに統一することにしてADF4001モジュールからも直に1.5D同軸をハンダ付けしています。
今回は、ドリルの穴あけが上手くいったようで、ヤスリで修正することはしませんでしたが、USBの穴は広げすぎました。


■ 配置を決め各モジュール・コネクタを配置したところ


Nanoを穴あき基板で固定していますが、余ったエリアが勿体ない気がします。


■ 配線後のケース内部(後面より)


最近、PCBにはコールを入れないようにしていますが、これは一点ものですので久しぶりにコールを入れています。


■ 上カバーを付けた状態(前面より)


表示が無かったら、しばらくして何の目的で作ったか忘れてしまいそうなぐらいシンプルです。





9.その他気づいたこと

(1)都度、追記します。




99.追記用(予備)