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.

Si5351A PIC16F1455 USB kontroler

Si5351miniUSB

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.

Si5351A treci deo

1000000.0Hz

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):

si5351_ultra_low_jitter_freqs

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

ClockBuilderDesktop-Si5351A-x-GT

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

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.

Si5351Si5351-internal-scheme

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)!

txc-high-precision-crystal

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.

Si5351A-MSOP10-toner-transfer

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

Feriti za sirokopojasnu HF primenu iz LAN modula

U nekoliko navrata sam spominjao da je moguce u nedostatku sirokopojasnih feritnih jezgra poput FT37-43 koristiti i jezgra iz starih LAN modula.

Clan ES foruma Markony je uslikao proceduru kako doci to tih jezgra uz pomoc sile 🙂

U ovom primeru je u pitanju potpuno zaliven modul koji nije bas lako rastaviti tako da je neophodno uz pomoc snaznih secica seckati deo po deo crne mase za zalivanje pazeci da se ne ostete jezgra koju su prilicno krta i tako doci do njih.

U svakom slucaju trud se isplati jer su ova jezgra odlicna za sirokopojasnu HF primenu, balune, transformatore impedance i sl.  Po mojih merenjima u rangu  1 – 50MHz uz pravilno motanje sekcija, za transformator impendance 1:4 (50Ω : 200Ω) koja se koriste u SDR prijemnicima, dobija se prilicno ravan frekvetni odziv sa gubicima (insertion lose) oko -1dB. Sama jezgra mogu se koristiti i za vece ucestanosti ali tada dolazi do vecih gubitaka.

UPDATE:

Posle malo eksperimentisanja i merenja, dosao sam do jos par finih izvora feritnih matirijala za sirokopojasne HF transformatore. Zacudjujuce dobro su mi se pokazali feritni prstenovi za suzbijanje smetnji koji mogu da se nadju na ispravljacima tacnije na njihovim izlaznim kablovima (ona crna zalivena “budza” valjkastog oblika). Slicni feritni materijali se mogu naci i kod PC ATX ili drugih SMPS napajanja koji se postavljaju na kablove neposredno posle ulazne 230V prikljucnice. Ovi feritni prstenovi imaju solidne karakteristike (insertion lose < 2dB) ali su prilicno glomazni pa je prakticna upotreba malo otezana.

Slicni feritni prstenovi nesto manjih dimenzija se mogu skinuti sa elektronike za neonske lampe za 230V “grlo” tj stedljiva sijalica. U toj elektronici obicno imaju dve induktivne komponente, jedna je u obliku minijaturnog transformatora sa dva izvoda (to je prigusnica i nju preskacemo) dok je druga mali feritni prsten sa 3 sekcije namotaja koja moze da se iskoristi. Postojeca zica se skine i namota se trifilarno (tri parceta zice odjednom) 5 do 7 navoja lakirane zice, precnik zice nije bitan.

Caka kod ovih sirokopojasnih transformatora (induktivnosti) koji nam trebaju za SDR prijemnike je da imaju veoma mali Q faktor tako da prakticno nisu rezonatni u HF opsegu (<50MHz).

UPDATE 2:

Kratak pregled transformatora i feritnih materijala pogodnih za sirokopojasnu HF primenu:

1) Coilcraft WBC4-6T, transformator 1:4, -0.65dB
2) Coilcraft WB4-6T, transformator 1:4, -0.5dB
3) Coilcraft WB4-1H, transformator 1:4, -0.5dB
4) LAN magnetics, transformator 1:1, -1dB
5) Amidon FT37-43 toroidno feritno jezgro
6) Amidon FT37-43, transformator 1:4, 3 x 10 navoja, -0.5dB @ <40MHz
7) EMI toroidno feritno jezgro
8) EMI / Power ferrites, pogodni za linearne HF pojacivace snage > 50W
9) EMI / Power ferrites, pogodni za linearne HF pojacivace snage i antenske balune spajanjem vise komada

RTL-SDR – 2. deo

Prica oko RTL-SDR postaje sve zanimljivija iz dana u dan zahvaljujuci ogromnom zalaganju autora drajvera i pratecih SDR programa. Obzirom da pricamo o SDR (Software Defined Radio), programi i drajveri za jedan te isti hardware su od presudnog znacaja za ispravan rad. Primera radi, za par meseci glavni RTL-SDR driver je doziveo veliki broj izmena i popravki tako da trenutna verzija moze slobodno da se smatra potpuno funkcionalnom. Takodje je od skora spojena osnovna funkcionalnost ovog drajvera sa specificnim opcijama koje se ticu DC (Direct Conversion) funkcija koje omogucavaju prijem signala od 0 do 28.8MHz uz male modifikacije na samom uredjaju. Detalji oko ove modifikacije se mogu naci u mom predhodnom clanku ovde. Ovaj DC mod je primamljiv velikom broju KT radio operatora ili korisnicima koji vole da slusaju ogroman izbor radio stanica na ovom podrucju (SWLing) u analognim ili digitalnim modovima poput DRM. Takodje, upotrebom “virtualnih kablova” moguce je signal preusmeriti u neki drugi program za demodulaciju specificnih modova ili protokola. Primer solidnog programa za demodulaciju vecine radio amaterskih modova je Fldigi.

Jos jedna zanimljiva opcija RTL-SDR drajvera (rtl_tcp) je mogucnost da se I/Q stream sa samog uredjaja preko LAN ili WiFi mreze moze proslediti na drugi racunar koji ce vrsiti demodulaciju signala. Posto sam drajver dolazi kao izvorni kod, postoji mogucnost prevodjenja (compile) i upotrebe sa relativno skromnim HW platformama kao sto je na primer Raspberry PI ili cak na OpenWRT routerima u cilju dislokacije samog RTL-SDR prijemnika tj postavljanja prijemnika fizicki uz samu antenu sto moze da nam pruzi bolji prijem (izbegava se slabljenje VF signala kroz kablove) i ustedu na problematicnim koaksialnim kablovima.

Trenutno veoma zanimljiv program za demodulaciju signala je SDR#. Ovaj program je pisan na .NET platformi sto omogucava rad kako na Microsoft Windows operativnim sistemima (native) tako i na Linux i Mac OS X koriscenjem MONO emulacione platforme. Naravno, na Windows platformi se mogu ocekivati najbolji rezultati po pitanju brzine rada i stabilnosti. Program iz dana u dan dobija nove funkcionalnosti ali navescu samo nekoliko:

– Mogucnost rada sa skoro svim aktuelnim SDR uredjajima (SoftRock baziranih preko zvucne kartice, RTL-SDR i sl)
– Denodulacija za AM, LSB, USB, NFW (narrow FM), DSB, CW-L, CW-U
– Demodulacija WFM (wide FM) tj radio difuznog FM za opseg 88-108MHz sa podrskom za Stereo signal i RDS
– Potpuno podesiv demodulacioni filter (propusna sirina i strmina)
– Originalni algoritam za korekciju I/Q signala
– Podesiv AGC (automatska kontrola jacine audio signala)
– Podesiv Squelch (automatsko mutiranje audio signala)
– Podesiv FFT i Waterfall prikaz
– Mogucnost funkcionalne nadogradnje preko Plugin-ova

Iako ja SDR# koristim na Mac OS X operativnom sistemu preko MONO platforme, rezultati prijema i prikaza su sasvim korektni. Evo par slicica uslikanih prikikom radioamaterskog KT takmicenja gde prva slika prikazuje veci broj stanica koje emituju RTTY signal dok druga prikazuje stanice koje emituju signal sa LSB modulacijom. Obratite paznju da su prikazani samo uski delovi spektra od rasplozivih 2MHz sirine. Takodje na drugoj slici se moze uociti relativno veliki dinamicki opseg gde se pojedini signali krecu cak i do +40dB po S skali (najcrveniji signal) bez primetnih problema oko zasicenja IF stepena koji se cesto vidjaju u SoftRock baziranim konstrukcijama.

Dodatno na drugoj slici se uvidja jedna radio stanica (zuto-cvena traka sa peckicama u desnom delu spektra) gde operater koristi verovatno rucno pravljen linearni pojacivac ali koji je totalno razdesen i “prsti” van dozvoljenih specifikacija za LSB modulaciju. Tacnije, signal je previse pojacan (sto bi mladi rekli, “napanjio pojacalo”) i dolazi do distorzije VF signala i tako smeta ostalim ucesnicima takmicenja koji su bili prinudjeni da se sklone od njega u stranu a pritom gubeci deo i onako uskog radio spektra koji je propozicijama postavljen za to takmicenje 🙂

I za kraj, kao sto sve u zivotu nije savrseno tako ni ovaj RTL-SDR nije savrsen. Osnovne moje zamerke se odnose na RTL2832U i njegov DDC stepen koji nije bas najsjanije resen tako da na pojedinim centrlnim ucestanostima dolazi do jako loseg potiskivanja gornje i donje slike signala tkz “Image rejection“. Sledeca slika prikazuje te probleme gde crveni signali (dobijeni iz Marconi 2019 signal generatora) predstavljaju “prave” signale dok plavo-zuti predstavljau laznu sliku istih tih signala ciji se intenzitet menja u zavistnosti od udaljenosti od centralne frekvencije.

U cilju prevazilazenja ovih problema, pozeljno je postaviti specificne centralne frekvencije prijemnika za optimalni prijem odredjenih opsega.
Ovo prakticno znaci da ce prijem signala recimo na 3.7MHz biti dosta cistiji ukoliko se postavi za centralnu frekvenciju 3MHz pa slusati gornji deo spektra nego postaviti 4MHz pa slusati donji deo spektra.
Za radio amaterske KT opsege, ekperimentalnim putem sam dosao do sledecih centralnih frekvencija:

– 80m band – 3MHz
– 40m band – 7Mhz
– 20m band – 13.5MHz
– 15m band – 21.5MHz
– 10m band – 27.5MHz

PS: Jedna ohrabrujuca vest, obzirom da se doticni tuner chipovi E4000 i FC0013 vise ne proizvode a preostalih zaliha je sve manje, na trziste se pojavila nova nada, R820T od firme Rafael Microelectronics koji po preeliminarnim podacima ima bolje karakteristike od doticnih. Ostaje jos da vidimo i prve primerke takvih stikova 😉

Korisni linkovi:
http://sdr.osmocom.org/trac/wiki/rtl-sdr
http://superkuh.com/rtlsdr.html
http://www.reddit.com/r/RTLSDR/comments/s6ddo/rtlsdr_compatibility_list_v2_work_in_progress/
http://sdrsharp.com
http://cgit.osmocom.org/cgit/rtl-sdr/
http://webchat.freenode.net/?channels=#%23rtlsdr
http://gnuradio.org/redmine/projects/gnuradio/wiki
http://www.sm5bsz.com/linuxdsp/hware/rtlsdr/rtlsdr.htm
http://steve-m.de/projects/rtl-sdr/tuner_comparison/
http://superkuh.com/gnuradio/R820T_datasheet-Non_R-20111130_unlocked.pdf
http://erewhon.superkuh.com/gnuradio/Elonics-E4000-Low-Power-CMOS-Multi-Band-Tunner-Datasheet.pdf

SDR# instalaciona skripta za Linux i Mac OS X
http://pastebin.com/eDA0p4u8

Do sledeceg pisanja,
73 de YU3MA

Prepravka DVB-T USB prijemnika sa RTL2832U za HF 0-28MHz

DVB-T USB stikovi su prvestveno namenjni za prijem digitalne televizije u VHF i UHF frekventnom podrucju. Uz malu modifikaciju koju sam ovde predstavio, preskakanjem prvog tuner integrisanog kola i prikljucivanjem VF signala direktno na RTL2832U je moguce primati radio signale u opsegu 0 do 28.8MHz sto je  vrlo interesantno KT radio operatorima ili korisnicima starijih radio stanica koji zele da moderniziju svoj uredjaj tako sto ce ovakav sklop prikljuciti na IF stepen uredjaja i prakticno dobiti SDR pan-adapter.

Kao prvi korak oko ove modifikacije neophodno je utvrditi koji je tacan tuner IC u samom USB stiku. Za varijante sa E4000, modifikacija je krajnje jednostavno jer nije potrebno uklanjati C1 i C2 kondenzatore zato sto se iz drajvera ovaj tuner IC moze potpuno iskljuciti tj postaviti u High-impendance mode tako da ne smeta prijemu snignala. Za ostale tunere, neophodno je ukloniti C1 i C2.

Sledeci korak je izrada i postavljanje TR1 trasnformatora koji ce nam obezbediti transformaciju impedanse sa 50ohm na 200ohm i konverziju ne-balnsirajuceg signala u balansiraju (diferencialni) neophodan za ulaz u AD konverter RTL2832U. Za najbolje rezultate je pozeljno koristiti Mini Circuit T1-6T-KK81 transformator. Na zalost, ovaj transformator je jako tesko nabaviti na nasem a i stranom trzistu. Kao alternativa, moguce je koristiti feritno jezgro Amidon FT37-43 ili minijaturna feritna jezgra iz rasturenih LAN modula. Takodje moze da se koristi bilo koji wideband VF transformator, recimo neko iz razhodovanih antenskin TV pojacivaca. Moram napomenuti da feritni prstenovi i jezgra iz SMPS (ATX ispravljaci za PC) ne mogu da posluze u ovu svrhu.

