www.kn34pc.com

Форум на силистренските радиолюбители
Дата и час: 23 Сеп 2018, 01:57

Часовете са според зоната UTC + 2 часа [ DST ]




Напиши нова тема Отговори на тема  [ 7 мнения ] 
Автор Съобщение
МнениеПубликувано на: 27 Авг 2018, 14:43 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 825
Местоположение: Силистра
За определяне на Feedback Multisynth Divider (напр. при целочислен и дробен Output Multisynth Divider),
е нужен коефициент на делене a + b/c.

При изчислението се получава
Код за потвърждение:
целочислена част:
а = Fvco / Fxtal;
и дробна:
b/c = Fvco % Fxtal;

При това, че c e с максимална стойност 1048575 (или 0x000FFFFF), то b/c трябва да мащабира.

В споделени програмни кодове за управлене на Si5351 забелязвам еднакви фрагменти:
c придобива ВИНАГИ максималната стойност 0x000FFFFF, а b се преичислява:

b/c = ((b * 1048575) / c) / 1048575

При разчет за мое си управление опитах преди това действие да съкратя дробта b/c.
forum kn34pc.com / Arduino: съкращаване на дроб

което е не винаги изпълнимо (зависи главно от това колко ще се "надроби" честотата на XTAL до "просто число") и ако е нужно след това: да се мащабира.
При изменение на честотата в любителските обхвати през 10-100-1000 Hz, съкращаването винаги се случва и мащабиране не е необходимо (c < 1048575).

b, c ca коефициенти на делене. Това, че c е винаги с максималната си стойност (в първия случай) или е по-ниска във втория (при съкращаване, а дори и четна понякога):
Как това влияе на изходния вигнал? Фазови шумове, jitter, неточност на изходната честота?
Най-малкото да го оставям или (ако не влияе) да го махам в програмия си код за по-малко обем заета памет (82 байта) :smt069

Има "магия" и тук (както в цялата електроника и програмиране) :biggrin .


Върнете се в началото
 Профил  
 
МнениеПубликувано на: 27 Авг 2018, 15:11 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 825
Местоположение: Силистра
Защо ми е интересен горния въпрос:
С моите си кодове вече определих слухово ( :cool ), че fractional mode на другия делител (изходния) е със странични ефекти и е крайно нежелателен (и остава единствен поне за един изход само в случая при три изходни сигнала. При един или два изхода: делителят може да си е в integer mode)).
-----
По инерция в писането, неточност, недоглеждане и др., съвсем леко (с разлика от няколко бита! :mocking) от добре работещ чип, с чист изходен сигнал, може да зазвучи "криво", "калпаво", с висок jitter, неточност на честотата и др. Върви класифицирай чипа после "ставащ/не ставащ". И се появяват легенди из форумите :biggrin ...
-----
Добре е, че това е взето под внимание в споделените кодове за три изхода (NT7C, UR5FFR), а други работят само в integer mode (qrp-labs, DK7IH) за един или за два изхода :yes .


Върнете се в началото
 Профил  
 
МнениеПубликувано на: 27 Авг 2018, 22:15 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 825
Местоположение: Силистра
NT7C мащабира с 1000000. Защо ли?

Редът с 1048575 е в коментар, а в v2.1.2 и по-ранни версии е 1000000ULL.

Код за потвърждение:
//#define RFRAC_DENOM ((1L << 20) - 1)
#define RFRAC_DENOM 1000000ULL
...
// Find best approximation for b/c = fVCO mod fIN
// denom = 1000ULL * 1000ULL;
// lltmp = freq % ref_freq;
// lltmp *= denom;
// do_div(lltmp, ref_freq);

//b = (((uint64_t)(freq % ref_freq)) * RFRAC_DENOM) / ref_freq;
...
b = (((uint64_t)(freq % ref_freq)) * RFRAC_DENOM) / ref_freq;
c = b ? RFRAC_DENOM : 1;
...


Върнете се в началото
 Профил  
 
МнениеПубликувано на: 28 Авг 2018, 19:53 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 825
Местоположение: Силистра
Нали съм си Тома-неверни, та всичко проверявам аз ... :mail

Първоначално на лист хартия, после документирам в текстов файл :comp , да не го загубя нейде ... :rolleyes
----------------------------
Ръчно изчисление на коефициентите на Si5351:

Входна желана честота:
Fin = 14 200 000 Hz

Междинна честота:
Fif = 9 001 500 Hz

изходна честота от осцилатора:
Fclk0 = Fin + Fif = 14 200 + 9 001 500 = 23 201 500 Hz
----------------------------
Разчет на Si5351:

Честота на кварцовия резонатор:
Fxtal = 25 000 192 Hz

Максимална честота на VCO на Si5351:
Fvco max = 900 000 000 Hz

TMP = само цялата част от (Fvco max / Fclk0) = 900 000 000 / 23 201 500 = 38,79059543 ...

