PDA

Просмотр полной версии : Качество сигнала SI5351



cqdx
10.12.2018, 14:06
Добрый день! Подскажите, кто применял модуль SI5351, как данная микросхема в плане спуров при ПЧ 9мгц?

sgk
10.12.2018, 15:24
Посмотрите спуры на сайте где были измерения
http://www.ra3apw.ru/proekty/si5351-spectrum/

cqdx
10.12.2018, 16:16
Что то как то по качеству сигнала не очень. Даже если сравнивать с AD9850 :cry:

igor 2015
10.12.2018, 16:40
Я сравнивал между собой. Выигрыш отдал как ни странно ad9834 с генератором 75 МГц, после в порядке ухудшения ad9850,si5351

Vlad9
10.12.2018, 16:51
Тут http://www.cqham.ru/forum/showthread.php?36792-%CF%F0%E8%B8%EC%ED%E 8%EA-quot-%C1%C5%CB%CA%C0!-quot-(%EF%F0%FF%EC%EE%E3% EE-%EF%F0%E5%EE%E1%F0%E 0%E7%EE%E2%E0%ED%E8% FF)/page10
Олег рассказывает про особенности si5351

RXDX
10.12.2018, 17:24
На моё сообщение в указанной выше теме лучше не обращать внимание.
В минувшие выходные мне удалось победить спуры -(30...40) дБ корректировкой алгоритма.
Как и всё остальное, микросхему необходимо "правильно готовить".
За основу взял алгоритм из Network Analyzer от Андрея UR5FFR.
Сейчас возможности моего обзорного приёмника SDR Play RSP1A (ДД = 73 дБ) являются ограничивающим фактором.
Завтра и в последующие дни могу выложить картинки для определённых частот генерации.

Vlad9
10.12.2018, 18:23
Если можно об алгоритме расскажите.

RXDX
11.12.2018, 13:34
За основу взял алгоритм Network Analyzer от Андрея UR5FFR.
Код (лично для меня) довольно сложный, местами трудночитаемый. Поэтому решил пойти по другому пути: посмотреть информацию, передаваемую на SI5351A.Так как в Ардуино нет отладчика, то пришлось организовать вывод информации через монитор последовательного порта. Интересовал режим с одним активным выходом CLK0.
Здесь рассмотрен этот частный случай.

На первом этапе в регистры 16,17,18 записывается 128.

reg 16,data 128
reg 17,data 128
reg 18,data 128

Далее производится сброс PLLA и PLLB.

reg 177,data 160

Теперь можно устанавливать требуемые коэффициенты деления исходя из требуемой выходной частоты и частоты опорного кварца.
Пример для частоты кварца 27003000 Гц, выходной частоты 69200000 Гц

reg 26,data 255
reg 27,data 255
reg 28,data 0
reg 29,data 13
reg 30,data 96
reg 31,data 244
reg 32,data 96
reg 33,data 224

reg 42,data 0
reg 43,data 1
reg 44,data 0
reg 45,data 4
reg 46,data 0
reg 47,data 0
reg 48,data 0
reg 49,data 0

При первой установке частоты необходимо включить CLK0
reg 16,data 76
И выполнить сброс PLLA
reg 177,data 32.

Готово.

Дальнейшие операции по смене частоты сводятся к установке коэффициентов деления (регистры 26-33, 42-49) и сбросу PLL (регистр 177).
Если при последующей новой установке частоты не происходит изменения коэффициента деления Multisynth, то запись регистров 42-49 и сброс PLL не требуется.
Достаточно только записать значения в регистры 26-33.
В алгоритм вычисления коэффициентов не вникал.
Куда более читаемо он описан на Баскоме в проекте генератора от ZL2PD.

Интересный момент, что регистры 26-33 (аналогично 42-49) записываются в S5351A за один сеанс записи. Передаётся I2C адрес сишки, затем адрес регистра, затем 8 байт данных. Каждый последующий байт данных соответствует следующему по номеру регистру. Штатная ли это возможность протокола I2C, либо "фишка" SI5351A - не знаю. Как минимум, экономит трафик по I2C.

Добавлено через 6 минут(ы):

Повторюсь, что рассмотрен частный случай, когда используется один выход CLK0 и встроенный кварцевый генератор с внешним кварцем.
В этом случае нас устраивает установки ряда регистров по умолчанию.
В других случаях необходимо обращать внимание на заполнение регистров 3,15,24,149,183,187.

sgk
11.12.2018, 13:35
Завтра и в последующие дни могу выложить картинки для определённых частот генерации.
Если можно, то картинки для частот в районе 3,5 МГц для сравнения с ламповыми ГПД.

