Shematski diagram generatorja dds na mikrokrmilniku atmel. Funkcionalni dds generator na plc. Preizkus načinov delovanja generatorja po montaži

Shematski diagram generatorja dds na mikrokrmilniku atmel.  Funkcionalni dds generator na plc.  Preizkus načinov delovanja generatorja po montaži
Shematski diagram generatorja dds na mikrokrmilniku atmel. Funkcionalni dds generator na plc. Preizkus načinov delovanja generatorja po montaži

Največja frekvenca - 65534 Hz ​​​​(in do 8 MHz HS izhod s kvadratnim valom). In potem sem pomislil, da je generator odlična naloga, kjer se lahko FPGA pokaže najbolje. Iz športa sem se odločil, da ponovim projekt na FPGA, pri čemer se držim rokov v dveh vikendih in dobim parametre, ki niso strogo določeni, ampak največji možni. Kaj se je iz tega izcimilo, lahko izveste pod rezom.

Dan nič

Preden je prišel vikend, sem imel nekaj časa za razmislek o izvedbi. Da bi poenostavil svojo nalogo, sem se odločil, da generator ne naredim kot ločeno napravo z gumbi in LCD zaslonom, temveč kot napravo, ki se na osebni računalnik poveže prek USB-ja. Za to imam ploščo USB2RS232. Plošča ne potrebuje gonilnikov (CDC), zato mislim, da bo delovala pod Linuxom (za nekatere je to pomembno). Prav tako ne bom skrival, da sem že delal s prejemanjem sporočil preko RS232. Vzel bom že pripravljene module za delo z RS232 z opencores.com.

Za generiranje sinusnega signala boste potrebovali DAC. Izbral sem tip DAC, kot v prvotnem projektu - R2R 8-bit. Omogočil vam bo delovanje na visokih frekvencah, reda megahercev. Prepričan sem, da bi FPGA morala biti kos temu

Razmišljal sem, kako bi napisal program za prenos podatkov preko COM vrat. Po eni strani lahko pišete v Delphiju; že imate izkušnje s pisanjem takega programa, poleg tega pa velikost izvršljive datoteke ne bo velika. Poskušal sem tudi skicirati nekaj za delo s Serialom v obliki java skripta na strani html, vendar je bolj ali manj delovalo samo prek serijskega API-ja za Chrome, a za to morate namestiti vtičnik ... na splošno , tudi ne pride v poštev. Preizkusil sem PyQt5 kot inovacijo zase, toda pri distribuciji takšnega projekta morate povleči kup knjižnic. Po poskusu prevajanja projekta PyQt v datoteko exe se je izkazalo, da je več kot 10 MB. To pomeni, da ne bo nič boljši od aplikacije, napisane v C++\Qt5. Prav tako je vredno upoštevati, da nimam izkušenj z razvojem v pythonu, imam pa izkušnje s Qt5. Zato je izbira padla na Qt5. Od pete različice se je pojavil modul za delo s serijo in sem že delal z njim. In aplikacijo, ki temelji na Qt5, lahko prenesete v Linux in Mac (za nekatere je to pomembno), od različice 5.2 pa lahko aplikacije, ki temeljijo na QWidgets, prenesete celo na pametni telefon!

Kaj je še potrebno? Seveda ima plošča FPGA. Imam dva (Cyclone iv EP4CE10E22C8N za 10 tisoč celic in Cyclone ii EP2C5 za 5 tisoč celic). Tistega na levi bom izbral izključno zaradi priročnejšega priključka. Projekt po obsegu ne namerava biti velik, zato se bo ujemal v enega od obeh. Ne razlikujejo se po hitrosti delovanja. Obe plošči imata na sebi 50 MHz oscilatorje, znotraj FPGA pa je PLL, s katerim lahko povečam frekvenco na predvidenih 200 MHz.

Prvi dan

Ker sem DDS modul že naredil v svojem projektu sintetizatorja, sem takoj poprijel za spajkalnik in začel spajkati DAC z upori. Vzel sem prototip plošče. Namestitev je bila izvedena z zavijanjem. Edina sprememba, ki je vplivala na tehnologijo, je bila ta, da sem opustil kislino F38N za kositranje stojal v korist TT indikatorskega fluks gela. Bistvo tehnologije je preprosto: regale spajkam v tiskano vezje, nanje pa spajkam upore s strani tiskanega vezja. Manjkajoče povezave naredim z zvijanjem. Prav tako so stojala priročna, ker jih lahko vstavim neposredno v ploščo FPGA.

Na žalost doma ni bilo na voljo uporov 1 in 2 kiloohmov. Ni bilo časa iti v trgovino. Moral sem opustiti eno od svojih pravil in odstraniti upore iz stare nepotrebne plošče. Tam so bili uporabljeni upori 15K in 30K. Rezultat je ta Frankenstein:


Ko ustvarite projekt, morate nastaviti ciljno napravo: Meni Dodelitve -> Naprava


V projektu sem kodiral neobvladljiv glavni DDS modul na fiksno frekvenco.

Generatorski modul 1000 Hz

modul signal_generator(clk50M, signal_out); vhodna žica clk50M; žični izhod signal_out; žica clk200M; osc osc_200M reg akumulator; dodeli signal_out = akumulator; //poskusite ustvariti 1000 Hz //50.000.000 Hz - taktna frekvenca zunanjega generatorja //2^32 = 4.294.967.296 - bitna globina DDS - 32 bitov //delite 1000Hz / 50.000.000 Hz / 2 * 4294967296 => 42949, 67296 vedno @ (posedge clk50M) začetek akumulatorja<= accumulator + 32"d42949; end endmodule


Po tem sem kliknil »Začni prevajanje«, da bi razvojno okolje vprašalo, katere vhodne/izhodne linije imamo v glavnem modulu projekta in s katerimi fizičnimi PIN-i so povezani. Po prevajanju se lahko povežemo dodelite vrstice, ki se prikažejo dejanskim PIN-om čipa FPGA:

Element menija Dodelitve -> Načrtovalnik zatičev

Zaenkrat prezrite vrstice HS_OUT, key0 in key1, v projektu se pojavijo pozneje, vendar nisem imel časa narediti posnetka zaslona na samem začetku.

Načeloma je dovolj, da v stolpcu Location “registriramo” le PIN_nn, ostale parametre (I/O standard, Current Strench in Slew Rate) pa lahko pustimo privzete ali pa izberemo iste, ki jih ponuja default (privzeto), tako da ni opozorila "ov.

Kako lahko ugotovim, kateri PIN ustreza številki konektorja na plošči?

Številke pinov konektorja so označene na plošči


Nožice FPGA, na katere so priključeni kontakti konektorja, so opisane v dokumentaciji, ki je priložena plošči FPGA.




Ko so zatiči dodeljeni, ponovno prevedem projekt in ga prešinem s programatorjem USB. Če nimate nameščenih gonilnikov za programator USB Byte blaster, povejte sistemu Windows, da se nahajajo v mapi, kjer imate nameščen Quartus. Potem ga bo našla sama.

Programator mora biti priključen na priključek JTAG. In menijska postavka za programiranje je “Orodja -> Programer” (ali kliknite ikono v orodni vrstici). Gumb »Start«, veseli »Uspeh« in vdelana programska oprema so že znotraj FPGA in že delujejo. Samo ne izklopite FPGA, sicer bo vse pozabil.

Orodja -> Programer


DAC je priključen na priključek plošče FPGA. Osciloskop S1-112A priklopim na DAC izhod. Rezultat bi moral biti "žaga", ker je visoki del besede DDS faznega akumulatorja izhod v 8-bitni izhod. In vedno se povečuje, dokler se ne prelije.

Približno 1,5 ure in pri frekvenci 1000 Hz vidim naslednji oscilogram:

Rad bi omenil, da ima "žaga" majhen zlom na sredini. To je posledica dejstva, da imajo upori razpon vrednosti.

Druga pomembna točka, ki jo je bilo treba pojasniti, je največja možna frekvenca, s katero bo generator DDS deloval. S pravilno konfiguriranimi parametri TimeQuest lahko po kompilaciji v »Compilation Report« vidite, da je hitrost vezja nad 200 MHz z rezervo. To pomeni, da bom frekvenco generatorja 50 MHz pomnožil s 4 z uporabo PLL. Povečal bom vrednost DDS faznega akumulatorja s frekvenco 200 MHz. Končno frekvenčno območje, ki ga lahko dobimo v naših pogojih, je 0 - 100 MHz. Natančnost nastavitve frekvence:

200.000.000 Hz (clk) / 2^32 (DDS) = 0,047 Hz
To pomeni, da je boljši od ~0,05 Hz. Menim, da za generator s takšnim razponom delovnih frekvenc (0...100 MHz) zadostuje natančnost na delček herca. Če mora nekdo povečati natančnost, lahko za to povečate bitno globino DDS (ne pozabite preveriti časovnega analizatorja TimeQuest, da je bila delovna hitrost logičnega vezja znotraj CLK = 200 MHz, ker je to seštevalnik), ali preprosto zmanjšajte taktno frekvenco, če tako širok frekvenčni razpon ni potreben.

Časovni analizator TimeQuest


Potem ko sem na ekranu zagledal »žago«, so me družinske zadeve prisilile, da sem šel na podeželje (to je bil moj prost dan). Tam sem kosil, kuhal, pekel na žaru in niti slutil nisem o presenečenju, ki me je čakalo zvečer. Bližje noči, pred spanjem, sem se odločil pogledati obliko signala za druge frekvence.

Za frekvenco 100 kHz

Za frekvenco 250 kHz

Za frekvenco 500 kHz

Za frekvenco 1 MHz

Drugi dan

Ker je bilo zanimivo, kako bo DAC deloval na uporih 100 in 200 ohmov, sem takoj prijel za spajkalnik. Tokrat se je izkazalo, da je DAC bolj natančen in je trajalo manj časa za njegovo namestitev.

DAC postavimo na ploščo FPGA in ga povežemo z osciloskopom

Preverjanje 1 MHz - VO! Gre za čisto drugo zadevo!

Žaga 10 MHz

Žaga 25 MHz


Oblika žage 10 MHz je še vedno podobna pravilni. A pri 25 MHz sploh ni več »lepa«. Ima pa C1-112a pasovno širino 10 MHz, tako da je v tem primeru lahko razlog že v osciloskopu.

Načeloma se to vprašanje z DAC lahko šteje za zaključeno. Zdaj pa vzemimo valovne oblike visokohitrostnega izhoda. Da bi to naredili, bomo najpomembnejši bit izpisali v ločen PIN FPGA. Podatke za to vrstico bomo vzeli iz najpomembnejšega bita akumulatorja DDS.

Dodeli hs_out = akumulator;

Pravokutni val 1 MHz

Pravokotni val 5 MHz

Pravokotni val 25 MHz

50 MHz kvadratni val je zdaj skoraj neviden


Ampak mislim, da bi moral biti izhod FPGA obremenjen z uporom. Morda bi bile fronte bolj strme.

Sinus se naredi v skladu s tabelo. Velikost tabele je 256 vrednosti 8 bitov. Možno bi bilo vzeti več, vendar sem imel že pripravljeno mif datoteko. S pomočjo čarovnika ustvarimo element ROM s podatki sinusne tabele iz mif datoteke.

Ustvarjanje ROM-a - Orodja -> Upravitelj vtičnikov Mega Wizard


Izberite 1 port ROM in poimenujte modul

Se strinjamo

Tudi tukaj se strinjamo

Z brskanjem poiščemo datoteko mif s sinusno tabelo

Tudi tukaj ne spreminjamo ničesar.

Odkljukajte modul sine_rom_bb.v - ni potreben. Naslednji cilj. Quartus bo prosil za dodajanje modula projektu - strinjamo se. Po tem se lahko modul uporablja tako kot kateri koli drug modul v Verilogu.


Zgornjih 8 bitov akumulatorske besede DDS bo uporabljenih kot naslov ROM, izhod podatkov pa bo sinusna vrednost.

Koda

//sinusna rom žica sine_out; sine_rom sine1(.clock(clk200M), .address(akumulator), .q(sine_out));


Oscilogram sinusnega vala pri različnih frekvencah izgleda... enako.

Če želite, lahko razmislite o težavah DAC, povezanih s širjenjem upora:

No, to je konec vikenda. Toda programska oprema za nadzor iz osebnega računalnika še ni bila napisana. Prisiljen sem priznati, da se nisem držal načrtovanih rokov.

Tretji dan

Časa je zelo malo, zato program pišemo v naglici (v najboljših tradicijah). Ponekod se za zmanjšanje števila črk in lažjega vnašanja informacij s tipkovnice uporablja filter dogodkov glede na ime pripomočka. Prosim za razumevanje in odpuščanje.

Vmesnik

Povezave z analogi

Ni popoln seznam
Funkcionalni DDS generator. Ustvarjen na osnovi AVR. Frekvence 0... 65534 Hz.
Pregled DDS generatorja GK101. Ustvarjeno z Altera MAX240 FPGA. Frekvence do 10 MHz.
Večnamenski generator na PIC16F870. Frekvenčni razpon: 11 Hz - 60 kHz.
generatorji Dodajte oznake

Največja frekvenca - 65534 Hz ​​​​(in do 8 MHz HS izhod s kvadratnim valom). In potem sem pomislil, da je generator odlična naloga, kjer se lahko FPGA pokaže najbolje. Iz športa sem se odločil, da ponovim projekt na FPGA, pri čemer se držim rokov v dveh vikendih in dobim parametre, ki niso strogo določeni, ampak največji možni. Kaj se je iz tega izcimilo, lahko izveste pod rezom.

Dan nič

Preden je prišel vikend, sem imel nekaj časa za razmislek o izvedbi. Da bi poenostavil svojo nalogo, sem se odločil, da generator ne naredim kot ločeno napravo z gumbi in LCD zaslonom, temveč kot napravo, ki se na osebni računalnik poveže prek USB-ja. Za to imam ploščo USB2RS232. Plošča ne potrebuje gonilnikov (CDC), zato mislim, da bo delovala pod Linuxom (za nekatere je to pomembno). Prav tako ne bom skrival, da sem že delal s prejemanjem sporočil preko RS232. Vzel bom že pripravljene module za delo z RS232 z opencores.com.

Za generiranje sinusnega signala boste potrebovali DAC. Izbral sem tip DAC, kot v prvotnem projektu - R2R 8-bit. Omogočil vam bo delovanje na visokih frekvencah, reda megahercev. Prepričan sem, da bi FPGA morala biti kos temu

Razmišljal sem, kako bi napisal program za prenos podatkov preko COM vrat. Po eni strani lahko pišete v Delphiju; že imate izkušnje s pisanjem takega programa, poleg tega pa velikost izvršljive datoteke ne bo velika. Poskušal sem tudi skicirati nekaj za delo s Serialom v obliki java skripta na strani html, vendar je bolj ali manj delovalo samo prek serijskega API-ja za Chrome, a za to morate namestiti vtičnik ... na splošno , tudi ne pride v poštev. Preizkusil sem PyQt5 kot inovacijo zase, toda pri distribuciji takšnega projekta morate povleči kup knjižnic. Po poskusu prevajanja projekta PyQt v datoteko exe se je izkazalo, da je več kot 10 MB. To pomeni, da ne bo nič boljši od aplikacije, napisane v C++\Qt5. Prav tako je vredno upoštevati, da nimam izkušenj z razvojem v pythonu, imam pa izkušnje s Qt5. Zato je izbira padla na Qt5. Od pete različice se je pojavil modul za delo s serijo in sem že delal z njim. In aplikacijo, ki temelji na Qt5, lahko prenesete v Linux in Mac (za nekatere je to pomembno), od različice 5.2 pa lahko aplikacije, ki temeljijo na QWidgets, prenesete celo na pametni telefon!

Kaj je še potrebno? Seveda ima plošča FPGA. Imam dva (Cyclone iv EP4CE10E22C8N za 10 tisoč celic in Cyclone ii EP2C5 za 5 tisoč celic). Tistega na levi bom izbral izključno zaradi priročnejšega priključka. Projekt po obsegu ne namerava biti velik, zato se bo ujemal v enega od obeh. Ne razlikujejo se po hitrosti delovanja. Obe plošči imata na sebi 50 MHz oscilatorje, znotraj FPGA pa je PLL, s katerim lahko povečam frekvenco na predvidenih 200 MHz.

Prvi dan

Ker sem DDS modul že naredil v svojem projektu sintetizatorja, sem takoj prijel za spajkalnik in začel spajkati DAC z upori. Vzel sem prototip plošče. Namestitev je bila izvedena z uporabo. Edina sprememba, ki je vplivala na tehnologijo, je bila ta, da sem opustil kislino F38N za kositranje stojal v korist TT indikatorskega fluks gela. Bistvo tehnologije je preprosto: regale spajkam v tiskano vezje, nanje pa spajkam upore s strani tiskanega vezja. Manjkajoče povezave naredim z zvijanjem. Prav tako so stojala priročna, ker jih lahko vstavim neposredno v ploščo FPGA.

Na žalost doma ni bilo na voljo uporov 1 in 2 kiloohmov. Ni bilo časa iti v trgovino. Moral sem opustiti eno od svojih pravil in odstraniti upore iz stare nepotrebne plošče. Tam so bili uporabljeni upori 15K in 30K. Rezultat je ta Frankenstein:


Ko ustvarite projekt, morate nastaviti ciljno napravo: Meni Dodelitve -> Naprava


V projektu sem kodiral neobvladljiv glavni DDS modul na fiksno frekvenco.

Generatorski modul 1000 Hz

modul signal_generator(clk50M, signal_out); vhodna žica clk50M; žični izhod signal_out; žica clk200M; osc osc_200M reg akumulator; dodeli signal_out = akumulator; //poskusite ustvariti 1000 Hz //50.000.000 Hz - taktna frekvenca zunanjega generatorja //2^32 = 4.294.967.296 - bitna globina DDS - 32 bitov //delite 1000Hz / 50.000.000 Hz / 2 * 4294967296 => 42949, 67296 vedno @ (posedge clk50M) začetek akumulatorja<= accumulator + 32"d42949; end endmodule


Po tem sem kliknil »Začni prevajanje«, da bi razvojno okolje vprašalo, katere vhodne/izhodne linije imamo v glavnem modulu projekta in s katerimi fizičnimi PIN-i so povezani. Po prevajanju se lahko povežemo dodelite vrstice, ki se prikažejo dejanskim PIN-om čipa FPGA:

Element menija Dodelitve -> Načrtovalnik zatičev

Zaenkrat prezrite vrstice HS_OUT, key0 in key1, v projektu se pojavijo pozneje, vendar nisem imel časa narediti posnetka zaslona na samem začetku.

Načeloma je dovolj, da v stolpcu Location “registriramo” le PIN_nn, ostale parametre (I/O standard, Current Strench in Slew Rate) pa lahko pustimo privzete ali pa izberemo iste, ki jih ponuja default (privzeto), tako da ni opozorila "ov.

Kako lahko ugotovim, kateri PIN ustreza številki konektorja na plošči?

Številke pinov konektorja so označene na plošči


Nožice FPGA, na katere so priključeni kontakti konektorja, so opisane v dokumentaciji, ki je priložena plošči FPGA.




Ko so zatiči dodeljeni, ponovno prevedem projekt in ga prešinem s programatorjem USB. Če nimate nameščenih gonilnikov za programator USB Byte blaster, povejte sistemu Windows, da se nahajajo v mapi, kjer imate nameščen Quartus. Potem ga bo našla sama.

Programator mora biti priključen na priključek JTAG. In menijska postavka za programiranje je “Orodja -> Programer” (ali kliknite ikono v orodni vrstici). Gumb »Start«, veseli »Uspeh« in vdelana programska oprema so že znotraj FPGA in že delujejo. Samo ne izklopite FPGA, sicer bo vse pozabil.

Orodja -> Programer


DAC je priključen na priključek plošče FPGA. Osciloskop S1-112A priklopim na DAC izhod. Rezultat bi moral biti "žaga", ker je visoki del besede DDS faznega akumulatorja izhod v 8-bitni izhod. In vedno se povečuje, dokler se ne prelije.

Približno 1,5 ure in pri frekvenci 1000 Hz vidim naslednji oscilogram:

Rad bi omenil, da ima "žaga" majhen zlom na sredini. To je posledica dejstva, da imajo upori razpon vrednosti.

Druga pomembna točka, ki jo je bilo treba pojasniti, je največja možna frekvenca, s katero bo generator DDS deloval. S pravilno konfiguriranimi parametri TimeQuest lahko po kompilaciji v »Compilation Report« vidite, da je hitrost vezja nad 200 MHz z rezervo. To pomeni, da bom frekvenco generatorja 50 MHz pomnožil s 4 z uporabo PLL. Povečal bom vrednost DDS faznega akumulatorja s frekvenco 200 MHz. Končno frekvenčno območje, ki ga lahko dobimo v naših pogojih, je 0 - 100 MHz. Natančnost nastavitve frekvence:

200.000.000 Hz (clk) / 2^32 (DDS) = 0,047 Hz
To pomeni, da je boljši od ~0,05 Hz. Menim, da za generator s takšnim razponom delovnih frekvenc (0...100 MHz) zadostuje natančnost na delček herca. Če mora nekdo povečati natančnost, lahko za to povečate bitno globino DDS (ne pozabite preveriti časovnega analizatorja TimeQuest, da je bila delovna hitrost logičnega vezja znotraj CLK = 200 MHz, ker je to seštevalnik), ali preprosto zmanjšajte taktno frekvenco, če tako širok frekvenčni razpon ni potreben.

Časovni analizator TimeQuest


Potem ko sem na ekranu zagledal »žago«, so me družinske zadeve prisilile, da sem šel na podeželje (to je bil moj prost dan). Tam sem kosil, kuhal, pekel na žaru in niti slutil nisem o presenečenju, ki me je čakalo zvečer. Bližje noči, pred spanjem, sem se odločil pogledati obliko signala za druge frekvence.

Za frekvenco 100 kHz

Za frekvenco 250 kHz

Za frekvenco 500 kHz

Za frekvenco 1 MHz

Drugi dan

Ker je bilo zanimivo, kako bo DAC deloval na uporih 100 in 200 ohmov, sem takoj prijel za spajkalnik. Tokrat se je izkazalo, da je DAC bolj natančen in je trajalo manj časa za njegovo namestitev.

DAC postavimo na ploščo FPGA in ga povežemo z osciloskopom

Preverjanje 1 MHz - VO! Gre za čisto drugo zadevo!

Žaga 10 MHz

Žaga 25 MHz


Oblika žage 10 MHz je še vedno podobna pravilni. A pri 25 MHz sploh ni več »lepa«. Ima pa C1-112a pasovno širino 10 MHz, tako da je v tem primeru lahko razlog že v osciloskopu.

Načeloma se to vprašanje z DAC lahko šteje za zaključeno. Zdaj pa vzemimo valovne oblike visokohitrostnega izhoda. Da bi to naredili, bomo najpomembnejši bit izpisali v ločen PIN FPGA. Podatke za to vrstico bomo vzeli iz najpomembnejšega bita akumulatorja DDS.

Dodeli hs_out = akumulator;

Pravokutni val 1 MHz

Pravokotni val 5 MHz

Pravokotni val 25 MHz

50 MHz kvadratni val je zdaj skoraj neviden


Ampak mislim, da bi moral biti izhod FPGA obremenjen z uporom. Morda bi bile fronte bolj strme.

