Shematski dijagram dds generatora na atmel mikrokontroleru. Funkcionalni dds generator na plc. Ispitivanje načina rada generatora nakon montaže

Shematski dijagram dds generatora na atmel mikrokontroleru.  Funkcionalni dds generator na plc.  Ispitivanje načina rada generatora nakon montaže
Shematski dijagram dds generatora na atmel mikrokontroleru. Funkcionalni dds generator na plc. Ispitivanje načina rada generatora nakon montaže

Maksimalna frekvencija - 65534 Hz ​​​​(i do 8 MHz HS izlaz s kvadratnim valom). I tada sam pomislio da je generator izvrstan zadatak gdje se FPGA može pokazati u najboljem izdanju. Sportski sam odlučio ponoviti projekt na FPGA-i, ispoštovati rokove unutar dva vikenda i dobiti parametre koji nisu strogo definirani, već maksimalno mogući. Što je iz ovoga ispalo možete saznati ispod rez.

Nulti dan

Prije nego što je došao vikend, imao sam vremena za razmišljanje o provedbi. Kako bih pojednostavio svoj zadatak, odlučio sam napraviti generator ne kao zaseban uređaj s gumbima i LCD zaslonom, već kao uređaj koji se povezuje s računalom putem USB-a. Za ovo imam USB2RS232 ploču. Ploča ne zahtijeva upravljačke programe (CDC), stoga mislim da će raditi pod Linuxom (za neke je to važno). Također, neću kriti da sam već radio s primanjem poruka putem RS232. Uzet ću gotove module za rad s RS232 s opencores.com.

Za generiranje sinusnog signala trebat će vam DAC. Odabrao sam tip DAC-a, kao u izvornom projektu - R2R 8-bitni. Omogućit će vam rad na visokim frekvencijama, reda veličine megaherca. Uvjeren sam da bi se FPGA trebala nositi s tim

Razmišljao sam kako napisati program za prijenos podataka preko COM porta. S jedne strane, možete pisati u Delphiju; već imate iskustva s pisanjem takvog programa, a osim toga, veličina izvršne datoteke neće biti velika. Također sam pokušao skicirati nešto što bi radilo sa Serialom u obliku java skripte na html stranici, ali to je više-manje radilo samo kroz Chrome serijski API, ali za ovo morate instalirati dodatak... općenito , također ne dolazi u obzir. Probao sam PyQt5 kao inovaciju za sebe, ali kada distribuirate takav projekt, morate povući hrpu biblioteka. Nakon što sam pokušao kompajlirati PyQt projekt u exe datoteku, pokazalo se da ima više od 10 MB. To jest, neće biti ništa bolje od aplikacije napisane u 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 serijskim i već sam radio s njim. I aplikacija temeljena na Qt5 može se prebaciti na Linux i Mac (nekima je to važno), a od verzije 5.2 aplikacije temeljene na QWidgetsu mogu se čak prebaciti na pametni telefon!

Što je još potrebno? Naravno, ploča ima FPGA. Imam ih dva (Cyclone iv EP4CE10E22C8N za 10 tisuća ćelija, i Cyclone ii EP2C5 za 5 tisuća ćelija). Odabrat ću ovaj s lijeve strane isključivo zbog praktičnijeg konektora. Volumenom, projekt ne namjerava biti velik, pa će se uklopiti u jedno od dva. Ne razlikuju se u brzini rada. Obje ploče imaju na sebi oscilatore od 50 MHz, a unutar FPGA je PLL, s kojim 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 lemilo i počeo lemiti DAC s otpornicima. Uzeo sam prototip ploče. Instalacija je izvršena pomoću omota. Jedina promjena koja je utjecala na tehnologiju je da sam napustio F38N kiselinu za kalajisanje postolja u korist TT indikatorskog fluks gela. Suština tehnologije je jednostavna: lemim regale u tiskanu pločicu, a na njih lemim otpornike sa strane tiskane ploče. Veze koje nedostaju stvaram uvijanjem. Također, stalci su praktični jer ih mogu umetnuti izravno u FPGA ploču.

