Fórum témák

» Több friss téma
Fórum » Digitális vezérlésű órajelgenerátor
Lapozás: OK   1 / 2
(#) Kisvé hozzászólása Júl 23, 2013 /
 
Sziasztok!
Egy projekt során olyan feladat állt elő, hogy órajelet kellene valahogy generálnom nagyon széles tartományban. A nagyon széles tartomány kb. 1kHz...10MHz-et jelent. (esetleg még szélesbbet)
Az órajel állításnak felbontása legrosszabb esetben is az alábbiak szerint kell, hogy alakuljon:
1,001 kHz
1,002 kHz
...
10,00kHz
10,01kHz
...
9,998MHz
9,999Mhz
10,00Mhz
Tehát négy helyi értéket figyelembe véve az utolsó helyi értéket kell tudni egyesével változtatni.

Az órajel jitter nem túl lényeges paraméter. Ha az aktuális órajel frekvencia max 1..2%, az már teljesen jó.

Természetesen cél a költség hatékonyság. Nem tartom jó ötletnek, hogy FPGA-val vagy ASIC-kal kelljen órajelet csinálni

Remélem lesz valamilyen jó ötletetek!
Előre is köszi!
(#) Hp41C válasza Kisvé hozzászólására (») Júl 23, 2013 /
 
Szia!
DDS: Direct digital synthesizer. Végy egy alkalmas kontrollert, ami egy egyszerű programrészletet kellő gyorsasággal le tud futtatni, egyszerűen tudjon hosszú (24 - 32 bites) számokkal műveletet végezni. Vegyél fel egy 24 - 32 bites tárolót és egy 24 - 32 bites növekményt. Minden ciklusban végezd el a következőket: Adjuk hozzó a növekményt a tárolóhoz, az eredmény legfelső bitjét másoljuk át a kimenetre. A ciklus lefutásának idejét és a növekményt beállítva határozzuk meg a kimenő ferkvenciát. Ha nem négyszög jel kell, egy 256 byte-os memóriaterületre tároljuk el egy priódus képét. A tároló felső 8 bitjével címezzük meg a táblázatot és az onnan kiolvasott értéket írjuk ki egy kellően gyors D/A -ra (R-2R létra).
Egy 40MHz-s 18F252 csak 500kHz -ig bírja (24 bites értékek, 1 us ciklusidő 1/16 Hz felbontás)...

Kaphatók DDS áramkörök is.
A hozzászólás módosítva: Júl 23, 2013
(#) ha1drp válasza Kisvé hozzászólására (») Júl 23, 2013 /
 
A feladathoz kifejezetten megfelel az ebay-en tucatszám kapható AD9850 DDS modul. Ez sorosan vagy párhuzamosan programozható. Bármely egyszerűbb kontroller is elég hozzá, s rengeteg példaprogram fellelhető a NET-en.
(#) Peter65 válasza Kisvé hozzászólására (») Júl 23, 2013 /
 
Szia!
Processzor nélkül HC4046-tal meg lehet csinálni, a VCO kimenő jelét programoszható osztóval vissza kell kötni az egyik fázisdiszkriminátor bemenetre, a másik bemenetére pedig egy fix referencia frekvenciát kell csatlakoztatni. A HC4046-tal 30-40MHz-ig is el lehet menni, de a széles befogási tartomány problémát okozhat.
Olcsóbb, akár 8 bites PIC-kel is meg lehet csinálni, bár a 10MHz az már sok lehet. Két irányban is elindulhatsz;
1. a PIC-ek többségének állítható a belső oszcillátora, így azzal szintén felépíthető egy PLL kör
2. a legújabbakban van NCO modul, ami neked jó lehet
(#) ha1drp válasza Peter65 hozzászólására (») Júl 23, 2013 /
 
A HC4046 megoldás a PLL-re, de akkor is kell hozzá egy programozható osztó, s nem is egyszerű. Másik probléma a sima pll-el, hogy akár 1 Hz-es felbontást is tudnia kellene, ami önmagában megint nem megoldható kell még egy programozható osztó a VCO kimenetére is.
A PIC belső oszcillátora nem stabil. Az NCO problémája, pedig hogy nem állítható be bármely értékre.
Létezik pár komplett PLL chip (pl.: CDCE706), de a probléma itt is az, hogy az osztó nem állítható be minden kívánt értékre.
(#) Kisvé hozzászólása Júl 23, 2013 /
 
Köszi a válaszokat!
Sajnos DDS-sel is elég nehéz ügy. Az alacsony frekvenciákkal nem is lenne gond, viszont a Nyquist frekvenciához közeledve már eszméletlen nagy lesz a jittere. Pl. adott egy DDS, ami 100MHz-ről megy és az egyszerűség kedvért a hangoláshoz használt szó is max 100 millió lehet, így a hangolószó minden értéke 1Hz-nek felel meg. Azaz ha beleírok 1-et, akkor 1Hz-lesz a kimenő jel, ha 2-t, akkor 2Hz. Viszont ha beleírok 45 milliót, hogy 45Mhz-t kapjak, akkor egy periódust 100/45 = 2,222 részből fog kirakni. Na most ez vagy 2 vagy 3 valóságban, ami elég bizonytalanná teszi jelet. Ez azért már nem megengedhető. Ahogy számoltam kb. 1GHz-es DDS kellene, hogy elfogadható jitter legyen 10MHz-n. Ennél viszont kicsit olcsóbbra gondoltam, mert egy ilyen DDS kb. 10.000Ft .
A PIC-es PLL sajnos nem járható út, mivel ahogy írtátok csak kis tartományt fog át. Még egy nagyságrendet sem. Legjobb ismeretem szerint ez általában igaz a PLL-ekre. Vagy max 2 nagyságrend.
Egyetértetek azzal, amit írtam, vagy rosszul látok valamit?
A hozzászólás módosítva: Júl 23, 2013
(#) Kisvé válasza ha1drp hozzászólására (») Júl 23, 2013 /
 
Sajnos én sem találtam olyan órajel generátor IC, amely teljesítené ezeket követelményeket.
Ha nem lesz jobb megoldás, akkor muszáj lesz beletenni egy pár GHz-es DDS-t. De örülnék, ha ki tudnánk találni valami ötletesebb, olcsóbb megoldást.
(#) ha1drp válasza Kisvé hozzászólására (») Júl 23, 2013 /
 
Igen a DDS-be beírt szám valóban hasonlóan alakul, de a nagyságrendet elírtad. Inkább 0.03 Hz nagyságú.
Természetesen a periódus nem lehet nem egész ez esetben nem fut le az egész periódus csak egy része -igy nem lehet "bizonytalan". A probléma a felharmonikusok jelenléte lehet de 10MHz-ig azonban szerintem nem okozhat problémát. -Bár lehet rosszul tudom - a DDS a legkisebb jitter-rel rendelkező eszköz. Az azonban igaz, hogy az oszcillátor jittere áttranszponálódik a kimenő jelre.
(#) Kisvé válasza ha1drp hozzászólására (») Júl 23, 2013 /
 
Akkor valamelyikünk rosszul tudja
Ha jól értettem az amit 1Hz felbontásnak írtam, az szerinted 0,03Hz.
Indoklás:
100MHz a DDS órajele és a hangolószó legnagyobb értéke is 100 millió. Ez azt jelenti, hogy a DDS-ben 100M "szó" memória van. Ha a hangolószónak 1-et írsz be, akkor minden órajelre pontosan következő memória címre fog ugrani. Mivel 100M memrória van benne 100M órajel kell hogy végig érjen. Ha 100MHz-es, akkor 100M oszcilláció épp egy 1 sec alatt lesz így fog kijönni 1Hz jel.
Ha 2-t írsz bele, akkor értelem szerűen 50M oszcilláció kell, hogy végig lépkedjen a memórián, mivel ekkor kettesével lépked. Ha egy másodperc alatt 100M lépés van, akkor 2-szer fog végig érni, azaz 2Hz lesz a jel.
Ha 1 milliót írsz bele, akkor 100M szón 100 órajel kell egy periódushoz. 100MHz-es órajelben pedig 1 milliószor van 100 órajel, azaz 1 milliószor ér végig -> 1MHz.
Vélemény?
(#) ha1drp válasza Kisvé hozzászólására (») Júl 23, 2013 /
 
Csak nem a lépésközt változtatod, hanem a kezdő memóriacímet. Az órajel marad, ezért alacsonyabb frekvencián szinusz jelet kapsz magasabban meg csak hasonlót.
(#) Peter65 válasza Kisvé hozzászólására (») Júl 23, 2013 /
 
A PIC belső oszcillátorát általában +-5...10%-os tartományban lehet állítani. Valóban nem pontos, de egy PLL-hez úgyis kell egy referencia oszcillátor, ami majd a zárt hurokkal pontossá teszi. Ha tehát a belső timer-ekből kialakítható olyan oszcillátor, amivel a legnagyobb frekvenciákon is legalább 5%-os pontossággal lehet lépni, akkor a belső oszcillátor állításával a köztes értékek elérhetők. Így nem csak egy, hanem az elvárt 3 nagyságrend is átfogható.
A dsPIC-ek oszcillátora egyébként még sokkal rugalmasabb és tágabb PLL kialakításra ad lehetőséget.
Valamikor az 1980-as évek végén a kollégáimmal CD4046-tal csináltunk 1Hz...1kHz-es oszcillátort. Ez is 3 nagyságrend volt, és működött.
(#) Gafly válasza Kisvé hozzászólására (») Júl 23, 2013 /
 
Mindig megfordul a fejemben a hasonló kérdések esetében a miért? Tudsz valamit mondani erről?
(#) pucuka válasza Kisvé hozzászólására (») Júl 23, 2013 / 1
 
Akkor egy egyszerű módszer, ahogy régen is csinálták. Építesz egy astabil multivibrátort, és az egyik visszacsatoló hálózatát (RC tag) Yaxley kapcsolóval oldod meg. A másik lehet állandó, és ilyenkor előáll egy változtatható frekvenciájú azonos szélességű impulzus sorozat. Ha ezután kötsz még egy monostabil áramkört az időzítést hasonlóképpen megoldva. Akkor lesz egy jó kis impulzus generátorod, amit órajelnek is használhatsz, meg sokminden másra is. Az RC tagok kapcsolóját kialakíthatod dekádikusra is. Persze nem árt a végére egy jelformáló buffer.
A hozzászólás módosítva: Júl 23, 2013
(#) Kisvé válasza Gafly hozzászólására (») Júl 23, 2013 /
 
Arbitrary generátort készítéséhez. A mikrokontroller memóriájába betöltök pl 128 adatot és azokat ciklikusan kirakom egy D/A-ra.
Azért lenne jó a mikrokontroller órajelét változtatni, mert ellenkező esetben csak úgy lehetne csinálni, hogy max.frekin megy az MCU és megmondom, hogy a következő állapotot x idő múlva rakd ki. Ezzel az a baj, hogy ha pl. 3 assembly utasítás kirakni egy adatot, akkor ha eggyel lassabb jelet akarok kirakni, akkor beleírok egy nop-ot. Na de akkor akkor a 3 utasításból 4 lett, ami 33%-kal lassabb jel. Persze mikor a lassú jeleknél 10000 utasítás van két jel között, akkor a 10000 után a 10001 már jó lenne, csak gyors jeleknél nagyon rossz felbontás. A minimum az lenne a cél, hogy 100kHz-es jelet ki tudjak adni.
(#) Kisvé válasza pucuka hozzászólására (») Júl 23, 2013 /
 
Ez az ötlet jól hangzik, mindenképpen átgondolom. Köszönöm szépen
Annyit kell kitalálni hozzá, hogy digitálisan lehessen vezérelni.
(#) Kisvé válasza Peter65 hozzászólására (») Júl 23, 2013 /
 
Én is dsPIC-ben gondolkodtam. Azoknak olyan PLL-e, (legalábbis a 40MIPS-eseknek), hogy 12,5MHz-től 80MHz-nek kell lenni a legutolsó osztó után. Sajnos ez nem sok minden.
Igazából nem hiszem, hogy PLL-lel meg lehetne oldani, tekintve hogy 1kHz-től 10MHz-ig 4 nagyságrend van. Ez már elég soknak tűnik számomra a legszuperebb PLL-nek is. De ha valaki tud ilyen PLL-t, akkor ne tartsa magában.
(#) pucuka válasza Kisvé hozzászólására (») Júl 23, 2013 /
 
Mondjuk, én is DDS -re szavaznék, annál egyszerűbb nemigen van, esetleg olcsóbb, de az több munka.
(#) Kisvé válasza pucuka hozzászólására (») Júl 23, 2013 /
 
Én afelé hajlok.
Most néztem, hogy az NE555 kimenő jelének felfutási ideje és lefutási ideje is 100 ns. Egy 10MHz-s jel periódus ideje összesen 100 ns Ráadásul ötletem sincs, hogy lehetne normálisan digitálisan vezérelni.
(#) pucuka válasza Kisvé hozzászólására (») Júl 23, 2013 /
 
Én nem 555 -re gondoltam, hanem közönséges tranzisztorosra, vagy TTL re.
Végül is PIN diódákkal lehetne kapcsolgatni az RC elemeket, de borzasztó bonyolult lenne. Legalábbis első blikkre.
(#) Kisvé válasza pucuka hozzászólására (») Júl 23, 2013 /
 
Ha dekadikusan be is tudnám rakni az ellenállásokat, akkor egy dekádon belül vajon hogyan lehetne állítani? Analóg esetben potméterrel lehetne trükközni. Ennek mintájára a digit potit túlzásnak érezném. Ráadásul nem hiszem, hogy annyira szereti a 10MHz-t.
(#) dokidoki válasza Kisvé hozzászólására (») Júl 23, 2013 / 1
 
Szia.
Nekem lenne egy ötletem: Méghozzá a Parallax Propeller chipje. Van hozzá olyan demó, mely tud generálni pld kettő lábon 0-128MHZ jelet, 1Hz felbontással. Mindezt 5MHz rendszerórajellel, melyet PLL-el 16szoroz, vagyis valójában 80MHz órajellel. Külső órajelet ill. kvarcot lehet modulálni... Kipróbáltam meglepő, mert mindez mellet, PC-billentyűzetet kezel, és VGA vagy videójelet állít elő, akár RF segédvivővel. Igaz a jel 3.3Voltos logikai jel a kimenet.
(#) Kisvé válasza dokidoki hozzászólására (») Júl 23, 2013 /
 
Váó! Nem semmi! Ezek szerint neked van tapasztalatod Parallax Propeller-rel. Beszerezhető? Mi kel az induláshoz? (pl. mennyi egy programozó)
Bár sem lenne épp egy egyszerű és olcsó megoldás, de nem árt ha az ember megismer egy teljesen új chipet.
(#) pucuka válasza Kisvé hozzászólására (») Júl 23, 2013 /
 
D/A átalakítóval például. R, 2R osztóval.
(#) Kisvé válasza pucuka hozzászólására (») Júl 23, 2013 /
 
Igaz! Köszi!
(#) dokidoki válasza Kisvé hozzászólására (») Júl 23, 2013 /
 
Bezony, szerintem is páratlan ebben... Szerintem, nem vészes, én kaptam egy jó barátomtól, így az árát pontosan nem tudom, de nem lehet nagyon vészes. Programozni meg nagyon könnyű, mert valójában soros porton keresztül megy, egy hozzávaló fejlesztő programmal. Szóval semmi extra. Ráadásul ingyenes a hozzávaló fejlesztő szoftver rendszer, és rengeteg un. demó van hozzá.
(#) _vl_ válasza dokidoki hozzászólására (») Júl 23, 2013 /
 
Okés, de a hivatkozott demóra egy linket is berakhatnál...
(#) Kisvé válasza dokidoki hozzászólására (») Júl 23, 2013 /
 
Csodás! Bele is nézek. Köszi még egyszer.
Bár a DDS megoldás az egyszerűsége miatt még mindig csalogató
(#) dokidoki válasza _vl_ hozzászólására (») Júl 23, 2013 /
 
Emlékeim szerint benne van a Prop.toolban
(#) _vl_ válasza dokidoki hozzászólására (») Júl 23, 2013 /
 
Azt írtad, hogy kipróbáltad. Hogy? Mit csináltál, hova kattintottál, hogy "belenőtt" a chipedbe a program? Forrását láttad?
(#) dokidoki válasza _vl_ hozzászólására (») Júl 23, 2013 /
 
Így van, kipróbáltam. A Kónya féle propell-cikkben szerepelt, ezt pötyögtem le a propeller -toolba.
De a Frequency Synthesizer demo v1.1 is megcsinálja ezt, igaz videójel és billentűzet nélkül.
A hozzászólás módosítva: Júl 23, 2013
Következő: »»   1 / 2
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem