Программирование синтезаторов частоты ADF


Ханс Вагеманс, ON4CDU
https://on4cdu.net/programming-adf-frequency-synthesizers/

Настройки синтезаторов ADF (частота фазового детектора, выходная частота, ток и т. д.) определяются содержимым ряда регистров в ADF.

Содержимое этих регистров для АПД можно рассчитать с помощью программного обеспечения Analog Devices. Это программное обеспечение опубликовано на страницах Analog Devices (Engineering). Например, для АПД 4002: найдите программное обеспечение ADI PLL Int-N, для АПД4351: найдите EVAL-ADF4351 или ADF435x, для АПД5355: найдите EVAL ADF5355. 

Программирование АПД с помощью Arduino очень просто. Чтобы не использовать преобразователи уровней, рекомендуется использовать Arduino с напряжением 3,3 В. Arduino с USB-интерфейсом упрощает подключение к компьютеру.

Вот 2 примера:
1) Arduino Leonardo Pro Micro 3,3 вольта
2) PRO-MICRO 3,3 вольта от Diymore

Схема довольно проста. Сигналы Data, LE и CLK используются для заполнения регистров ADF. При включении CE (= Chip Enable) ADF разблокируется. Разъем CE ADF также может быть постоянно подключен к линии 3,3 В.

На схему добавлен светодиод, который загорается во время передачи данных на АПД. Кнопка позволяет перезагрузить Arduino.

 

Практическая реализация

ADF5355

Микросхема ADF5355 имеет 13 32-битных регистров. Регистры заполняются один за другим: сначала регистр 12, затем регистр 11 и так далее до регистра 0. Для заполнения этих регистров 32 бита данных (линия данных) подаются на 32-битный сдвиговый регистр ADF по каждому восходящему фронту тактового сигнала (CLK). Данные поступают сначала в старший бит (MSB). Передача данных из сдвигового регистра в один из 13 защелок происходит по восходящему фронту сигнала LE (разрешение загрузки).

Программное обеспечение Arduino для программирования синтезатора ADF5355 (опорная частота 26 МГц, Fout = 400 МГц).


// Version 0.1 june 2020 
// Простой скетч Arduino для настройки регистров ADF5355.
// Комментарии приветствуются на on4cdu'at'uba.be

int LEpin = 6, datapin = 8, clkpin = 7, CEpin = 9 ;  // Определение пинов данных и тактового сигнала ADF5355
int ledpin = 10;
unsigned long Reg00, Reg01, Reg02, Reg03, Reg04, Reg05, Reg06, Reg07, Reg08, Reg09, Reg10, Reg11, Reg12;         // define registers

void writeregister(unsigned long regword) {   // процедура синхронизирует 32-битное слово (регулярное слово) в ADF
  for (int pos = 32; pos > 0; pos --) {	// Регистровое слово имеет 32 бита.
    if (regword & 0x80000000) {
      digitalWrite(datapin, HIGH);	// записать 1 в регистр ADF
    }
    else {
      digitalWrite(datapin, LOW);	// записать 0 в регистр ADF
    }
    digitalWrite(clkpin, HIGH);
    digitalWrite(clkpin, LOW);
    regword = regword << 1;		// поверните влево для следующего бита
  }
  digitalWrite(LEpin, HIGH);		// защелка в регистровом слове на восходящем фронте LE
  digitalWrite(LEpin, LOW);
} //  end writeregister

void write13registers() {	// записать 13 регистров в ADF
  digitalWrite(ledpin, HIGH);
  writeregister(Reg12);
  writeregister(Reg11);
  writeregister(Reg10);
  writeregister(Reg09);
  writeregister(Reg08);
  writeregister(Reg07);
  writeregister(Reg06);
  writeregister(Reg05);
  writeregister(Reg04);
  writeregister(Reg03);
  writeregister(Reg02);
  writeregister(Reg01);
  delay(0.1);
  writeregister(Reg00);
  digitalWrite(ledpin, LOW);
}

void setup () {
  pinMode(ledpin, OUTPUT);
  pinMode(clkpin, OUTPUT);
  pinMode(datapin, OUTPUT);
  pinMode(CEpin, OUTPUT);
  pinMode(LEpin, OUTPUT);
  digitalWrite(ledpin, LOW);
  digitalWrite(clkpin, LOW);
  digitalWrite(datapin, LOW);
  digitalWrite(CEpin, LOW);
  digitalWrite(LEpin, LOW);
  delay (500);
  digitalWrite(CEpin, HIGH);

  // Установка регистров для Fout= 400MHz и 26MHz опорной частоты. PFD = REF

  Reg00 = 0x00200F60;
  Reg01 = 0x02762761;
  Reg02 = 0x13B20002;
  Reg03 = 0x00000003;
  Reg04 = 0x3000BD84;
  Reg05 = 0x00800025;
  Reg06 = 0x15802076;
  Reg07 = 0x120000E7;
  Reg08 = 0x102D0428;
  Reg09 = 0x0B0B3CC9;
  Reg10 = 0x00C0193A;
  Reg11 = 0x0061300B;
  Reg12 = 0x0001041C;

  write13registers();
}

void loop() {                           // пустой главный цикл
}

Для других ADF синтезаторов программа будет аналогичная. Меняется только количество регистров и их содержимое.

Плата ADF5355 подключена к Arduino.

Материал подготовил Николай Большаков - RA3TOX
Январь 2026


[ На главную ] [ Синтезаторы ]