Nažalost, kod kuće nije bilo dostupnih otpornika od 1 i 2 kilo-ohma. Nije bilo vremena za odlazak u trgovinu. 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 izrade projekta potrebno je postaviti ciljni uređaj: Izbornik Assigments -> Device


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

Generatorski modul od 1000 Hz

modul generator_signala(clk50M, signal_out); ulazna žica clk50M; žičani 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 vanjskog generatora //2^32 = 4,294,967,296 - DDS dubina bita - 32 bita //dijeli 1000Hz / 50,000,000 Hz / 2 * 4294967296 => 42949, 67296 uvijek @ (posedge clk50M) početi akumulator<= accumulator + 32"d42949; end endmodule


Nakon toga sam kliknuo "Pokreni kompilaciju" kako bi razvojno okruženje pitalo koje ulazne/izlazne linije imamo u glavnom modulu projekta i s kojim su fizičkim PIN-ovima povezani. Nakon kompilacije, mi dodijelite linije koje se pojavljuju pravim PIN-ovima FPGA čipa:

Stavka izbornika Asigments -> Pin Planner

Za sada zanemarite retke HS_OUT, key0 i key1, oni se kasnije pojavljuju u projektu, ali nisam imao vremena napraviti snimku zaslona na samom početku.

U principu, dovoljno je “registrirati” samo PIN_nn u koloni Location, a ostale parametre (I/O standard, Current Strench i Slew Rate) možete ostaviti kao zadane ili odabrati iste one koje nudi default (default) tako da nema upozorenja "ov.

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

Brojevi pinova konektora označeni su na ploči


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




Nakon što su pinovi dodijeljeni, ponovno kompajliram projekt i flešujem ga pomoću USB programatora. Ako nemate instalirane upravljačke programe za USB Byte blaster programator, recite sustavu Windows da se oni nalaze u mapi u kojoj imate instaliran Quartus. Onda će ga sama pronaći.

Programator mora biti spojen na JTAG konektor. A stavka izbornika za programiranje je “Alati -> Programer” (ili kliknite ikonu na alatnoj traci). Gumb "Start", radosni "Uspjeh" i firmware već su unutar FPGA i već rade. Samo nemojte isključiti FPGA, inače će sve zaboraviti.

Alati -> Programer


DAC je spojen na konektor FPGA ploče. Spajam osciloskop S1-112A na DAC izlaz. Rezultat bi trebao biti "pila" jer se visoki dio DDS riječi faznog akumulatora šalje na 8-bitni izlaz. I uvijek se povećava dok se ne prelije.

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

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

Još jedna važna točka koju je trebalo razjasniti je najveća moguća frekvencija s kojom će DDS generator raditi. S ispravno konfiguriranim parametrima TimeQuest, nakon kompilacije u "Izvješću o kompilaciji" možete vidjeti da je brzina kruga iznad 200 MHz s marginom. To znači da ću pomnožiti frekvenciju generatora od 50 MHz s 4 pomoću PLL-a. Povećat ću vrijednost DDS faznog akumulatora s frekvencijom od 200 MHz. Konačni frekvencijski raspon koji se može dobiti u našim uvjetima je 0 - 100 MHz. Točnost podešavanja frekvencije:

200 000 000 Hz (clk) / 2^32 (DDS) = 0,047 Hz
To jest, bolje je od ~0,05 Hz. Točnost od djelića herca smatram dovoljnom za generator s takvim rasponom radnih frekvencija (0...100 MHz). Ako netko treba povećati točnost, da biste to učinili, možete povećati dubinu DDS bita (ne zaboravite provjeriti TimeQuest Timing Analyzer da je radna brzina logičkog sklopa bila unutar CLK = 200 MHz, jer je ovo zbrajalo), ili jednostavno smanjiti frekvenciju takta, ako nije potreban tako široki frekvencijski raspon.

TimeQuest vremenski analizator


Nakon što sam vidio "pilu" na ekranu, obiteljske stvari su me natjerale da odem na selo (bio mi je slobodan dan). Tamo sam kosio, kuhao, roštiljao i nisam ni slutio kakvo me iznenađenje čeka navečer. Bliže noći, prije odlaska u krevet, 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 uzeo lemilo. Ovog puta DAC se pokazao preciznijim, a i potrebno je manje vremena za njegovu instalaciju.

Stavimo DAC na FPGA ploču i spojimo ga na osciloskop

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

Pila 10 MHz

Pila 25 MHz


Oblik pile od 10 MHz još uvijek je sličan ispravnom. Ali na 25 MHz to više nije nimalo “lijepo”. Međutim, C1-112a ima širinu pojasa od 10 MHz, tako da u ovom slučaju razlog može biti već u osciloskopu.

U načelu, ovo pitanje s DAC-om može se smatrati zatvorenim. Uzmimo sada valne oblike izlaza velike brzine. Da bismo to učinili, ispis ćemo bit najveće važnosti u zasebni PIN FPGA. Podatke za ovu liniju uzet ćemo iz najvažnijeg bita DDS akumulatora.

Dodijeli hs_out = akumulator;

Pravougaoni val 1 MHz

Pravougaoni val 5 MHz

Pravougaoni val 25 MHz

Pravokutni val od 50 MHz sada je gotovo nevidljiv


Ali mislim da bi FPGA izlaz trebao biti opterećen otporom. Možda bi fronte bile strmije.

Sinus se radi prema tablici. Veličina tablice je 256 vrijednosti od 8 bita. Moglo bi se uzeti i više, ali već sam imao gotovu mif datoteku. Pomoću čarobnjaka stvaramo ROM element s podacima sinusne tablice iz mif datoteke.

Stvaranje ROM-a - Alati -> Mega Wizard Upravitelj dodataka


Odaberite 1 port ROM i dodijelite naziv modulu

Slažemo se

I tu se slažemo

Korištenjem pretraživanja pronalazimo našu mif datoteku sa sinusnom tablicom

Ni tu ništa ne mijenjamo.

Odznačite modul sine_rom_bb.v - nije potreban. Sljedeći cilj. Quartus će tražiti dodavanje modula u projekt - slažemo se. Nakon toga, modul se može koristiti kao bilo koji drugi modul u Verilogu.


Gornjih 8 bitova DDS riječi akumulatora koristit će se kao ROM adresa, a izlaz podataka bit će sinusna vrijednost.

Kodirati

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


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

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

Pa, to je kraj vikenda. Ali softver za upravljanje s računala još nije napisan. Prisiljen sam priznati činjenicu da nisam ispoštovao planirane rokove.

Treći dan

Vremena je vrlo malo, pa program pišemo u žurbi (u najboljoj tradiciji). Na nekim mjestima, radi smanjenja broja slova i lakšeg unosa podataka s tipkovnice, koristi se filtar događaja prema nazivu widgeta. Molimo za razumijevanje i oprosti.

Sučelje

Veze s analozima

Nije potpun popis
Funkcionalni DDS generator. Kreiran na temelju AVR-a. Frekvencije 0... 65534 Hz.
Pregled DDS generatora GK101. Stvoren pomoću Altera MAX240 FPGA. Frekvencije do 10 MHz.
Višenamjenski generator na PIC16F870. Frekvencijski raspon: 11 Hz - 60 kHz.
generatori Dodajte oznake

Maksimalna frekvencija - 65534 Hz ​​​​(i do 8 MHz HS izlaz s kvadratnim valom). I tada sam pomislio da je generator izvrstan zadatak gdje se FPGA može pokazati u najboljem izdanju. Sportski sam odlučio ponoviti projekt na FPGA-i, ispoštovati rokove unutar dva vikenda i dobiti parametre koji nisu strogo definirani, već maksimalno mogući. Što je iz ovoga ispalo možete saznati ispod rez.

Nulti dan

Prije nego što je došao vikend, imao sam vremena za razmišljanje o provedbi. Kako bih pojednostavio svoj zadatak, odlučio sam napraviti generator ne kao zaseban uređaj s gumbima i LCD zaslonom, već kao uređaj koji se povezuje s računalom putem USB-a. Za ovo imam USB2RS232 ploču. Ploča ne zahtijeva upravljačke programe (CDC), stoga mislim da će raditi pod Linuxom (za neke je to važno). Također, neću kriti da sam već radio s primanjem poruka putem RS232. Uzet ću gotove module za rad s RS232 s opencores.com.

Za generiranje sinusnog signala trebat će vam DAC. Odabrao sam tip DAC-a, kao u izvornom projektu - R2R 8-bitni. Omogućit će vam rad na visokim frekvencijama, reda veličine megaherca. Uvjeren sam da bi se FPGA trebala nositi s tim

Razmišljao sam kako napisati program za prijenos podataka preko COM porta. S jedne strane, možete pisati u Delphiju; već imate iskustva s pisanjem takvog programa, a osim toga, veličina izvršne datoteke neće biti velika. Također sam pokušao skicirati nešto što bi radilo sa Serialom u obliku java skripte na html stranici, ali to je više-manje radilo samo kroz Chrome serijski API, ali za ovo morate instalirati dodatak... općenito , također ne dolazi u obzir. Probao sam PyQt5 kao inovaciju za sebe, ali kada distribuirate takav projekt, morate povući hrpu biblioteka. Nakon što sam pokušao kompajlirati PyQt projekt u exe datoteku, pokazalo se da ima više od 10 MB. To jest, neće biti ništa bolje od aplikacije napisane u 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 serijskim i već sam radio s njim. I aplikacija temeljena na Qt5 može se prebaciti na Linux i Mac (nekima je to važno), a od verzije 5.2 aplikacije temeljene na QWidgetsu mogu se čak prebaciti na pametni telefon!

Što je još potrebno? Naravno, ploča ima FPGA. Imam ih dva (Cyclone iv EP4CE10E22C8N za 10 tisuća ćelija, i Cyclone ii EP2C5 za 5 tisuća ćelija). Odabrat ću ovaj s lijeve strane isključivo zbog praktičnijeg konektora. Volumenom, projekt ne namjerava biti velik, pa će se uklopiti u jedno od dva. Ne razlikuju se u brzini rada. Obje ploče imaju na sebi oscilatore od 50 MHz, a unutar FPGA je PLL, s kojim 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 lemilo i počeo lemiti DAC s otpornicima. Uzeo sam prototip ploče. Instalacija je izvršena pomoću . Jedina promjena koja je utjecala na tehnologiju je da sam napustio F38N kiselinu za kalajisanje postolja u korist TT indikatorskog fluks gela. Suština tehnologije je jednostavna: lemim regale u tiskanu pločicu, a na njih lemim otpornike sa strane tiskane ploče. Veze koje nedostaju stvaram uvijanjem. Također, stalci su praktični jer ih mogu umetnuti izravno u FPGA ploču.

Nažalost, kod kuće nije bilo dostupnih otpornika od 1 i 2 kilo-ohma. Nije bilo vremena za odlazak u trgovinu. 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 izrade projekta potrebno je postaviti ciljni uređaj: Izbornik Assigments -> Device


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

Generatorski modul od 1000 Hz

modul generator_signala(clk50M, signal_out); ulazna žica clk50M; žičani 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 vanjskog generatora //2^32 = 4,294,967,296 - DDS dubina bita - 32 bita //dijeli 1000Hz / 50,000,000 Hz / 2 * 4294967296 => 42949, 67296 uvijek @ (posedge clk50M) početi akumulator<= accumulator + 32"d42949; end endmodule


