Šematski dijagram dds generatora na atmel mikrokontroleru. Funkcionalni dds generator na plc. Ispitivanje režima rada generatora nakon montaže

Šematski dijagram dds generatora na atmel mikrokontroleru.  Funkcionalni dds generator na plc.  Ispitivanje režima rada generatora nakon montaže
Šematski dijagram dds generatora na atmel mikrokontroleru. Funkcionalni dds generator na plc. Ispitivanje režima rada generatora nakon montaže

Maksimalna frekvencija - 65534 Hz ​​(i do 8 MHz HS izlaz sa kvadratnim talasom). A onda sam pomislio da je generator odličan zadatak u kojem se FPGA može pokazati u svom najboljem izdanju. Što se sporta tiče, odlučio sam da ponovim projekat na FPGA, a da rokove ispoštujem u roku od dva vikenda i dobijem parametre koji nisu striktno definisani, već maksimalno mogući. Šta je iz ovoga proizašlo, možete saznati ispod.

Dan nula

Prije nego što je došao vikend, imao sam vremena da razmislim o implementaciji. Da bih pojednostavio svoj zadatak, odlučio sam da napravim generator ne kao poseban uređaj sa dugmadima i LCD ekranom, već kao uređaj koji se povezuje na PC preko USB-a. Za ovo imam USB2RS232 ploču. Ploča ne zahtijeva drajvere (CDC), stoga mislim da će raditi pod Linuxom (za neke je ovo važno). Takođe, neću kriti da sam već radio sa prijemom poruka preko RS232. Uzet ću gotove module za rad sa RS232 sa opencores.com.

Za generiranje sinusnog signala trebat će vam DAC. Odabrao sam tip DAC-a, kao u originalnom projektu - R2R 8-bit. Omogućit će vam da radite na visokim frekvencijama, reda veličine megaherca. Uvjeren sam da FPGA treba da se nosi s tim

Razmišljao sam kako da napišem program za prijenos podataka preko COM porta. S jedne strane, možete pisati u Delphi7, već imate iskustva u pisanju takvog programa, a osim toga, veličina izvršne datoteke neće biti velika. Također sam pokušao skicirati nešto za rad sa Serialom u obliku java skripte na html stranici, ali je manje-više funkcioniralo samo preko Chrome serijskog API-ja, ali za to morate instalirati dodatak... općenito , takođe ne dolazi u obzir. Isprobao sam PyQt5 kao inovaciju za sebe, ali kada distribuirate takav projekat, morate prevući gomilu biblioteka. Nakon pokušaja kompajliranja PyQt projekta u exe datoteku, pokazalo se da ima više od 10 MB. To jest, neće biti ništa bolje od aplikacije napisane na C++\Qt5. Također je vrijedno uzeti u obzir da nemam iskustva u razvoju u Pythonu, ali imam iskustva u Qt5. Stoga je izbor pao na Qt5. Od pete verzije pojavio se modul za rad sa serijom i već sam radio s njim. A aplikacija zasnovana na Qt5 može se prenijeti na Linux i Mac (za neke je ovo važno), a od verzije 5.2, aplikacije bazirane na QWidgetima mogu se prenijeti čak i na pametni telefon!

Šta je još potrebno? Naravno, ploča ima FPGA. Imam ih dva (Cyclone iv EP4CE10E22C8N za 10 hiljada ćelija, i Cyclone ii EP2C5 za 5 hiljada ćelija). Odabrat ću ovaj s lijeve strane isključivo zbog praktičnijeg konektora. Što se tiče obima, projekat nema nameru da bude veliki, pa će se uklopiti u bilo koji od njih. Ne razlikuju se po brzini. Obje ploče imaju na ploči oscilatore od 50 MHz, a unutar FPGA se nalazi PLL, pomoću kojeg mogu povećati frekvenciju na planiranih 200 MHz.

Prvi dan

Zbog činjenice da sam već napravio DDS modul u svom projektu sintisajzera, odmah sam uzeo lemilicu i počeo da lemim DAC sa otpornicima. Uzeo sam prototip ploče. Instalacija je obavljena pomoću omotača. Jedina promjena koja je utjecala na tehnologiju je da sam napustio F38N kiselinu za kalajisanje štandova u korist TT indikatorskog flux gela. Suština tehnologije je jednostavna: zalemim stalak u štampanu ploču, a na njih lemim otpornike sa strane štampane ploče. Veze koje nedostaju pravim uvijanjem. Takođe, stalci su zgodni jer ih mogu umetnuti direktno u FPGA ploču.

Nažalost, kod kuće nije bilo dostupnih otpornika od 1 i 2 kilooma. Nije bilo vremena za odlazak u radnju. Morao sam odustati od jednog od svojih pravila i ukloniti otpornike sa stare nepotrebne ploče. Tu su korišteni otpornici od 15K i 30K. Rezultat je ovaj Frankenstein:


Nakon kreiranja projekta potrebno je postaviti ciljni uređaj: Izbornik Zadaci -> Uređaj


U projektu sam kodirao nekontrolisani glavni DDS modul na fiksnu frekvenciju.

1000 Hz generatorski modul

modul signal_generator(clk50M, signal_out); ulazna žica clk50M; žični izlaz signal_out; žica clk200M; osc osc_200M reg akumulator; dodijeliti signal_out = akumulator; //pokušaj generirati 1000 Hz //50.000.000 Hz - taktna frekvencija eksternog generatora //2^32 = 4.294.967.296 - DDS dubina bita - 32 bita //podijeliti 1000Hz / 50.000.000 Hz / 2 * 7 42969 @ 42969 uvijek (posedge clk50M) start akumulator<= accumulator + 32"d42949; end endmodule


Nakon toga sam kliknuo na “Pokreni kompilaciju” kako bi razvojno okruženje pitalo koje ulazne/izlazne linije imamo u glavnom modulu projekta i na koje su fizičke PIN-ove povezani dodijelite linije koje se pojavljuju stvarnim PIN-ovima čipa FPGA:

Stavka menija Zadaci -> Planer pinova

Za sada zanemarite linije HS_OUT, key0 i key1, pojavljuju se u projektu kasnije, ali nisam imao vremena da napravim screenshot na samom početku.

U principu, dovoljno je „registrovati“ samo PIN_nn u koloni Lokacija, a preostale parametre (I/O standard, Current Strench i Slew Rate) možete ostaviti kao podrazumevane, ili možete izabrati iste koje nudi default (default) tako da nema upozorenja "ov.

Kako mogu saznati koji PIN odgovara broju konektora na ploči?

Broj pinova konektora je označen na ploči


A FPGA pinovi na koje su spojeni kontakti konektora opisani su u dokumentaciji koja dolazi uz FPGA ploču.




Nakon što su pinovi dodijeljeni, ponovo kompajliram projekat i flešujem ga pomoću USB programatora. Ako nemate instalirane drajvere za USB Byte blaster programator, recite Windows-u da se nalaze u fascikli u kojoj imate instaliran Quartus. Onda će ona to sama pronaći.

Programator mora biti povezan na JTAG konektor. A stavka menija za programiranje je “Alati -> Programator” (ili kliknite na ikonu na traci sa alatkama). Dugme “Start”, radosni “Success” i firmver su već unutar FPGA i već rade. Samo nemojte isključivati ​​FPGA, inače će sve zaboraviti.

Alati -> Programator


DAC je povezan na konektor FPGA ploče. Povezujem osciloskop S1-112A na DAC izlaz. Rezultat bi trebao biti “pila” jer se dio višeg reda DDS riječi faznog akumulatora izlazi na 8-bitni izlaz. I uvijek se povećava dok se ne prelije.

Nekih 1,5 sati i za frekvenciju od 1000 Hz vidim sljedeći oscilogram:

Želio bih napomenuti da "pila" ima mali prelom u sredini. To je zbog činjenice da otpornici imaju raspon vrijednosti.

Još jedna važna stvar koju je trebalo razjasniti je maksimalna moguća frekvencija s kojom će DDS generator raditi. Sa ispravno konfigurisanim TimeQuest parametrima, nakon kompilacije u “Compilation Report” možete vidjeti da je brzina kola iznad 200 MHz sa marginom. To znači da ću frekvenciju generatora od 50 MHz pomnožiti sa 4 pomoću PLL-a, povećat ću vrijednost DDS faznog akumulatora sa frekvencijom od 200 MHz. Konačni frekvencijski opseg koji se može dobiti u našim uslovima je 0 - 100 MHz. Preciznost podešavanja frekvencije:

200.000.000 Hz (clk) / 2^32 (DDS) = 0,047 Hz
To jest, bolje je od ~0,05 Hz. Smatram da je tačnost djelića herca dovoljna za generator s takvim rasponom radnih frekvencija (0...100 MHz). Ako neko treba da poveća tačnost, onda za to može povećati dubinu bita DDS (ne zaboravite da proverite TimeQuest Timing Analyzer da li je radna brzina logičkog kola bila unutar CLK = 200 MHz, pošto je ovo sabirač), ili jednostavno smanjite frekvenciju takta, ako nije potreban tako širok raspon frekvencija.

TimeQuest Timing Analyzer


Nakon što sam na ekranu video „video“, porodične stvari su me naterale da odem na selo (to mi je bio slobodan dan). Tu sam kosio, kuvao, roštiljao i nisam ni slutio kakvo me iznenađenje čeka uveče. Bliže noću, prije spavanja, odlučio sam pogledati oblik signala za druge frekvencije.

Za frekvenciju 100 kHz

Za frekvenciju 250 kHz

Za frekvenciju 500 kHz

Za frekvenciju od 1 MHz

Drugi dan

Zbog činjenice da je bilo zanimljivo kako će DAC raditi na otpornicima od 100 i 200 Ohma, odmah sam se uzeo za lemilo. Ovaj put se DAC pokazao preciznijim i trebalo je manje vremena za njegovu instalaciju.

Stavljamo DAC na FPGA ploču i spajamo ga na osciloskop

Provjera 1 MHz - VO! To je sasvim druga stvar!

Video 10 MHz

Pila 25 MHz


Oblik pile od 10 MHz je i dalje sličan ispravnom. Ali na 25 MHz više uopće nije “lijepo”. Međutim, C1-112a ima propusni opseg od 10 MHz, tako da u ovom slučaju razlog može biti već u osciloskopu.

U principu, ovo pitanje sa DAC-om se može smatrati zatvorenim. Sada uzmimo talasne oblike izlaza velike brzine. Da bismo to učinili, najznačajniji bit ćemo izbaciti na poseban PIN FPGA. Podatke za ovu liniju ćemo uzeti iz najznačajnijeg bita DDS akumulatora.

Dodijeliti hs_out = akumulator;

Kvadratni talas 1 MHz

Kvadratni talas 5 MHz

Kvadratni talas 25 MHz

Kvadratni talas od 50 MHz sada je skoro nevidljiv


Ali mislim da bi FPGA izlaz trebao biti opterećen otporom. Možda bi frontovi bili strmiji.

Sinus se radi prema tabeli. Veličina tabele je 256 vrednosti od 8 bita. Moglo bi se uzeti i više, ali ja sam već imao gotovu mif datoteku. Koristeći čarobnjak, kreiramo ROM element sa podacima sinusne tabele iz mif datoteke.

Kreiranje ROM-a - Alati -> Mega Wizard Plugin manager


Odaberite ROM 1 port i dajte naziv modulu

Slažemo se

I tu se slažemo

Koristeći pregledavanje, nalazimo našu mif datoteku sa tabelom sinusa

Ni tu ništa ne mijenjamo.

Odznačite modul sine_rom_bb.v - nije potreban. Sljedeći završetak. Quartus će od vas tražiti da dodate modul projektu - slažemo se. Nakon toga, modul se može koristiti kao i svaki drugi modul u Verilogu.


Gornjih 8 bitova DDS akumulatorske riječi će se koristiti kao ROM adresa, a izlaz podataka će biti vrijednost sinusa.

Kod

//sine rom žice sine_out; sine_rom sine1(.clock(clk200M), .address(accumulator), .q(sine_out));


Oscilogram sinusnog vala na različitim frekvencijama izgleda... isto.

Ako želite, možete razmotriti DAC probleme povezane s širenjem otpornika:

Pa, to je kraj vikenda. Ali softver za upravljanje sa računara još nije napisan. Primoran sam da priznam da nisam ispoštovao planirane rokove.

Treći dan

Vremena je jako malo, pa program pišemo na brzinu (u najboljoj tradiciji). Na nekim mjestima, kako bi se smanjio broj slova i pogodnost unosa informacija sa tastature, koristi se filter događaja uz naziv widgeta. Molim vas razumite i oprostite.

Interface

Veze sa analozima

Nije potpuna lista
Funkcionalni DDS generator. Kreiran na bazi AVR-a. Frekvencije 0… 65534 Hz.
Pregled DDS generatora GK101. Kreiran pomoću Altera MAX240 FPGA. Frekvencije do 10 MHz.
Multifunkcionalni generator na PIC16F870. Frekvencijski opseg: 11 Hz - 60 kHz.
generatori Dodaj oznake

Maksimalna frekvencija - 65534 Hz ​​(i do 8 MHz HS izlaz sa kvadratnim talasom). A onda sam pomislio da je generator odličan zadatak u kojem se FPGA može pokazati u svom najboljem izdanju. Što se sporta tiče, odlučio sam da ponovim projekat na FPGA, a da rokove ispoštujem u roku od dva vikenda i dobijem parametre koji nisu striktno definisani, već maksimalno mogući. Šta je iz ovoga proizašlo, možete saznati ispod.

Dan nula

Prije nego što je došao vikend, imao sam vremena da razmislim o implementaciji. Da bih pojednostavio svoj zadatak, odlučio sam da napravim generator ne kao poseban uređaj sa dugmadima i LCD ekranom, već kao uređaj koji se povezuje na PC preko USB-a. Za ovo imam USB2RS232 ploču. Ploča ne zahtijeva drajvere (CDC), stoga mislim da će raditi pod Linuxom (za neke je ovo važno). Takođe, neću kriti da sam već radio sa prijemom poruka preko RS232. Uzet ću gotove module za rad sa RS232 sa opencores.com.

Za generiranje sinusnog signala trebat će vam DAC. Odabrao sam tip DAC-a, kao u originalnom projektu - R2R 8-bit. Omogućit će vam da radite na visokim frekvencijama, reda veličine megaherca. Uvjeren sam da FPGA treba da se nosi s tim

Razmišljao sam kako da napišem program za prijenos podataka preko COM porta. S jedne strane, možete pisati u Delphi7, već imate iskustva u pisanju takvog programa, a osim toga, veličina izvršne datoteke neće biti velika. Također sam pokušao skicirati nešto za rad sa Serialom u obliku java skripte na html stranici, ali je manje-više funkcioniralo samo preko Chrome serijskog API-ja, ali za to morate instalirati dodatak... općenito , takođe ne dolazi u obzir. Isprobao sam PyQt5 kao inovaciju za sebe, ali kada distribuirate takav projekat, morate prevući gomilu biblioteka. Nakon pokušaja kompajliranja PyQt projekta u exe datoteku, pokazalo se da ima više od 10 MB. To jest, neće biti ništa bolje od aplikacije napisane na C++\Qt5. Također je vrijedno uzeti u obzir da nemam iskustva u razvoju u Pythonu, ali imam iskustva u Qt5. Stoga je izbor pao na Qt5. Od pete verzije pojavio se modul za rad sa serijom i već sam radio s njim. A aplikacija zasnovana na Qt5 može se prenijeti na Linux i Mac (za neke je ovo važno), a od verzije 5.2, aplikacije bazirane na QWidgetima mogu se prenijeti čak i na pametni telefon!

Šta je još potrebno? Naravno, ploča ima FPGA. Imam ih dva (Cyclone iv EP4CE10E22C8N za 10 hiljada ćelija, i Cyclone ii EP2C5 za 5 hiljada ćelija). Odabrat ću ovaj s lijeve strane isključivo zbog praktičnijeg konektora. Što se tiče obima, projekat nema nameru da bude veliki, pa će se uklopiti u bilo koji od njih. Ne razlikuju se po brzini. Obje ploče imaju na ploči oscilatore od 50 MHz, a unutar FPGA se nalazi PLL, pomoću kojeg mogu povećati frekvenciju na planiranih 200 MHz.

Prvi dan

Zbog činjenice da sam već napravio DDS modul u svom projektu sintisajzera, odmah sam uzeo lemilicu i počeo da lemim DAC sa otpornicima. Uzeo sam prototip ploče. Instalacija je obavljena pomoću . Jedina promjena koja je utjecala na tehnologiju je da sam napustio F38N kiselinu za kalajisanje štandova u korist TT indikatorskog flux gela. Suština tehnologije je jednostavna: zalemim stalak u štampanu ploču, a na njih lemim otpornike sa strane štampane ploče. Veze koje nedostaju pravim uvijanjem. Takođe, stalci su zgodni jer ih mogu umetnuti direktno u FPGA ploču.

Nažalost, kod kuće nije bilo dostupnih otpornika od 1 i 2 kilooma. Nije bilo vremena za odlazak u radnju. Morao sam odustati od jednog od svojih pravila i ukloniti otpornike sa stare nepotrebne ploče. Tu su korišteni otpornici od 15K i 30K. Rezultat je ovaj Frankenstein:


Nakon kreiranja projekta potrebno je postaviti ciljni uređaj: Izbornik Zadaci -> Uređaj


U projektu sam kodirao nekontrolisani glavni DDS modul na fiksnu frekvenciju.

1000 Hz generatorski modul

modul signal_generator(clk50M, signal_out); ulazna žica clk50M; žični izlaz signal_out; žica clk200M; osc osc_200M reg akumulator; dodijeliti signal_out = akumulator; //pokušaj generirati 1000 Hz //50.000.000 Hz - taktna frekvencija eksternog generatora //2^32 = 4.294.967.296 - DDS dubina bita - 32 bita //podijeliti 1000Hz / 50.000.000 Hz / 2 * 7 42969 @ 42969 uvijek (posedge clk50M) start akumulator<= accumulator + 32"d42949; end endmodule


Nakon toga sam kliknuo na “Pokreni kompilaciju” kako bi razvojno okruženje pitalo koje ulazne/izlazne linije imamo u glavnom modulu projekta i na koje su fizičke PIN-ove povezani dodijelite linije koje se pojavljuju stvarnim PIN-ovima čipa FPGA:

Stavka menija Zadaci -> Planer pinova

Za sada zanemarite linije HS_OUT, key0 i key1, pojavljuju se u projektu kasnije, ali nisam imao vremena da napravim screenshot na samom početku.

U principu, dovoljno je „registrovati“ samo PIN_nn u koloni Lokacija, a preostale parametre (I/O standard, Current Strench i Slew Rate) možete ostaviti kao podrazumevane, ili možete izabrati iste koje nudi default (default) tako da nema upozorenja "ov.

Kako mogu saznati koji PIN odgovara broju konektora na ploči?

Broj pinova konektora je označen na ploči


A FPGA pinovi na koje su spojeni kontakti konektora opisani su u dokumentaciji koja dolazi uz FPGA ploču.




Nakon što su pinovi dodijeljeni, ponovo kompajliram projekat i flešujem ga pomoću USB programatora. Ako nemate instalirane drajvere za USB Byte blaster programator, recite Windows-u da se nalaze u fascikli u kojoj imate instaliran Quartus. Onda će ona to sama pronaći.

Programator mora biti povezan na JTAG konektor. A stavka menija za programiranje je “Alati -> Programator” (ili kliknite na ikonu na traci sa alatkama). Dugme “Start”, radosni “Success” i firmver su već unutar FPGA i već rade. Samo nemojte isključivati ​​FPGA, inače će sve zaboraviti.

Alati -> Programator


DAC je povezan na konektor FPGA ploče. Povezujem osciloskop S1-112A na DAC izlaz. Rezultat bi trebao biti “pila” jer se dio višeg reda DDS riječi faznog akumulatora izlazi na 8-bitni izlaz. I uvijek se povećava dok se ne prelije.

Nekih 1,5 sati i za frekvenciju od 1000 Hz vidim sljedeći oscilogram:

Želio bih napomenuti da "pila" ima mali prelom u sredini. To je zbog činjenice da otpornici imaju raspon vrijednosti.

Još jedna važna stvar koju je trebalo razjasniti je maksimalna moguća frekvencija s kojom će DDS generator raditi. Sa ispravno konfigurisanim TimeQuest parametrima, nakon kompilacije u “Compilation Report” možete vidjeti da je brzina kola iznad 200 MHz sa marginom. To znači da ću frekvenciju generatora od 50 MHz pomnožiti sa 4 pomoću PLL-a, povećat ću vrijednost DDS faznog akumulatora sa frekvencijom od 200 MHz. Konačni frekvencijski opseg koji se može dobiti u našim uslovima je 0 - 100 MHz. Preciznost podešavanja frekvencije:

200.000.000 Hz (clk) / 2^32 (DDS) = 0,047 Hz
To jest, bolje je od ~0,05 Hz. Smatram da je tačnost djelića herca dovoljna za generator s takvim rasponom radnih frekvencija (0...100 MHz). Ako neko treba da poveća tačnost, onda za to može povećati dubinu bita DDS (ne zaboravite da proverite TimeQuest Timing Analyzer da li je radna brzina logičkog kola bila unutar CLK = 200 MHz, pošto je ovo sabirač), ili jednostavno smanjite frekvenciju takta, ako nije potreban tako širok raspon frekvencija.

TimeQuest Timing Analyzer


Nakon što sam na ekranu video „video“, porodične stvari su me naterale da odem na selo (to mi je bio slobodan dan). Tu sam kosio, kuvao, roštiljao i nisam ni slutio kakvo me iznenađenje čeka uveče. Bliže noću, prije spavanja, odlučio sam pogledati oblik signala za druge frekvencije.

Za frekvenciju 100 kHz

Za frekvenciju 250 kHz

Za frekvenciju 500 kHz

Za frekvenciju od 1 MHz

Drugi dan

Zbog činjenice da je bilo zanimljivo kako će DAC raditi na otpornicima od 100 i 200 Ohma, odmah sam se uzeo za lemilo. Ovaj put se DAC pokazao preciznijim i trebalo je manje vremena za njegovu instalaciju.

Stavljamo DAC na FPGA ploču i spajamo ga na osciloskop

Provjera 1 MHz - VO! To je sasvim druga stvar!

Video 10 MHz

Pila 25 MHz


Oblik pile od 10 MHz je i dalje sličan ispravnom. Ali na 25 MHz više uopće nije “lijepo”. Međutim, C1-112a ima propusni opseg od 10 MHz, tako da u ovom slučaju razlog može biti već u osciloskopu.

U principu, ovo pitanje sa DAC-om se može smatrati zatvorenim. Sada uzmimo talasne oblike izlaza velike brzine. Da bismo to učinili, najznačajniji bit ćemo izbaciti na poseban PIN FPGA. Podatke za ovu liniju ćemo uzeti iz najznačajnijeg bita DDS akumulatora.

Dodijeliti hs_out = akumulator;

Kvadratni talas 1 MHz

Kvadratni talas 5 MHz

Kvadratni talas 25 MHz

Kvadratni talas od 50 MHz sada je skoro nevidljiv


Ali mislim da bi FPGA izlaz trebao biti opterećen otporom. Možda bi frontovi bili strmiji.

Sinus se radi prema tabeli. Veličina tabele je 256 vrednosti od 8 bita. Moglo bi se uzeti i više, ali ja sam već imao gotovu mif datoteku. Koristeći čarobnjak, kreiramo ROM element sa podacima sinusne tabele iz mif datoteke.

Kreiranje ROM-a - Alati -> Mega Wizard Plugin manager


Odaberite ROM 1 port i dajte naziv modulu

Slažemo se

I tu se slažemo

Koristeći pregledavanje, nalazimo našu mif datoteku sa tabelom sinusa

Ni tu ništa ne mijenjamo.

Odznačite modul sine_rom_bb.v - nije potreban. Sljedeći završetak. Quartus će od vas tražiti da dodate modul projektu - slažemo se. Nakon toga, modul se može koristiti kao i svaki drugi modul u Verilogu.


Gornjih 8 bitova DDS akumulatorske riječi će se koristiti kao ROM adresa, a izlaz podataka će biti vrijednost sinusa.

Kod

//sine rom žice sine_out; sine_rom sine1(.clock(clk200M), .address(accumulator), .q(sine_out));


Oscilogram sinusnog vala na različitim frekvencijama izgleda... isto.

Ako želite, možete razmotriti DAC probleme povezane s širenjem otpornika:

Pa, to je kraj vikenda. Ali softver za upravljanje sa računara još nije napisan. Primoran sam da priznam da nisam ispoštovao planirane rokove.

Treći dan

Vremena je jako malo, pa program pišemo na brzinu (u najboljoj tradiciji). Na nekim mjestima, kako bi se smanjio broj slova i pogodnost unosa informacija sa tastature, koristi se filter događaja uz naziv widgeta. Molim vas razumite i oprostite.

Interface

Veze sa analozima

Nije potpuna lista
Funkcionalni DDS generator. Kreiran na bazi AVR-a. Frekvencije 0… 65534 Hz.
Pregled DDS generatora GK101. Kreiran pomoću Altera MAX240 FPGA. Frekvencije do 10 MHz.
Multifunkcionalni generator na PIC16F870. Frekvencijski opseg: 11 Hz - 60 kHz.
generatori
  • Qt5
  • Dodaj oznake

    Svaka kućna radionica trebala bi imati potreban set alata i mjernih instrumenata. Za ljude koji se bave radio-amaterstvom iz hobija, visoki novčani troškovi nabavke potrebne opreme često su neprihvatljivi.

    Tako da je u mom slučaju spisak ove opreme bio daleko od potpune i nedostajao je generator signala.

    Generator signala Pokazalo se da ga je lako napraviti od dostupnih radio elemenata i na kraju nije skupo. Dakle, nakon kopanja po internetu, pronašao sam veliki broj sklopova za razne generatore, uključujući i naprednije modele s DAC-om, ali već skupe za proizvodnju. Zaustavio sam se na jednostavnom za početak. Generator DDS signala na ATMEGA8 mikrokontroleru iz Atmela. Ovaj, ništa nisam poboljšao niti promijenio - ostavio sam sve kako je, samo sam napravio kopiju i, posebno, ne tvrdim da je autorstvo ovog uređaja.

    dakle, generator signala ima dobre karakteristike i pogodan je za rješavanje jednostavnih problema.

    Prikaz informacija u generator signala proizvedeno na LCD ekranu veličine 16x2 karaktera sa HD44780 kontrolerom. Važno je napomenuti da se za uštedu portova mikrokontrolera, LCD ekranom upravlja preko samo tri žice, to je postignuto korištenjem registra pomaka - pročitajte kako spojiti displej preko tri žice;

    Pohranjivanje portova je neophodno, 8 portova se koristi za otporni DAC, 7 portova za dugmad. U originalnom članku, autor je obećao da će koristiti PWM modulaciju, ali je očigledno nije završio, pošto je počeo da razvija napredniju verziju na ATMEGA16.

    Šematski dijagram generatora DDS signala i štampanu ploču.

    Kolo i ploče su prikazane u originalu, takođe sadrže dugmad za PWM kontrolu koje autor nije koristio.

    Za DAC sam posebno kupio precizne otpornike s greškom od ±0,05%, ali kako se ispostavilo, sasvim su dovoljni jednostavni s greškom od ±5%. Talasni oblik je bio sasvim prihvatljiv za sve vrste signala.

    Kada generator sastavljen i program učitan u mikrokontroler, nisu potrebna nikakva podešavanja, osim ako ne podesite kontrast ekrana.

    Rad sa uređajem je jednostavan - odaberite oblik signala, postavite potrebnu frekvenciju, a možete promijeniti korak podešavanja frekvencije sa granicama od 1 - 10 - 100 - 1000 Hz po koraku. Zatim kliknite na Start i generator počinje da radi. Treba napomenuti da kada se generator pokrene, frekvencija i oblik signala se ne mogu promijeniti, to je zbog činjenice da program ide u beskonačnu petlju i da bi se povećala maksimalna frekvencija generiranja, postupak prozivanja gumba morao biti uklonjen. Da biste zaustavili generiranje, kliknite na stop/reset, ovo će ponovo pokrenuti program i on se vraća u meni postavki. Evo nijanse.

    Zasebno, želio bih vam reći o proizvodnji kućišta za generator. Možete kupiti gotovu futrolu u prodavnici ili koristiti odgovarajuću sa nekog drugog uređaja, ali sam odlučio da je napravim u potpunosti sam. Komad dvostranog stakloplastike ležao je neaktivan, koji sam poklonio tijelu.

    Prvo morate uzeti sva mjerenja, dimenzije LCD displeja i ploče generatora signala, napajanje, konektore i dugmad, a zatim ga postaviti na list papira kako će biti unutar kućišta. Na osnovu dobijenih dimenzija možete započeti proizvodnju.

    Ovaj projekt je visokokvalitetan i univerzalni generator funkcija, koji, unatoč određenoj složenosti kruga, barem u usporedbi s jednostavnijim, ima vrlo široku funkcionalnost, što opravdava troškove njegove montaže. Može proizvesti 9 različitih valnih oblika i također radi sa sinhronizacijom impulsa.

    Šematski dijagram generatora na MK

    Postavke uređaja

    • Frekvencijski opseg: 10 Hz - 60 kHz
    • Digitalno podešavanje frekvencije u 3 različita koraka
    • Talasni oblici: sinus, trougao, kvadrat, pila, H-puls, L-puls, burst, sweep, šum
    • Izlazni opseg: 15V za sinus i trokut, 0-5V za ostale modove
    • Postoji izlaz za pulsnu sinhronizaciju

    Uređaj se napaja od 12 volti izmjenične struje, što osigurava dovoljno visok (preko 18 V) DC napon neophodan za normalan rad 78L15 i 79L15, koji formiraju bipolarni krug od 15 V puni opseg signala do opterećenja 1 kOhm.

    Korišteni regulator nivoa ALPS SRBM1L0800. Krug bi trebao koristiti otpornike sa ±1% tolerancije ili bolje. LED ograničavači struje - otpornici serije 4306R. Osvetljenost se može povećati u zavisnosti od preferencija izvođača. Generator je sastavljen u plastično kućište 178x154x36 mm sa aluminijumskim prednjim i zadnjim panelom.

    Mnoge kontaktne komponente su montirane na prednjem i zadnjem panelu (dugmad, dugmad, RCA konektori, LED sklopovi, konektor za napajanje). Štampane ploče su pričvršćene na kućište vijcima sa plastičnim odstojnicima. Svi ostali elementi generatora montirani su na štampane ploče - napajanje je odvojeno. Lijevo dugme u sredini je za promjenu moda, desno za odabir frekvencije moda.

    Generator proizvodi različite signale i radi u tri načina rada, koji se biraju pomoću tipke "Select" i označavaju tri gornje (na dijagramu) LED diode. Rotaciona kontrola menja parametre signala prema sledećoj tabeli:

    Odmah nakon podešavanja u modu 1, dolazi do sinusnog generiranja. Međutim, početna frekvencija je prilično niska i potreban je barem jedan klik enkodera da bi se povećala. Ploča ima kontakt za povezivanje uređaja za programiranje, koji vam omogućava brzu promjenu funkcionalnosti generatora signala, ako je potrebno. Svi projektni fajlovi - PIC16F870 firmver, crteži ploče, nalaze se

    Ovaj generator DDS funkcije (verzija 2.0) signala je sastavljen na AVR mikrokontroleru, ima dobru funkcionalnost, ima kontrolu amplitude, a takođe je sastavljen na jednostranoj štampanoj ploči.

    Ovaj generator je baziran na algoritmu Jesper DDS generatora, program je modernizovan za AVR-GCC C sa umetcima asemblerskog koda. Generator ima dva izlazna signala: prvi je DDS signal, drugi je brzi (1..8 MHz) “pravougaoni” izlaz, koji se može koristiti za oživljavanje MK-a sa netačnim fuzzovima i za druge svrhe.
    HS (High Speed) signal velike brzine preuzima se direktno iz Atmega16 OC1A (PD5) mikrokontrolera.
    DDS signali se generišu sa drugih MC izlaza kroz otpornu R2R matricu i preko LM358N čipa, koji omogućava podešavanje amplitude i ofseta signala. Offset i amplituda se podešavaju pomoću dva potenciometra. Pomak se može podesiti u rasponu od +5V..-5V, a amplituda je 0...10V. Frekvencija DDS signala može se podesiti u rasponu od 0...65534 Hz, što je više nego dovoljno za testiranje audio kola i druge radioamaterske zadatke.

    Glavne karakteristike DDS generatora V2.0:
    - jednostavno kolo sa uobičajenim i jeftinim radioelementima;
    - jednostrana štampana ploča;
    - ugrađeno napajanje;
    - odvojeni izlaz velike brzine (HS) do 8 MHz;
    - DDS signali sa varijabilnom amplitudom i ofsetom;
    - DDS signali: sinus, pravougaonik, testera i revers, trougao, EKG signal i signal šuma;
    - 2×16 LCD ekran;
    - intuitivna tastatura sa 5 tastera;
    - koraci za podešavanje frekvencije: 1, 10, 100, 1000, 10000 Hz;
    - pamćenje posljednjeg stanja nakon uključivanja napajanja.

    Blok dijagram ispod prikazuje logičku strukturu generatora funkcija:

    Kao što vidite, uređaj zahtijeva nekoliko napona napajanja: +5V, -12V, +12V. Naponi +12V i -12V se koriste za regulaciju amplitude i ofseta signala. Napajanje je dizajnirano pomoću transformatora i nekoliko čipova stabilizatora napona:

    Napajanje je sastavljeno na posebnoj ploči:

    Ako ne želite sami da montirate napajanje, možete koristiti uobičajeno ATX napajanje iz računara, gdje su svi potrebni naponi već prisutni. Raspored ATX konektora.

    LCD ekran

    Sve radnje se prikazuju preko LCD ekrana. Generatorom se upravlja sa pet tastera

    Tasteri gore/dole se koriste za kretanje kroz meni, tasteri levo/desno se koriste za promenu vrednosti frekvencije. Kada se pritisne središnji taster, odabrani signal počinje da se generiše. Ponovnim pritiskom na tipku se generator zaustavlja.

    Za postavljanje koraka promjene frekvencije predviđena je posebna vrijednost. Ovo je zgodno ako trebate promijeniti frekvenciju u širokom rasponu.

    Generator buke nema nikakva podešavanja. Koristi uobičajenu funkciju rand(), koja se kontinuirano dovodi do izlaza DDS generatora.

    HS izlaz velike brzine ima 4 frekventna moda: 1, 2, 4 i 8 MHz.

    Shematski dijagram

    Kolo generatora funkcija je jednostavno i sadrži lako dostupne elemente:
    - AVR Atmega16 mikrokontroler, sa eksternim kvarcom na 16 MHz;
    - standardni LCD ekran tipa HD44780 2×16;
    - R2R DAC matrica od običnih otpornika;
    - operacijsko pojačalo LM358N (domaći analog KR1040UD1);
    - dva potenciometra;
    - pet ključeva;
    - nekoliko konektora.

    platiti:

    Funkcionalni generator je sastavljen u plastičnoj kutiji:


    Softver

    Kao što sam rekao gore, bazirao sam svoj program na algoritmu Jesper DDS generatora. Dodao sam nekoliko linija asemblerskog koda da implementiram zaustavljanje generacije. Sada algoritam sadrži 10 CPU ciklusa, umjesto 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"
    "eili r19, r19 ;r19<-0″ "\n\t"
    "1:" "\n\t"
    "dodaj r18, %0 ;1 ciklus" "\n\t"
    "adc r19, %1 ;1 ciklus" "\n\t"
    "adc %A3, %2 ;1 ciklus" "\n\t"
    "lpm ;3 ciklusa" "\n\t"
    "out %4, __tmp_reg__ ;1 ciklus" "\n\t"
    "sbis %5, 2 ;1 ciklus ako nema preskakanja" "\n\t"
    "rjmp 1b ;2 ciklusa. Ukupno 10 ciklusa" "\n\t"
    :
    :"r" (ad0),,"r" (ad1),,"r" (ad2),,"e" (signal),,"I" (_SFR_IO_ADDR(PORTA)), "I" (_SFR_IO_ADDR(SPCR) ))
    :"r18″, "r19"
    );}

    Tabela oblika DDS signala nalazi se u fleš memoriji MK-a, čija adresa počinje sa 0xXX00. Ovi odjeljci su definirani u makefileu, na odgovarajućim memorijskim lokacijama:
    #Definirajte sekcije gdje će se pohraniti signalne tablice
    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