Daugiafunkcinis „pasidaryk pats“ signalo generatorius. Skaitmeninių funkcijų generatorius DDS. Generatoriaus maitinimo šaltinio išvaizda

$15,3

Visų pirma, DDS yra tiesioginis skaitmeninis sintezatorius arba skaitmeninio signalo sintezatorius arba elektroninis įrenginys, skirtas sintetinti savavališkas bangos formas ir dažnius iš etaloninio dažnio.

Kodėl man reikia generatoriaus kumpio radijo ekonomikoje, nepaaiškinsiu. Paruošti generatoriai nėra pigūs ir sveria padoriai, todėl juos gabenti taip pat brangu. Todėl buvo nuspręsta atidžiau pažvelgti į DDS modulius be dėklo ir maitinimo šaltinio.

DDS modulių pasirinkimas internete buvo nedidelis. Iš daugiau ar mažiau nebrangių ir įprastų funkcijų rinkinio radau tik 2 tipus. Jie yra vienodi savo funkcionalumu, skiriasi tik valdiklių vieta ir galia. Vieno iš jų veikimui reikėjo trijų įtampų (+ 12 V, -12 V ir + 5 V), antrasis veikia esant vienai 7–9 V įtampai. Tai buvo lemiama, tada lengviau maitinti jį iš gatavo maitinimo šaltinio ir nereikia specialiai aptverti maitinimo šaltinio.

Iš aprašymo svetainėje:

Darbinė įtampa: DC7-9V
  DDS dažnio diapazonas: 1HZ – 65534Hz.
  Greitaeigio dažnio (HS) išėjimas iki 8MHz;
  DDS signalo amplitudės dydį galima atskirai reguliuoti dviem potenciometrais;
  DDS signalai: sinuso, kvadrato, bango, pjūklo, atbulinio pjūklo, trikampio, EKG ir triukšmo bangos.
  1602 LCD meniu;
  Intuityvi klaviatūra.
  Skirsnis į reikšmę: 1,10,100,1000,10000 Hz;
  Maitinimas automatiškai atkuria paskutinę naudotą konfigūraciją.
  Poslinkis: 0,5pp – 5Vpp
  Amplitudės dydis: 0,5Vpp-14Vpp

Pati plokštė pagaminta labai aukštos kokybės, tinkamo litavimo, srautas nuplaunamas.

Kadangi po ranka nebuvo tinkamo 9 V maitinimo šaltinio su tinkama jungtimi, prijungiau 5 V maitinimo šaltinį. Kaip bebūtų keista, ji veikė. Teko tik šiek tiek pakoreguoti LCD ekrano kontrastą. Norėdami tai padaryti, po pačiu ekranu yra nustatymo rezistorius.

Generatorius turi patogų raidinį ir skaitmeninį skystųjų kristalų ekraną 1602 su mėlynu foniniu apšvietimu ir daug valdymo mygtukų bei 2 reguliavimo rankenėles. Eikime tvarka. Maitinimo jungtis yra 8-9 V (kaip jau išsiaiškinta, ji užtikrintai veikia nuo 5 V). Įjungimo / išjungimo mygtukas. LED signalizacijos įtraukimas.

  • aukštyn ir žemyn - pasirinkite bangos formą (funkciją);
  • kairė ir dešinė - generavimo dažnio pasirinkimas (žingsnis nustatomas „Freq Step“ meniu).
  • centrinis mygtukas - pradžios / sustabdymo generavimas.

Dvi valdymo svirtys:

  • ampliuda;
  • poslinkis 0,5 - 5 V.

2 šoninės BNC jungtys. Vienas skirtas DDS išėjimui, antrasis - aukšto dažnio signalui.

Generatorius gali generuoti šias impulsų formas:

  • EKG \u003d elektrokardiograma (išjungtoje būsenoje mygtukai „kairėn“ ir „dešinėn“ išėjimo dažniui nustatyti. Vidurinis mygtuko paleidimas, visos šios bangos formos nustatymas)
  • Triukšmas \u003d triukšmas.
  • SawTooth \u003d pjūklas.
  • Rev Sawtooth \u003d atbulinis pjūklas.
  • Trikampis \u003d trikampis.
  • Sinusas \u003d sinuso banga.
  • Kvadratas \u003d stačiakampis.

Šis DDS funkcinis generatorius (versija 2.0) signalams yra surenkamas ant AVR mikrovaldiklio, turi gerą funkcionalumą, turi amplitudės valdymą, taip pat yra surinktas ant vienpusės spausdintos plokštės.

Šis generatorius pagrįstas Jesper DDS generatoriaus algoritmu, programa buvo patobulinta į AVR-GCC C su surinkimo kodo intarpais. Generatorius turi du išėjimo signalus: pirmasis yra DDS signalas, antrasis yra didelės spartos (1..8 MHz) „stačiakampis“ išėjimas, kuris gali būti naudojamas MK atgaivinti su neteisingais saugikliais ir kitiems tikslams.
  HS (didelio greičio) signalas imamas tiesiai iš „Atmega16 OC1A“ (PD5) mikrovaldiklio.
  DDS signalai generuojami iš kitų MK išėjimų per varžinę R2R matricą ir per LM358N mikroschemą, leidžiančią reguliuoti signalo amplitudę (amplitudę) ir poslinkį (ofsetą). Poslinkis ir amplitudė yra valdomi dviem potenciometrais. Poslinkį galima reguliuoti diapazone + 5 V .. 5 V, o amplitudė yra 0 ... 10 V. DDS signalų dažnį galima reguliuoti nuo 0 iki 65534 Hz \u200b\u200bdiapazone, o tai yra daugiau nei pakankamai, norint išbandyti garso grandines ir kitas mėgėjų radijo užduotis.

Pagrindinės DDS generatoriaus V2.0 charakteristikos:
  - Paprasta grandinė su įprastais ir nebrangiais radijo elementais;
  - vienpusė spausdintinė plokštė;
  - įmontuotas maitinimo šaltinis;
  - Atskira greitaeigė išėjimas (HS) iki 8 MHz;
  - DDS signalai su kintama amplitude ir poslinkiu;
  - DDS signalai: sinusinis, stačiakampis, pjūklas ir apverčiamasis pjūklas, trikampis, EKG signalas ir triukšmo signalas;
  - 2 × 16 LCD ekranas;
  - intuityvi 5 mygtukų klaviatūra;
  - dažnio reguliavimo žingsniai: 1, 10, 100, 1000, 10000 Hz;
  - prisiminti paskutinę būseną įjungus energiją.

Žemiau esančioje blokinėje schemoje parodyta funkcinė generatoriaus loginė struktūra:

Kaip matote, įrenginiui reikia kelių maitinimo įtampų: + 5 V, -12 V, + 12 V. Signalų amplitudės ir šališkumo valdymui naudojami įtampa + 12 V ir -12 V. Maitinimo šaltinis suprojektuotas naudojant transformatorių ir keletą įtampos stabilizavimo grandinių:

Maitinimo šaltinis surinktas ant atskiros plokštės:

Jei nenorite patys surinkti maitinimo šaltinio, galite naudoti įprastą ATX maitinimo šaltinį iš kompiuterio, kuriame jau yra visa reikalinga įtampa. Laidų ATX jungtis.

LCD ekranas

Visi veiksmai rodomi per LCD ekraną. Generatorius valdomas penkiais klavišais

Aukštyn / žemyn mygtukai yra naudojami norint pereiti per meniu, kairėn / dešinėn - norint pakeisti dažnio reikšmę. Kai paspaudžiamas centrinis klavišas, prasideda pasirinkto signalo generavimas. Dar kartą paspaudus mygtuką, generatorius sustabdomas.

Norint nustatyti dažnio keitimo žingsnį, pateikiama atskira vertė. Tai patogu, jei reikia pakeisti dažnį plačiame diapazone.

Triukšmo generatorius neturi jokių nustatymų. Tam naudojama įprasta funkcija rand (), nuolat tiekiama į DDS generatoriaus išėjimą.

HS spartusis išėjimas turi 4 dažnio režimus: 1, 2, 4 ir 8 MHz.

Grandinės schema

Funkcinė generatoriaus grandinė yra paprasta ir joje yra lengvai prieinami elementai:
  - Mikrovaldiklis AVR Atmega16, su išoriniu kvarcu, esant 16 MHz dažniui;
  - standartinis HD44780 tipo LCD ekranas 2 × 16;
  - įprastų varžų R2R matricos DAC;
  - operacinis stiprintuvas LM358N (vietinis KR1040UD1 analogas);
  - du potenciometrai;
  - penki raktai;
  - kelios jungtys.

Mokėti:

Funkcinis generatorius surenkamas plastikinėje dėžutėje:


Programinė įranga

Kaip jau sakiau aukščiau, savo programos šerdyje naudojau Jesper DDS generatoriaus algoritmą. Pridėjau kelias eilutes surinkėjo kodo, kad būtų galima įgyvendinti kartos sustojimą. Dabar algoritme yra 10 CPU ciklų, o ne 9.

negaliojantis statinis inline Signal_OUT (const uint8_t * signalas, uint8_t ad2, uint8_t ad1, uint8_t ad0) (
  asm nepastovus („eor r18, r18; r18<-0″ "\n\t"
  „eor r19, r19; r19<-0″ "\n\t"
  "1:" "\\ n \\ t"
  "pridėti r18,% 0; 1 ciklas" "\\ n \\ t"
  "adc r19,% 1; 1 ciklas" "\\ n \\ t"
  "adc% A3,% 2; 1 ciklas" "\\ n \\ t"
  "lpm; 3 ciklai" "\\ n \\ t"
  "iš% 4, __tmp_reg__; 1 ciklas" "\\ n \\ t"
  "sbis% 5, 2; 1 ciklas, jei praleisite" "\\ n \\ t"
  "rjmp 1b; 2 ciklai. Viso 10 ciklų" "\\ n \\ t"
:
  : „r“ (ad0), „r“ (ad1), „r“ (ad2), „e“ (signalas), „I“ (_SFR_IO_ADDR (PORTA)), „I“ (_SFR_IO_ADDR (SPCR))
  : „r18“, „r19“
);}

DDS signalų formų lentelė yra MK „flash“ atmintyje, kurios adresas prasideda raide 0xXX00. Šie skyriai yra apibrėžti makefile, tinkamose atminties vietose:
#Nustatykite skyrius, kur laikyti signalų lenteles
  LDFLAGS + \u003d -Wl, -section-start \u003d .MySection1 \u003d 0x3A00
  LDFLAGS + \u003d -Wl, -section-start \u003d .MySection2 \u003d 0x3B00
  LDFLAGS + \u003d -Wl, -section-start \u003d .MySection3 \u003d 0x3C00
  LDFLAGS + \u003d -Wl, -section-start \u003d .MySection4 \u003d 0x3D00
  LDFLAGS + \u003d -Wl, -section-start \u003d .MySection5 \u003d 0x3E00
  LDFLAGS + \u003d -Wl, -section-start \u003d .MySection6 \u003d 0x3F00

DDS generatorius, arba tiesioginės skaitmeninės sintezės generatorius, dabar dar nėra naujovė. Internete pateikiama daug grandinių, daugiausia AVR mikrovaldikliuose. Kaip DAC, daugiausia veikia R-2R matrica, tačiau AD9850 mikroschemoje yra dizainų (beje, jie nesiskiria mažomis sąnaudomis). Bet deja (ar laimei?) Jie neturėjo to, ko man reikėjo: mažo dydžio ir pigių. Todėl ši schema buvo sukurta.

Šiame straipsnyje noriu pristatyti DDS generatorių, pagamintą ATmega8 mikrovaldiklyje. Informacijai rodyti naudojamas grafinis skystųjų kristalų ekranas LPH8731-3C. Šis prietaisas leidžia jums gauti periodišką signalą su savavališka forma (100 taškų skiriamąja geba) ir tam tikra amplitude.

Specifikacijos:

  • Maitinimo įtampa: 5V
  • Dabartinis suvartojimas:<100мА
  • Min išėjimo įtampa: 0,5 V
  • Maks. išėjimo įtampa: 2,5 V
  • Įtampos nustatymo žingsnis: 0,5 V
  • Min signalo dažnis: 10Hz
  • Maks. signalo dažnis: 2kHz (10kHz)
  • Dažnio nustatymo žingsnis: 10Hz (100Hz)
  • Iš anksto nustatytų signalų skaičius: 8
  • Duomenų rodymas: grafinis LCD
  • Galimybė pridėti bangos formą „kelyje“ (nemirksėdama): nėra
  • Foninio apšvietimo ryškumas: reguliuojamas, būtina mirksėti
  • Maks. formų skaičius atmintyje: ne mažiau kaip 20

Prietaiso schema pateikiama žemiau:

Grandinės pagrindas, kaip jau minėta, yra ATmega8-16AU mikrovaldiklis. Indeksas "... 16" yra būtinas, nes grandinėje naudojamas kvarco rezonatorius 16 MHz dažniu. DAC sudarytas ant R-2R matricos. Šis žingsnis leidžia išvengti specialių mikroschemų naudojimo, tačiau, deja, tai neleidžia pasiekti didesnės nei 10 .. 12 bitų DAC skiriamosios gebos (mėgėjiškomis sąlygomis). Operatyvinis stiprintuvas, prijungtas prie kartotuvo grandinės, yra prijungtas prie matricos išėjimo per varžos įtampos daliklį (R17, RV1) ir skirtas stiprinti srovę.

Įrenginys valdomas mygtukais. Priekiniame skydelyje patartina išimti tik mygtukus SB1-SB4. Mygtukas SB5 vaidina „funkcinį“ vaidmenį ir leidžia naudoti mygtukus SB1-SB4, išskyrus „pagrindinius“ veiksmus. Jungiklis SA1 įjungia / išjungia „generavimą“ ir valdymo mygtukus. Pirmoje savo padėtyje įjungiamas valdymas ir išjungiamas signalo generavimas, o kitoje - situacija diametraliai priešinga pirmajai. J2 jungties negalima nukreipti į plokštę, nes ji skirta tik tiekti plokštės energiją per mikrovaldiklio programavimo laiką (tačiau turėsite kabintis tiesiai į takelius).

Prietaiso spausdintinė plokštė pagaminta iš dvipusės folijos medžiagos ir turi matmenis (_ x _). Pagrindinis jo gamybos sunkumas yra takelių išdėstymas, skirtas sodinti mikrovaldiklį, tačiau jei turite tokių plokščių gamybos patirtį ir (arba) galimybę naudoti fotorezistorių / LUT, tai gaminant neturėtų kilti problemų.

Surinkdami įrenginį, labai rekomenduoju pasitikrinti, ar gerai užlydomos angos, taip pat ar yra patikimas kontaktas tarp mikrovaldiklio kojų ir spausdintinės plokštės takelių. Aš praleidau tik 1 mikrovaldiklio pėdas ir dėl to problemai rasti prireikė poros dienų.

Firmware

Mikrovaldiklio programinė įranga buvo parašyta. Programuotojas ir programinė įranga buvo naudojami užpildyti .hex failą. Žemiau pateikiama ekrano kopija su saugiklių bitų nustatymo pavyzdžiu. Kadangi spausdintoje plokštėje nebuvo specialaus programavimo lizdo, būtina laikinai lituoti į atitinkamus mikrovaldiklio programinės įrangos maršrutus (mikrovaldiklio „MISO“, „MOSI“, „SCK“, „RESET“ kontaktai).

Prietaiso surinkimas ir išdėstymas

Pastačius prietaisą į dėklą, patariama SB5 mygtuką sumontuoti ant jo šono. Mano versijos SA1 jungiklis buvo apačioje, kaip ir krovinio jungtis. USB jungtis sumontuota viršutinėje dėklo dalyje, nes planuota naudoti DC-DC keitiklį 3.7 -\u003e 5V. Kadangi norėjau universalumo, nusprendžiau šį įrenginį nuimti.

Galimas elementų pakeitimas

Mikrovaldiklį galima naudoti tik su ATmega8-16AU. „LM358“ operacinis stiprintuvas yra panašus (pvz., NE532, OP04, OP221, OP290 ir ...) SO-8 pakete, todėl neturėtumėte pamiršti apie galimą išvadų neatitikimą. Tranzistorius Q1 gali pasiimti bet kokį mažos galios n-p-n, pavyzdžiui, buitinį KT315 ar KT3102. Patartina imtis rezistorių R1-R16 su minimaliu tolerancija (0,5 ... 1%), tačiau labiau paplitę 2 ... 5% eis (tačiau čia bangos forma gali būti šiek tiek blogesnė). Be to, patartina imti tokios pačios vertės rezistorius (tegul jis yra 10 kOhm), o ten, kur reikia 2R, įdėti 10 kOhm, o kur R - 2x10 kOhm lygiagrečiai. Patartina pasiimti kondensatorius C1, C2, kurių diapazonas yra 22 ... 33pF. Kvarco rezonatorius naudojamas žemo profilio, 16 MHz dažniu. Rezistorius RV1 - kelių posūkių. „Zener“ diodus galima nustatyti tik į 3,3 V.

Skystųjų kristalų ekraną galima naudoti tik su geltonu pagrindu ir užrašu „LPH8731-3C“.   Jis yra mobiliuosiuose telefonuose „Siemens A60“, A65 ir kt., O jo skiriamoji geba yra 101x80 taškų.

Pritaikymas

Tinkamai surinktas įtaisas nereikia sureguliuoti, jis turėtų veikti iškart po surinkimo ir valdiklio programinės įrangos. Jei taip neatsitiks, patikrinkite, ar nėra trumpų takelių spausdintinėje plokštėje, ar teisingai prijungtas LCD ekranas, ar laidų iš jungiklio SA1 vientisumas, taip pat „Zener“ diodo ir maitinimo šaltinio / USB laido būklė.

Pirmą kartą sėkmingai paleidus, naudojant osciloskopą ir nustatymo rezistorių RV1, išvesties signalo lygį reikia sureguliuoti pagal ekrane rodomus parametrus.

Mygtukams priskiriami: SB1 - „kairėn“ (išėjimo įtampa mažesnė), SB2 - „dešinė“ (išėjimo įtampa didesnė), SB3 - „dažnis +10“ (dažnis +100), SB4 - „dažnis -10“ (dažnis - 100)<-- SB5 - Отжата (Нажата).

Foto ir vaizdo įrenginiai:


Dviejose žemiau pateiktose nuotraukose parodyta, kaip galite gauti didesnį nei 2 kHz dažnį. Bet tai lemia signalo kokybę (stačiakampiui tai nesvarbu).



Signalų, gautų naudojant šį įrenginį, bangos formos:





Sumontuoto prietaiso išvaizda:


Radijo elementų sąrašas

Paskyrimas Tipas Nominali vertė suma PastabaRezultatasMano užrašų knygelė
U1 MK AVR 8 bitų

ATmega8A-AU

1 Į nešiojamąjį kompiuterį
U2 Operatyvinis stiprintuvas

LM358

1 Korpusas SO-8 (LM358D)) Į nešiojamąjį kompiuterį
Q1 Bipolinis tranzistorius

BC547

1 Į nešiojamąjį kompiuterį
D1 Zenerio diodas

BZX55C3V3

1 Į nešiojamąjį kompiuterį
RV1 Žoliapjovės rezistorius220 kOhm1 Į nešiojamąjį kompiuterį
R1-R9 Rezistorius

2,2 kOhm

9 0805, 1% Į nešiojamąjį kompiuterį
R10-R16, R32 Rezistorius

1,1 kOhm

8 0805, 1% Į nešiojamąjį kompiuterį
R17 Rezistorius

100 kOhm

1 0805 Į nešiojamąjį kompiuterį
R19-R23 Rezistorius

5,6 kΩ

5 0805 Į nešiojamąjį kompiuterį
R24-28, R18 Rezistorius

10 kOhm

5 0805 Į nešiojamąjį kompiuterį
R29, R30 Rezistorius

220 omų

2 0805 Į nešiojamąjį kompiuterį
R31 Rezistorius

75 omai

1 0805 Į nešiojamąjį kompiuterį
R33 Rezistorius

510 omų

1 0805 Į nešiojamąjį kompiuterį
C1, C2 Kondensatorius27 pF2 0805

Maksimalus dažnis yra 65534 Hz \u200b\u200b(ir iki 8 MHz HS išvesties su meandriu). Tada aš pagalvojau, kad generatorius yra puiki užduotis, kai FPGA gali parodyti save geriausiu įmanomu būdu. Kadangi susidomėjau sportu, nusprendžiau pakartoti projektą FPGA, laikydamasis dviejų poilsio dienų terminų, o parametrai nebuvo griežtai apibrėžti, tačiau maksimaliai įmanomi. Kas iš to atsirado, galite sužinoti po pjūviu

Diena nulis

Prieš ateinant savaitgaliui turėjau šiek tiek laiko pagalvoti apie įgyvendinimą. Norėdami supaprastinti savo užduotį, nusprendžiau generatorių padaryti ne kaip atskirą įrenginį su mygtukais ir LCD ekranu, bet kaip įrenginį, jungiamą prie kompiuterio per USB. Tam aš turiu USB2RS232 plokštę. Vairuotojo plokštė nereikalauja (CDC), todėl aš manau, kad ji veiks naudojant „Linux“ (kažkam tai yra svarbu). Taip pat neslėpsiu, kad jau dirbau su žinučių gavimu per RS232. Modulius, skirtus darbui su RS232, paruošiu paruoštus iš opencores.com.

  Norint generuoti sinusinį signalą, reikalingas DAC. Aš pasirinkau DAC tipą, kaip ir originaliame projekte - R2R už 8 bitus. Tai leis jums dirbti aukštais dažniais, maždaug megahercais. Esu įsitikinęs, kad FPGA turi tai išspręsti

Aš galvojau apie tai, ką parašyti duomenų perdavimo per COM prievadą programą. Viena vertus, jūs galite rašyti „Delphi7“, jūs jau turite tokios programos rašymo patirtį, o vykdomojo failo dydis nebus didelis. Aš taip pat bandžiau ką nors nurašyti, kad galėčiau dirbti su „Serial“ kaip „Java“ scenarijų HTML puslapyje, tačiau daugiau ar mažiau jis veikė tik per „Chrome“ serijos API, tačiau tam man reikia įdiegti papildinį ... Apskritai, jis taip pat dingsta. Kaip naujovę sau išbandžiau „PyQt5“, tačiau platinant tokį projektą reikia nuvilkti krūvą bibliotekų. Pabandžius surinkti PyQt projektą egzemplioriaus faile, paaiškėjo daugiau nei 10 mb. T. y., Tai nebus geriau nei programa, parašyta c ++ \\ Qt5. Verta manyti, kad aš neturiu jokios tobulėjimo patirties python srityje, bet aš turiu Qt5. Todėl pasirinkimas krito ant Qt5. Su penktąja versija atsirado modulis, skirtas darbui su serialais, ir aš jau dirbau su juo. Programa „Qt5“ gali būti perkelta į „Linux“ ir „Mac“ (kai kuriems žmonėms tai yra svarbu), o nuo 5.2 versijos programa „QWidgets“ gali būti perkelta net į išmanųjį telefoną!

Ko dar reikia? Natūralu, kad pagrindinė plokštė su FPGA. Aš turiu du iš jų (ciklonas iv EP4CE10E22C8N, skirtas 10 tūkst. Ląstelių, ir ciklonas ii, EP2C5, skirtas 5 tūkst. Ląstelių). Aš pasirinksiu tą, kuris yra kairėje, vien dėl patogesnės jungties. Kalbant apie apimtį, projektas neketina būti didelis, todėl tiks bet kuriai iš dviejų. Jie nesiskiria darbo greičiu. Abi plokštės turi „borto“ 50 MHz generatorius, o FPGA viduje yra PLL, su kuriuo galiu padidinti dažnį iki suplanuoto 200 MHz.

Pirmoji diena

  Dėl to, kad aš jau dariau DDS modulį savo sintezatoriaus projekte, iškart ėmiausi litavimo ketaus ir pradėjau lituoti DAC ant varžų. Aš paėmiau duonos lentą. Diegimas buvo atliekamas naudojant. Vienintelis pakeitimas, turėjęs įtakos technologijai, buvo tas, kad aš atsisakiau rūgšties F38N skutimo lentynoms, naudodamas TT indikatoriaus srauto gelį. Technologijos esmė paprasta: aš litau lentynėles į spausdintinės plokštės plokštę, litavimo varžus aš juos spausdinu iš spausdintinės plokštės pusės. Trūkstamos jungtys yra apvyniotos. Vis dėlto stelažai yra patogūs tuo, kad juos galiu įterpti tiesiai į FPGA plokštę.

Deja, namuose nebuvo 1 ir 2 kilogramų omų varžų. Nebuvo laiko eiti į parduotuvę. Turėjau atsisakyti vienos iš savo taisyklių, o rezistorius pašalinti iš senos nereikalingos plokštės. Buvo naudojami rezistoriai 15K ir 30K. Rezultatas yra toks Frankenšteinas:


Sukūrę projektą, turite nustatyti tikslinį įrenginį: meniu Assigments -\u003e Device


  Projekte aš „išvarčiau“ nevaldomą fiksuoto dažnio DDS pagrindinį modulį.

1000 Hz generatoriaus modulis