Nakon toga sam kliknuo "Pokreni kompilaciju" kako bi razvojno okruženje pitalo koje ulazne/izlazne linije imamo u glavnom modulu projekta i s kojim su fizičkim PIN-ovima povezani. Nakon kompilacije, mi dodijelite linije koje se pojavljuju pravim PIN-ovima FPGA čipa:

Stavka izbornika Asigments -> Pin Planner

Za sada zanemarite retke HS_OUT, key0 i key1, oni se kasnije pojavljuju u projektu, ali nisam imao vremena napraviti snimku zaslona na samom početku.

U principu, dovoljno je “registrirati” samo PIN_nn u koloni Location, a ostale parametre (I/O standard, Current Strench i Slew Rate) možete ostaviti kao zadane ili odabrati iste one koje nudi default (default) tako da nema upozorenja "ov.

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

Brojevi pinova konektora označeni su na ploči


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




Nakon što su pinovi dodijeljeni, ponovno kompajliram projekt i flešujem ga pomoću USB programatora. Ako nemate instalirane upravljačke programe za USB Byte blaster programator, recite sustavu Windows da se oni nalaze u mapi u kojoj imate instaliran Quartus. Onda će ga sama pronaći.

Programator mora biti spojen na JTAG konektor. A stavka izbornika za programiranje je “Alati -> Programer” (ili kliknite ikonu na alatnoj traci). Gumb "Start", radosni "Uspjeh" i firmware već su unutar FPGA i već rade. Samo nemojte isključiti FPGA, inače će sve zaboraviti.

Alati -> Programer


DAC je spojen na konektor FPGA ploče. Spajam osciloskop S1-112A na DAC izlaz. Rezultat bi trebao biti "pila" jer se visoki dio DDS riječi faznog akumulatora šalje na 8-bitni izlaz. I uvijek se povećava dok se ne prelije.

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

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

Još jedna važna točka koju je trebalo razjasniti je najveća moguća frekvencija s kojom će DDS generator raditi. S ispravno konfiguriranim parametrima TimeQuest, nakon kompilacije u "Izvješću o kompilaciji" možete vidjeti da je brzina kruga iznad 200 MHz s marginom. To znači da ću pomnožiti frekvenciju generatora od 50 MHz s 4 pomoću PLL-a. Povećat ću vrijednost DDS faznog akumulatora s frekvencijom od 200 MHz. Konačni frekvencijski raspon koji se može dobiti u našim uvjetima je 0 - 100 MHz. Točnost podešavanja frekvencije:

200 000 000 Hz (clk) / 2^32 (DDS) = 0,047 Hz
To jest, bolje je od ~0,05 Hz. Točnost od djelića herca smatram dovoljnom za generator s takvim rasponom radnih frekvencija (0...100 MHz). Ako netko treba povećati točnost, da biste to učinili, možete povećati dubinu DDS bita (ne zaboravite provjeriti TimeQuest Timing Analyzer da je radna brzina logičkog sklopa bila unutar CLK = 200 MHz, jer je ovo zbrajalo), ili jednostavno smanjiti frekvenciju takta, ako nije potreban tako široki frekvencijski raspon.

TimeQuest vremenski analizator


Nakon što sam vidio "pilu" na ekranu, obiteljske stvari su me natjerale da odem na selo (bio mi je slobodan dan). Tamo sam kosio, kuhao, roštiljao i nisam ni slutio kakvo me iznenađenje čeka navečer. Bliže noći, prije odlaska u krevet, 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 uzeo lemilo. Ovog puta DAC se pokazao preciznijim, a i potrebno je manje vremena za njegovu instalaciju.

Stavimo DAC na FPGA ploču i spojimo ga na osciloskop

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

Pila 10 MHz

Pila 25 MHz


