Доброго дня, шановне товариство!
Прошу про допомогу.
Вже майже півроку (з перервами) борюся з сабжевим синтезатором частоти. Не робить!
Днями спалив чергову мікросхему. Розумію, що без допомоги досвідченіших радіоаматорів не обійтися.
Отже, мета (на поточний момент) - отримати генерацію на стабільній частоті 133.3 МГц.
Керований напругою генератор (VCO) зібрано на МС3362 (далі - МС), частотою керує вбудований варикап - напруга управління
подається на ногу 23 МС. Нога 20 МС - буферизований вихід на 6 ногу LMX2306 (далі - ПЛЛ).
На 8 ногу ПЛЛ подається частота від зразкового генератора (OSC) 12МГц. Всередині ПЛЛ частоти VCO і OSC діляться
відповідними подільниками до 5000Гц і подаються на фазовий детектор.
Останній, в залежності від знаку й величини відхилення, видає струмовий сигнал на ногу 2 ПЛЛ, заряджаючи/розряджаючи
накопичквальну ємність, напруга на якій керує варикапом. Таке от коло регулювання.
ПЛЛ керується трьома регистрами - функціональним (для налаштування загальних параметрів) і двома подільниками
R і N для OSC і VCO відповідно. Вхідний регистр зсуву ПЛЛ заповнюються послідовно, встановлюючи дані на вхід
Data, строб на вхід Clk. По заповненню 21 біту строб LE записує дані в один з трьох регістрів, що вказані вище
(в залежності від двох молодших розрядів вхідного регистру зсуву).
Що маємо.. ПЛЛ "заводиться" й гонить вихід в плюс до максимуму 5В. Дивлюся частоту на компі через RTL-SDR "свисток"
в програмі SDRSharp. Тимчасово ставлю накопичувальну ємність С6 100мкФ, щоб спостерігати за процесом регулювання.
Бачу, як частота VCO біжить зниху вверх , пробігає відмітку 133.3 й побігла далі до 136 з копійками..
Тобто, регулятор не зупиняється на точці стабілізації.
Думав, може рівень на виході МС низький, зробив підсилювач на двох BF970 (ЗБ-ЗК) - не допомогло.
В інтернеті передививсь купу схем і коду. Наче, роблю все те саме - не робить і все..
Даташити прошерстив, майже напам"ять вивчив..
ПЛЛки купував як на алі (2 з 5 робочі) так і в двох перевірених магазинах.
Прикладаю тестовий код і схему на поточний момент.
Код:
//PLL LMX2306 initialization to VCOfreq = 133.3MHz, OSCfreq = 12.0MHz
#include <avr/io.h>
#define F_CPU 8000000
#include <util/delay.h>
#define clk_pulse {_delay_us(2); PORTC |= (1 << PORTC3); _delay_us(2); PORTC &= ~(1 << PORTC3);}
#define le_pulse {_delay_us(2); PORTC |= (1 << PORTC1); _delay_us(2); PORTC &= ~(1 << PORTC1);}
void Send_command(char Pre, long Value, char Cmod);
void Init_pll(void);
int main(void)
{
Init_pll();
while (1)
{
}
}
void Send_command(char Pre, long Value, char Cmod)
{
signed char i;
//bit 21
if(Pre) PORTC |= (1 << PORTC2);
else PORTC &= ~(1 << PORTC2);
clk_pulse;
//bit 3 to 20 (value)
for(i = 17; i>=0; i--)
{
if((Value >> i) & 1) PORTC |= (1 << PORTC2);
else PORTC &= ~(1 << PORTC2);
clk_pulse;
}
//bit 1-2 (mode)
for(i = 1; i>=0; i--)
{
if((Cmod >> i) & 1) PORTC |= (1 << PORTC2);
else PORTC &= ~(1 << PORTC2);
clk_pulse;
}
le_pulse;
}
void Init_pll(void)
{
DDRC |= (1 << PORTC1);//PORTC bit 1 as output (2306 LE)
DDRC |= (1 << PORTC2);//PORTC bit 2 as output (2306 Data)
DDRC |= (1 << PORTC3);//PORTC bit 3 as output (2306 Clock)
PORTC &= ~(1 << PORTC1);// unset PORTC bit 1
PORTC &= ~(1 << PORTC2);// unset PORTC bit 2
PORTC &= ~(1 << PORTC3);// unset PORTC bit 3
Send_command(0, 2400, 0);//R reg 12000000/2400 = 5000Hz reference
Send_command(0, 36, 3);//function reg initialization 36 polarity+ 04 polarity-
Send_command(0, 106628, 1);//N reg (8*3332 + 4)*5000 = 133300000Hz
}
Схема:
Datasheet PLL
Datasheet MC