modulio signalo generatorius (clk50M, signalo išėjimas); įvesties laidas clk50M; išėjimo laido signalo išėjimas; viela clk200M; osc osc_200M reg akumuliatorius; priskirti signal_out \u003d akumuliatorių; // mes stengiamės sugeneruoti 1000 Hz // 50 000 000 Hz - išorinio generatoriaus laikrodžio dažnį // 2 ^ 32 \u003d 4 294 967 296 - DDS bitų ilgis - 32 bitai // padalinkite 1000 Hz / 50 000 000 Hz / 2 * 4294967296 \u003d\u003e 42949, 67296 visada @ (poz. Clk50M) prasideda kaupiklis<= accumulator + 32"d42949; end endmodule


  Po to spustelėjau „Pradėti kompiliaciją“, kad kūrimo aplinka pasidomėtų, kokias išvesties I / O linijas turime pagrindiniame projekto modulyje ir su kokiais fiziniais PIN kodais jie yra prijungti. Galite prisijungti prie beveik bet kurio. Po kompiliacijos mes priskiriame eilutes, kurios atrodo tikruose PIN mikroschemose. FPGA:

Užduotys -\u003e „Pin Planner“ meniu punktas

„HS_OUT“, „key0“ ir „key1“ eilutėse dar nekreipkite dėmesio, jos atsiranda projekte vėliau, bet man nepavyko padaryti ekrano pačioje pradžioje.

Iš esmės pakanka „užregistruoti“ tik „PIN_nn“ stulpelyje „Vietovė“, o likusius parametrus (įvesties / išvesties standartą, dabartinę juostą ir pasukimo greitį) galite palikti pagal nutylėjimą arba galite pasirinkti tuos pačius, kuriuos siūlo pagal numatytuosius nustatymus (numatytasis), kad nebūtų perspėjimo. „ov.

Kaip sužinoti, kuris PIN kodas atitinka lizdo numerį lentoje?

Jungties PIN kodai yra pasirašyti lentoje


  O FPGA kaiščiai, prie kurių jungiami jungčių kaiščiai, yra aprašyti dokumentuose, kurie pateikiami kartu su FPGA kortele.




  Po to, kai priskiriami kaiščiai, aš vėl komponuoju projektą ir blykčioju naudodamas USB programuotoją. Jei dar neįdiegėte „USB Byte Blaster“ programuotojo tvarkyklių, tada nurodykite „Windows“, kad jie yra aplanke, kuriame įdiegta „Quartus“. Tada ji atsidurs.

Programuotoją turite prijungti prie JTAG jungties. Programavimo meniu punktas yra „Įrankiai -\u003e Programuotojas“ (arba spustelėkite įrankių juostos piktogramą). Mygtukas „Pradėti“, linksmoji „Sėkmė“ ir programinė įranga jau yra FPGA viduje ir jau veikia. Tiesiog neišjunkite FPGA, kitaip ji viską pamirš.

Įrankiai -\u003e Programuotojas


  DAC yra prijungtas prie FPGA plokštės jungties. Aš prijungiu C1-112A osciloskopą prie DAC išvesties. Rezultatas turėtų būti „pjūklas“, nes didžioji fazės akumuliatoriaus žodžio DDS dalis yra išvedama į 8 bitų išvestį. Ir jis visada didėja, kol perpildomas.

Maždaug 1,5 valandos ir 1000 Hz dažnio matau tokią bangos formą:

Noriu pastebėti, kad „pjūklas“ viduryje turi nedidelį lūžį. Taip yra dėl to, kad rezistoriai turi įvairių verčių.

Kitas svarbus dalykas, kurį reikėjo išsiaiškinti, buvo maksimalus įmanomas DDS generatoriaus dažnis. Tinkamai sukonfigūravę „TimeQuest“ parametrus, sudėję į „Kompiliacijos ataskaitą“, galite pamatyti, kad grandinės greitis yra didesnis nei 200 MHz su riba. O tai reiškia, kad 50 MHz generatoriaus dažnį, naudodamas PLL, padauginsiu iš 4. Padidinsiu DDS fazės akumuliatoriaus, kurio dažnis yra 200 MHz, vertę. Galutinis dažnių diapazonas, kurį galime gauti mūsų sąlygomis, yra 0–100 MHz. Dažnio nustatymo tikslumas:

200 000 000 Hz (clk) / 2 ^ 32 (DDS) \u003d 0,047 Hz
Tai yra, jis yra geresnis nei ~ 0,05 Hz. Manau, kad generatoriaus, turinčio tokį darbinių dažnių diapazoną (0 ... 100 MHz), tikslumas Hertz frakcija yra pakankamas. Jei kas nors turi padidinti tikslumą, galite padidinti DDS talpą tam (nepamirškite patikrinti „TimeQuest Timing Analyzer“, ar loginės grandinės greitis yra CLK \u003d 200 MHz, nes tai yra priedas), arba tiesiog sumažinti laikrodžio dažnį, jei toks yra Platus dažnių diapazonas nereikalingas.