Transformator se pravi tako sto se uzme tri parceta tanke (nebitan je precnik) lakirane zice i zajedno se provuku 5 puta kroz jezgo. Ovaj nacin motanja se zove “trifilarno”. Od ta tri provodnika prvo izdvojiti jedan koji ce nam sluziti kao primar, na shemi oznaceno sa brojevima 1 i 4. Ostala dva provodnika spojiti “na red” tako da prakticno dobijamo duplo duzi provodnik vodeci racuna o pocetku i kraju zice, dakle da kraj jednog provodnika bude spojen na pocetak drugog. Sekundarnu sekciju je potrebno prikljuciti na prvu i drugu nozicu RTL2832U, najbolje kod kondezatora zbog nesto veceg raspolozivog prostora za lemljenje. Primarnu sekciju transformatora je pozeljno prikljuciti na neki mali VF konektor koji ce biti fizicki postavljen na samoj plocici prijmnika.

Evo slicica kao primer kako to sve moze da se izvede uz upotrebu rucno pravljenog transformatora sa feritnim jezgrom iz rasturenog LAN modula.

Jos par korisnih prepravki vezanih za ovu modifikaciju se ticu dodatnog filtriranja napajanja i signala koji dolaze sa USB kabla. Prva je dodavanje tantal kondenzatora od 1uF na napajanje radi boljeg filtriranja 5V jednosmernog napona. Druga modigikacija se svodi na dodavanje EMI feritnih prstenova na sam USB kabal u cilju sprecavanja smetnji koje mogu da dodju od samog racunara. Naravno, moze da se koristi USB kabal koji vec poseduje takve prstenove. U vezi filtriranja EMI smetnji pogledajte moj clanak ovde.

Za kraj, samo da dodam da je veoma pozeljno koristiti nisko propusni filter (LPF) za 30MHz ili specifican propusni filter (BPF) ispred VF ulaza u ovaj uredjaj radi uklanjanja potencialnih smetnji koje mogu da dodju iz drugih opsega radio spektra, najcesce iz FM radio difuznog opsega.

Happy SDR-ing … 🙂

UPDATE 06.05.2013:

Kod izrade transformatora sa FT-37-43 jezgrom je potrebno namotati 10 navoja trifilarno za postizanje najboljih perfomansi za HF opseg. Primer jednog takvog transformatora (druga slika, oznacen brojem 6) mozete pogledati u ovom clanku.

Jos jedno korisno poredjenje i merenje nekoliko jezgra za wideband transformatore:

http://superkuh.com/gnuradio/HF%20Transformers%20for%20rtlsdr%20balun_%20Tom%20Berger_%202013.pdf

UPDATE 28.09.2013:

Goran YU1CF je uradio “ozbiljno” testiranje sa mreznim analizatorom i dosao do zakljucka da je najoptimalnije namotati 9 navoja trifilarno na FT-37-43 jezgu za pokrivanje celog HF opsega. Sa 10 navoja koje sam ja prvo preporucio se “vuce” malo nize, tj dobijaju se nesto bolji rezultati na 1.8MHz opsegu. Dodatno, Goran je uradio vrlo fin BPF filter za 80m i detalje konstrukcije mozete videti ovde: http://www.yu1cf.com/80m-SDR-filter-100w/100W-SDR-80m-3.5MHz-3.8MHz-Filter

—————

Link-back:

http://www.icom.co.jp/beacon/talk/001518.html

http://superkuh.com/rtlsdr.html

http://mbrochand.chez-alice.fr/radio/Modification_RTL2832U.pdf

http://www.hamradio.selfip.com/i6ibe/rtl2832hf/dongle.htm

http://blog.livedoor.jp/bh5ea20tb/archives/4263275.html

http://pmr446.xooit.com/t4047-SDR-recepteur.htm?start=30

http://www.hrvhf.net/index.php?option=com_jfusion&Itemid=110&jfile=index.php&topic=2072.75

http://vk.com/dvb_tv

http://radioamateur.xooit.fr/t242-Un-tuner-TNT-USB-en-SDR-0-60MHz.htm

http://rogovsky.livejournal.com/387951.html

http://knietzsch.de/radio-tv-world/amateur_radio/sdr.htm

http://www.brugtgrej.dk/forum.php?mode=thread&obj=28062