Oblik pile od 10 MHz još uvijek je sličan ispravnom. Ali na 25 MHz to više nije nimalo “lijepo”. Međutim, C1-112a ima širinu pojasa od 10 MHz, tako da u ovom slučaju razlog može biti već u osciloskopu.

U načelu, ovo pitanje s DAC-om može se smatrati zatvorenim. Uzmimo sada valne oblike izlaza velike brzine. Da bismo to učinili, ispis ćemo bit najveće važnosti u zasebni PIN FPGA. Podatke za ovu liniju uzet ćemo iz najvažnijeg bita DDS akumulatora.

Dodijeli hs_out = akumulator;

Pravougaoni val 1 MHz

Pravougaoni val 5 MHz

Pravougaoni val 25 MHz

Pravokutni val od 50 MHz sada je gotovo nevidljiv


Ali mislim da bi FPGA izlaz trebao biti opterećen otporom. Možda bi fronte bile strmije.

Sinus se radi prema tablici. Veličina tablice je 256 vrijednosti od 8 bita. Moglo bi se uzeti i više, ali već sam imao gotovu mif datoteku. Pomoću čarobnjaka stvaramo ROM element s podacima sinusne tablice iz mif datoteke.

Stvaranje ROM-a - Alati -> Mega Wizard Upravitelj dodataka


Odaberite 1 port ROM i dodijelite naziv modulu

Slažemo se

I tu se slažemo

Korištenjem pretraživanja pronalazimo našu mif datoteku sa sinusnom tablicom

Ni tu ništa ne mijenjamo.

Odznačite modul sine_rom_bb.v - nije potreban. Sljedeći cilj. Quartus će tražiti dodavanje modula u projekt - slažemo se. Nakon toga, modul se može koristiti kao bilo koji drugi modul u Verilogu.


Gornjih 8 bitova DDS riječi akumulatora koristit će se kao ROM adresa, a izlaz podataka bit će sinusna vrijednost.

Kodirati

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


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

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

Pa, to je kraj vikenda. Ali softver za upravljanje s računala još nije napisan. Prisiljen sam priznati činjenicu da nisam ispoštovao planirane rokove.

Treći dan

Vremena je vrlo malo, pa program pišemo u žurbi (u najboljoj tradiciji). Na nekim mjestima, radi smanjenja broja slova i lakšeg unosa podataka s tipkovnice, koristi se filtar događaja prema nazivu widgeta. Molimo za razumijevanje i oprosti.

Sučelje

Veze s analozima