„TimeQuest“ laiko analizatorius


  Pamačius ekrane „pjūklą“, šeimos reikalai privertė mane išvykti į šalį (poilsio dieną). Ten šienavau, kepiau, kepiau kebabą ir nė neįtariau staigmenos, kad manęs laukia vakare. Jau arčiau nakties, prieš eidamas miegoti, nusprendžiau pasižiūrėti į bangos formą kitiems dažniams.

100 kHz dažniui

250 kHz dažniui

500 kHz dažniui

1 MHz dažniui

Antra diena

  Dėl to, kad buvo įdomu, kaip DAC veiks 100 ir 200 omų varžai, iškart ėmiausi litavimo ketaus. Šį kartą DAC pasirodė tikslesnis, o jo įdiegimui prireikė mažiau laiko.

Mes įdėjome DAC ant FPGA plokštės ir prijunkite prie osciloskopo

Mes patikriname 1 MHz - IN! Visai kitas reikalas!

Pjūklas 10 MHz

Pjūklas 25 MHz


  10 MHz pjūklo forma vis dar panaši į teisingą. Bet 25 MHz dažniu jis jau yra visiškai „ne gražus“. Tačiau „C1-112a“ dažnių juostos plotis yra 10 MHz, todėl šiuo atveju priežastis jau gali būti osciloskopu.

Iš esmės šiuo DAC klausimu galima laikyti baigtą. Dabar paimkime sparčiojo išėjimo bangos formas. Norėdami tai padaryti, išveskite reikšmingiausią bitą į atskirą PIN FPGA. Mes imsime šios linijos duomenis iš reikšmingiausio DDS akumuliatoriaus.

Priskirti hs_out \u003d akumuliatorių;

1 MHz vingis

5 MHz vingis

25 MHz vingis

50 MHz vingis yra beveik nematomas


  Bet aš manau, kad FPGA išėjimas turėtų būti įkeltas į pasipriešinimą. Galbūt frontai bus standesni.

Sinusas atliekamas pagal lentelę. Lentelės dydis yra 256 reikšmės, 8 bitai. Gali prireikti daugiau, bet jau turėjau parengtą mif failą. Naudodami vedlį iš mif failo sukuriame ROM elementą su sinusinės lentelės duomenimis.

ROM kūrimas - Įrankiai -\u003e „Mega Wizard Plugin manager“


  Pasirinkite 1 prievado ROM ir pavadinkite modulį

Mes sutinkame

Čia sutinkame ir mes

Naudodamiesi naršymu rasime savo mif failą su sinuso lentele

Čia nieko nekeičiame

Nuimkite žymėjimą nuo modulio sine_rom_bb.v - jis nereikalingas. Kitas apdaila. „Quartus“ paprašys pridėti modulį prie projekto - mes sutinkame. Po to modulį galima naudoti kaip ir bet kurį kitą „Verilog“ modulį.


Aukštosios 8 bitų DDS akumuliatoriaus žodžio reikšmės bus naudojamos kaip ROM adresas, o duomenų išvestis yra sinuso vertė.

Kodas

// sine rom viela sine_out; sine_rom sine1 (. laikrodis (clk200M),. adresas (akumuliatorius), .q (sine_out));


  Sinuso bangos forma įvairiais dažniais atrodo ... ta pati.

Jei norite, galite apsvarstyti DAC problemas, susijusias su rezistorių plitimu:

Na, šis savaitgalis baigėsi. Bet programinė įranga, skirta valdyti iš asmeninio kompiuterio, dar neparašyta. Turiu pripažinti, kad nesilaikiau terminų.

Trečia diena

  Laiko yra labai mažai, todėl programą rašome skubotai (geriausiomis tradicijomis). Vietose, siekiant sumažinti raidžių skaičių ir informacijos įvedimo iš klaviatūros patogumą, taikomas įvykių filtras pagal valdiklio pavadinimą. Prašau suprasti ir atleisti.

Sąsaja

Sąsajos su analogais

  Toli gražu ne visas sąrašas
Funkcinis DDS generatorius. Sukūrė AVR bazė. Dažniai 0 ... 65534 Hz.
DDS generatoriaus GK101 apžvalga. Sukurtas kartu su „Altera MAX240 FPGA“. Dažniai iki 10 MHz.
PIC16F870 daugiafunkcis generatorius. Dažnių diapazonas: 11 Hz - 60 kHz.
generatoriai
  • Qt5
  •    Pridėti žymes

    Aš ilgą laiką naudoju signalo generatorių UDB1005Spastatyta Dds  Technologijos, jis buvo nupirktas Ali už 30 USD.

    Žodžiu, serija UDB100x apima 3 modelius UDB1002, UDB1005, UDB1008,  paskutinis skaitmuo nustato maksimalų veikimo dažnį, o raidė S, jei tokia yra, rodo, kad generatorius palaiko „sweep_mode“. Generatoriaus centre yra krūva Plis + mk, Mk tarnauja periferijai (mygtukai, kodavimo įrenginys, ekranas), o Plis generuoja signalą.

    Generatorius turi vieną analoginį išėjimą su galimybe reguliuoti nuolatinės įtampos amplitudę ir paklaidą, vienas skaitmeninis su TTL lygiais, gali veikti impulsų skaitiklio režimu ir dažnio matuoklio režimu.

    Dabar pažvelkime į pagrindines savybes.

    Analoginis išėjimas:

    • Išėjimo bangos forma: sinusoidinė, stačiakampė, pjūklo
    • Išėjimo amplitudė ≤9Vp-p (be apkrovos)
    • Išėjimo varža 50Ω ± 10%
    • DC poslinkis ± 2,5 V (be apkrovos)
    • dažnių diapazonas

      0,01Hz ~ 2MHz (UDB1002S)
      0,01Hz ~ 5MHz (UDB1005S)
      0,01Hz ~ 8MHz (UDB1008S)

    • Dažnio tikslumas ± 5 × 10-6
    • Dažnio stabilumas ± 1 × 10-6
    • Kvadratinės bangos signalo pakilimo ir kritimo laikas ≤100ns
    • Kvadratinių bangų signalo pokytio koeficientas 1% -99%
    TTL išėjimas:
    • dažnių diapazonas

      0,01Hz ~ 2MHz (UDB1002S)
      0,01Hz ~ 5MHz (UDB1005S)
      0,01Hz ~ 8MHz (UDB1008S)

    • Amplitudė\u003e 3Vp-p
    • Keliamoji galia\u003e 20TTL
    Skaitiklio funkcija:
    • Impulsų skaitiklio diapazonas 0 ~ 4294967295
    • 1Hz ~ 60MHz dažnio diapazonas
    • Įvesties įtampos diapazonas 0.5Vp-p ~ 20Vp-p
    Osciliatorius(„sweep_mode“):
    • Dažnių diapazonas fM1 ~ fM2 (dažniai iš anksto nustatyti)
    • Laiko intervalas 1–99 s
    Papildoma funkcija:išsaugoti ir įkelti konfigūracijas M0 ~ M9(numatytoji reikšmė yra M0)

    Dėl osciliatorius, kad sukonfigūruotumėte, turite nustatyti dvi dažnio reikšmes ir laiką, per kurį generatoriaus dažnis pasikeis nuo   nuo fM1 iki fM2. Tai labai patogu, jei jums reikia išsiaiškinti, kaip grandinė reaguoja į skirtingus dažnius, pavyzdžiui, naudodamiesi siurbimo dažnio generatoriumi, galite lengvai rasti grandinės rezonansinį dažnį su nežinomais elementais. Norėdami tai padaryti, per nuosekliai sujungtą kelių šimtų omų rezistorių mes prijungiame generatorių prie grandinės, o osciloskopo zondą - prie grandinės išėjimų. Jei grandinė yra nuosekli, tada rezonansiniame dažnyje virpesių amplitudė bus maksimali, o jei lygiagreti - mažiausia. Fiksuodami amplitudę osciloskopo ekrane, galite sužinoti rezonansinį grandinės dažnį.

    Bet aš nenukrypsiu nuo temos, žemiau pateiksiu keletą oscilografų skirtingiems virpesių tipams ir skirtingiems dažniams.
    Sinusas 1KHz


    Sinusas 10KHz


    Sinusas 100KHz


    Sinusas 1MHz


    Sinusas 5MHz

    Pjūklas 1KHz


    Pjūklas 10KHz


    Pjūklas 100 KHz


    Pjūklas 1MHz


    Pjūklas 5MHz


    Taip pat galite pakeisti pjūklo pakreipimą


    Kvadratinė banga 1KHz


    Meander 10KHz


    Meander 100KHz


    Meander 1MHz


    5MHz kvadratinė banga

    100 KHz kvadrato banga su TTL išvestimi


    1MHz kvadratinė banga su TTL išvestimi


    5MHz kvadratinė banga su TTL išvestimi

    Oscilogramos rodo, kad dažnio stabilumas labai skiriasi nuo deklaruojamojo, aš taip pat norėjau atkreipti dėmesį, kad jei stačiakampio signalo dažnis viršija 1 MHz, signalas pradeda drebėti.
    Signalas dažnio matuokliui tikrinti buvo paimtas iš osciloskopo kalibratoriaus.Pagal paso duomenis išvestyje turėtų būti kvadratinė banga, kurios dažnis yra 1KHz, dažnio matuoklis rodė tiksliai 1KHz. Pulsų skaitiklio režimas nėra išbandytas.

    Visa tai, kas išdėstyta pirmiau, gali būti priskiriama privalumams, tačiau ko jūs galite norėti iš signalo generatoriaus už 30 USD? O dabar minusai, yra tik du, kam .....
    Apskritai šis generatorius turi impulsinę galios sistemą, kuri yra labai triukšminga. Žemiau pateikta bangos forma parodo, kas vyksta generatoriaus išvestyje, jei nėra signalo.


    tačiau tai yra smulkmena, palyginti su amplitudės reguliavimu, kai pasukus amplitudės reguliavimo rankenėlę, pastaroji keičiasi šuoliais todėl labai sunku nustatyti norimą amplitudę su 100mV paklaida.

    „YouTube“ atlikta greita „signalo generatoriaus su Ali“ paieška parodė, kad signalo generatorius, galintis tiksliai nustatyti amplitudę, yra daug brangesnis, todėl kainos ir galimybių santykio atžvilgiu šis generatorius nėra konkurencingas.
    Generatorius nusipirko.



    mob_info