Перейти к содержанию
    

Добрый день.

Люди,которые работали с генератором ADF4351 - прошу у вас помощи, т.к. сам что то не могу разобраться.

Нужно сделать перестройку частоты генератора с шагом 5 МГц от 100 МГц до 2555 МГц.

В сети примеров что то не особо нашел,но один все же надыбал - его и использую:

https://github.com/analogdevicesinc/no-OS/t...mcomms1/ADF4351

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

нужно помочь написать функцию перестройки!я просто сначала хотел тупо записывать в регистр значения которые выдает программа Adf435x,но т.к. частотный диапазон большой то слишком много бы получилось записей.просто может кто его программировал и знает как сделать попроще.просто я пока только учусь,поэтому желательна помощь людей работавших с данной железиной.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По простому,если надо менять ТОЛЬКО вых. частоту, можно сделать так:

собственно сама функция, вх частота в МГц. (с шагом 5 МГц от 100 МГц до 2555 МГц)

  
 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...