само цялата част:
TMP = 38

Четно е (не е нужно да вземаме с 1 по-малко, за да стане четно)

Fvco = TMP * Fclk0 = 38 * 23 201 500 = 881 657 000

a + b/c = Fvco / Fxtal, или

а = Fvco / Fxtal (само цялата част) = 881 657 000 / 25 000 192 = 35,266009 ... = 35
b/c = Fvco % Fxtal = 881 657 000 % 25 000 192 (само остатъка) = (881 657 000 - (35 * 25 000 192)) / 25 000 192 = 6650280 / 25 000 192

което трябва да мащабираме до Cmax от (2 ^ 20 - 1) или до 1048575

b/c = 6650280 / 25 000 192

b = (b * 1048575) / c = (6650280 * 1048575) / 25 000 192 (целочислено) = 278930,55185... = 278930
c = 1048575

или истинска честота:
Fclk0 реална = ((a + b/c) * Fxtal) / TMP = ((35 + 278930 / 1048575) * 25 000 192) / 38 = 23201499,653754657009450... Hz

разлика:
Fралика = Fискана - Fизходна = 23 201 500 - 3201499,653754657009450... = 0,346245342990549... Hz от закръгления

Уха ...., супер :smile


Върнете се в началото
 Профил  
 
МнениеПубликувано на: 28 Авг 2018, 19:59 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 825
Местоположение: Силистра
После (с помощта на добрия стар помощник в изчисленията: Ексел) проверих предишната си проверка от листа :crazy:

Относителната математична грешка ме удовлетворява напълно. Тя ще е по-висока заради ограничената разрядност на регистрите (x32b, x64b).
При 64 битов рег. (за преизчислението на b/c) и за другите: 32 битови, мисля, че няма да нарастне и от float нямам нужда.

Въпросът с нуждата от закръгление заради математичната точност смятам за себе си за решена: не ми е необходима по-висока.

Остава за мен неразгадан въпроса за влиянието (ако има такова) на постоянния коефициент на делене на делителя C към "чистотата" на спектъра
и нуждата от "съкращаване на дроб (виж forum kn34pc.com / Arduino: съкращаване на дроб)

жълто: желана изходна честота [Hz]
зелено: желана хетеродинна честота [Hz]
светло-синьо: кварцов резонатор/осцилатор към Si5351 [Hz]
тъмно-синьо: реална хетеродинна честота [Hz]
червено: ралика [Hz]


Прикачени файлове:
si5351_calc_20m.gif
si5351_calc_20m.gif [ 27.89 KiB | Прегледано 154 пъти ]
si5351_calc_wsg.zip [2.21 KiB]
13 пъти
Върнете се в началото
 Профил  
 
МнениеПубликувано на: 08 Сеп 2018, 11:16 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 825
Местоположение: Силистра
форум cqham.ru, Тема: Синтезатор Si5351A, никто не пробовал?

Паралелна тема във форума на CQHAM.RU


Върнете се в началото
 Профил  
 
МнениеПубликувано на: 08 Сеп 2018, 11:19 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 825
Местоположение: Силистра
За изходен сигнал с нисък jitter се препоръчва integer делител на Multisynt.

В ИС има PLLA и PLLB. При един или два изхода, всеки изход си заема PLL-а и е в integer mode.

Този случай е реализируем лесно:
При два изхода (CLK0 и CLK1): CLK0 си заема PLL0, CLK1 си заема PLL1. Iinteger mode.
При два изхода (CLK0 и CLK2): CLK0 е на PLL0, CLK2 превключва на PLL1 и отново двата Multicynt-а са в integer mode.

В посочената тема коментирам единствено "пълноценния вариант" на Si5351 с три изхода (до 8 изхода при Si5351B и Si5351C).
Третия изход трябва да е във fractional mode (няма друг начин).

Ако потребителя избере точно той да е VFO, доп. влошаване на jitter е неизбежно. Колко е определящо това, конструктора си решава.

Интересува ме нужен ли е ресет при широколентово изменение на честотата.

При reset на PLLA/PLLB след всяко изменение на честотата, по документация тогава изходния сигнал прекъсва за 10 ms.
В приемника би трябвало да се чува като хрип, припукване и др.

Отказал съм се от reset на PLL в тесен честотен диапазон, а оставих (засега) reset само при голям скок (x,xx/xx.xx MHz в xxx,xx MHz и обратно).


Върнете се в началото
 Профил  
 
Покажи мненията от миналия:  Сортирай по  
Напиши нова тема Отговори на тема  [ 7 мнения ] 

Часовете са според зоната UTC + 2 часа [ DST ]


Кой е на линия

Потребители, разглеждащи този форум: 0 регистрирани и 1 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
cron
Форумът се задвижва от phpBB® Forum Software © phpBB Group
Преведено от yarnaudov.com