Введение.
В данной статье описан процесс проектирования и результаты тестов синтезатора с функцией фазовой автоподстройки частоты (ФАПЧ, англ. PLL) на базе чипа ADF4113.
Современный рынок радиоэлектроники предлагает массу решений на все диапазоны частот и требуемые технические условия, однако экономическая доступность тех или иных компонентов бывает затруднена.
Чип ADF4113 весьма старый, и AnalogDevices предлагают ему на замену ADF4157BCPZ. Он имеет более широкий диапазон рабочих частот — до 6 ГГц, в отличии от ADF4113 с рабочей частотой только до 4 ГГц.
Как оказалось, так же его розничная стоимость кратно отличается от предшественника в лучшую(для нас) сторону.
Однако, ниже описанное, будет касаться именно ADF4113, т.к. он есть в наличии, и в будущем перенос всех технологических процессов на более свежие устройства не составит особого труда.
Для тех, кто не знаком с этими устройствами, необходимо очень кратко и максимально просто объяснить то, зачем эта штука вообще нужна.
Цель работы: необходимо спроектировать и собрать генератор, стабильно работающий в заданном диапазоне частот.
О самой технологии ФАПЧ синтезаторов есть масса других статей, если не вдаваться в подробности – это устройство, позволяющее при помощи системы с обратной связью автоматически обеспечивать стабильность сигнала на выходе генератора управляемого напряжением( ГУН).
Проектирование синтезатора.
Для простоты изложения, переходим сразу к постановке практической задачи:
-
Необходимо спроектировать генератор синусоидального сигнала на частоте 2437.5МГц.
-
Уровень сигнала на выходе 0-5дБм.
Нам понадобятся:
-
Сам синтезатор ADF4113
-
Генератор управляемый напряжением(ГУН) JTOS-3000P. Он подходит нам по напряжению питания, управляющему напряжению(Vtune) и способен генерировать синусоидальный сигнал в диапазоне 2400-2600 МГц.
-
Контроллер для управления и настройки синтезатора.
Отладочная плата с МК ATmega328P, уже распаянная на готовой плате с выводами под SPI. Уровни ТТЛ 5-ти вольтовые. У многих современных синтезаторов 3.3 вольтовая логика. Поэтому надо быть внимательным при выборе контроллера для сопряжения.
-
Резисторы и конденсаторы. Добываются по месту.
-
Плата для сборки. Для этого диапазона рабочих частот можно ещё заказать на обычном текстолите.
-
Генератор опорного сигнала REFIN(10 МГц). Он был в наличии.
-
SMA-разъемы на плату — 2 шт.
-
2 кабельных сборки с SMA-разъемами. Кабель подойдет RG-58 или аналогичный.
Схема подключения – типовая, предложенная самим производителем.
Однако LOOPFILTER, он же фильтр НЧ, служащий для сглаживания импульсов от фазового детектора при нестабильности выходной частоты требует особого внимания. Расчет этого узла вручную затруднён. Но инженеры ANALOG devices позаботились о потребителях их продукции.
Для всех серий их синтезаторов есть специальные программы, в которых можно всё сконфигурировать и получить результат СРАЗУ, а не спустя недели тщетных попыток самостоятельной настройки.
Для лучшего понимания работы этого узла, можно привести такое метафорическое сравнение:
Если надо ехать на автомобиле с одной постоянной скоростью, то в горку ‑надо добавить газа, под горку — убавить. А если дорога ровная — держать педаль газа в одном положении. Что бы наш автомобиль не дергался на ходу и нужен этот самый фильтр.
Программа, в которой можно получить рассчитанный фильтр в зависимости от параметров синтезатора, называется ADIsimPLL(ver3.5).
Жмем «далее»….
Выбираем имеющийся у нас синтезатор.
Выбираем диапазон частот и нажимаем «Далее».
Вот указаны основные характеристики ADF4113.
Выбираем самую простую схему фильтра НЧ.
Выбираем из списка наш ГУН.
Нажимаем везде «Далее» и в открывшемся окне жмем вкладку Schematic.
Так мы получили номиналы элементов фильтра. Теперь можно приступить к проектированию платы нашего будущего устройства.
А так выглядит 3d-модель синтезатора. Размер платы 38Х38 мм. При необходимости можно сделать компактнее.
Ищем номиналы конденсаторов и резисторов близкие к расчётным.
R2 — (SMD 0603) 3.48 кОм
C5 — (SMD 0805) 44.2 нФ
C6 — (SMD 0805 ) 9.31 нФ
В первой своей плате R2 — был переменным резистором, но оказалось всё работает и так. Особой настройки не требуется, если в ADIsimPLL всё было сконфигурировано правильно.
Важный момент — схема чувствительна к качеству электропитания. Это проявляется при настройке на заданную частоту — синтезатор работает не стабильно.
В рассматриваемой схеме синтезатор питается от платы с МК. А та в свою очередь по USB от ноутбука и всё работает хорошо. Но если использовать дешевые USB зарядки как источник питания, то могут возникать проблемы с выходом синтезатора на рабочую частоту.
Необходимо позаботится о хорошем электропитании при проектировании системы.
Программная часть и сопряжение с микроконтроллером.
Когда плата собрана можно, то переходить к программной части. Как было сказано выше, синтезатор управляется по протоколу SPI.
Схема соединения:
ADF4113 — МК(ATmega328P)
CLK — SCK
DATA — MOSI
LE — SS
Для того что бы настроить синтезатор необходимо по очереди заполнить его несколько внутренних регистров. На основании технической документации можно (проверено) и вручную подобрать содержимое этих регистров, но проще воспользоваться специальной программой от ANALOG devices – ADIInt-N (v7.7.4).
В зависимости от указанных настроек, сгенерированы 3 команды по 3 байта которые надо последовательно записать в регистры синтезатора. Синтезатор сам понимает в какой регистр надо записать команду, т.к. последние 3 бита указывают на адрес регистра.
Ниже приведен текст программы. Для удобства отладки управлять процессом будем через COM‑порт. Возьмём 2 частоты — искомую 2437.5 МГц и например 2500 МГц(частота так же в диапазоне ГУН). Это необходимо для того, что бы проиллюстрировать возможность перестройки синтезатора в заданном диапазоне. Это может пригодиться при проектировании более сложных систем.
В тексте программы даны комментарии для лучшего понимания алгоритма. При необходимости можно перенести на любую другую платформу с микроконтроллером, главное — что бы он поддерживал протокол SPI.
Никаких особых библиотек для реализации не нужно. Запись команды в каждый регистр оформлена в виде отдельной функции. Управление записью так же можно реализовать с помощью кнопки, а не через последовательный порт. В общем, целое поле для творческой реализации. Код для среды разработки Arduino IDE:
#include<SPI.h> int dly =5; //небольшая задержка перед отправкой данных для регистра синтезатора charmessaga[1]; //буфер для ответа ПК charserial_buf[1]; //буфер для принимаемых команд от ПК constint slaveSelectPin =10; voidsetup() { pinMode(slaveSelectPin, OUTPUT); // устанавливаем 10-й пин для управления передачей данных. Serial.begin(9600); // командовать работой синтезатора будем по UART SPI.begin(); SPI.setClockDivider(SPI_CLOCK_DIV16); // устанавливаем частоту SPI 1/16 от тактовой частоты микроконтроллера SPI.setBitOrder(MSBFIRST); // порядок вывода данных в/из шины SPI, MSBFIRST (старший разряд первый). digitalWrite(slaveSelectPin, HIGH); } voidloop() { if (Serial.available() >0) { Serial.readBytes(serial_buf, 1); // читаем команду от ПК – на какую частоту перестроится switch (serial_buf[0]) { case'a': //команда перестроится на частоту 2437.5 МГц digitalSynFunc(); digitalSynRef(); digitalSynN1(); messaga[0] ='A'; Serial.print(messaga); break; case'b': // команда перестроится на частоту 2500.0 МГЦ digitalSynFunc(); digitalSynRef(); digitalSynN2(); messaga[0] ='B'; Serial.print(messaga); break; } } } ////////////////////////////////////////////////////// voiddigitalSynFunc() { // функция для заполнения первого регистра настроек синтезатора delay(dly); digitalWrite(slaveSelectPin, LOW); SPI.transfer(0X9F); SPI.transfer(0X80); SPI.transfer(0X92); digitalWrite(slaveSelectPin, HIGH); delay(dly); } voiddigitalSynRef() { // функция для заполнения второго регистра настроек делителя опорной частоты delay(dly); digitalWrite(slaveSelectPin, LOW); SPI.transfer(0X00); SPI.transfer(0X0F); SPI.transfer(0XA0); digitalWrite(slaveSelectPin, HIGH); delay(dly); } voiddigitalSynN1() { // функция для заполнения третьего регистра для настройки синтезатора на нужную частоту(2437.5 МГц) delay(dly); digitalWrite(slaveSelectPin, LOW); SPI.transfer(0X1D); SPI.transfer(0XC1); SPI.transfer(0X19); digitalWrite(slaveSelectPin, HIGH); delay(dly); } voiddigitalSynN2() { // функция для заполнения третьего регистра для настройки синтезатора на дополнительную частоту(2500.0 МГц) delay(dly); digitalWrite(slaveSelectPin, LOW); SPI.transfer(0X1E); SPI.transfer(0X84); SPI.transfer(0X41); digitalWrite(slaveSelectPin, HIGH); delay(dly); }
Код для среды разработки Microchip studio/Atmel studio:
/* * main.c */ #define F_CPU 16000000UL #include <stdbool.h> #include <avr/io.h> #include <xc.h> #include <util/delay.h> #include <avr/interrupt.h> /// uint8_t bufF[3] = {0X9F,0X80,0X92}; // SynFunc() SPI.transfer(0X9F,0X80,0X92); uint8_t bufR[3] = {0X00, 0X0F, 0XA0}; //SynRef() SPI.transfer(0X00, 0X0F, 0XA0); uint8_t bufS1[3] = {0X1D, 0XC1, 0X19}; //SynN1() SPI.transfer(0X1D, 0XC1, 0X19); uint8_t bufS2[3] = {0X1E, 0X84, 0X41}; //SynN2() SPI.transfer(0X1E, 0X84, 0X41); uint8_t i = 0; uint8_t data; uint8_t receive = 0; //SPI int master void SPI_Init(void) { /* all out, dis pate MISO i/o*/ DDRB |= (1<<DDB3) | (1<<DDB5)| (1<<DDB2); // DDB3 — MOSI, DDB5 — SCK DDRB &= ~(1<<DDB4); // DDB4 — MISO, //on SPI,MSTR,MSBFIRST, 0 SPCR = (1<<SPE) | (1<<MSTR) | (0<<DORD) | (1<<SPR0); SPSR = (0<<SPI2X); PORTB &= ~((1<<PORTB2)|(1<<PORTB3)|(1<<PORTB5)); PORTB |= (1<<PORTB2); } void SPI_WriteArray(uint8_t length, uint8_t *data){ PORTB &= ~(1<<PORTB2); for (uint8_t i = 0; i < length; i++) { SPDR = data[i]; while(!(SPSR & (1<<SPIF))); } PORTB |= (1<<PORTB2); _delay_ms(50); } //UART void UARTInit(void) { UBRR0H = 0; UBRR0L = 103; //baud rate 9600 UCSR0B = (1<<RXEN0)|(1<<TXEN0); UCSR0C = (1<<UMSEL01)|(1<<UCSZ01)|(1<<UCSZ00); //8 bit, 1 stop bit } void UARTSend(uint8_t data) { while(!(UCSR0A & (1<<UDRE0))); UDR0 = data; } unsigned char UARTGet() { while(!(UCSR0A & (1 << RXC0))); return UDR0; } int main(void){ SPI_Init(); UARTInit(); while(1) { if(UCSR0A & (1 << RXC0)) { receive = UARTGet(); _delay_ms(50); UARTSend(receive); } switch (receive) { case 'a': SPI_WriteArray(3, bufF); SPI_WriteArray(3, bufR); SPI_WriteArray(3, bufS1); _delay_ms(100); UARTSend('A'); receive = 0; break; case 'b': SPI_WriteArray(3, bufF); SPI_WriteArray(3, bufR); SPI_WriteArray(3, bufS2); _delay_ms(100); UARTSend('B'); receive = 0; break; } } }
Настраиваем терминал COM-port:
Терминал COM-портов предназначен для отладки работы программы. Диалоговое окно терминала позволяет отправлять команды контроллеру и принимать от него ответ. Такое техническое решение экономит время на разработку и отладку, а так же можно обойтись без кнопок и индикаторов.
При отправке команды «a»получаем ответ «A», что означает — контроллер принял команду для заполнения регистров синтезатора и настроил его на первую частоту. Отправив «b» получаем в ответ «В», значит — произошла настройка на вторую частоту.
Измерения
Общая схема измерительного стенда включает в себя сам собранный синтезатор на плате, генератор опорной частоты(10 МГц), анализатор спектра ARINSTSSA-TG, плата с контроллером и персональный компьютер.
Фотография измерительного стенда:
Как результат титанических усилий, видим на анализаторе спектра сигнал с выхода синтезатора при отправке первой команды:
А вот сигнал при отправке второй команды:
Выводы
Даже при видимой сложности проектирования синтезаторов на базе чипа ADF4113 процесс кратно упрощается благодаря программным средствам от производителя чипов.
Спектр применения данных устройств обширен и включает в себя как производство средств технической диагностики антенно-фидерной линий связи, так и узлов непосредственно самой радиосвязи.
Так же необходимо указать на наличие более современных чипов синтезаторов с встроенными ГУН: например, серии ADF4350/4351.
Есть готовые модули на их базе. ГУН находится внутри чипа и его не нужно устанавливать отдельно. Так же, на таких модулях имеется свой генератор опорной частоты и не нужно подключать внешний. Так же есть вся обвязка по электропитанию и сопряжению с МК. Немалым достоинством является цена и доступность таких модулей. Возможно, для научных изысканий или при прототипировании собственных устройств такой вариант подойдет лучше.
Вот фото подобного модуля:
ссылка на оригинал статьи https://habr.com/ru/articles/861452/
Добавить комментарий