Si5351 + PIC16F1455 USB kontroler je napokon dobio i prvu javnu verziju upravljačkog programa v0.2b.
Program je pisan u JavaScript sa NW.js (node-webkit) i podržan je Windows, Linux i OS X operativni sistem.
NW runtime biblioteke za odgovarajući OS možete preuzeti ovde.
Više detalja kako pokrenuti NW aplikaciju ovde.
U prilogu je i arhiva za preuzimanje sa firmware (HEX) datotekom za PIC16F1455.
Tag: Si5351
Si5351 + PIC16F1455 USB controller 2. deo
Posle male pauze, vratio sam se malo na temu Si5351A + PIC16F1455.
Ovom prilikom sam praktično izradio PCB i sklopio uređaj po mojoj šhemi objavljenoj u ovom postu.
Na izradi pločice mi je pomogao B. Jagodić (1OXB) i ovom prilikom mu se zahvaljujem.
Konstrukcija je na HW nivou proradila bez ikakvih problema. SW za PIC je bilo potrebno malo modifikovati ali se sve u suštini zasniva na već objavljenom algoritmu iz ove teme.
Jedina razlika koju sam naknadno ustanovio posle preciznog merenja generisane učestanosti je vezana za opterećenje kristala. Naime, preporučeno opterećenje od 10pF je pravilo previliku inicijalnu grešku skoro na svim primercima koje sam napravio i kretalo se izmedju 13 – 17ppm što je van specifikacije za upotrebljeni kristal 7M-27.000MEEQ-T za koji se navodi 10ppm u punom temeraturnom opsegu.
U vezi ovoga praktično ne postoji zvanična dokumentacija ali je problem verovatno vezan za samu ulaznu kapacitivnost nožica na kućistu Si5351 koji dodaju jos koji pF. U tom smislu je potrebno izabrati opterećenje od 8pF sa strane Si5351 i to upisivanjem HEX vrednosti 0x92 u registru broj 183.
Na ovaj način se inicijalna greška smanjila na 5 – 6ppm što je već prihvatljivo. Tehnički je potrebno odprilike 9pF opterećenje da bi bila još manja greška ali takva opcija ne postoji u Si5351, postoji samo 8pF ili 10pF.
Još par korisnih linkova u vezi ove teme:
Upravljački SW od SQ9NJE
https://github.com/sq9nje/si5351
Tema u vezi Si5351
http://sp-hm.pl/thread-2019-post-21090.html
Testiranje Si5351 od NT7S
http://nt7s.com/2014/05/si5351a-investigations-part-3/
PS: U planu mi je još jedna verzija ovog sklopa (DCOXO) ali koja će imati akcenat na stabilnost generisane učestanosti korišćenem veoma preciznog termo regulatora (u okviru 0.1 °C) za grejanje kristala sa kojim očekujem kratkoročnu stabilnost u okvirima ili bolju od 0.1ppm.
Si5351 + PIC16F1455 USB controller
ZMSDR V3.1
Si5351A treci deo
Heh, kako dobiti ovako nesto na izlazu iz Si5351? 🙂
Posle duzeg vremena uspeo sam da dodjem do konkretnog algoritma za kalkulaciju frekvencije.
Ovo je samo deo (mozda najbitniji) u celoj proceduri postavljanja izlazne frekvencije na Si5351.
Da pokusam da objasnim princip generisanja ucestanosti.
Frekvencija kristala (27MHz) se interno u Si5351 prvo umnozi (u mom slucaju 30 puta za PLLA) kako bi se dobila medjufrekvencija za FVCO (810MHz) koja se posle deli nekim racionalnim brojem (iskazanim u MSx registrima) radi dobijanja zeljene izlazne frekvencije.
Npr da bi dobili 1.023MHz na izlazu treba uraditi ovakav racun:
27MHz * 30 / 791.788856304985 = 1.023MHz
Ili obrnuto kako prakticno ulazimo u racun:
27MHz * 30 / 1.023MHz = 791.788856304985
Broj 791.788856304985 kao takvog ne mozemo da upisemo direktno u delitelj vec kao razlomak npr najpriblizniji je 791+269/341 sto je prakticno srz problema i uslovljeno je samom tehnickom konstrukcijom unutar IC-a. Dakle ne moze direktno da se upise ovaj decimalni broj jer bi onda sam IC morao da radi vrlo slozenu matematiku koja zahteva poprilicno procesorskog vremena i RAM memorije pa se to “prebacuje” da neko drugi radi, obicno PC ili neki snazniji mikrokontroler gde ima takvih resursa. Dodatno je malo kriticno sto algoritam za “racionalnu aproksimaciju” zahteva u vecini slucaja oko 30-50 iteracija a za jos vecu preciznost oko 300 da bi nasao rezultat sto je prilicno zahtevno.
Resenje se svodi na to da se prvo izdvoji celobrojna vrednost 791 (u dokumentaciji referenciran kao parametar a) i ostatak 0.788856304985 da se iskaze kao razlomak dve celobrojne vrednosti (u dokumentaciji referenciran kao parametar b i c), dakle delitelj=a+b/c. Primenom algoritma “racionalne aproksimacije” je moguce naci takve dve celobrojne vrednosti za b i c koje najblize odgovaraju zahtevu (269/341=0.78885630498534) u nekom specificiranom opsegu brojeva. Kada imamo a, b i c onda se dodatnim “muckanjem” to razlozi i upise u 8 x 8bit registre. U predhodnom resenju gde sam racunao a,b i c na najprostiji nacin (delio/mnozio sa 100000) sam dobijao greske i to se manifestovalo tako sto kada krenem da “motam” LO frekvenciju iz SDR programa u jednu stranu, on ide malo unapred pa se vrati (skoci) nazad pa nastavi opet u jednu stranu, prilicno lose.
Ideja za ovo resenje je potekla od izvornog code-a linux kernel drajvera za Si5351 koje sam sasvim slucajno nasao.
Dakle radi se o racunu za MSx registre (delitelj koji generise izlaznu ucestanost pojedinacnog izlaza, setite se ima ih 3 ili 8) dok je vrednost za PLLA registar (mnozitelj ulazne frekvencije kristala) fiksno postavljena na parnu decimalnu vrednost 30 kako bi se iskoristio tkz “integer mode” (FBA_INT = 1) radi smanjivanja jitter-a (preporuka proizvodjaca).
XTAL_PPM je vrednost nakon kalibracije uredjaja i koja zavisi od svakog pojedinacnog primerka sklopa i njegovog kristala. Za racun PPM-a koristite ovaj online kalkulator:
http://www.jittertime.com/resources/ppmcalc.shtml
Kao sto se moze videti na postavljenoj fotografiji, neophodan vam je neki precizan i kalibrisan frekvencmetar ili kalibraciju uraditi nekom drugom metodom.
Ovo je samo deo cele price oko Si5351 pa je i dalje neophodno dobro protumaciti tehnicku dokumentaciju i aplikacinu notu AN619.
Ovo sam postavio zato sto o tome ne pisu ni u jednom dokumentu za ovaj IC 😉
Sledeci code prikazuje moju realizaciju te kalkulacije.
U pitanju je C jezik i ovo sam implementirao u upravljackoj aplikaciji za moj ZMSDR (ne u PIC).
Jedan deo ove kalkulacije koji se tice racionalne aproksimacije je baziran na code-u sa ove stranice i bazira se na tkz “Farey-evoj sekvenci”.
Kako dobijene vrednosti SI_REGS konkretno upisati u Si5351 preko PIC mikrokontrolera koristeci I2C protokol i sta se desava u samom PIC nekom sledecom prilikom 😉
double currentFrequency = 1.0; //Zahtevana frekvencija u MHz
bool DEBUG = FALSE;
double XTAL = 27; //MHz
//Korekcija / kalibracija
//double XTAL_PPM = 0; //
double XTAL_PPM = −13.625; //korekcija za moj primerak
if (XTAL_PPM != 0) {
double tmp_ppm;
tmp_ppm = XTAL * XTAL_PPM / 1000000;
XTAL = XTAL + tmp_ppm;
}
//−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
// Postavimo PLLA da bude recimo 30 da bi koristili integer mod
// i ona se upisuje jednokratno u Si5351 od strane PIC−a posle reset.
// Reprezentacija ove vrednosti za registre (dec) 26 − 33 je (hex):
// 00 01 00 0D 00 00 00 00
double PLLA_MULT_RATIO = 30;
double FVCO = XTAL * PLLA_MULT_RATIO; //810MHz
double REQ_DIV; //zahtevani delitelj
int p1, p2, p3;
int r = 1;
unsigned char SI_REGS[8];
//koji je odnos deljenja potreban za Multisynth
REQ_DIV = FVCO / currentFrequency;
double a,b,c,d,mediant,x,N; //x = frakcioni broj, N = denominator
double out_a, out_b, out_c;
bool loop_break = false;
double cnt;
cnt = 0; //informativno da vidim kolkiko je prolaza napravio
//−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
// Algoritam za racionalnu aproksimaciju zahtevanog delitelja
// Ovo je primenljivo za PLLA, PLLB i sve MultySinth delitelje
//−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
//koji je odnos deljenja je potreban za Multisynth
REQ_DIV = FVCO / currentFrequency;
x = REQ_DIV − (int)REQ_DIV; //uzmi samo vrednost iza zareza
N = 10000; //denominator
a = 0;
b = 1;
c = 1;
d = 1;
if (x == 0) {
//nemamo racionalni broj
//under construction!
//jel kojim slucajem parni da udjemo u mod MSO_INT=1
if ((int)REQ_DIV % 2 == 1) {
//neparan − odd
printf(“REQ_DIV %i je neparan \n”, (int)REQ_DIV);
//under construction!
} else {
//paran − even
printf(“REQ_DIV x%i je paran \n”, (int)REQ_DIV);
//under construction!
}
out_b = 0;
out_c = 1;
} else {
while (b <= N && d <= N) {
cnt++;
mediant = (a+c)/(b+d);
if (x == mediant) {
if (b + d <= N) {
out_b = a+c;
out_c = b+d;
loop_break = TRUE;
break;
} else if (d > b) {
out_b = c;
out_c = d;
loop_break = TRUE;
break;
} else {
out_b = a;
out_c = b;
loop_break = TRUE;
break;
}
} else if (x > mediant) {
a = a+c;
b = b+d;
} else {
c = a+c;
d = b+d;
}
}
if (loop_break == FALSE) {
if (b > N) {
out_b = c;
out_c = d;
} else {
out_b = a;
out_c = b;
}
}
}
out_a = (int)REQ_DIV;
//−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
// Kraj racuna za racionalnu aproksimaciju −−−−−−−−−−−−−−−
//−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
if(DEBUG)
printf(“REQ_DIV=%f x=%f out_a=%i out_b=%i out_c=%i cnt=%i\n”,
REQ_DIV, x, (int)out_a, (int)out_b, (int)out_c, (int)cnt);
//−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
// Pretvori u zahtevan format za registre
//−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
p1 = 128 * out_a + floor(128*out_b/out_c) − 512;
p2 = 128 * out_b − out_c * floor(128*out_b/out_c);
p3 = out_c;
if(DEBUG)
printf(“p1=%u p2=%u p3=%u\n”, p1, p2, p3);
//−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
// Raspodeli vrednosti po registrima
//−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
SI_REGS[0] = (p3 >> 8) & 0xFF;
SI_REGS[1] = (p3 >> 0) & 0xFF;
SI_REGS[2] = ((int)(log(r)) << 4) | (0 << 2) | ((p1 >> 16) & 0x3);
SI_REGS[3] = (p1 >> 8) & 0xFF;
SI_REGS[4] = (p1 >> 0) & 0xFF;
SI_REGS[5] = (((p3 >> 16) & 0xF) << 4) | (((p2 >> 16) & 0xF) << 0);
SI_REGS[6] = (p2 >> 8) & 0xFF;
SI_REGS[7] = (p2 >> 0) & 0xFF;
if(DEBUG)
printf(“%X %X %X %X %X %X %X %X\n”,
SI_REGS[0], SI_REGS[1], SI_REGS[2], SI_REGS[3],
SI_REGS[4], SI_REGS[5], SI_REGS[6], SI_REGS[7]);
//−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
// Odavde nanize je pisanje SI_REGS u Si5351
// Ovo je specificno za svaku pojedinacnu HW implementaciju
// Ja sam koristio PIC sa USB<>I2C u CDC modu
//
// Napomena: Ovo je samo za delitelje, neophodno je postaviti i
// ostale registre prema upustvu iz Silicon Labs AN619
//−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
//−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
// POSIX stil pisanja u filehandler
//−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
FILE *file; //stdio definicija
file = fopen(“/dev/cu.usbmodem411”, “w”); // open device
//file = fopen(“/Users/vm/proba.txt”, “w”); // open file
if (!file) {
if(DEBUG)
printf(“File can’t be opened!”);
}
char usb_out[12];
usb_out[0] = cmd; //cmd for PIC
usb_out[1] = SI_REG_MS0[0];
usb_out[2] = SI_REG_MS0[1];
usb_out[3] = SI_REG_MS0[2];
usb_out[4] = SI_REG_MS0[3];
usb_out[5] = SI_REG_MS0[4];
usb_out[6] = SI_REG_MS0[5];
usb_out[7] = SI_REG_MS0[6];
usb_out[8] = SI_REG_MS0[7];
//write to device
fwrite(usb_out, 1, 12, file);
fclose(file);
if(DEBUG)
printf(“File written!”);
Napomena: Ovaj algoritam je direktno primenljiv na generisanje frekvencija od nekih 0.5MHz pa do 112.5MHz (imajte u vidu da za SDR treba 4x veca brzina clock-a). Za frekvencije ispod 0.5MHz neophodno je ukljuciti dodatne izlazne delitelje (R) dok za frekvencije iznad 112.5MHz pa do 150MHz treba da se menja i vrednost mnozitelja za PLLA po istom principu/algoritmu kao za MSx. Za frekvencije od 150MHz do 160MHz se koristi treci, nesto prostiji, princip 🙂
Dodatno imajte u vidu da samo delitelji u MSx mogu “u letu” da se upisuju sto daje “glitch free frequency change” a kada se menja PLLA ili PLLB mora da se radi njihov reset sto dovodi do privremenog prekida rada oscilatora.
Inace postoji jedan vrlo specifican slucaj za ultra mali clock-jitter kada su vrednosti MSx i PLLx parne celobrojne vrednosti, setuju se posebni registri FBx_INT i MSx_INT. Primetice te u gore pokazanom programu da to nisam odradio (deo gde pise “under construction!”) jer se te kombinacije desavaju samo za vrlo specificne frekvencije (ima ih oko 4490 od bezbroj raspolozivih) a posto je prakticno nemoguce da ce te imati konstrukciju bez PPM korekcije onda one i ne vaze, tj bile bi tehnicki pomerene za tu PPM razliku. Prakticno govoreci, kome je bitniji manji clock-jitter umesto tacnosti generisane frekvencije moze ovo da iskoristi. Te frekvenciju su recimo ovakve (prikazano zadnjih 30, ostale su razbacane ispod 10MHz):
I za kraj, vreme promene frekvencije za Si5351 je negde oko 336µs (toliko treba da se preko I2C upise 8 registra u burst modu, nema zakljucavanja) sto je odlican rezultat i prakticno 30 puta brze od Si570 kome treba oko 10ms da se “zakljuca” 🙂
73 de YU3MA
Si5351A drugi deo
Kao sto sam i predpostavio, trebalo mi je malo vise vremena da funkcionalno osposobim kontrolu Si5351A programabilnog oscilatora.
Sam IC sa svojih 10 nozica izgleda krajnje prosto ali se unutra krije poprilicno komplikovana logika.
Kao prvo, tehnicka dokumentacija ima gomilu gresaka tako da vodite racuna ako se upustite u eksperimente sa njim. Dalje, sam datasheet ne obuhvata opis svih raspolozivih registra! Nasuprot tome, aplikaciona nota AN619 daje vec detaljniji opis ali opet i u njoj sam nasao nekoliko (ne toliko kriticnih) gresaka. Nije mi jasno kako tako ozbiljan proizvodjac poput Silicon Labs moze to da dozvoli sebi!
Posto se radi o nesto komplikovanijoj problematici, na raspolaganju su dve varijante za pravljenje “frekvetnog plana”, tj proracun potrebnih vrednosti za interne registe.
Prva varijanta je izrada plana pomocu ClockBuilder Desktop Software. Ovaj program prakticno iskoriscava sve mogucnosti IC-a i evo ukratko spisak opcija:
– Mogucnost definisanja bilo koje ucestanosti na pojedinim izlazima
– Mogucnost podesavanja Sleew-rate (struje / snage izlaza)
– Mogucnost podesavanja internog opterecenja kristala (0, 6, 8 i 10pF)
– Biranje izmedju 25MHz i 27MHz frekvencije referetnog kristala
– Podesavanje stanja kada je odredeni izlaz iskljucen (Low, High, High Z)
– Inicialni fazni ofset izmedju izlaza (bug-uje IC, ima nekonzistentno ponasanje!)
– Podesavanje tolerancije kristala kroz unos ppm odstupanja (bug-uje program, tehnicki uopste ne radi!)
– Mogucnost podesavanja Spread Spectrum opcija (za modele IC koji to podrzavaju)
– Direktno programiranje preko Silicon Labs EVB modula
– Export frekvetnog plana za narucivanje pre-programiranih IC od proizvodjaca (OTP opcija)
– Export frekvetnog plana u TXT format sa spiskom vrednosti svih registra
Dakle pomocu ovog programa mozemo da dobijemo izracunate vrednosti registra koje ce dalje da iskoristimo u nekom posebnom I2C kontroleru (sa pratecim adekvatnim programom) koji ce i fizicki da postavi te registe u sam Si5351.
Ali, ovako smo dobili samo jednu (ili vise) fiksnih ucestanost na izlazima od IC sto bar u prici sa SDR i nije toliko korisno. Kako da napravimo promenljivi oscilator (aka VFO) od toga?
To je vec nesto komplikovanija prica koja prakticno znaci da sve sto je ovaj spomenuti program izracunao uradimo isto u nekom nasem programu (drajver-u) ili u samom upravljackom (I2C) kontroleru i da uradimo kompletnu kalkulaciju svaki put kada zelimo da promenimo generisanu ucestanost. Na vasu a i moju radost, ovo sam “savladao” i o tome cu pisati u sledecem nastavku 😉
Za kraj samo jednu finu stvar da spomenem po kojoj se ovaj IC jos razlikuje od Si570, Si5351 radi fenomenalno brzo prvo u I2C komunikaciji koja moze da ide do 400Khz a najbitnije je da se njegov PLL veoma brzo lock-uje na zadatu ucestanost (kod Si570 je potrebno 10ms u najgorem/najcescem slucaju) i to bez prekida izlaza pa se prakticno dobija veoma glatka (smoth) kontrola sa dobrim odzivom reagovanja kao sto se vidja na svim fabrickim primoredajnicima.
Do sledeceg pisanja,
73 de YU3MA
ZMSDR V3 testiranje
U predhodnom clanku sam spomenuo da nova V3 verzija ZMSDR HF prijemnika ima odlicnu dinamicku karakteristiku pa samim tim i figuru shuma, evo par slicica sta to i prakticno znaci.
Na privoj slici se vidi prijemni opseg sa gomilom radio stanica u pozadini i gde je dodatno umetnut veoma jak frekvetno modulisan signal koji ide do -5dB (desni kraj spektra). Primecuje se da ovako jak umetnut signal prakticno nista ne smeta ostalom delu spektra sto pokazuje da je sam duplo-balansirajuci mikser veoma linearan sa veoma malom intermodulacionom distorzijom. Dodatno, slika prakticno pokazuje da dinamicka karakteristika prijemnika prevazilazi tehnicke mogucnosti moje Inverted V antene koja jednostavno ne moze jace da “pokupi” signale iz etra. Da bi iskoristili sve ove potencijale neophodno je koristiti neke drasticno bolje antene koje imaju pojacanje same po sebi (quad-ovi, beam-ovi i sl).
Sledeca slika pokazuje prag shuma koji se krece oko -110dB. Ovo je fantastican rezultat i tehnicki granica moje zvucne kartice TC Electronic Impact Twin. Takodje se uvidja veoma dobra izolacija lokalnog oscilatora od prijemnika pa tako u ovom spektru nema nezjeljenih signala tkz “spoors”. Sve ovo je rezultat raznih eksperimenata u predhodnih par godina i veoma probranih komponenti koje su upotrebljnje u ovom prijemniku kao i sama minituarizacija celog prijemnika (sto nizi napon i potrosnja + sto kraci vodovi na PCB = manje problema). Sve u svemu, dinamike na pretek 🙂
Za kraj, evo slika kako izgleda potpuno sklopljena PCB sa dodatim Microchip PIC18F13K50 kontrolerom.
BTW: Spomenuti Si5351 sa pratecim kristalom se pokazao odlicno u ulozi promenljivog oscilatora tako da nama dragi Si570 (CMOS verzija) ide u penziju 🙂 Obzirom da imamo na raspolaganju jos dva nezavisno kontrolisana izlaza iz ovog oscilatora, te izlaze mozemo iskoristi i za neke druge namene, npr kao signal generator pa prakticno mozemo da napravimo prost mrezni analizator spektra (network spectrum analyzer) sa kojim mogu da se snime prenosne karakteristike filtera i sl gde bi jedan od izlaza bio predajna strana a sam SDR prijemna strana.
73 de YU3MA
Nov ZMSDR prototip
Mali update na temu posle duzeg vremena oko klasicnih SDR prijemnika (ne RTL-SDR), evo prva fotka ZMSDR verzije 3 🙂
Ovo je prototip i nije potpuno kompletiran jer mi ostaje jos CPU PIC18F14K50 da namontiram. Sve ostalo je na svom mestu i u funkciji.
U pitanju je low-voltage verzija koja radi na 3.3V i napaja se sa USB porta (sa veoma prljavih 5V) i trosi oko 21mA.
Upotrbljene su najbolje komponente koje sam mogao da nadjem na trzistu, niskosumni regulator napona, nov Si5351 oscilator sa 10ppm kristalom, low-voltage low-distorsion low-noise OP-AMP OPA1662 (fenomenalan OP, preporucujem ga za sve AUDIO primene), specialni low-distorsion kondezatori u demodulatoru (Taiyo Yuden CFCAP), gomila X7R 1uF keramickih bypass kondenzatora, zastita antenskog ulaza sa BAV99, zastita napajanja sa zener barijerom … Plocica je jednoslojna i napravljena je pomocu toner-transfer metode.
Ovo radi BOLI GLAVA!!! 🙂
Prijemnik ima oko 103 dB dinamike (~85dB SFDR u celom opsegu) i oko 110dB dinamike u pojacivackom stepenu sto predstavlja i praktican limit moje audio kartice. Ovo je fantastican rezultat kada se uzme u obzir da se ceo prijemnik napaja samo sa 5V USB (za ovakve cifre nekada je moralo da se koristi relativno visok napon od cca +/-15V).
Prakticni rezultati kod prijema su sjajni. Osnovno je mogucnost prijema u opsegu 0.1MHz do 30MHz. Takodje je moguc i prijem na UKT ako se slusa kao 5 ili 7 harmonik, naravno sa nesto slabijom osetljivoscu, npr sa par metara zicom radiodifuzni FM radi super i u stereo modu :)) Naravno, ovde je caka sa BPF filterima sa kojim se izolujemo od KT/UKT.
Po meni ovo je vrhunac u ovoj tehnologiji sa duplo-balansirajucim mikserom i ne verujem da moze da se napravi bolje od ovoga. Shema ove konstrukcije je prakticno ista ona koju sam postavio pre vise od godinu dana samo su sad upotrebljne kvalitetne komponente i koristi se low-voltage aktivna elektronika.
Bice jos novih informacija kada osposobim CPU na plocici (sad koristim eksternu I2C komunikaciju) …
73 de YU3MA
Prvi utisci | Si5351A Clock Generator 8kHz – 160MHz
Posle duzeg vremena i komplikacija sa nabavkom pa kasnije sa izradom mini probne plocice, uspeo sam da pokrenem u rad nov IC od Silicon Labs Si5351A. U pitanju je I2C programabilni generator ucestanosti u opsegu 8kHz do 160MHz.
Ovaj IC moze da se smatra kao naslednik Si570 promenljivog oscilatora dobro poznatog u SDR krugovima. Bitna razlika je sto Si5351 koristi spoljni kristal za svoj glavni oscilator od kojeg kasnije pravi ostale ucestanosti. Obzirm da se koristi relativno jevtin kristal a i sam IC je prilicno povoljan, realizacija promenljivog oscilatora u ovoj varijanti ispada prilicno povoljnije od cene jednog Si570! Da li odnos cene znaci da je i losiji, to ce mo tek videti nakon testiranja i prakticne eksploatacije.
Prva bitna prednost Si5351 je mogucnost da generise veoma sirok spektar ucestanosti u opsegu 8kHz do 160MHz. Na ovaj nacin napokon mozemo da se spusimo u LF ili ELF opseg sa SDR prijemnikom bez upotrebe dodatnih delitelja.
Sledeca fina stvar oko ovog IC je da koristi “stock” (jevtine) kristale od 25 ili 27MHz za svoju referencu. Dodatno, u samom IC su integrisani (programski se bira 6,8 ili 10pF) “load” kondezatori tj kondenzatori za neophodno opterecenje kristala. Mozda ovo ne zvuci kao neka bitna stvar ali na ovaj nacin smo ustedeli 2 spoljna kondenzatora, smanjili “footprint”, smanjili pontencialne probleme oko EMI i dodatno ceo oscilator doveli u optimalne uslove kako bi dobili sto bolju kratkorocnu i dugorocnu stabilnost kao i manji fazni shum. Ja sam u ovom primeru koristio (preporucen od Silicon Labs) SMD 27MHz kristal 7M-27.000MEEQ-T proizvodjaca TXC koji je specificiran za 10ppm gresku. Dodatnim merenjem gotovog sklopa sam dobio oko 13ppm inicialnu gresku sto moze da se prihvati i smatra kao posledica potpuno rucne izrade PCB i sklapanja. Tokom rada i merenjem sa frekvenciometrom nisam primetio da mi se zadnja raspoloziva decimala na raspolaganju pomera (10Hz)!
Dodatno, na Si5351 moze da se prikljuci i neki drugi (da kazem daleko bolji, npr neki TCXO) spoljni oscilator a da se IC i dalje koristi za generisanje razlicitih ucestanosti. Ovo je opcija za neke dosta zahtevnije primene gde je potrebna za jednu ili vise dekada bolja stabilnost/preciznost. Sam IC ima 0ppm gresku kod generisanja izlazne ucestanosti i prakticno sve nestabilosti iskljucivo dolaze od upotrebljenog oscilaora ili kristala.
Obzirom da ovaj IC ima 3 (zavisno od kucista, maksimalno 8) potpuno nezavisna izlaza na kojima se moze programski postaviti bilo koja ucestanost u specificiranom rangu, dobija se fina opcija koja moze prakticno da zameni sve kristale ili kristalne oscilatore na jednom uredjaju ili PCB. Kod RF primene ovo je odlicna stvar jer mozemo upotrebiti te posebne izlaze npr za prvi IF mikser, sledeci izlaz za oscilator prijemnika, sledeci za oscilator predajnika (dobija se mogucnost full-duplex rada!) ili kao glavni clock za mikrokontroler. U svakom slucaju se uvidja ogroman potencial ovakvog IC kada imamo na raspolaganju vise nezavisnih izlaza.
Jos jedna zanimljiva opcija kod ovog IC je mogucnost da se izlazni naponski nivo moze prakticno birati tako sto se poseban pin namenjen za tu funkciju veze na neko drugo napajanje. Tehnicki govoreci, svi izlazni buffer-i imaju svoje nezavisno napajanje i na taj nacin preskacemo upotrebu nekih spoljnih naponskih konvertera. Jedino ogranicenje ovde je sto moze da se koristi samo naponi manji ili jednaki od 3.3V sto je i napon glavnog napajanja ovog IC. Na zalost, ova opcija ne omogucava prostu (bez dodatnih naponskih konvertera) upotrebu sa 5V TTL logikom.
Sto se tice programiranja ovog IC, na raspolaganju ima preko 200 konfiguracionih registra koji pruzaju veoma velik spektar raspolozivih mogucnosti i tek mi sledi proucavanje svih raspolozivih opcija.
Za sad jedina zamerka koju imam nije vezana za elektroniku vec za mehaniku 🙂 Primerak IC-a koji sam dobio je u veoma sitnom MSOP-10 kucistu a ni spomenuti kristal nije nista veci (vidi fotografiju) tako da zahteva jako finu izradu PCB i kasnije veoma pedantno letovanje pomocu vruceg vazduha sa koriscenjem tecnog kalaja. Probna PCB je uradjena pomocu toner-transfer metode. Inace i sam sam se iznenadio kako je dobro ispala PCB toner-transfer metodom obzirom da je jako sitan raster u pitanju 😉
I za kraj samo da spomenem da Si5351A varijanta u MSOP-10 kucistu ima relativno malu potrosnju struje, ~22mA @ 3.3V dok Si570 trosi oko ~150mA @ 3.3V sto moze da bude zanimljiva opcija za prenosne uredjaje ili uredjaje koji se napajaju sa USB porta.
Ovu su bili prvi utisci. Vise detalja sledi nakon detaljnog testiranja.
73 de YU3MA
Standard frekvencije pomocu mobilnog telefona
Uradio sam jedan zanimljiv tehnicki zahvat za koji mislim da bi bio interesantan nekim koriscnicima pa da podelim iskustvo.
Ovo je namenjeno za malo naprednije korisnike kojima je potreban izuzetno precizan standart frekvencije sa tacnoscu od 0.05ppm.
Da ne ulazim u pricu sta je i cemu sluci standard frekvencije (etalon) ali svima koji zele bar da bazdare svoje malo starije merne uredjaje ili RF opremu ovo moze biti od pomoci.
U ovom zahvatu sam iskoristio stari mobilni telefon Motorola C139 i iskoristio jednu od vrlo bitnih tehnika koja se koristi u GSM a pomocu koje se pojedinacni telefon striktno frekvetno sinhronizuje sa tornjem (base-station) kako bi cela GSM tehnika mogla uopste da radi. Dakle, base-staion na svojoj strani poseduje uglavnom rubidiumski oscilator u tu svrhu za koji se daje neka minimalna tacnost od 0.05ppm (prakticno je za nekoliko decimale veca!) ali to je neka zagarantovana koja po GSM specifikaciji mora da poseduje telefon. Ukoliko taj glavni oscilator ispadne iz tih okvira (a inace se periodicno menaju zbog starenja), ti rubidiumski moduli se menjaju novim a polovni uglavnom zavrse na Ebay :). Polovni primerci rubidiumskih modula za koje imam informacije su imali gresku od oko 0.17Hz @ 10MHz. Znaci sa strane tornja ima uvek izuzetno precizan standart frekvencije.
Sam telefon pomocu svog internog baseband programa i preko FCCH kanala ima nacin da se “zakljuca” na specificiranu ucestanost tako sto ce svoj glavni oscilator da pomeri koliko treba, uglavnom preko varicap diode.
U ovom prakticnom primeru, telefon kada se ukljuci na izlazu iz oscilatora ima neku ucestanost koja je poprilicno van opsega koji je potreban (ovde se radi o delovima Hz na ucestanosti od 26MHz!) usled raznih razloga (i nebitno je sto je “pobego”) ali cim krene da “trazi mrezu” on je vec svoj interni oscilator zaklucao tj korigovao!
Dakle na ovaj nacin mozemo da dobijemo vrlo tacan izvor ucestanosti od 26MHz sa tacnoscu od 0.05ppm (+/- 1.3Hz). Ovo je vise nego dovoljno za sve amaterske potrebe i zgodno da se kalibrisu merni uredjaji starije generacije. Izlazni napon je relativno niskog nivoa pa je za drajvovanje nekog TTL kola potreban nekakav buffer.
Ko zeli da od ovoga dobije i neku drugu ucestanost, to vec zahteva neku drugu tehniku, uglavnom PLL baziranu ali evo jedan odlican IC za tu namenu Si5351. Bitno je spomenuti kod ovog IC da on moze da generise prakticno bilo koju ucestanost do 160MHz sa bilo kojim referetnim klokom, naravno i od ovih 26MHz!
Prica oko ovoga ide jos dalje ali samo da spomenem da trenutno za ovaj telefon i jos neke modele iz ove serije postoji open-source baseband software! Zamena postojeceg Motorolinog baseband programa sa osmocomBB je neophodna ukoliko zelite da ovaj izvor od 26MHz imate stalno na izlazu jer telefon zbog svoje power-saving rutine ne drzi oscilator aktivnim (ukljucuje se na zahtev, recimo kod pritiskanja tastature). Kod osmocomBB kompletna power-saving funkcija nije implementirana tako da je izlaz oscilatora uvek aktivan.
Evo i slicica kako sam to ja odradio na telefonu Motorola C139. Zuta strelica oznacava mesto prikljucivanja (47. nozica TRF6151 IC).
UPDATE:
Sad jos zanimljivi deo, uz pomoc USB DVB-T dongla koji se sa software-om pretvara u SDR prijemnik, moguce je “primati” i spektar/kanale od GSM-900 banda a samim tim i FCCH kanal.
Spomenuta ekipa iz Osmocom je danas pustila prvu verziju “kal” programa prepravljen za ove DVB-T prijemnike pomocu koga se moze izmeriti ppm odstupanje oscilatora dongla (koji inace radi na 28.8MHz) u poredjenju na referetnu ucestanost dobijenu od tornja preko FCCH kanala. Dobije se recimo “average absolute error: 34.376 ppm” sto bila greska od “citavih” 990Hz ovog kristalnog oscilatora. Prelepo 🙂 Sad bar znamo “tacno” na kojoj ucestanosti radi njegov oscilator i slicno kao sa mobilnim telefonom mozemo da to iskoristimo u svrhu kalibracije drugih uredjaja.
Cisto poredjenja radi, evo uporedni pregled nekoliko vrsta oscilatora i njihova preciznost (ppm):
XO – Standardni quarz ili kristalni oscilator: 10 – 300 ppm
DTCXO – Digitalno temperaturno kompeziran kristalni oscilator: 0.5 – 5 ppm
TCXO – Kristalni oscilator sa kontrolisanom temperaturom: 0.1 – 0.01 ppm
RbXO – Rubidiumski oscilator: 0.00001 ppm
Korisni linkovi:
https://github.com/steve-m/kalibrate-rtl
http://bb.osmocom.org/trac
http://bb.osmocom.org/trac/wiki/Hardware/SerialCable
http://www.silabs.com/Support%20Documents/TechnicalDocs/Si5351.pdf
http://steve-m.de/pictures/rtlsdr_external_clock.jpg
http://steve-m.de/projects/rtl-sdr/clock/calypso_26MHz.jpg
http://thre.at/kalibrate/#install
http://xbsd.nl/2011/07/pl2303-serial-usb-on-osx-lion.html
http://wlanbook.com/usb-to-serial-adapter-for-mac-os-x-lion-with-driver/
http://en.wikipedia.org/wiki/Crystal_oscillator
http://www.youtube.com/watch?v=I55uLRRvLCU
Svi krediti za ovu “caku” idu Osmocom timu i posebno Steve Markgraf-u koji je sve to osmislio.
Sacuvajte vase stare Motorole C1xx, mozda vam zatrebaju!