alex_m
11.12.2018, 13:48
чтото у вас на картинках сильно грязный сигнал для сишки.
Вот моя сишка на модуле адафруит (пины сигналов не распаяны, чтобы не ловили помехи, подключение через SMA разъём), 10 МГц:
302111

Библиотека самописная.

RXDX
11.12.2018, 14:00
По поводу вычисления коэффициентов. Возьмём пример для частоты кварца 27003000 Гц, выходной частоты 69200000 Гц.

1. Делим 900000000 на выходную частоту 900000000 / 69200000 = 13,0057.....
2. Полученное значение уменьшаем до ближайшего чётного числа. В данном примере - 12. Это коэффициент деления (КД) Multisynth.
3. Умножаем выходную частоту на КД. Получаем частоту генератора с PLL: Fpll = 69200000 * 12 = 830400000.
4. Получаем коэффициенты a и b для выполнения равенства: Fpll = Fxtal * (a + b/1048575). Где Fxtal - частота опорного кварца. a и b - целые числа.

Fpll/Fxtal = 830400000 / 27003000 = 30.75213865....

От полученного частного берем целую часть.Это a. В данном случае оно равно 30.
Вычисляем b = 0.75213865 *1048575 =788673.8. Округляем до целых.

Полученное значение КД Multisynth пакуется в регистры 42...49, значения a и b - в регистры 26...33.

alex_m
11.12.2018, 14:12
вот мой вариант расчёта коэффициентов (спектр 10 МГц с ним показан выше).
За основу был взят алгоритм расчёта антенного анализатора EU1KY.
Что там менялось уже не помню, давно было дело.



void si5351_calc_info(uin t32_t freq, struct si5351_pll_info* pi, struct si5351_msx_info* mi)
{
const uint32_t SI5351_PLL_VCO_MAX = si5351_xtal * 36;
const uint32_t SI5351_MULTISYNTH_MI N_FREQ = si5351_xtal / 25;
const uint32_t SI5351_MULTISYNTH_DI VBY4_FREQ = si5351_xtal * 6;
const uint32_t SI5351_PLL_C_MAX = 1048575;
const uint32_t SI5351_PLL_B_MAX = (SI5351_PLL_C_MAX-1);

uint32_t a, b, c;
uint64_t nom, den;
double divpll, divms, fpll, k;
uint8_t rdiv = SI5351_OUTPUT_CLK_DI V_1;
bool div4 = false;

if (freq >= ((si5351_xtal * 9) >> 1))
{
//Use output multisynth constant divider = 4,
//calculate PLL feedback multisynth to set desired frequency
if (freq >= SI5351_MULTISYNTH_DI VBY4_FREQ)
divms = 4.0;
else
divms = 6.0;
divpll = (freq / ((double)si5351_xtal )) * divms;
//Calculate a, b, c (pll feedback multisynth parameters)
a = (uint32_t)floor(divp ll);
b = 0;
c = 1;
k = divpll - a;
nom = (uint64_t)(k * 0x6FFFFFFFFFFFFFFFul l);
den = 0x6FFFFFFFFFFFFFFFul l;
rational_best_approx imation(nom, den, SI5351_PLL_B_MAX, SI5351_PLL_C_MAX, &b, &c);
fpll = si5351_xtal * ((double)a + (double)b / (double)c);
}
else
{
//Set PLL to maximum frequency, calculate output multisynth divider

//Handle frequencies below 1 MHz
if (freq < (SI5351_MULTISYNTH_M IN_FREQ / 64))
rdiv = SI5351_OUTPUT_CLK_DI V_128;
else if (freq < (SI5351_MULTISYNTH_M IN_FREQ / 32))
rdiv = SI5351_OUTPUT_CLK_DI V_64;
else if (freq < (SI5351_MULTISYNTH_M IN_FREQ / 16))
rdiv = SI5351_OUTPUT_CLK_DI V_32;
else if (freq < (SI5351_MULTISYNTH_M IN_FREQ / 8))
rdiv = SI5351_OUTPUT_CLK_DI V_16;
else if (freq < (SI5351_MULTISYNTH_M IN_FREQ / 4))
rdiv = SI5351_OUTPUT_CLK_DI V_8;
else if (freq < (SI5351_MULTISYNTH_M IN_FREQ / 2))
rdiv = SI5351_OUTPUT_CLK_DI V_4;
else if (freq < (SI5351_MULTISYNTH_M IN_FREQ))
rdiv = SI5351_OUTPUT_CLK_DI V_2;


divpll = ((double)SI5351_PLL_ VCO_MAX) / ((double)si5351_xtal );
//Calculate a, b, c (pll feedback multisynth parameters)
a = (uint32_t)floor(divp ll);
b = 0;
c = 1;
k = divpll - a;
nom = (uint64_t)(k * 0x6FFFFFFFFFFFFFFFul l);
den = 0x6FFFFFFFFFFFFFFFul l;
rational_best_approx imation(nom, den, SI5351_PLL_B_MAX, SI5351_PLL_C_MAX, &b, &c);
fpll = si5351_xtal * ((double)a + (double)b / (double)c);
divms = fpll / (double)(freq * (1 << rdiv) * (div4 ? 4:1));
}
pi->a = a;
pi->b = b;
pi->c = c;


// Calculate a, b, c (output multisynth parameters) from divms calculated above
b = 0;
c = 1;
if (divms == 4.0)
{
a = 4; //MS divider is integer
}
else if (divms == 6.0)
{
a = 6; //MS divider is integer
}
else
{
//MS divider is fractional
a = (uint32_t)floor(divm s);
k = divms - a;
nom = (uint64_t)(k * 0x6FFFFFFFFFFFFFFFul l);
den = 0x6FFFFFFFFFFFFFFFul l;
rational_best_approx imation(nom, den, SI5351_PLL_B_MAX, SI5351_PLL_C_MAX, &b, &c);
}
mi->a = a;
mi->b = b;
mi->c = c;
mi->rdiv = rdiv;
mi->divby4 = div4;
}

