Автор Тема: si5340A  (Прочитано 87770 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ra0ahc

  • Hero Member
  • *****
  • Сообщений: 4872
  • Сергей, RD6AH
Re: si5340A
« Ответ #75 : Июль 08, 2019, 08:22:56 pm »
Кстате, сегодня сишка не запустилась и я начал пропаивать  контакты, а потом вообще снял микруху феном и назад поставил. Много издевательств с паяльником (320гр)  итак 3 часа  lol22
Потом полез в программу, оказалось не ту версию заливал ...тактирование ни туда подал, блин.

Крепкая она оказалась.Выдержала все мои издевательства.
Да да, я знаю, у меня ничего не получится )))

Оффлайн Владимир_К

  • Hero Member
  • *****
  • Сообщений: 1179
Re: si5340A
« Ответ #76 : Июль 08, 2019, 08:51:19 pm »
10-20 мгц я думаю можно и без изменений плл сгенерить, но надо проверить.
Наверняка можно. Есть же еще выходные 24-разрядные делители R. Там можно еще кучу делений получить, на 2, 4 и т.д.  И значение этого делителя можно менять в зависимости от диапазона. То есть, при вызове функции расчета частоты, в параметре функции укажите диапазон, а там условие, например, если диапазон 1, то делитель 16 , второй - 8 и т.д. Таким образом диапазон изменения N делителей будет меньше. Хотя, может что и вылезет.. Кроме того, у PLL всего вроде 10% изменение частоты максимум. Поэтому его, я думаю, вообще трогать не нужно. Один раз загнать при инициализации и на этом ограничиться.
« Последнее редактирование: Июль 08, 2019, 08:54:52 pm от Владимир_К »

Оффлайн Владимир_К

  • Hero Member
  • *****
  • Сообщений: 1179
Re: si5340A
« Ответ #77 : Июль 08, 2019, 10:40:47 pm »
Ну и вот, что нам пишут:
It is possible for a PLL to become unresponsive (i.e., lose lock indefinitely) when it is dynamically reprogrammed or changed via the
serial port. Reprogramming/changing the N divider does not affect the PLL. Any change that causes the VCO frequency to change by
more than 250 ppm since Power-up, NVM download, or SOFT_RST requires the following special sequence of writes. Changes to the
following registers require the following special sequence of writes:
А это означает примерно, что при изменении частоты генератора более чем на 250 ppm, возможен срыв частоты.
А вот еще более конкретно:
Changes to
output frequencies without changing the PLL settings are desired.
То есть,  изменение частоты желательно производить без изменения частоты PLL. Так что соваться туда скорее всего не следует.
Ну и алгоритм.  Скажем частота PLL 13200000000, которую мы успешно задали.   А нужно получить на выходе например 20 мгц. И как это сделать? Есть делитель, состоящий из числителя N_NUM и знаменателя N_DEN. И имеем два неизвестных. Придется одно значение, например знаменатель взять " с потолка", ну например - 536870912. Почему такое значение? Потому что это 20000000 в 16-ричной системе. Тогда числитель должен быть (13200000000/20000000)*536870912=354334801920. Имеем N_DEN=536870912, а N_NUM=354334801920. Дальше все просто.. Вот так это примерно выглядит:

/**************************** Функция управления частотой   *****************************************/

void si5340aSetFrequency(unsigned long z)
{
   //Определение переменных: pllFreq, XTALFreq, l, f, mult, num, denom, divider
     uint64_t xtalFreq = XTAL_FREQ;    
        volatile uint64_t mult;
         volatile uint64_t num;
                 volatile uint32_t denom=2147483648;
                volatile uint64_t divider_1;
          volatile uint64_t m_num;               
             volatile uint32_t m_denom = 201326592;            
               volatile uint64_t pllFreq = 13200000000;    


divider_1 = pllFreq/xtalFreq;           // Определяем значение делителя  Pll.
                                  
  if ((divider_1 & 1) != 0) divider_1--;   //  (короче делаем четным)

   pllFreq = divider_1 * xtalFreq;           // Считаем настоящее значение частоты, так как в значении делителя отброшены числа после запятой, кроме того, сделали значение четным.

      m_num = pllFreq/ m_denom;       //Значение числителя делителя PLL.          

             num=(pllFreq/z)*denom; //Значение числителя N_NUM.
             
                     setup_div(num, denom);

                      WriteByte (0x03, 0x0C, 0x01);      // Update N0
      
                        setupPLL(m_num, m_denom);

                          WriteByte (0x02, 0x3F, 0x01);      // Update M

Спать надо, может что напутал..  Завтра скорее всего буду в пути... Да, прикинул еще раз на калькуляторе.. lol22 Вроде что-то напутал. Но думаю идею поняли.
« Последнее редактирование: Июль 08, 2019, 10:53:47 pm от Владимир_К »

Оффлайн Relayer

  • Hero Member
  • *****
  • Сообщений: 1006
  • UR5FFR
Re: si5340A
« Ответ #78 : Июль 08, 2019, 11:09:11 pm »
То есть,  изменение частоты желательно производить без изменения частоты PLL. Так что соваться туда скорее всего не следует.
Ну и алгоритм.  Скажем частота PLL 13200000000, которую мы успешно задали.   А нужно получить на выходе например 20 мгц. И как это сделать? Есть делитель, состоящий из числителя N_NUM и знаменателя N_DEN. И имеем два неизвестных. Придется одно значение, например знаменатель взять " с потолка", ну например - 536870912. Почему такое значение? Потому что это 20000000 в 16-ричной системе. Тогда числитель должен быть (13200000000/20000000)*536870912=354334801920. Имеем N_DEN=536870912, а N_NUM=354334801920.
Фтопку такое решение. ГУН делить надо ЦЕЛОЧИСЛЕННО. А вы предлагаете использовать дробный коэф.деления. Ну вот и получите фазовые шумы выше чем надо.
В любой схеме есть как минимум одна ненужная деталь :)

Оффлайн Владимир_К

  • Hero Member
  • *****
  • Сообщений: 1179
Re: si5340A
« Ответ #79 : Июль 09, 2019, 12:46:39 am »
А вы предлагаете
А Вы что предлагаете? Пример в студию lol22.

Оффлайн ra0ahc

  • Hero Member
  • *****
  • Сообщений: 4872
  • Сергей, RD6AH
Re: si5340A
« Ответ #80 : Июль 09, 2019, 07:34:22 am »
Генератор легко меняет и плл и делители.
Да да, я знаю, у меня ничего не получится )))

Оффлайн Relayer

  • Hero Member
  • *****
  • Сообщений: 1006
  • UR5FFR
Re: si5340A
« Ответ #81 : Июль 09, 2019, 08:49:46 am »
Генератор легко меняет и плл и делители
При чем тут это? Использовать этот кипятильник только затем, чтобы дробными коэффициентами довести его до уровня 5351 - это нонсенс.
В любой схеме есть как минимум одна ненужная деталь :)

Оффлайн ra0ahc

  • Hero Member
  • *****
  • Сообщений: 4872
  • Сергей, RD6AH
Re: si5340A
« Ответ #82 : Июль 09, 2019, 09:07:39 am »

я проверил у меня целочисленное использование генератор ставит.
 * 0x0A04[4:0]   N_PIBYP              1                  0x01

Если нужно все коэфф менять то нужно ставить дробное.

Информация набирается.
« Последнее редактирование: Июль 09, 2019, 09:44:41 am от ra0ahc »
Да да, я знаю, у меня ничего не получится )))

Оффлайн ra0ahc

  • Hero Member
  • *****
  • Сообщений: 4872
  • Сергей, RD6AH
Re: si5340A
« Ответ #83 : Июль 09, 2019, 09:08:47 am »
Использовать этот кипятильник только затем

он теплый. правильная печатка и всё ок )))
Да да, я знаю, у меня ничего не получится )))

Оффлайн Владимир_К

  • Hero Member
  • *****
  • Сообщений: 1179
Re: si5340A
« Ответ #84 : Июль 09, 2019, 09:51:27 am »
Генератор легко меняет и плл и делители.
То, что Вы выделили красным, это делители PLL, а оппонент очевидно (хотя не уверен) имел ввиду N-делитель.
 
Приведенное  мной выражение в 77 посту не годится, а именно вот эти строки:
m_num = pllFreq/ m_denom;       //Значение числителя делителя PLL.
num=(pllFreq/z)*denom; //Значение числителя N_NUM.
 
Это так, экспромтом выдал. Это годится для "красивых" чисел.  Надо уходить от деления.. А так оно работает, но есть серьезная погрешность. И еще один момент учтите. При расчете делителей PLL однажды пропал сигнал. Частота PLL по расчету тогда была 13120000000, да плюс погрешность генератора. И думается мне, что я попал на частоту на которой генератор не запустился (нет захвата или что там может быть). Поэтому загрузил  значение M_NUM и M_DEN напрямую.  Может генератор вовсе не 80 мгц, а далеко, может погрешность при расчете коэффициентов. Возможно проще  вычислить для каждого диапазона дельту для N_NUM. Потом ее прибавлять или вычитать от какой-то центральной частоты. В общем, пока не совсем очевиден путь. Кстати есть и еще один режим - увеличивать или уменьшать частоту в микросхеме можно дергая одну ногу...
« Последнее редактирование: Июль 09, 2019, 10:04:26 am от Владимир_К »

Оффлайн ra0ahc

  • Hero Member
  • *****
  • Сообщений: 4872
  • Сергей, RD6AH
Re: si5340A
« Ответ #85 : Июль 09, 2019, 10:13:43 am »
При расчете делителей PLL однажды пропал сигнал
Это превышен ppm, там об этом написано что генерация срывается .

Я тут начитался.... при SOFT_RST вообще вся генерация срывается на короткий промежуток (щелчок будет если напрямую использовать без синтезатора) 

Я тут провел эксперимент (пока в экселе) если изменять N0_NUM на одну единицу, Fout меняется на... 11999999,9999898Гц с 12МГц
Да да, я знаю, у меня ничего не получится )))

Оффлайн Владимир_К

  • Hero Member
  • *****
  • Сообщений: 1179
Re: si5340A
« Ответ #86 : Июль 09, 2019, 10:37:08 am »
Я тут начитался.... при SOFT_RST вообще вся генерация срывается
Такие щелчки я наблюдал в синтезаторе на Si5351A. Там в библиотеке был Reset PLL. Когда его убрал щелчки прекратились, на работу синтезатора не повлияло.

Оффлайн ra0ahc

  • Hero Member
  • *****
  • Сообщений: 4872
  • Сергей, RD6AH
Re: si5340A
« Ответ #87 : Июль 09, 2019, 10:52:39 am »
Владимир, я не могу понять, NUM  в каких пределах менять можно?  0..44бит? Тогда Fout может от 0.1..13.5ГГц при изменении только NUM и при этом NUM  не должна быть меньше чем 10*DEN
« Последнее редактирование: Июль 09, 2019, 10:55:16 am от ra0ahc »
Да да, я знаю, у меня ничего не получится )))

Оффлайн Relayer

  • Hero Member
  • *****
  • Сообщений: 1006
  • UR5FFR
Re: si5340A
« Ответ #88 : Июль 09, 2019, 10:58:34 am »
Такие щелчки я наблюдал в синтезаторе на Si5351A. Там в библиотеке был Reset PLL. Когда его убрал щелчки прекратились, на работу синтезатора не повлияло.
PLL надо ресетить если меняется коэф. деления в петле PLL. Если меняется выходной делитель - то не надо. Поэтому код должен быть "умным" и ресетить PLL только тогда кода надо (у меня для 5351 и 570 к примеру так и сделано)
оппонент очевидно (хотя не уверен) имел ввиду N-делитель
Да, оменно о нем и идет речь. Он должен быть целочисленный
В любой схеме есть как минимум одна ненужная деталь :)

Оффлайн Владимир_К

  • Hero Member
  • *****
  • Сообщений: 1179
Re: si5340A
« Ответ #89 : Июль 09, 2019, 11:29:11 am »
Владимир, я не могу понять, NUM  в каких пределах менять можно?  0..44бит?
Да нет, почему только 0..44. Сколько угодно в пределах разрядности числа. Главное не уйти от частоты на которой способен генерить PLL. То есть, это зависит от тактовой частоты. Исходя из нее надо считать делитель так чтобы частота на выходе PLL, была где-то в районе 13200000000 (честно говоря я не нашел в даташите сколько точно и в каких пределах, но кто-то на CQHam вроде привел цифры 10%, но мне кажется это много). Короче говоря, я нигде не видел, чтобы было сказано, что частота PLL, была например 14000000000....12000000000. Ну и еще. Как я понял из даташита, нельзя резко менять частоту PLL. То есть при однократном изменении на 250 pmm и более. Для захвата нужно время, хотя не знаю, что там за структура. Скорее обычный LC? Опять же -есть такое понятие как полоса захвата (если к этой структуре ее можно прицепить, хотя наверно можно...)
Как я писал выше, с рассчитанной программой частотой PLL 13120000000 сигнала на выходе не было. То есть, очевидно я ушел в сторону. Может из-за частоты кварцевого генератора. В Si5351A таких случаев не было, там работа генератора была возможна от 600 до 900 мгц, то есть пределы большие были.
надо наверное поиграться с программой ClockBuilder. Что он там выдает, при разных заданных значениях?
В м/с есть еще одна фишка - мониторинг узлов (например LOS XAXB, то есть отсутствие тактовой частоты на входе фазового детектора). Таким образом, можно запрограммировать микросхему так, что она будет выдавать признак (флаг) в регистре, где именно пропал сигнал. Причем можно вывести не только в регистр (мне проще туда, так как дорожки от нужного вывода у меня на плате нет), но и на ножку микросхемы. Но это я особенно не изучал. Так мельком. Думал воспользоваться если не будет выхода, но оно не понадобилось. Да и так времени много уходит. Я не могу заниматься программированием ради самого программирования. Хотя это занимательно, но не более того.
« Последнее редактирование: Июль 09, 2019, 11:37:54 am от Владимир_К »