DDS generatorius. Užkulsiai.

2010-01-16 23:39

Aš čia parašiau nemažai, kaip mano generatorius atrodo, ką daro, bet kas jo viduriuose, taip ir neparodžiau, o tai turbūt daugumai yra įdomiausia. Pradėsim nuo veikimo pricipo.

strukturine schema

Principinė shema, kad būtų viskas aiškiau. O joje matom štai ką. Mikrovaldiklis užsiima vadovavimu. Nuskaitinėja klaviatūrą, kai reikia nusiunčia pasikeitimus LCD, ateniuatoriui ir generatoriaus mikroschemai. Pastaroji užsiima signalo generavmu, atsakinga už dažnį ir formą. Iš čia signalas keliauja į skaitmeniškai valdomą ateniuatorių, kuriuo galima keisti amplitudę ir nuolatinę dedamąją (offset). Už ateniuatoriaus stovi niekam nepavaldus ir visiškai savarankiškas stiprintuvas, kuris tiesiog stiprina signalą tam tikru santykiu ir pagal idėją duoda daugiau srovės, jei reikia. Be to praktika parodė, kad jis ir sudega, apsaugodamas likusią grandinę, jei kas netaip. :) Maitinimo blokai du, nes stiprintuvui reikia +- 12-15V (priklauso nuo stiprintuvo), o kitom schemom +- 5V (-5 reikia tik ateniuatoriui). Dar vienas neaptartas blokas yra taktinio dažnio generatorius. Jis reikalingas DDS generatoriaus veikimui, kadangi anas yra skaitmeninis ir pats iš savęs veikti nemoka. Taktinio dažnio generatorius generuoja pastovaus dažnio sinusoidę.

Taigi lendam giliau. Principinė schema.

Pradėsim nuo kairės. Mikrovaldiklis ATMega16 komentarų kaip ir nereikalauja. Pasirinktas daugiausiai dėl kojelių skaičiaus. Jungtys dešinėje klaviatūrai (XS1) ir LCD (XS2). Klaviatūrai naudojama mygtukų matrica iš tokio daikto. Jame yra graži jungtis mygtukų plėvelei, kurią nesunkiai perlitavau. Puikiai pritaikyta vandalizacijai. :) LCD standartinis raidinis 16×2, valdomas 4 bitais, nes taip įdomiau ir norėjau pataupyt kojas, nes nežinojau, kiek tiksliai periferijos reiks.

DA1 yra generatorius. Analog devices kūrinys. Palaiko iki 25 MHz taktinį dažnį, taigi teoriškai iki 12,5 MHz signalas išėjime. Praktiškai tas signalas nelabai koks išeina, nebent gerai atfiltravus bus sinusoidė, ir ta nekokio tikslumo. Bet turint 10 atskaitų (apie 1 MHz) signalai jau visai gražūs. Aš naudojau 20 MHz taktinio dažnio generatorių (DA3). Šiaip dėl to, kad tokį turėjo darbo vadovas, bet man jis ir šiaip atrodo geriau už 25 MHz, nes norint gauti 10, 5, 2, 1 MHz dažnius reikia dalinti iš sveikų skaičių, o tai pagerina signalo kokybę. Išėjime galima gauti sinusinį, trikampį ir stačiakampį signalus. Durnas dalykas, kad sinusas ir trikampis yra 0,65 Vp-p, o stačiakampis - 5 Vp-p. Ir dar abu prasideda nuo 0V, t.y. turi skirtingą nuolatinę dedamąją. Mikroschema valdoma SPI sąsaja. SPI signalo dažnis gali būti iki 40 MHz, liuosiai galima organizuot frequency sweep, fsk, psk (yra registrai dažnio ir fazės nustatymui) ir su papildomom priemonėm kad ir fm “fyčersus”. Giliau patyrinėjus man pasirodė, kad tik fantazijos reikalas, kam galima pritaikyti šitos serijos generatorius.

Toliau (DA2) dar vienas egzotinis įrenginukas. Jei labai oficialiai, tai keturių kvadrantų aukštadažnis įtampos daugintuvas. Tokį pasakymą labai mėgo mano baigiamojo vadovas. :) Papraščiau pasakyt, ką šitas daikčiukas daro: W = X * Y + Z. X, Y ir Z yra įtampos įėjimuose, kurių pirmi du yra diferenciniai. Išėjime pagal duotą formulę gaunama įtampa W. Pralaidumo juosta iki 250 MHz, įtampa iki 2,5 Vp-p. Dalykas paprastas, bet išsprendžia labai daug problemų. Visų pirma norint išpręsti minėtą nuolatinės dedamosios problemą labai naudingi diferenciniai įėjimai. Problema išsprendžiama paprastu įtampos dalikliu. Antra, norint valdyti amplitudę ir nuolatinę dedamąją skaitmeniniu būdu, nereikia aukštadažnių skaitmeninių potenciometrų ar DAC’ų. Viskas valdoma nuolatinėm įtampom, gaunamom paprasčiausiomis priemonėmis. Be to su tokiu daiktu galima realizuot amplitudines moduliacijas ir kitokių smagių dalykėlių. Nuolatinės įtampos kuriamos skaitmeniniais potenciometrais (DD2 ir DD3) ir krūvele rezistorių, sudarančių įtampos daliklius. Įtampos dalikliuose įdėjau trimerių, kad galima būtų panaikint rezistorių paklaidas.

Paskutinė pakopa - paprastas operacinis stiprintuvas prijungtas klasikine schema. Stiprinimo koeficientas sugalvojamas pagal skaičiavimus, o tiklsiai amplitudė suderinama R7 trimeriu. Šitas konkretus stiprintuvas yra labai kietas tuo, kad gali pasiekti man reikalingą 20 Vp-p amplitudę prie 10 MHz. Žemiau šio stiprintuvėlio charakteristikos iš datašyto. Matosi, kad man jis labai tiko, nes pralaidumo juosta kaip tik tokia, kokia man reikia. Tai paverčia stiprintuvą ir papildomu filtru. Galutiniam variante tarp įtampų daugintuvo ir išėjimo stiprintuvo stovi ir rc filtras, šitoj schemoj jis nepavaizduotas.

operacinio stiprintuvo charakteristikos

Na ir galų gale apačioje maitinimo blokas. Bent kartą dariusiems dvipolį maitinimą manau klausimų nekils. Dvipolis 15 V maitinimas stiprintuvui, dvipolis 5 V daugintuvui, viskam kitkam +5 V. Maitinimo bloko dalis iki kištuko yra atskirame blokelyje, o stabilizatoriai ir keraminiai kondensatoriai jau plokštėje. Tiesa, buvo versija, kur ant 15 V dar pastačiau 12 V stabiliatorius, nes pasirodė, kad smd korpuse operaciniam stiprintuvui maksimali maitinimo įtampa yra būtent +-12 V. Su tokiu maistu jis pasiekdavo 10 V amplitudę, bet nė lašo daugiau. Jei kada prisiversiu perdaryt montažinę plokštę, darysiu su dip korpuso operacinuku. Ir dar viena klaida buvo pasirinkti stabilizatorius so-8 korpuse. Pasimatavau veikiančio generatoriaus valgomą srovę, ji, kaip ir buvo skaičiuota, su atsarga tilpo į gamintojo nurodomas ribas, bet stabilizatorių pirštais paliesti nelabai eina. Dabar dėčiau šiek tiek galingesnius, galbūt kelis atskiroms grandinės dalims.

Manau dar reiktų paliesti skaudžiąją finansinę dalį. Taigi pradžioj paskaičiuokim. Klaviatūra ir generatorius maždaug po 50 Lt, LCD kokie 40 Lt, daugintuvas, stiprintuvas po 20 Lt, kontroleris, skaitmeniniai potencai, transformatorius po 10 Lt, laidai, pasyviniai elementai, taktinio dažnio generatorius, kištukai, lizdai ir kita turbūt dar koks 20-30 Lt. Jei nieko nepamiršau, tai išeina … ~250 Lt. Šitas daiktas gavosi gana nepigus, bet daugiausiai dėl mano kaprizų arba užsibrėžtų tikslų (baigiamojo užduotį susigalvot reikia beveik metus prieš gynimą, todėl kai kurie punktai būna nepasvertai reiklūs). Man nemažai dalių davė baigiamojo darbo vadovas - generatorių, taktinio dažnio generatorių, daugintuvą, LCD pirkau iš “second hand”. Žodžiu kokią šimtinę sutaupiau, bet vis tiek baveik visa gero studento stipendija. :)

Šiaip visas dalis gavau Lietuvoje. Sudėtingiausia procedūra yra su generatoriumi, kurį galima gauti iš digikey per evitą, arba tiesiai iš digikey. Esmė ta, kad visas dalis galima gauti pavaikščiojus į kelias Vilniaus parduotuves, be siuntimosi iš užsienio ir be pay pal sąskaitų ir panašių mandrų dalykų. Kai kurių dalių reiks palaukt, bet tik tiek.

Tai tokia ta trumpa mano generatoriuko apžvalga. Tikiuosi buvo įdomu ir naudinga.

DDS generatoriaus trilogijos pabaiga.

2009-06-20 22:11

Sveiki.
Jau praėjo kelios savaitės nuo baigiamojo gynimo, dabar atsipūtęs galiu papasakot, kaip sekėsi gamybos darbai.
Generatorių pagaminau (neskaitant korpuso), nors dar matau, kad daug kur galima jį tobulinti. Dabartinis vaizdelis toks:


Generatorius daro tik tiek, kiek užsibrėžta užduotije: iki 10 MHz signalas, trys formos ir iki 10V amplitudė (20 Vpp). Tiesa, šitie duomenys labiau reklaminiai.

Realiai prie didžiausio dažnio signalas lieka tik iš dviejų atskaitų, todėl apie kvadratą ir trikampį nelabai yra ką svajoti. Sinusas išeina, kai signalas tinkamai nufiltruojamas. Filtrą prisnargliavau RC (plokštėj nenumačiau jam vietos) ir jį derindamas mačiau, kad galiu arba atsikratyti aukšto dažnio triukšmo (turbūt iš 20 MHz taktinio generatoriaus) ir prarasti amplitudę nuo 2-5 MHz, arba triukšmus tik apmažinti, bet turėti 20 Vpp prie 10 MHz. Manau, kad praktikoj geriau pirmas variantas.

Kitas džiaugsmas yra tai, kad generatoriaus mikroschema sukuria ~0,6 V trikampį ir sinusinį signalus, bet 5 V stačiakampį. Gana durnas reikalas, sakyčiau. Dėl to stačiakampio signalo amplitudė ir offset blūdija. Šitą, matyt, teks spręsti programiškai, tik padidės stačiakampio amplitudės keitimo žingsnis. Galvojau generatoriaus išėjime apriboti amplitudę ir nukirst stačiakampio viršų, bet nesugalvoju, kaip. Nesu labai stiprus analoginėj elektronikoj.

Na ir trečia bėda yra ta, kad išėjime stovi operacinis stiprintuvas, kuris gali dirbt su mažiausiai 600 Omų apkrova. Na mano supratimu, tai nėra labai blogai, bet esmė tame, kad dėl to generatorius nėra fool proof, ir jau man pačiam teko supleškint vieną operacinuką prijungus prie 50 Omų dažnimačio. Ir to operacinuko šiuo metu nėra sandėlyje. Demonstracijai įlitavau kitą, siauresnės pralaidumo juostos. Nuotraukoje matosi apsivertęs dip vietoj smd.

Taip pat yra keli dalykai, kuriuos ateityje norėčiau padaryti. Pirmiausia programos tobulinimas. Vienas dalykas tai jos efektyvumo didinimas. Dabar sukasi amžinas ciklas ir nuskaitinėja klaviatūrą. Galima suorganizuot interrupt’us, hardvar’inį SPI. Antras dalykas - tai papildomas funkcionalumas. Offset’o valdymas, kuriam jau viskas paruošta aparatiškai, reikia tik papildyt programą, sweep funkcija.

Taip pat galvoju, kad nepakenktų perdaryti plokštę. Gal kažkiek efektyviau išdėliočiau, nereiktų taip iškišt visko į priekį. Be to yra ir keletas smulkių klaidų, o ir filtrui galima būtų numatyt šiltą vietelę. O jei dar pridėjus kokį galios stiprintuvą, tai jau ir visai neišvengiamas reikalas. Čia, beje, dabartinė plokštė dar su senu stiprintuvėliu:

Dariau lazerinio spausdintuvo technologija, bet tai jau buvo šiek tiek galvos skausmas. Plokštė maždaug 7 x 6 cm dydžio, o mažiausios mikroschemos dydis 3×3 mm su 0,5mm kojelių žingsniu. Atmegos irgi nelabai didelis. Nors stengiausi kaitinti tolygiai, plokšės vienas galas jau pradėjo plaukt (laimei tas, kur viskas gana stambu), o kitas dar tinkamai neprilipo, todėl buvo kelios vietos, kur nuiminėjant popierių takeliai atsilupo. Kur spėjau tai pamatyt, priglaudžiau atgal ir dar pakaitinau lygintuvo smaigaliu, kur nusilupo visai, papaišiau markeriu. Dėl šitų “manevrų” buvo nemažai atvejų, kai takeliai turėjo vos įžiūrimus įtrūkimus ir tai buvo populiariausias šio projekto bug’as (apie 10 nepastebimai nustrūkusių takelių). Kažkas neveikia - imam testerį ir praskambinam atsakingus takelius. Galų gale pavyko sutvarkyti šitus reikalus ir plokštė pagaminta iš pirmo karto.

Galų gale, nepaisant trūkumų, kurie reikiant yra sprendžiami, visai neblogas daiktas išėjo. Iš tikro labiau nei pačiu generatoriumi, esu patenkintas praktika su LCD, atmega ir DDS. Dabar jau visai rimtai mąstau apie projektą, kuris anksčiau man atrodė gana tolima svajonė - MIDI sintezatorius. Domiuosi muzika, groju ir norėčiau dirbti sritije, kuri bent kiek susijusi su muzika, todėl toks projektas man būtų labai įdomus ir gal net naudingas. Gal būt jei prisiversiu, pradėsiu jį gamint ir stengsiuosi čia aprašyt. Na o šitam generatoriui kol kas tariu “iki”, nes užsibrėžtą tikslą pasiekiau, o tobulint prisėsiu,  kai bus ūpas ir reikalas.

DDS generatorius. 2 dalis

2009-05-14 18:56

Sveiki

Laikas būtų antrai daliai. Ypač, kai nežinau, ar bus laiko blog’ams artimiausiu metu. Taigi, su generatoriuku dabar jau gerokai pasistūmėjau. Galima keisti dažnį, formą, virtualiai ir amplitudę, tik niekas nuo to nesikeičia, nes nėra, kas tą amplitudę pakeltų ir pareguliuotų - nėra išėjimo grandinės. Štai kokį vaizdelį dabar turime:

Toks ekranas pasrodo įjungus. Viršuje rodomą parametrą galima keisti klaviatūra. T.y. suvedam dažnį, spaudžam “Enter” ir dažnis pasikeičia. Norint keisti kitą parametrą, spaudžiam mygtuką po tuo parametru. Dabar klaviatūra toli nuo ekrano, tai sąvoka “mygtukas po simboliu” skamba keistai, bet galutinėj versijoj tie mygtukai bus po ekranu. :) Taigi paspaudę “0,5V” gaunam tokį ekraną:

Dabar galima įvest amplitudę. Turėtų kilti klausimas, o ką jei dažnis didelis? Atsakymas - jei dažnis didesnis, nei keturi skaitmenys gali parodyti, padaroma taip:

Apvalinimo nedariau, tiesiog nukandamas skaičiaus galas. Tas kiek negražiai atrodo, kai suvedama pvz 2,9 MHz, bet tikslas yra turėti užuominą, koks esamas dažnis, o tikslų visada galima pažiūrėti persijungus atgal į dažnio nustatymą.

Pasirinkus formos keitimą, ekranas kiek skiriasi:

Čia simbolis po dvitaškio rodo esamą formą, o toliau esantis užrašas 1~2^3- primena, kuris klaviatūros mygtukas, kurią formą reikškia. Skirtingai nuo amplitudės ir dažnio nustatymo signalo forma pasikečia iš karto po skaitmens paspaudimo. Esama forma, kaip ir kiti parametrai atvaizduojama ir kitose ekrano būsenose:

Čia stačiakampis nustatinėjant dažnį. Trikampis bus vėliau (tech. kliūtys :) ).

Meniu mygtukas rezervuotas visokiems ekstra nustatymams, kurių kol kas nėra.

Stengiausi padaryti intuityvų valdymą. Man labai patinka, kai prietaisas turi daug nustatymų, bet greit perpranti valdymą ir be manualo. Labiausiai nesuprantamas turbūt formos nustatymas, bet kai supranti, kas čia tokio tai gana patogu, įsitikinau bežaisdamas su skopu, žiūrinėdamas, kokios realios signalų formos prie įvairių dažnių.
Oscilogramų kol kas neprifotkinau, taigi jos bus vėliau. Kada vėliau nežinau, gali būt, kad tik kai apsiginsiu. Tuo labiau, kad bus dar išėjimo grandinė ir nuo jos gali pasikeist šis bei tas.
Tai tiek kol kas. Dabar reiks parašyt krūvą popierių, nes rimti dėdės antradienį tikrins, kaip mums sekasi. Jei turit minčių - komentuokit.
Iki.

J.

#include arba Sveiki. Darom pradžią

2009-05-03 00:44

Sveiki.

Kadangi neseniai pagaliau įveikiau trečią pagrindinę kliūtį savo baigiamojo link, tai nusprendžiau, kad tai bus geras laikas pradėti ir savo išpažintis, ką gi gero esu nuveikęs. Kadangi tai pirmas įrašas, todėl supažindinsiu, ką meistrauju savo elektronikos bakalauro baigamajam darbui.

“Specialios formos signalų generatorius”, toks baigiamojo pavadinimas. Ne daug jis pasako apie patį darbą, bet toks ir yra užmanymas - kuo mažiau prižadėt, kad po to būtų lengva ištesėt. : ) Konkrečiau tai bus DDS (direct digital synthesis) principu veikiantis generatorius, kuriantis sinuso, trikampio ir kvadrato formos signalus iki 10 MHz ir 10V. Dar konkrečiau - naudosiu AD9833 generatorių su 25MHz taktiniu generatoriumi, ATMega 16 mikrovaldiklį, 16×2 raidinį LCD, išprievartautą “numpadą” kaip klaviatūrą valdymui ir kokį nors greitą operacinuką su pribumbasais išėjimui buferinti ir palaikyti amplitudę. Taip pat yra planas išnaudoti pagrindines AD9833 savybes ir padaryti ASK, FSK ir PSK moduliacijas, swep’us ir, panaudojant du čipukus, padaryti dviejų koherentinių signalų su fazės poslinkiu generavimą, bet čia tik jei bus laiko.

Nei su vienu iš naudojamų komponentų nesu niekada žadęs. Net ir su ATMega, nes iki šiol užtekdavo tiny. Šį kartą teko imtis didesnio agregato vien dėl to, kad bijojau, jog neužteks kojų. O su jokiu lcd, ar generatoriais nesu nieko daręs, taigi viską priversti veikti buvo ką veikti.

Kai pagaliau išsiaiškinau, kodėl neveikia mano klaviatūra, supratau, kad mano sunkumų šaltinis greičiausiai buvo mikrovaldiklis, kuris iš pradžių atrodė geriausiai pažįstamas komponentas - su tiny taigi esu dirbęs. Vakar atsekiau, kad kažkaip nelabai veikia C porto kai kurie bitai. Pasiguodžiau draugui, o tas pasiteiravo, ar kairtais pas mane neįjungtas JTAG. Na, kaip ir nejungiau, bet pasitikrinau ir pasirodo, kad jis būna įjungtas gamykliškai..

Po kelių valandų knisimosi datašytuose ir programos kode (pasirodo jį reikia išjungti du kartus per keturis ciklus; taip dėl to, kad neišjungtum netyčia) pagaliau pavyko ir viskas, kas dabar prijungta prie mano ATMega, pradėjo veikti taip, kaip reikia. O dar dieną prieš užtikau apie tą nelemtą JTAG internete ir galvojau “oho, koks geras daiktas, reiks panaudot, jei ir toliau taip nesiseks debug’int”. Galit įsivaizduot mano reakciją, kai supratau, kad dėl JTAG ir atsirado didžioji dalis tų bug’ų..

Taigi dabar turim:

Generatoriuką - valdomas SPI vienkrypčiu ryšiu - vienam generatoriui trys laidai. SPI clock greitis gali būt iki 40MHz, todėl galima naudoti maksimalų mikrovaldiklio SPI dažnį ir pakankamai sparčiai keisti parametrus. Antrą generatorių jungsiu tais pačiais laidukais, tik enable jungsiu atskirą. Taip galima bus valdyt atskirai arba abu kartu. Dabar prijungtas tik vienas ir generuoja programoje nustatytą signalą (nuotraukoje nėra, nes testuojamas klaviatūros darbas).
LCD - įprastas 16×2 raidinis lcd, tik kad dar su papildoma kojele apšvietimui. Naudoju 4 bitų valdymą. Dabar rodo statinį užrašą ir klaviatūros nuskaitymo rezultatą.
Klaviatūrą - vat tokią skaičių klaviatūrą. Išardžiau, pasipaišiau, koks mygtukų jungimas, ir parašiau programėlę. 10 kontaktų ir 19 mygtukų. Šiaip buvo siūlymų imti ps/2 arba USB signalą ir jį dekoduoti, bet likau prie savo būdo, nes a) paprasčiau, b) nereikia maitinti papildomos grandinės ir proco, c) turim pakankamai mikrovaldiklio kojelių d) mygtukų matricos jungtis pakankamai padori, kad ją galima būtų perlituoti į kitą plokštę.

Na o dabar laikas prisėsti prie rašto dalies, nes pirmadienį reikės dėstytojui duot ką nors paskaityt, o po dienos bus ir oficialus patikrinimas, kaip mes spėjame vykdyti savo grafiką. Tikiuosi, kad pavyks greitai ką nors suburt, nes dabar jau labai knieti parašyt programą, kuri apjungs visus keturis komponentus ir privers juos dirbti vieningai. Artimiausias planas - įvedam skaitmenis klaviatūra, spaudžiam “Enter”, LCD rodo dažnį, o generatorius sukuria tokio dažnio signalą.

Pabaigai įmetu bendrą vaizdą ir atsisveikinu.

J.

lcd-atmega-keyboard