//
// http://en.wikipedia.org/wiki/Continued_fraction
//
void rational_best_approx imation(
uint64_t given_numerator, uint64_t given_denominator,
uint32_t max_numerator, uint32_t max_denominator,
uint32_t *best_numerator, uint32_t *best_denominator)
{
uint64_t n, d, n0, d0, n1, d1;
n = given_numerator;
d = given_denominator;
n0 = d1 = 0;
n1 = d0 = 1;
for (;;)
{
uint64_t t, a;
if ((n1 > max_numerator) || (d1 > max_denominator))
{
n1 = n0;
d1 = d0;
break;
}
if (d == 0)
break;
t = d;
a = n / d;
d = n % d;
n = t;
t = n0 + a * n1;
n0 = n1;
n1 = t;
t = d0 + a * d1;
d0 = d1;
d1 = t;
}
*best_numerator = (uint32_t)n1;
*best_denominator = (uint32_t)d1;
}

RXDX
11.12.2018, 14:13
Если можно, то картинки для частот в районе 3,5 МГц для сравнения с ламповыми ГПД.

Сергей, картинки постараюсь выложить завтра. Правда, моя техника пока не позволяет смотреть ниже - 70 дБ от максимума.
Насколько понимаю, интересует ближняя зона?
В данный момент не располагаю временем для более точных измерений, т.к. уезжаю в отпуск.
После отпуска достану с чердака HIQSDR и приёмник прямого преобразования (с SI570 в качестве гетеродина) и внешнюю звуковую карту.
С этой техникой думаю, поточнее результаты будут.

alex_m
11.12.2018, 14:27
помоемому чистота сигнала si5351 выше крыши для любительских трансиверов. Гармоники только фильтром отрезать нужно. Спуры на уровне -80 дБц получаются (при правильной разводке, нагрузке и монтаже естественно).
Если нужно чище, тогда si570, но для любительских конструкций, это имхо уже перебор.

RXDX
11.12.2018, 14:57
Гармоники только фильтром отрезать нужно.

Почему необходимо фильтровать гармоники? Ведь при использовании в качестве гетеродина смесителя, гармоники всё равно возникнут на нелинейностях смесителя. Вопрос не обязательно к Вам.

Vlad9
11.12.2018, 17:29
По поводу вычисления коэффициентов. Возьмём пример для частоты кварца 27003000 Гц, выходной частоты 69200000 Гц.
Выход делим кратно частоте, а герцы подстраиваем двигая частоту ГУНА который на 900МГц по даташиту должен работать.
Я правильно понял?
Кстати у Юрия в антенном анализаторе хорошие библиотеки по SI5351.

alex_m
11.12.2018, 17:58
Кстати у Юрия в антенном анализаторе хорошие библиотеки по SI5351.

код, что я выше привёл - это и есть на основе алгоритма расчёта Юрия в антенном анализаторе, только у него там мелкие неточности были из-за чего при отличии частоты кварца от ровно 27 МГц, коэффициенты немного неточно считались. Я это дело почистил и отделил код расчёта от записи регистров.

RXDX
12.12.2018, 10:51
Выход делим кратно частоте, а герцы подстраиваем двигая частоту ГУНА который на 900МГц по даташиту должен работать.
Я правильно понял?

Да, правильно. Частота ГУНа может находиться в пределах 600...900 МГц.

На текущий момент уже много наработок по программированию "сишки".
При отсутствии возможности/желания/времени можно ими пользоваться как стандартной библиотекой, не вникая в суть алгоритма.
Например, при использовании кода Андрея (UR5FFR) код управления "сишкой" вынесен в отдельные модули (файлы).
Достаточно их прицепить и из основного модуля вызывать функцию setfreq(freq1,freq2, freq3).

alex_m
12.12.2018, 11:16
Да, правильно. Частота ГУНа может находиться в пределах 600...900 МГц.

частоту PLL можно задавать в гораздо более широких пределах, но работоспособность будет зависеть от параметров мультисинта.

RXDX
12.12.2018, 11:49
Картинки приема сигнала приёмником SDRPlay RSP1A.
Источником является генератор на SI5351A из состава Network Analyzer UR5FFR.
В прошивке включен только выход СLK0.

Помимо основной частоты, на спектре присутствуют выбросы (спуры) минус (45..65) дБ от максимума. Это выбросы скорее всего, являются фантомными. Приёмник имеет зеркальные каналы. Одним словом, вещь в себе. Другими средствами подтвердить наличие выбросов не удалось. При перестройке частоты приёмника выбросы ведут себя другим образом, чем основной сигнал. Единственно, в чём есть уверенность - это "горбы" плюс-минус 50 кГц по уровню -70 дБ.

Подчеркну, что с используется встроенный генератор опорной частоты с внешним кварцем 27 МГц типа "лодочка". Питание SI5351A по USB через стабилизатор AMS1117-3.3. Приёмник также питается по USB. То есть, никаких мер класса "State of Art" принято не было.

Конечно, сетап далёк от идеала. Но и он показывает, что по уровню - (60...70) дБ проблем нет.

Для частот 3.5 и 39 МГц сделаны картинки в ближней зоне, насколько это возможно.

30219030219130219230 21933021943021953021 96302197

alex_m
12.12.2018, 12:17
Если интересует чистота сигнала вблизи несущей, вот 10 МГц со спаном ±100кГц и ±10 МГц:
302201 302202

RBW = 71.4 Гц

Для тестов использовался вот этот модуль:
https://learn.adafruit.com/adafruit-si5351-clock-generator-breakout/overview
302203 302204

Подключение через SMA разъём, пины 0,1,2 на гребёнке не запаивались, чтобы не ловили помех. Включен только один выход CLK0.
Маркировка si5351: 5351 BLC2 702

sgk
12.12.2018, 13:54
Для частот 3.5 и 39 МГц сделаны картинки в ближней зоне, насколько это возможно.

Спасибо. Картинки 5351 можно сравнить с ламповым ГПД.

Глазунов
12.12.2018, 19:36
с ламповым ГПД
+500!


сигнала вблизи несущей
Если возможно, то можно это сделать на Ваших приборах?
Дабы не возникало вопросов по измерениям!

UA9LKK
12.12.2018, 21:31
Подскажите, пожалуйста, на выходе SI5351 какая форма сигнала должна быть: синус или меандр? А то у меня на выходе синтезатора Microb 4 на частотах от 1.8 до 29 МГЦ больше напоминает меандр, но левый скат с нарастанием, а с 50 до 70 МГц чистый синус.

rx3apf
12.12.2018, 22:42
Прямоугольник, с фронтами порядка 1 ns при емкости нагрузки 5 pF (если верить даташиту). Если не соответствует - смотрите компенсацию пробника скопа. Ну и полоса канала скопа должна быть соответствующая. Если 100 MHz - ничего кроме синуса и не увидите.

alex_m
13.12.2018, 10:20
Если возможно, то можно это сделать на Ваших приборах?
Дабы не возникало вопросов по измерениям!

так это на моих приборах и есть. Вопросы могут возникать относительно фантомности спуров (когда спуры появляются за счёт недостаточной точности обработки или алиасов). Если-же спуров вообще нет, значит их действительно нет.


Подскажите, пожалуйста, на выходе SI5351 какая форма сигнала должна быть: синус или меандр?

меандр конечно, с фронтом не хуже 1 нс.
На моём модуле 10 МГц и 50 МГц выглядят вот так:
302275 302277

видно небольшие искажения переднего фронта - это искажения вызванные отраженной волной в коаксиальном кабеле (50 см RG316) из-за небольшого несоответствия импеданса 50-ти омам на частотах 500-1000 МГц

Глазунов
13.12.2018, 11:49
так это на моих приборах и есть.
Я про результаты измерений лампового генератора, о чём говорил SGK.

alex_m
13.12.2018, 12:01
Глазунов, лампового генератора у меня нету :-(

veso74
13.12.2018, 12:36
Общеизвестно, что параметры PLL напрямую зависят от параметри опорного генератора.

Интересно для сравнения спектров: alex_m, можете включить внешний кв. генератор 25 MHz к Si5351 (напр. на CMOS Unbuffered Inverter)? (Или изменение будет, но результат будет за пределами изм. уреда?)