Sinus se naredi v skladu s tabelo. Velikost tabele je 256 vrednosti 8 bitov. Možno bi bilo vzeti več, vendar sem imel že pripravljeno mif datoteko. S pomočjo čarovnika ustvarimo element ROM s podatki sinusne tabele iz mif datoteke.

Ustvarjanje ROM-a - Orodja -> Upravitelj vtičnikov Mega Wizard


Izberite 1 port ROM in poimenujte modul

Se strinjamo

Tudi tukaj se strinjamo

Z brskanjem poiščemo datoteko mif s sinusno tabelo

Tudi tukaj ne spreminjamo ničesar.

Odkljukajte modul sine_rom_bb.v - ni potreben. Naslednji cilj. Quartus bo prosil za dodajanje modula projektu - strinjamo se. Po tem se lahko modul uporablja tako kot kateri koli drug modul v Verilogu.


Zgornjih 8 bitov akumulatorske besede DDS bo uporabljenih kot naslov ROM, izhod podatkov pa bo sinusna vrednost.

Koda

//sinusna rom žica sine_out; sine_rom sine1(.clock(clk200M), .address(akumulator), .q(sine_out));


Oscilogram sinusnega vala pri različnih frekvencah izgleda... enako.

Če želite, lahko razmislite o težavah DAC, povezanih s širjenjem upora:

No, to je konec vikenda. Toda programska oprema za nadzor iz osebnega računalnika še ni bila napisana. Prisiljen sem priznati, da se nisem držal načrtovanih rokov.

Tretji dan

Časa je zelo malo, zato program pišemo v naglici (v najboljših tradicijah). Ponekod se za zmanjšanje števila črk in lažjega vnašanja informacij s tipkovnice uporablja filter dogodkov glede na ime pripomočka. Prosim za razumevanje in odpuščanje.

Vmesnik

Povezave z analogi

Ni popoln seznam
Funkcionalni DDS generator. Ustvarjen na osnovi AVR. Frekvence 0... 65534 Hz.
Pregled DDS generatorja GK101. Ustvarjeno z Altera MAX240 FPGA. Frekvence do 10 MHz.
Večnamenski generator na PIC16F870. Frekvenčni razpon: 11 Hz - 60 kHz.
generatorji
  • Qt5
  • Dodajte oznake

    Vsaka domača delavnica mora imeti potreben nabor orodij in merilnih instrumentov. Za ljudi, ki se ukvarjajo z radioamaterstvom kot hobijem, so visoki denarni stroški nakupa potrebne opreme pogosto nesprejemljivi.

    Torej v mojem primeru seznam te opreme še zdaleč ni bil popoln in pomanjkljiv generator signala.

    Generator signala Izkazalo se je, da je enostavno narediti sam iz razpoložljivih radijskih elementov in na koncu ni drago. Tako sem po brskanju po internetu našel veliko število vezij za različne generatorje, vključno z naprednejšimi modeli z DAC, vendar že dragimi za izdelavo. Za začetek sem se ustavil pri preprostem Generator signala DDS na mikrokrmilniku ATMEGA8 podjetja Atmel. Tega nisem ničesar izboljšal ali spremenil - vse sem pustil tako, kot je, samo ustvaril sem kopijo in poleg tega ne zahtevam avtorstva te naprave.

    Torej, generator signala ima dobre lastnosti in je primeren za reševanje preprostih problemov.

    Prikaz informacij v generator signala izdelan na 16x2 znakovnem LCD zaslonu s krmilnikom HD44780. Omeniti velja, da je zaradi varčevanja s priključki mikrokrmilnika LCD zaslon krmiljen s samo tremi žicami; to je bilo doseženo z uporabo premičnega registra - preberite, kako povezati zaslon s tremi žicami.

    Shranjevanje vrat je potrebno, 8 vrat se uporablja za uporovni DAC, 7 vrat za gumbe. V prvotnem članku je avtor obljubil uporabo modulacije PWM, vendar očitno ni dokončal, saj je začel razvijati naprednejšo različico na ATMEGA16.

    Shematski diagram generatorja signalov DDS in tiskano vezje.

    Vezje in plošče so prikazane v originalu; vsebujejo tudi gumbe za krmiljenje PWM, ki jih avtor ne uporablja.

    Za DAC sem posebej kupil natančne upore z napako ±0,05%, a kot se je izkazalo, so preprosti z napako ±5% povsem dovolj. Oblika signala je bila povsem sprejemljiva za vse vrste signalov.

    Kdaj generator sestavite in program naložite v mikrokrmilnik, nastavitve niso potrebne, razen če prilagodite kontrast zaslona.

    Delo z napravo je preprosto - izberite obliko signala, nastavite želeno frekvenco in lahko spreminjate korak nastavitve frekvence z mejami 1 - 10 - 100 - 1000 Hz na korak. Nato kliknite na Start in generator začne delovati. Upoštevati je treba, da ob zagonu generatorja frekvence in oblike signala ni mogoče spremeniti, to je posledica dejstva, da gre program v neskončno zanko in da bi povečali največjo frekvenco generiranja, postopek pozivanja gumba je bilo treba odstraniti. Če želite ustaviti ustvarjanje, kliknite na stop/reset, s tem se program znova zažene in vrne se v meni z nastavitvami. Tukaj je odtenek.

    Ločeno bi rad govoril o izdelavi ohišja za generator. Lahko kupite že pripravljeno ohišje v trgovini ali uporabite primernega iz kakšne druge naprave, vendar sem se odločil, da ga naredim v celoti sam. Kos dvostranskega steklenega vlakna je ležal v prostem teku, ki sem ga podaril telesu.

    Najprej morate izmeriti vse mere, dimenzije LCD zaslona in plošče generatorja signala, napajalnika, konektorjev in gumbov, nato pa ga položite na list papirja, kot bo v ohišju. Na podlagi dobljenih dimenzij lahko začnete s proizvodnjo.

    Ta projekt je visokokakovosten in univerzalen funkcijski generator, ki ima kljub določeni kompleksnosti vezja, vsaj v primerjavi s preprostejšimi, zelo široko funkcionalnost, ki upravičuje stroške njegove montaže. Sposoben je proizvesti 9 različnih valovnih oblik in deluje tudi s sinhronizacijo impulzov.

    Shematski diagram generatorja na MK

    Nastavitve naprave

    • Frekvenčni razpon: 10 Hz - 60 kHz
    • Digitalna nastavitev frekvence v 3 različnih korakih
    • Valovne oblike: sinus, trikotnik, kvadrat, žaga, H-pulz, L-pulz, izbruh, pomik, šum
    • Izhodno območje: 15 V za sinus in trikotnik, 0-5 V za druge načine
    • Obstaja izhod za sinhronizacijo impulzov

    Naprava se napaja iz 12 V AC, ki zagotavlja dovolj visoko (nad 18 V) enosmerno napetost, potrebno za normalno delovanje 78L15 in 79L15, ki tvorita bipolarno 15 V vezje, tako da lahko mikrovezje LF353 oddaja celoten obseg signalov do bremena 1 kOhm.

    Uporabljen regulator nivoja ALPS SRBM1L0800. Vezje mora uporabljati upore z ±1 % ali večjo toleranco. LED tokovni omejevalniki - upori serije 4306R. Svetlost se lahko poveča glede na želje izvajalca. Generator je sestavljen v plastičnem ohišju 178x154x36 mm z aluminijasto sprednjo in zadnjo ploščo.

    Številne kontaktne komponente so nameščene na sprednji in zadnji plošči (gumbi, gumbi, RCA konektorji, LED sklopi, napajalni konektor). Tiskana vezja so na ohišje pritrjena z vijaki s plastičnimi distančniki. Vsi ostali elementi generatorja so nameščeni na tiskanih vezjih - napajanje je ločeno. Levi gumb na sredini je za spreminjanje načina, desni pa za izbiro frekvence načina.

    Generator proizvaja različne signale in deluje v treh načinih, ki jih izbiramo s tipko "Izberi" in prikazujemo s tremi zgornjimi (na diagramu) LED diodami. Vrtljivi gumb spremeni parametre signala v skladu z naslednjo tabelo:

    Takoj po nastavitvi v načinu 1 pride do generiranja sinusa. Vendar je začetna frekvenca precej nizka in za povečanje je potreben vsaj en klik kodirnika. Plošča ima kontakt za priklop naprave za programiranje, ki omogoča hitro spreminjanje funkcionalnosti generatorja signala, če je to potrebno. Vse projektne datoteke - vdelana programska oprema PIC16F870, risbe plošče so locirane

    Ta DDS funkcijski generator (verzija 2.0) signalov je sestavljen na AVR mikrokontrolerju, ima dobro funkcionalnost, ima amplitudno regulacijo in je tudi sestavljen na enostranskem tiskanem vezju.

    Ta generator temelji na algoritmu generatorja Jesper DDS, program je posodobljen za AVR-GCC C z vstavki zbirne kode. Generator ima dva izhodna signala: prvi je signal DDS, drugi je hitri (1..8 MHz) "pravokotni" izhod, ki se lahko uporablja za oživitev MK z nepravilnimi mehki in za druge namene.
    Visokohitrostni signal HS (High Speed) je vzet neposredno iz mikrokrmilnika Atmega16 OC1A (PD5).
    DDS signali se generirajo iz drugih izhodov MC preko uporovne matrike R2R in preko čipa LM358N, ki omogoča prilagoditev amplitude in odmika signala. Odmik in amplituda se nastavljata z dvema potenciometroma. Odmik je nastavljiv v območju +5V..-5V, amplituda pa je 0...10V. Frekvenco DDS signalov je mogoče nastaviti v območju 0...65534 Hz, kar je več kot dovolj za testiranje avdio vezij in druge radijske amaterske naloge.

    Glavne značilnosti generatorja DDS V2.0:
    - preprosto vezje z običajnimi in poceni radioelementi;
    - enostransko tiskano vezje;
    - vgrajen napajalnik;
    - ločen hitri izhod (HS) do 8 MHz;
    - signali DDS s spremenljivo amplitudo in odmikom;
    - DDS signali: sinus, pravokotnik, žaga in vzvratna žaga, trikotnik, EKG signal in šumni signal;
    - 2×16 LCD zaslon;
    - intuitivna tipkovnica s 5 gumbi;
    - koraki za nastavitev frekvence: 1, 10, 100, 1000, 10000 Hz;
    - zapomni si zadnje stanje po vklopu.

    Spodnji blokovni diagram prikazuje logično strukturo generatorja funkcij:

    Kot lahko vidite, naprava potrebuje več napajalnih napetosti: +5V, -12V, +12V. Napetosti +12V in -12V se uporabljajo za regulacijo amplitude in odmika signala. Napajalnik je zasnovan z uporabo transformatorja in več čipov stabilizatorja napetosti:

    Napajalnik je sestavljen na ločeni plošči:

    Če napajalnika ne želite sestaviti sami, lahko uporabite običajen napajalnik ATX iz računalnika, kjer so že prisotne vse potrebne napetosti. Postavitev konektorja ATX.

    LCD zaslon

    Vsa dejanja so prikazana na LCD zaslonu. Generator upravljamo s petimi tipkami

    S tipkama gor/dol se premikate po meniju, s tipkama levo/desno spreminjate vrednost frekvence. Ko pritisnete sredinsko tipko, se začne generirati izbrani signal. S ponovnim pritiskom na tipko se generator ustavi.

    Za nastavitev koraka spremembe frekvence je na voljo ločena vrednost. To je priročno, če morate spremeniti frekvenco v širokem razponu.

    Generator šuma nima nobenih nastavitev. Uporablja običajno funkcijo rand(), ki se nenehno dovaja na izhod generatorja DDS.

    Visokohitrostni izhod HS ima 4 frekvenčne načine: 1, 2, 4 in 8 MHz.

    Shematski diagram

    Vezje generatorja funkcij je preprosto in vsebuje lahko dostopne elemente:
    - mikrokontroler AVR Atmega16, z zunanjim kvarcem na 16 MHz;
    - standardni LCD zaslon tipa HD44780 2×16;
    - R2R DAC matrika iz navadnih uporov;
    - operacijski ojačevalnik LM358N (domači analog KR1040UD1);
    - dva potenciometra;
    - pet ključev;
    - več priključkov.

    Plačati:

    Funkcionalni generator je sestavljen v plastični škatli:


    Programska oprema

    Kot sem rekel zgoraj, sem svoj program zasnoval na algoritmu generatorja Jesper DDS. Dodal sem nekaj vrstic zbirne kode za izvedbo zaustavitve generiranja. Zdaj algoritem vsebuje 10 ciklov procesorja namesto 9.

    void static inline Signal_OUT(const uint8_t *signal, uint8_t ad2, uint8_t ad1, uint8_t ad0)(
    asm volatile("eor r18, r18 ;r18<-0″ "\n\t"
    "eor r19, r19 ;r19<-0″ "\n\t"
    "1:" "\n\t"
    "dodaj r18, %0 ;1 cikel" "\n\t"
    "adc r19, %1 ;1 cikel" "\n\t"
    "adc %A3, %2 ;1 cikel" "\n\t"
    "lpm ;3 cikli" "\n\t"
    "izven %4, __tmp_reg__ ;1 cikel" "\n\t"
    "sbis %5, 2 ;1 cikel, če ni preskoka" "\n\t"
    "rjmp 1b ;2 cikla. Skupaj 10 ciklov" "\n\t"
    :
    :"r" (ad0),,"r" (ad1),,"r" (ad2),,"e" (signal),,"I" (_SFR_IO_ADDR(PORTA)), "I" (_SFR_IO_ADDR(SPCR ))
    :"r18", "r19"
    );}

    Tabela oblik signala DDS se nahaja v bliskovnem pomnilniku MK, katerega naslov se začne pri 0xXX00. Ti razdelki so definirani v datoteki makefile na ustreznih pomnilniških lokacijah:
    #Določite razdelke, kamor želite shraniti signalne tabele
    LDFLAGS += -Wl,-section-start=.MySection1=0x3A00
    LDFLAGS += -Wl,-section-start=.MySection2=0x3B00
    LDFLAGS += -Wl,-section-start=.MySection3=0x3C00
    LDFLAGS += -Wl,-section-start=.MySection4=0x3D00
    LDFLAGS += -Wl,-section-start=.MySection5=0x3E00
    LDFLAGS += -Wl,-section-start=.MySection6=0x3F00