Egyszerű elektronika - bonyolult matek

Az egyszerű elektronika: FS7140 PLL IC
http://www.onsemi.com/pub_link/Collateral/FS7140-D.PDF

Fel lehet írni olyan matematikai függvényt, ami a referencia frekiből és a kívánt kimeneti frekiből kiszámolja az osztók ideális beállítását(legkisebb eltérés a kívánt frekitől), figyelembe véve az IC lehetőségeit és limitációit.
Ha igen, akkor mi az? :)

Update:
Mostanság többen kerestek(rádióamatőrök, vájtfülűek) nagy pontosságú referencia órajelet, aztán amikor meglátták a az 1 ppm alatti oszcillátorok árát akkor kicsit elkezdték vakarni a buksit. Szinén mostanság sokat játszadoztam az OsmocomBB projekttel és akkor futottam bele ebbe.
Innen jött az ötlet, hogy meg kellene valósítani. A mobilokban, ha szinkronizálta magát az adóhoz, akkor 0,1 ppm pontosággal ketyeg az oszcillátor, a Mororolákban 26 MHz-en, a többiben is 13MHz valamely egész számú többszörösén.
Az FS7140-et azért választottam mert ez van a fiókban, paraméterei megfelelőnek tűntek a feladathoz, kicsi és I2C buszos, könnyen betákolható a telefonba, nincs külső alkatrészigénye. Berakok egyet antenna alá egy MMCX csatival és kész a 0.1 ppm-es mobil órajel generátor. :) Na meg persze némi C kódolás I2C ügyben.
Közben vizualizáltam az IC működését. (Kódot nem nézni. A gyorsaság és az elfogadható funkcionalitás volt az elsődleges szempont)
Végül is 100kHz-től 100Mhz-ig 3 lépésben végig tudom hangolni a kütyüt. A Reference Divider 650-es értéke adta magát (van logokája csak hosszú leírni), a Post Divider három értéke (4,40,400) válassza ki a három sávot (100kHz-1MHz, 1MHz-10MHz, 10MHz-100MHz), a Feedback Divider 1000-10000 hangolja végig az adott sávot. A stepping az adott sáv alsó értékének az ezred része.
Aztán ha feladom a Post Divider-ben ezeket a szép kerek értékeket, akkor IC teljes tudása kihasználható: CMOS kimeneten 35kHz-150Mhz-ig , PECL-en 300MHz-ig.

A matek képletnek semmi gyakorlati jelentősége nincs. Csak megfordult a fejemben, hogy vagány lenne egyszerűen csak bebillentyűzni a telefonba pl. a PAL színsegédvivő freki.
Egyébként a telefonban egy 104MHz-en ketyegő ARM7 van. Lehet, hogy kipróbálom a közelítős keresős módszert is. :)

Hozzászólások

Ez neked miért kell zárt alakban? Írj rá egy programot, s az algoritmusod keresse meg az optimumot.

Egyszer hasonlót csináltam, csak ott több erősítő fokozat volt egymás után. Mindegyik programozható volt. Cél, hogy a kívánt eredő erősítést a legkisebb hibával úgy állítsuk be, hogy a jel/zaj viszony a legjobb legyen, túlvezérlés, torzítás, sehol se lépjen fel a láncban. Írtam rá scriptet, előállította azt a táblázatot, amely az egyes erősítők beállításait tartalmazta. Az így előállított file-t include-oltam a forrásba.

Amúgy zárt alakban, képletszerű megoldásod szerintem nem feltétlenül lesz. Legalább is sokat ront a dolgon, hogy az értelmezési tartomány diszkrét, egész.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Jó feladvány, végiggondoltam a benne levő osztóláncokat és én is arra jutottam, hogy egzakt matematika nincs rá, csak szimulációs minimum pont keresés.

Ez 9,43 millió lépést jelent ebben az esetben, amit ha tovább optimalizálsz, akkor is 1 millió lépés felett lesz. További gyorsítás, hogy ha tudod milyen pontosságtól elfogadható, akkor ott félbeszakíthatod a szimulációt.
Egy mai 500 Ft-os ARM vagy MIPS mikrovezérlő is tizedmásodpercben mérhető időben végigszimulál ennyi lépést.

Egyébként ha precízebb frekvenciabeállítás kell, akkor én törtes PLL-t keresnék ez helyett, ahol a kvarcfreki/kvarcosztó * ( N + M/felbontás ) arányú szorzatával lehet szépen beállítani a kívánt frekvenciát.
Esetleg DDS-t, de ott a kimenetet még aluláteresztő szűrnöd és ha négyszög jel kell, akkor komparátoron négyszögesítened kell, hiszen a D/A kvantált színuszos mintái esnek ki.

Érdekességként megjegyzem, bármelyik jelenleg kapható Raspberry (1-es, 2-es és Zero) tartalmaz 0..125 MHz között konfigurálható törtes PLL-t, amely a GPIO4-esén jön ki. Lépése: 500 MHz / ([4..4096] + [0..4095]/4096). Látható, hogy a lépésköze frekvenciafüggő, 10 MHz-en 50 Hz de 25 MHz-en már 300 kHz.
Mértem spektrumanalizátorral annó, szépnek tűnt a jele.

Mihez kell ilyen pontos frekvencialépés?

vagány lenne egyszerűen csak bebillentyűzni a telefonba pl. a PAL színsegédvivő

Ehhez továbbra sem kell a zárt alak. Kell egy függvény, amelynek az inputja a kívánt frekvencia, az outputja az osztás értékek. Az mindegy, hogyan iterál a függvény. Itt-ott gondolom, a bináris keresés is járható út. Picivel gondolkodósabb megírni - tényleg csak kicsivel -, viszont futásidőben sokat nyersz a lineáris kereséshez képest, hiszen O(n) helyett O(log(n)) lesz. Azon most nem tűnődtem el, hogy egymásba ágyazott ciklusok mennyire lennének, s akkor ez hogyan alakul.

Sőt, az utolsó osztásarány közvetlenül is számolható visszafelé, csak kerekíteni kell. Itt aztán lehet tárolni relatív hibát, s annak minimumát keresni a végén. Amúgy szép feladat. Nem annyira bonyolult, hogy elmenjen az ember kedve tőle, s nem is annyira triviális, hogy 8 percen belül legyen meg.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE