реклама на сайте
подробности

 
 
> ADF4351, Программирование генератора
alexe1ka
сообщение Aug 12 2014, 08:12
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 30-03-13
Пользователь №: 76 276



Добрый день.
Люди,которые работали с генератором ADF4351 - прошу у вас помощи, т.к. сам что то не могу разобраться.
Нужно сделать перестройку частоты генератора с шагом 5 МГц от 100 МГц до 2555 МГц.
В сети примеров что то не особо нашел,но один все же надыбал - его и использую:
https://github.com/analogdevicesinc/no-OS/t...mcomms1/ADF4351


Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 3)
arhiv6
сообщение Aug 12 2014, 13:18
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 633
Регистрация: 21-05-10
Из: Томск
Пользователь №: 57 423



А какая помощь-то требуется?


--------------------
Go to the top of the page
 
+Quote Post
alexe1ka
сообщение Aug 13 2014, 15:22
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 30-03-13
Пользователь №: 76 276



Цитата(arhiv6 @ Aug 12 2014, 17:18) *
А какая помощь-то требуется?


нужно помочь написать функцию перестройки!я просто сначала хотел тупо записывать в регистр значения которые выдает программа Adf435x,но т.к. частотный диапазон большой то слишком много бы получилось записей.просто может кто его программировал и знает как сделать попроще.просто я пока только учусь,поэтому желательна помощь людей работавших с данной железиной.
Go to the top of the page
 
+Quote Post
arhiv6
сообщение Aug 14 2014, 06:31
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 633
Регистрация: 21-05-10
Из: Томск
Пользователь №: 57 423



По простому,если надо менять ТОЛЬКО вых. частоту, можно сделать так:
собственно сама функция, вх частота в МГц. (с шагом 5 МГц от 100 МГц до 2555 МГц)
CODE

bool setFreq(int outputFreq)
{
int freqStep = 5; // шаг выходной частоты, в МГц
int pfdFreq = 32000; // частота опоры, в кГц, ставим своё!
int vcoDivider, INT, MOD, FRAC, temp;
char syntReg[24];

// заполняем массив регистров, которые будут грузиться в синтезатор.
// начинаем с 5 регистра, т.к. грузить будем с него.
// Значения должны быть взяты из программы Adf435x.
// В той программе рассчитываем регистры на
// одну частоту (напр 150МГц), проверяем что всё работает,
// копируем их сюда. В этой функции в этих насчитанных регистрах
// будут меняться только те данные, которые отвечают за смену частоты.
// Те значения что приведены тут в качестве примера, скорее всего не рабочие!
// Reg5
syntReg[0] = 0x00;
syntReg[1] = 0x40;
syntReg[2] = 0x00;
syntReg[3] = 0x05;
// Reg4
syntReg[4] = 0x00;
syntReg[5] = 0xac;
syntReg[6] = 0x00;
syntReg[7] = 0x3c;
// Reg3
syntReg[8] = 0x00;
syntReg[9] = 0x00;
syntReg[10] = 0x04;
syntReg[11] = 0xb3;
// Reg2
syntReg[12] = 0x18;
syntReg[13] = 0x00;
syntReg[14] = 0xde;
syntReg[15] = 0xc2;
// Reg1
syntReg[16] = 0x08;
syntReg[17] = 0x00;
syntReg[18] = 0x99;
syntReg[19] = 0x01;
// Reg0
syntReg[20] = 0x00;
syntReg[21] = 0x36;
syntReg[22] = 0x13;
syntReg[23] = 0x78;

// Проверяем, что частота попадает в шаг
if ((outputFreq%freqStep)!=0)
return false;

// В зависимости от частоты выбираем значение выходного делителя частоты VCO,
// Заодно проверим, что частоты из нужного диапазона.
if ((outputFreq<=2555)&&(outputFreq>2200))
vcoDivider = 1;
else if ((outputFreq<=2200)&&(outputFreq>1100))
vcoDivider = 2;
else if ((outputFreq<=1100)&&(outputFreq>550))
vcoDivider = 4;
else if ((outputFreq<=550)&&(outputFreq>255))
vcoDivider = 8;
else if ((outputFreq<=255)&&(outputFreq>=130))
vcoDivider = 16;
else if ((outputFreq<=130)&&(outputFreq>=100))
vcoDivider = 32;
else
return false;

// Частота рассчитывается по формуле (см в pdf раздел RF SYNTHESIZER—A WORKED EXAMPLE):
// outputFreq = (INT + (FRAC/MOD)) * (pfdFreq/vcoDivider)
// Из неё рассчитываем INT, MOD, FRAC.
MOD= (pfdFreq/(vcoDivider*freqStep));
INT= vcoDivider*outputFreq/pfdFreq; // Вычисляем нужные для установки частоты переменные
temp=(10*vcoDivider*MOD)/pfdFreq; // промежуточное вычисление из-за размерности в кГц
FRAC= ((outputFreq*temp)/10) - (INT*MOD);

// Формируем нужные регистры
// R4
syntReg[5] = (syntReg[5] & 0x8F) | (vcoDivider << 4); // меняем vcoDivider
// R1
syntReg[18] = (syntReg[18] & 0x80) | (MOD >> 5); // меняем MOD
syntReg[19] = (syntReg[19] & 0x07) | (MOD << 3);
// R0
syntReg[20] = 0x00 | (INT >>9); // меняем INT
syntReg[21] = 0x00 | (INT >>1);
syntReg[22] = 0x00 | (INT <<7)|(FRAC >>5); // меняем FRAC
syntReg[23] = 0x00 | (FRAC <<3);

// Вызываем функцию загрузки регистров
return loadSyntReg(syntReg); // загрузили в порядке R5 R4 R3 R2 R1 R0
}


Сообщение отредактировал arhiv6 - Aug 14 2014, 09:40


--------------------
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 07:48
Рейтинг@Mail.ru


Страница сгенерированна за 0.01377 секунд с 7
ELECTRONIX ©2004-2016