Nije potpun popis
Funkcionalni DDS generator. Kreiran na temelju AVR-a. Frekvencije 0... 65534 Hz.
Pregled DDS generatora GK101. Stvoren pomoću Altera MAX240 FPGA. Frekvencije do 10 MHz.
Višenamjenski generator na PIC16F870. Frekvencijski raspon: 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 radioamaterstvom bave iz hobija, visoki novčani troškovi nabave potrebne opreme često su neprihvatljivi.

    Dakle, u mom slučaju, popis ove opreme bio je daleko od kompletnog i nedostajao je generator signala.

    Generator signala Ispostavilo se da ga je lako napraviti sam od dostupnih radio elemenata i na kraju nije skupo. Dakle, nakon što sam pretražio Internet, pronašao sam veliki broj sklopova za razne generatore, uključujući i naprednije modele s DAC-om, ali već skupe za proizvodnju. Za početak sam se zaustavio na jednostavnom DDS generator signala na ATMEGA8 mikrokontroleru tvrtke Atmel. Ovaj, nisam ništa poboljšao ili promijenio - ostavio sam sve kako jest, samo sam napravio kopiju i, štoviše, ne tvrdim da sam autor ovog uređaja.

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

    Prikaz informacija u generator signala proizveden na 16x2 znakovnom LCD zaslonu s HD44780 kontrolerom. Važno je napomenuti da se radi uštede portova mikrokontrolera, LCD zaslonom upravlja preko samo tri žice; to je postignuto pomoću registra pomaka - pročitajte kako spojiti zaslon preko tri žice.

    Spremanje portova je neophodno, 8 portova se koristi za rezistivni DAC, 7 portova za tipke. U izvornom članku, autor je obećao koristiti PWM modulaciju, ali očito nije završio, jer je počeo razvijati napredniju verziju na ATMEGA16.

    Shematski dijagram generatora DDS signala i tiskanu ploču.

    Strujni krug i ploče prikazani su u originalu; također sadrže gumbe za PWM kontrolu koje autor ne koristi.

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

    Kada generator sastavljen i program učitan u mikrokontroler, nisu potrebne nikakve postavke, osim ako ne prilagodite kontrast zaslona.

    Rad s uređajem je jednostavan - odaberite oblik signala, postavite željenu frekvenciju, a možete mijenjati korak podešavanja frekvencije u granicama od 1 - 10 - 100 - 1000 Hz po koraku. Zatim kliknite na Start i generator počinje s radom. Treba napomenuti da kada se generator pokrene, frekvencija i oblik signala se ne mogu promijeniti, to je zbog činjenice da program ulazi u beskonačnu petlju i kako bi se povećala maksimalna frekvencija generiranja, postupak prozivanja gumba morao biti uklonjen. Za zaustavljanje generiranja, kliknite na stop/reset, ovo ponovno pokreće program i vraća se na izbornik postavki. Ovdje je nijansa.

    Zasebno bih želio razgovarati o izradi kućišta za generator. Možete kupiti gotovu futrolu u trgovini ili koristiti odgovarajuću s nekog drugog uređaja, ali ja sam je odlučio napraviti u potpunosti sam. Komad dvostranog fiberglasa ležao je besposlen, koji sam donirao tijelu.

    Najprije trebate uzeti sve mjere, dimenzije ploče LCD zaslona i generatora signala, napajanja, konektora i gumba, zatim ga staviti na list papira kakav će biti unutar kućišta. Na temelju dobivenih dimenzija možete započeti s proizvodnjom.

    Ovaj projekt je visokokvalitetni i univerzalni funkcionalni generator, koji, unatoč određenoj složenosti sklopa, barem u usporedbi s jednostavnijim, ima vrlo široku funkcionalnost, što opravdava trošak njegove montaže. Sposoban je proizvesti 9 različitih valnih oblika i također radi sa sinkronizacijom pulsa.

    Shematski dijagram generatora na MK

    Postavke uređaja

    • Frekvencijski raspon: 10 Hz - 60 kHz
    • Digitalno podešavanje frekvencije u 3 različita koraka
    • Valni oblici: sinus, trokut, kvadrat, pila, H-puls, L-puls, Burst, Sweep, Noise
    • Izlazni raspon: 15V za sinus i trokut, 0-5V za ostale modove
    • Postoji izlaz za sinkronizaciju impulsa

    Uređaj se napaja izmjeničnim naponom od 12 volti, koji osigurava dovoljno visok (preko 18 V) istosmjerni napon neophodan za normalan rad 78L15 i 79L15, koji tvore bipolarni krug od 15 V, tako da mikrosklop LF353 može dati izlaz puni raspon signala do opterećenja 1 kOhm.

    Korišteni regulator razine ALPS SRBM1L0800. Krug bi trebao koristiti otpornike s ±1% tolerancije ili bolje. LED limitatori struje - otpornici serije 4306R. Svjetlina se može povećati ovisno o preferencijama izvođača. Generator je sastavljen u plastičnom kućištu 178x154x36 mm s aluminijskim prednjim i stražnjim panelom.

    Mnoge kontaktne komponente montirane su na prednjim i stražnjim pločama (gumbi, gumbi, RCA konektori, LED sklopovi, konektor za napajanje). Tiskane pločice pričvršćene su na kućište vijcima s plastičnim odstojnicima. Svi ostali elementi generatora montirani su na tiskane pločice - napajanje je zasebno. Lijevi gumb u sredini je za promjenu načina rada, desni je za odabir frekvencije načina.

    Generator proizvodi različite signale i radi u tri načina rada, koji se biraju tipkom "Select" i označavaju tri gornje (na dijagramu) LED diode. Okretna kontrola mijenja parametre signala prema sljedećoj tablici:

    Odmah nakon postavljanja u način rada 1, dolazi do generiranja sinusa. 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 spajanje uređaja za programiranje, što vam omogućuje brzu promjenu funkcionalnosti generatora signala, ako je potrebno. Sve projektne datoteke - firmware PIC16F870, crteži ploče, nalaze se

    Ovaj DDS funkcijski generator (verzija 2.0) signala je sastavljen na AVR mikrokontroleru, ima dobru funkcionalnost, ima kontrolu amplitude, a sastavljen je i na jednostranoj tiskanoj pločici.

    Ovaj generator se temelji na Jesper DDS algoritmu generatora, program je moderniziran za AVR-GCC C s umetnutim kodom za sklapanje. Generator ima dva izlazna signala: prvi su DDS signali, drugi je "pravokutni" izlaz velike brzine (1..8 MHz), koji se može koristiti za oživljavanje MK-a s neispravnim fuzzovima i za druge svrhe.
    Signal velike brzine HS (High Speed) uzima se izravno iz mikrokontrolera Atmega16 OC1A (PD5).
    DDS signali se generiraju iz drugih MC izlaza kroz rezistivnu R2R matricu i kroz LM358N čip, koji omogućuje podešavanje amplitude i offseta signala. Pomak i amplituda se podešavaju pomoću dva potenciometra. Offset se može podešavati 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 sklopova i druge radioamaterske zadatke.

    Glavne karakteristike DDS generatora V2.0:
    - jednostavan sklop s uobičajenim i jeftinim radioelementima;
    - jednostrana tiskana pločica;
    - ugrađeno napajanje;
    - odvojeni izlaz velike brzine (HS) do 8 MHz;
    - DDS signali s promjenjivom amplitudom i pomakom;
    - DDS signali: sinus, pravokutnik, pila i obrnuta pila, trokut, EKG signal i signal šuma;
    - 2×16 LCD ekran;
    - intuitivna tipkovnica s 5 tipki;
    - koraci za podešavanje frekvencije: 1, 10, 100, 1000, 10000 Hz;
    - pamćenje posljednjeg stanja nakon uključivanja napajanja.

    Donji blok dijagram prikazuje logičku strukturu generatora funkcija:

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

    Napajanje je sastavljeno na zasebnoj ploči:

    Ako ne želite sami sastaviti napajanje, možete koristiti obično ATX napajanje s računala, gdje su već prisutni svi potrebni naponi. Raspored ATX konektora.

    LCD ekran

    Sve radnje se prikazuju preko LCD ekrana. Generatorom se upravlja s pet tipki

    Tipke gore/dolje koriste se za kretanje kroz izbornik, tipke lijevo/desno koriste se za promjenu vrijednosti frekvencije. Kada se pritisne središnja tipka, počinje se generirati odabrani signal. Ponovnim pritiskom na tipku generator se zaustavlja.

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

    Generator buke nema nikakvih postavki. Koristi uobičajenu funkciju rand(), koja se kontinuirano šalje na izlaz DDS generatora.

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

    Shematski dijagram

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

    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 redaka sklopovskog koda za implementaciju zaustavljanja generiranja. 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"
    "izlaz %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"
    );}

    Tablica oblika DDS signala nalazi se u flash memoriji MK-a, čija adresa počinje na 0xXX00. Ovi odjeljci definirani su u make datoteci, na odgovarajućim memorijskim lokacijama:
    #Definirajte odjeljke gdje 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