http://www.ukrtvr.org/forum.html?func=view&catid=6&id=38550

http://awaitingstock.wordpress.com/page/6/

http://on4jx.net/content/analyseur-de-spectre-partir-dune-cl-usb-destin-la-r-ception-de-la-t-l-vision-num-rique

http://www.cqham.ru/forum/showthread.php?t=22261&page=4

http://kaiyanotako.blogspot.com

http://radioproffi.ucoz.ua/forum/7-131-5

http://www.radioscanner.ru/forum/topic45014-93.html

http://www.yu1cf.com/80m-SDR-filter-100w/100W-SDR-80m-3.5MHz-3.8MHz-Filter

http://ja1tgo.web.fc2.com/DIGRX1.htm

73 de YU3MA

RTL-SDR – 1. deo

Vec neko duze vreme je u SDR krugovima vrlo aktuelna varijanta bazirana na jeftinom DVB-T USB uredjaju koji uz adekvatne drajvere i programe moze da sluzi kao Software Defined Radio prijemik za opseg od 50MHz do 1700MHz a uz male HW prepravke i za HF oseg od 0Mhz do 28.8MHz.

Ovaj mali simpaticni uredjaj je prvestveno namenjen za prijem FM Radia i digitalne televizije po DVB-T standardu ali obzirom da je nasa RATEL agencija odlucila da zvanicni standard u Srbiji bude DVB-T2 ovaj uredjaj ce tesko biti iskoriscen u tu svrhu a inace i jedan od razloga zasto se takvi i slicni USB uredjaji ne prodaju na nasem trzistu. Ukoliko zelite da pribavite jedan ovakav primerak po ceni od 17€, mozete posetiti (proverena prodavnica) DealExtreme. Sledeca slika prikazuje unutrasnjost Ezcap DVB-T primerka koji mi je stigao sa DX:

Sta je u celoj ovoj prici sa ovim USB uredjajem tako zanimljivo?

Da prvo objasnim sta sadrzi ovaj uredjaj u sebi. Postoje X varijacija na ovu HW konstrukciju ali je svima zajednicko da poseduju jedan digitalni tuner IC i jedan baseband AD konvertor IC sa USB interfejsom. Za tuner se prvo pocelo sa Elonics E4000 sa kojim jos pre nekoliko godina bio projektovan cuveni SDR FUNcube USB dongle. U medjuvremenu je firma Elonics otisla pod led i na trziste se pojavio vrlo slican FC0012 i FC0013 firme Fitipower digitalni prijemnik.

Sledeci blok diagram prikazuje unutrasnju strukturu E4000 IC koja skoro indenticna kao i kod FC0012/13.

Iz prilozene slike se odmah da zakljuciti da je ovo vec vidjen koncept koji se primenjuje kod Softrock i ostalih SDR konstrukcija stim da je ovde u E4000 to sad sve integrisano u jednom IC. Na zalost, za ovaj E4000 niti FC0012/13 trenutno nije javno dostupna tehnicka dokumentacije, tj dostupna je samo na zahtev uz potpisivanje NDA ugovora.

U poredjenju sa FunCube gde je koriscen custom baseband AD i DSP procesor, kod ovih novih DVB-T USB uredjaja se umesao veliki proizvodjac Realtek koji je izbacio na trziste RTL2832U chipset i automatski doveo do drasticnog obaranja cene ovakvih gotovih uredjaja. RTL2832U je dvokanalni AD konverter sa diferencialnim ulazima, rezolucije 8bita sa maksimalnim sample rate od 3.2Msps. U ovom IC se dodatno nalazi i digitalni down-konverter (DDC) koji je prvestveno postavljen kako bi se medjufrekvenca (IF) iz tunera mogla postaviti na bilo koju frekvenciju ali je uprava on iskoriscen i za “hakove” sa direktnim prijemom HF osega. Takodje RTL2832 poseduje integrisan USB 2.0 interface kao i I2C port za kontrolu tunera. Dodatno ovaj IC zadrzi i jos neke funkciske blokove vezane za samu DVB-T televiziju ali nam oni u ovom trenutku nisu bitni.

Cela prica pocinje kada se “skontalo” da ovaj RTL2832U moze da radi AD konverziju i da izlazne podatke izbacuje kao RAW (ne procesiran/ne kompresovane) zapis sto omogucava da na PC racunaru radimo dalje procesiranje ili demodulaciju koja se oslanja cisto na upotrebljeni software. Otuda njega u SDR svetu 🙂

Nastavak sledi …