DIY multifunkčný generátor signálu. Digitálny funkčný generátor DDS. Vzhľad napájacieho zdroja pre generátor

$15,3

Po prvé, DDS je priamy digitálny syntetizátor alebo syntetizátor digitálneho signálu alebo elektronické zariadenie určené na syntetizovanie signálov ľubovoľného tvaru a frekvencie z referenčnej frekvencie.

Nebudem vysvetľovať, prečo rádioamatér potrebuje generátor. Hotové generátory nie sú lacné a vážia slušné množstvo, takže ich preprava je tiež drahá. Preto bolo rozhodnuté pozrieť sa bližšie na DDS moduly bez krytu a napájacieho zdroja.

Výber modulov DDS na internete sa ukázal byť malý. Od viac či menej lacných a s normálne vytáčanie Našiel som len 2 typy funkcií. Funkčnosťou sú totožné, líšia sa len umiestnením ovládacích prvkov a napájaním. Na prevádzku jedného z nich boli potrebné tri napätia (+12V, -12V a +5V), druhé pracuje na jedinom napätí 7-9V. Toto bolo rozhodujúce, bolo by ľahšie ho potom napájať hotový blok napájací zdroj a nemusíte špeciálne ohradzovať napájací obvod.

Z popisu na webe:

Prevádzkové napätie: DC7-9V
Frekvenčný rozsah DDS: 1HZ-65534Hz.
Vysokorýchlostný frekvenčný (HS) výstup až do 8 MHz;
Amplitúdu signálu DDS veľkosti posunu je možné nastaviť samostatne pomocou dvoch potenciometrov;
Signály DDS: sínusová vlna, štvorcová vlna, pílka, reverzná pílka, trojuholníková vlna, EKG vlna a šumová vlna.
1602 LCD menu;
Intuitívna klávesnica.
Úsek do hodnoty: 1,10,100,1000,10000 Hz;
Napájanie automaticky obnoví poslednú použitú konfiguráciu.
Offset: 0,5pp-5Vpp
Množstvo amplitúdy: 0,5Vpp-14Vpp

Samotná doska je vyrobená veľmi kvalitne, spájkovanie je decentné, tavidlo je zmyté.

Keďže som nemal po ruke 9V zdroj s vhodným konektorom, pripojil som 5V zdroj. Napodiv, všetko fungovalo. Musel som len mierne upraviť kontrast LCD displeja. Na tento účel sa pod samotným displejom nachádza orezávací odpor.

Generátor má pohodlný alfanumerický LCD displej 1602 s modrým podsvietením a množstvom ovládacích tlačidiel a 2 nastavovacích gombíkov. Poďme pekne po poriadku. Napájací konektor je 8-9V (ako sme už zistili, od 5V funguje spoľahlivo). Tlačidlo zapnutia/vypnutia. LED indikujúca zapnutie.

  • hore a dole - vyberte tvar signálu (funkciu);
  • vpravo a vľavo - vyberte frekvenciu generovania (krok sa nastavuje v menu Freq Step).
  • centrálne tlačidlo - generovanie štart/stop.

Dve ovládacie rukoväte:

  • amplitúda;
  • offset 0,5 - 5V.

Na boku sú 2 BNC konektory. Jeden pre výstup DDS, druhý pre vysokofrekvenčný signál.

Generátor môže generovať nasledujúce tvary impulzov:

  • EKG = elektrokardiogram (v stave OFF, klávesy „vľavo“ a „vpravo“ na nastavenie výstupnej frekvencie. Stredné tlačidlo štart, všetky nasledujúce krivky sú nastavené)
  • NOISE = hluk.
  • SawTooth = píla.
  • Rev Sawtooth = reverzná píla.
  • Trojuholník = trojuholníkový.
  • Sínus = sínusoida.
  • Štvorcový = obdĺžnikový.

Tento generátor funkcií DDS (verzia 2.0) signálov je zostavený na mikrokontroléri AVR, má dobrú funkčnosť, má riadenie amplitúdy a je tiež zostavený na jednostrannej doske plošných spojov.

Tento generátor je založený na algoritme generátora Jesper DDS, program bol modernizovaný pre AVR-GCC C s vloženými montážnymi kódmi. Generátor má dva výstupné signály: prvý sú DDS signály, druhý je vysokorýchlostný (1..8 MHz) „obdĺžnikový“ výstup, ktorý možno použiť na oživenie MK s nesprávnymi fuzzami a na iné účely.
Vysokorýchlostný signál HS (High Speed) je odoberaný priamo z mikrokontroléra Atmega16 OC1A (PD5).
Signály DDS sú generované z iných MC výstupov cez odporovú maticu R2R a cez mikroobvod LM358N, ktorý umožňuje nastavenie amplitúdy signálu a offsetu (Offset). Offset a amplitúda sa nastavujú pomocou dvoch potenciometrov. Offset je možné nastaviť v rozsahu +5V..-5V a amplitúda je 0...10V. Frekvencia signálov DDS môže byť nastavená v rozsahu 0...65534 Hz, čo je viac než dosť pre testovanie audio obvodov a iné amatérske rádiové úlohy.

Hlavné charakteristiky generátora DDS V2.0:
- jednoduchý obvod s bežnými a lacnými rádiovými prvkami;
- jednostranná doska plošných spojov;
- vstavaný napájací zdroj;
- samostatný vysokorýchlostný výstup (HS) až do 8 MHz;
- DDS signály s premenlivou amplitúdou a posunom;
- DDS signály: sínus, obdĺžnik, píla a spätná píla, trojuholník, signál EKG a signál šumu;
- 2×16 LCD displej;
- intuitívna 5-tlačidlová klávesnica;
- kroky pre nastavenie frekvencie: 1, 10, 100, 1000, 10000 Hz;
- zapamätanie si posledného stavu po zapnutí napájania.

Nižšie uvedená bloková schéma ukazuje logickú štruktúru generátora funkcií:

Ako vidíte, zariadenie vyžaduje niekoľko napájacích napätí: +5V, -12V, +12V. Napätie +12V a -12V sa používa na reguláciu amplitúdy signálu a offsetu. Napájací zdroj je navrhnutý s použitím transformátora a niekoľkých čipov stabilizátora napätia:

Napájací zdroj je zostavený na samostatnej doske:

Ak si nechcete montovať zdroj sami, môžete použiť bežný ATX zdroj z počítača, kde sú už všetky potrebné napätia. Rozloženie konektora ATX.

LCD obrazovka

Všetky akcie sa zobrazujú na LCD displeji. Generátor sa ovláda pomocou piatich kláves

Tlačidlá hore/dole slúžia na pohyb v menu, tlačidlá vľavo/vpravo slúžia na zmenu hodnoty frekvencie. Po stlačení stredného tlačidla sa začne generovať zvolený signál. Opätovným stlačením tlačidla sa generátor zastaví.

Na nastavenie kroku zmeny frekvencie je k dispozícii samostatná hodnota. To je výhodné, ak potrebujete zmeniť frekvenciu v širokom rozsahu.

Generátor šumu nemá žiadne nastavenia. Používa obvyklú funkciu rand(), ktorá je nepretržite privádzaná na výstup generátora DDS.

Vysokorýchlostný výstup HS má 4 frekvenčné režimy: 1, 2, 4 a 8 MHz.

Schematický diagram

Obvod generátora funkcií je jednoduchý a obsahuje ľahko dostupné prvky:
- AVR Atmega16 mikrokontrolér, s externým quartzom na 16 MHz;
- štandardná LCD obrazovka typu HD44780 2×16;
- R2R DAC matica vyrobená z obyčajných rezistorov;
- operačný zosilňovač LM358N (domáci analóg KR1040UD1);
- dva potenciometre;
- päť kľúčov;
- niekoľko konektorov.

Platiť:

Funkčný generátor je zostavený v plastovej krabici:


softvér

Ako som povedal vyššie, môj program som založil na algoritme generátora Jesper DDS. Pridal som niekoľko riadkov montážneho kódu na implementáciu zastavenia generovania. Teraz algoritmus obsahuje 10 cyklov CPU namiesto 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"
"ealebo r19, r19 ;r19<-0″ "\n\t"
"1:" "\n\t"
"pridať r18, %0 ;1 cyklus" "\n\t"
"adc r19, %1 ;1 cyklus" "\n\t"
"adc %A3, %2 ;1 cyklus" "\n\t"
"lpm ;3 cykly" "\n\t"
"out %4, __tmp_reg__ ;1 cyklus" "\n\t"
"sbis %5, 2 ;1 cyklus, ak nie je preskočené" "\n\t"
"rjmp 1b ;2 cykly. Celkom 10 cyklov" "\n\t"
:
:"r" (ad0),,"r" (ad1),,"r" (ad2),,"e" (signál),,"I" (_SFR_IO_ADDR(PORTA)), "I" (_SFR_IO_ADDR(SPCR ))
: "r18", "r19"
);}

Tabuľka foriem DDS signálov sa nachádza vo flash pamäti MK, ktorej adresa začína na 0xXX00. Tieto sekcie sú definované v makefile na príslušných pamäťových miestach:
#Definujte sekcie, kde sa majú ukladať tabuľky signálov
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

Generátor DDS, alebo generátor priamej digitálnej syntézy, v súčasnosti zďaleka nie je novinkou. Na internete je prezentované veľké množstvo obvodov, hlavne na mikrokontroléroch AVR. DAC je hlavne matica R-2R, ale existujú aj návrhy na čipe AD9850 (mimochodom, nie sú lacné). Ale bohužiaľ (alebo našťastie?), nemali to, čo som potreboval: malé rozmery a nízke náklady. V dôsledku toho bola táto schéma vyvinutá.

V tomto článku chcem predstaviť generátor DDS vyrobený na mikrokontroléri ATmega8. Na zobrazenie informácií slúži grafický LCD LPH8731-3C. Toto zariadenie umožňuje získať periodický signál s ľubovoľným tvarom (rozlíšenie 100 bodov) a určenou amplitúdou.

Technické údaje:

  • Napájacie napätie: 5V
  • Terajšia konzumácia:<100мА
  • Min. výstupné napätie: 0,5V
  • Max. výstupné napätie: 2,5V
  • Krok nastavenia napätia: 0,5V
  • Min. frekvencia signálu: 10Hz
  • Max. Frekvencia signálu: 2kHz (10kHz)
  • Frekvenčný krok: 10Hz (100Hz)
  • Počet prednastavených signálov: 8
  • Zobrazenie údajov: grafický LCD
  • Možnosť pridania priebehu „za behu“ (bez blikania): chýba
  • Jas podsvietenia: nastaviteľný, vyžaduje blikanie
  • Max. počet formulárov v pamäti: najmenej 20

Schéma zariadenia je uvedená nižšie:

Základom obvodu, ako už bolo spomenuté, je mikrokontrolér ATmega8-16AU. Index "...16" je potrebný, pretože obvod používa 16 MHz kremenný rezonátor. DAC je vyrobený na matrici R-2R. Tento krok vám umožňuje vyhnúť sa použitiu špeciálnych mikroobvodov, ale bohužiaľ vám neumožňuje dosiahnuť skutočné rozlíšenie DAC vyššie ako 10 .. 12 bitov (v amatérskych podmienkach). Na výstup matice je cez odporový delič napätia (R17, RV1) zapojený operačný zosilňovač, zapojený podľa obvodu zosilňovača a slúži na zosilnenie prúdu.

Zariadenie sa ovláda pomocou tlačidiel. Na predný panel je vhodné umiestniť iba tlačidlá SB1-SB4. Tlačidlo SB5 hrá úlohu „funkčného“ a umožňuje vám používať akcie odlišné od „hlavných“ pre tlačidlá SB1-SB4. Prepínač SA1 zapína/vypína „generáciu“ a ovládacie tlačidlá. V jeho prvej polohe je ovládanie zapnuté a generovanie signálu vypnuté a v druhej je situácia diametrálne opačná ako v prvej. Konektor J2 nie je potrebné viesť na doske, pretože je určený len na napájanie dosky pri programovaní mikrokontroléra (budete však musieť pripojiť priamo na koľajnice).

Plošný spoj zariadenia je vyrobený na obojstrannom fóliovom materiáli a má rozmery (_ x _). Hlavným problémom pri jeho výrobe je rozloženie tratí na montáž mikrokontroléra, ale ak máte skúsenosti s výrobou takýchto dosiek a/alebo schopnosť používať fotorezist/LUT, nemali by pri výrobe nastať žiadne problémy.

Pri montáži zariadenia dôrazne odporúčam skontrolovať, či sú priechodky dobre zaletované a či je kontakt medzi nohami mikrokontroléra a dráhami dosky plošných spojov spoľahlivý. Chýbal mi iba 1 nespájkovaný kolík mikrokontroléra a v dôsledku toho trvalo niekoľko dní, kým som našiel problém.

Firmvér

Firmvér pre mikrokontrolér bol napísaný v . Na vyplnenie súboru .hex bol použitý programátor a softvér. Snímka obrazovky s príkladom nastavenia poistkových bitov je uvedená nižšie. Pretože na doske s plošnými spojmi nebol žiadny špeciálny konektor na programovanie, na flashovanie firmvéru mikrokontroléra budete musieť dočasne prispájkovať príslušné stopy (piny mikrokontroléra „MISO“, „MOSI“, „SCK“, „RESET“).

Montáž a usporiadanie zariadenia

Pri umiestnení zariadenia do puzdra je vhodné nainštalovať tlačidlo SB5 na jeho bočnú stranu. Prepínač SA1 v mojej verzii bol umiestnený na spodnom konci, rovnako ako konektor na pripojenie záťaže. USB konektor je inštalovaný v hornej časti puzdra, pretože plán bol použiť 3,7 -> 5V DC-DC menič. Ale keďže som chcel všestrannosť, rozhodol som sa urobiť tento blok odnímateľným.

Možná výmena prvkov

Mikrokontrolér je možné použiť iba ATmega8-16AU. Operačný zosilňovač LM358 je podobný (napríklad NE532, OP04, OP221, OP290, ...) v puzdre SO-8 a netreba zabúdať ani na prípadné nezhody pinov. Tranzistor Q1 je možné odobrať z akéhokoľvek nízkoenergetického n-p-n, napríklad domáceho KT315 alebo KT3102. Je vhodné brať rezistory R1-R16 s minimálnou toleranciou (0,5...1%), ale poslúžia aj bežnejšie 2...5% (tu však môže byť tvar signálu o niečo horší). Okrem toho je vhodné vziať odpory rovnakej hodnoty (nech je 10 kOhm) a potom tam, kde je potrebný 2R, dať 10 kOhm a kde R - 2x10 kOhm paralelne. Je vhodné brať kondenzátory C1, C2 v rozsahu 22...33pF. Použitý kremenný rezonátor je nízkoprofilový, na frekvencii 16 MHz. Rezistor RV1 je viacotáčkový. Zenerova dióda sa dá nastaviť len na 3,3V.

LCD displej je možné použiť len so žltým podkladom a nápisom „LPH8731-3C“. Nachádza sa v mobilných telefónoch Siemens A60, A65 atď. a má rozlíšenie 101x80 pixelov.

nastavenie

Správne zostavené zariadenie nevyžaduje nastavovanie a malo by fungovať ihneď po zložení a zablikaní ovládača. Ak sa tak nestane, skontrolujte skraty na doske plošných spojov, správne pripojenie LCD displeja, neporušenosť vodičov od spínača SA1, ako aj prevádzkyschopnosť zenerovej diódy a napájacieho zdroja/USB. kábel.

Po úspešnom prvom zapnutí je potrebné pomocou osciloskopu a trimovacieho rezistora RV1 upraviť úroveň výstupného signálu podľa nastavení na displeji.

Účel tlačidiel: SB1 - "Doľava" (Výstupné napätie je menšie), SB2 - "Doprava" (Výstupné napätie je väčšie), SB3 - "Frekvencia +10" (Frekvencia +100), SB4 - "Frekvencia -10" ( Frekvencia - 100)<-- SB5 - Отжата (Нажата).

Foto a video zo zariadenia:


Dve fotografie nižšie ukazujú, ako môžete získať vyššiu frekvenciu ako 2 kHz. Ale to súvisí s kvalitou signálu (pre obdĺžnikové na tom nezáleží).



Oscilogramy signálov získaných pomocou tohto zariadenia:





Vzhľad zostavené zariadenie:


Zoznam rádioelementov

Označenie Typ Denominácia Množstvo PoznámkaObchodMôj poznámkový blok
U1 MK AVR 8-bit

ATmega8A-AU

1 Do poznámkového bloku
U2 Operačný zosilňovač

LM358

1 Puzdro SO-8 (LM358D)) Do poznámkového bloku
Q1 Bipolárny tranzistor

BC547

1 Do poznámkového bloku
D1 Zenerova dióda

BZX55C3V3

1 Do poznámkového bloku
RV1 Trimmerový odpor220 kOhm1 Do poznámkového bloku
R1-R9 Rezistor

2,2 kOhm

9 0805, 1% Do poznámkového bloku
R10-R16, R32 Rezistor

1,1 kOhm

8 0805, 1% Do poznámkového bloku
R17 Rezistor

100 kOhm

1 0805 Do poznámkového bloku
R19-R23 Rezistor

5,6 kOhm

5 0805 Do poznámkového bloku
R24-28, R18 Rezistor

10 kOhm

5 0805 Do poznámkového bloku
R29, R30 Rezistor

220 ohmov

2 0805 Do poznámkového bloku
R31 Rezistor

75 ohmov

1 0805 Do poznámkového bloku
R33 Rezistor

510 ohmov

1 0805 Do poznámkového bloku
C1, C2 Kondenzátor27 pF2 0805

Maximálna frekvencia - 65534 Hz ​​​​(a až 8 MHz výstup HS s pravouhlou vlnou). A potom som si myslel, že generátor je vynikajúca úloha, kde sa FPGA môže ukázať v celej svojej kráse. Športovo som sa rozhodol projekt zopakovať na FPGA, pričom termíny dodržím do dvoch víkendov a dostanem parametre nie striktne definované, ale maximálne možné. Čo z toho vzniklo, zistíte pod strihom.

Deň nula

Kým prišiel víkend, mal som čas premýšľať o realizácii. Pre zjednodušenie mojej úlohy som sa rozhodol vyrobiť generátor nie ako samostatné zariadenie s tlačidlami a LCD obrazovkou, ale ako zariadenie, ktoré sa pripája k PC cez USB. Na to mám dosku USB2RS232. Doska nevyžaduje ovládače (CDC), preto si myslím, že bude fungovať pod Linuxom (pre niektorých je to dôležité). Taktiež nebudem tajiť, že s prijímaním správ cez RS232 som už pracoval. Zoberiem hotové moduly na prácu s RS232 z opencores.com.

Na generovanie sínusového signálu budete potrebovať DAC. Zvolil som typ DAC, ako v pôvodnom projekte - R2R 8-bit. Umožní vám pracovať na vysokých frekvenciách, rádovo v megahertzoch. Som presvedčený, že FPGA by sa s tým malo vyrovnať

Rozmýšľal som, ako napísať program na prenos dát cez COM port. Na jednej strane môžete písať v Delphi7, s písaním takéhoto programu už máte skúsenosti a okrem toho veľkosť spustiteľného súboru nebude veľká. Tiež som sa snažil načrtnúť niečo na prácu so Serialom vo forme java skriptu na html stránke, ale viac-menej to fungovalo iba cez sériové API Chrome, ale na to je potrebné nainštalovať plugin... vo všeobecnosti , to tiež neprichádza do úvahy. Skúšal som PyQt5 ako inováciu pre seba, ale pri distribúcii takéhoto projektu musíte pretiahnuť veľa knižníc. Po pokuse o kompiláciu projektu PyQt do súboru exe sa ukázalo, že má viac ako 10 MB. To znamená, že to nebude o nič lepšie ako aplikácia napísaná v C++\Qt5. Tiež stojí za zváženie, že nemám skúsenosti s vývojom v pythone, ale mám skúsenosti s Qt5. Preto padla voľba na Qt5. Od piatej verzie sa objavil modul na prácu so sériovým a už som s ním pracoval. A aplikácia založená na Qt5 môže byť prenesená do Linuxu a Macu (pre niektorých je to dôležité) a od verzie 5.2 možno aplikácie založené na QWidgets dokonca preniesť do smartfónu!

Čo ešte treba? Prirodzene, doska má FPGA. Mám dva z nich (Cyclone iv EP4CE10E22C8N pre 10 tisíc buniek a Cyclone ii EP2C5 pre 5 tisíc buniek). Ten vľavo si vyberiem len kvôli pohodlnejšiemu konektoru. Objemovo projekt nemieni byť veľký, preto sa zmestí do jedného z dvoch. V rýchlosti sa nelíšia. Obe dosky majú na doske 50 MHz oscilátory a vo vnútri FPGA je PLL, pomocou ktorého môžem zvýšiť frekvenciu na plánovaných 200 MHz.

Prvý deň

Vzhľadom na to, že modul DDS som už vyrobil v mojom projekte syntetizátora, okamžite som vzal do ruky spájkovačku a začal som DAC spájkovať rezistormi. Vzal som prototyp dosky. Inštalácia bola vykonaná pomocou . Jediná zmena, ktorá ovplyvnila technológiu bola, že som opustil kyselinu F38N na pocínovanie stojanov v prospech TT indikátorového toku gélu. Podstata technológie je jednoduchá: do dosky plošných spojov prispájkujem stojany a zo strany dosky plošných spojov na ne pripájam odpory. Chýbajúce spoje robím krútením. Stojany sú tiež pohodlné, pretože ich môžem vložiť priamo do dosky FPGA.

Žiaľ, doma neboli k dispozícii 1 a 2 kiloohmové odpory. Nebol čas ísť do obchodu. Musel som sa vzdať jedného zo svojich pravidiel a odstrániť odpory zo starej nepotrebnej dosky. Boli tam použité odpory 15K a 30K. Výsledkom je tento Frankenstein:


Po vytvorení projektu je potrebné nastaviť cieľové zariadenie: Menu Assigments -> Device


V projekte som nakódoval neovládateľný hlavný modul DDS na pevnú frekvenciu.

Modul generátora 1000 Hz

modul signal_generator(clk50M, signal_out); vstupný vodič clk50M; drôtový výstup signal_out; drôt clk200M; osc osc_200M reg akumulátor; priradiť signal_out = akumulátor; //skús vygenerovať 1000 Hz //50 000 000 Hz - hodinová frekvencia externého generátora //2^32 = 4 294 967 296 - bitová hĺbka DDS - 32 bitov //rozdelenie 1 000 Hz / 50 000 000 Hz / 292969 * 42 vždy = 9496 967 42 (posedge clk50M) začnite akumulátor<= accumulator + 32"d42949; end endmodule


Potom som klikol na „Spustiť kompiláciu“, aby sa vývojové prostredie spýtalo, aké vstupné/výstupné linky máme v hlavnom module projektu a na aké fyzické PINy sú pripojené. Môžete sa pripojiť takmer ku každému. Po kompilácii priraďte riadky, ktoré sa objavia k skutočným PIN kódom FPGA čipu:

Položka ponuky Assigments -> Pin Planner

Prosím ignorujte riadky HS_OUT, key0 a key1, objavia sa v projekte neskôr, ale nemal som čas urobiť snímku obrazovky hneď na začiatku.

V zásade stačí do stĺpca Location „zaregistrovať“ iba PIN_nn a zvyšné parametre (štandard I/O, Current Strench a Slew Rate) môžete štandardne ponechať, alebo si môžete vybrať tie isté, ktoré ponúka predvolene (predvolene), aby nebolo varovanie "ov.

Ako zistím, ktorý PIN zodpovedá číslu konektora na doske?

Čísla kolíkov konektora sú vyznačené na doske


A kolíky FPGA, ku ktorým sú pripojené kontakty konektora, sú popísané v dokumentácii dodávanej s doskou FPGA.




Po priradení pinov projekt znova skompilujem a flashnem pomocou USB programátora. Ak nemáte nainštalované ovládače pre programátor USB Byte blaster, povedzte Windowsu, že sú umiestnené v priečinku, kde máte nainštalovaný Quartus. Potom si to nájde sama.

Programátor musí byť pripojený ku konektoru JTAG. A položka ponuky pre programovanie je „Nástroje -> Programátor“ (alebo kliknite na ikonu na paneli nástrojov). Tlačidlo „Štart“, radostný „Úspech“ a firmvér sú už vo vnútri FPGA a už fungujú. Len nevypínajte FPGA, inak na všetko zabudne.

Nástroje -> Programátor


DAC je pripojený ku konektoru dosky FPGA. Na výstup DAC pripájam osciloskop S1-112A. Výsledkom by mala byť „píla“, pretože časť DDS slova fázového akumulátora vyššieho rádu je vyvedená na 8-bitový výstup. A vždy sa zväčšuje, až kým nepretečie.

Asi 1,5 hodiny a pri frekvencii 1000 Hz vidím nasledujúci oscilogram:

Chcel by som poznamenať, že „píla“ má v strede malú zlomeninu. Je to spôsobené tým, že odpory majú rozsah hodnôt.

Ďalší dôležitý bod, čo bolo potrebné zistiť - to je maximálna možná frekvencia, s ktorou bude generátor DDS pracovať. Pri správne nakonfigurovaných parametroch TimeQuest po kompilácii v „Správe o zostavení“ môžete vidieť, že rýchlosť obvodu je nad 200 MHz s rezervou. To znamená, že frekvenciu generátora 50 MHz vynásobím pomocou PLL 4. Zväčším hodnotu fázového akumulátora DDS s frekvenciou 200 MHz. Konečný frekvenčný rozsah, ktorý je možné v našich podmienkach získať, je 0 - 100 MHz. Presnosť nastavenia frekvencie:

200 000 000 Hz (clk) / 2^32 (DDS) = 0,047 Hz
To znamená, že je lepšia ako ~0,05 Hz. Pre generátor s takýmto rozsahom pracovných frekvencií (0...100 MHz) považujem presnosť zlomku hertzov za dostatočnú. Ak niekto potrebuje zvýšiť presnosť, potom môže zvýšiť bitovú hĺbku DDS (nezabudnite skontrolovať TimeQuest Timing Analyzer, že prevádzková rýchlosť logického obvodu bola v rámci CLK = 200 MHz, pretože ide o sčítačku), alebo jednoducho znížte taktovaciu frekvenciu, ak nie je potrebný taký široký frekvenčný rozsah.

Časový analyzátor TimeQuest


Keď som na obrazovke videl „videl“, rodinné záležitosti ma prinútili odísť na vidiek (bol to môj voľný deň). Tam som kosila, varila, grilovala a netušila som o prekvapení, ktoré ma večer čakalo. Bližšie k noci, pred spaním, som sa rozhodol pozrieť sa na tvar signálu pre iné frekvencie.

Pre frekvenciu 100 kHz

Pre frekvenciu 250 kHz

Pre frekvenciu 500 kHz

Pre frekvenciu 1 MHz

Druhý deň

Vzhľadom na to, že bolo zaujímavé, ako bude DAC fungovať na rezistoroch 100 a 200 Ohmov, okamžite som sa chopil spájkovačky. Tentoraz sa DAC ukázal ako presnejší a jeho inštalácia trvala menej času.

DAC nasadíme na dosku FPGA a pripojíme k osciloskopu

Kontrola 1 MHz - VO! Je to úplne iná vec!

Videl 10 MHz

Videl 25 MHz


Tvar 10 MHz píly je stále podobný tej správnej. Ale na 25 MHz to už vôbec nie je „pekné“. C1-112a má však šírku pásma 10 MHz, takže v tomto prípade môže byť dôvod už v osciloskope.

V zásade možno túto otázku s DAC považovať za uzavretú. Teraz zoberme priebehy vysokorýchlostného výstupu. Aby sme to dosiahli, vydáme najvýznamnejší bit na samostatný PIN FPGA. Dáta pre tento riadok budeme brať z najvýznamnejšieho bitu DDS akumulátora.

Priradiť hs_out = akumulátor;

Štvorcová vlna 1 MHz

Štvorcová vlna 5 MHz

Štvorcová vlna 25 MHz

Štvorcová vlna 50 MHz je teraz takmer neviditeľná


Ale myslím si, že výstup FPGA by mal byť zaťažený odporom. Možno by boli fronty strmšie.

Sínus sa robí podľa tabuľky. Veľkosť tabuľky je 256 hodnôt po 8 bitoch. Dalo by sa zobrať aj viac, ale už som mal hotový súbor mif. Pomocou sprievodcu vytvoríme prvok ROM s údajmi sínusovej tabuľky zo súboru mif.

Vytvorenie ROM - Nástroje -> Správca zásuvných modulov Mega Wizard


Vyberte 1 port ROM a zadajte názov modulu

Súhlasíme

Tu sa tiež zhodneme

Pomocou prehľadávania nájdeme náš súbor mif so sínusovou tabuľkou

Ani tu nič nemeníme.

Zrušte začiarknutie modulu sine_rom_bb.v - nie je potrebný. Ďalší koniec. Quartus vás požiada o pridanie modulu do projektu - súhlasíme. Potom je možné modul používať rovnako ako ktorýkoľvek iný modul vo Verilog.


Horných 8 bitov slova DDS akumulátora sa použije ako adresa ROM a na výstupe dát bude sínusová hodnota.

kód

//sine rom wire sine_out; sine_rom sine1(.clock(clk200M), .address(akumulátor), .q(sine_out));


Oscilogram sínusovej vlny na rôznych frekvenciách vyzerá... rovnako.

Ak chcete, môžete zvážiť problémy DAC spojené s rozšírením odporu:

Tak a je tu koniec víkendu. Ale softvér na ovládanie z PC ešte nebol napísaný. Som nútený priznať skutočnosť, že som nedodržal plánované termíny.

Deň tretí

Času je veľmi málo, preto program píšeme narýchlo (v najlepších tradíciách). Na niektorých miestach sa v záujme zníženia počtu písmen a pohodlia zadávania informácií z klávesnice používa pri názve miniaplikácie filter udalostí. Prosím pochopte a odpustite.

Rozhranie

Prepojenia s analógmi

Nie je to úplný zoznam
Funkčný generátor DDS. Vytvorené na základe AVR. Frekvencie 0… 65534 Hz.
Recenzia generátora DDS GK101. Vytvorené pomocou Altera MAX240 FPGA. Frekvencie do 10 MHz.
Multifunkčný generátor na PIC16F870. Frekvenčný rozsah: 11 Hz - 60 kHz.
generátory
  • Qt5
  • Pridať značky

    Generátor signálu používam už dlho. UDB1005S, postavený podľa DDS technológie, bol kúpený na Ali za 30 dolárov.

    Skrátka seriál 100 UDB x obsahuje 3 modely UDB1002, UDB1005, UDB1008, posledná číslica určuje maximálnu prevádzkovú frekvenciu a písmeno S na konci, ak je prítomné, znamená, že generátor podporuje sweep_mode. Generátor je založený na kombinácii plis + mikrón, mikrón obsluhuje perifériu (tlačidlá, kódovač, displej) a plis generuje signál.

    Generátor má jeden analógový výstup s možnosťou nastavenia amplitúdy a offsetu konštantné napätie, jeden digitálny s úrovňami TTL, môže pracovať v režime počítadla impulzov a v režime počítadla frekvencie.

    Teraz sa pozrime na hlavné funkcie.

    Analógový výstup:

    • Výstupný priebeh: sínusový, štvorcový, pílovitý
    • Výstupná amplitúda ≤ 9 Vp-p (bez zaťaženia)
    • Výstupná impedancia 50Ω±10%
    • DC offset ±2,5 V (bez zaťaženia)
    • frekvenčný rozsah

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

    • Presnosť frekvencie ±5×10–6
    • Stabilita frekvencie ± 1 × 10 -6
    • Čas vzostupu a pádu štvorcovej vlny ≤100ns
    • Pracovný cyklus štvorcových vĺn 1%-99%
    TTL výstup:
    • frekvenčný rozsah

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

    • Amplitúda >3Vp-p
    • Nosnosť >20TTL
    Funkcia počítadla:
    • Rozsah počítadla impulzov 0~4294967295
    • Rozsah frekvenčného merača 1Hz~60MHz
    • Rozsah vstupného napätia 0,5Vp-p~20Vp-p
    Oscilačný frekvenčný generátor(sweep_mode):
    • Frekvenčný rozsah fM1~fM2 (frekvencie sú prednastavené)
    • Časový rozsah 1s~99s
    Ďalšia funkcia: uložiť a načítať konfigurácie M0~M9(predvolené M0)

    Čo sa týka generátor sweep frekvencie, na jeho konfiguráciu je potrebné nastaviť dve hodnoty frekvencie a čas, od ktorého sa bude frekvencia generátora meniť fM1 až fM2. To je veľmi výhodné, ak potrebujete zistiť, ako obvod reaguje na rôzne frekvencie, napríklad pomocou generátora rozmietacej frekvencie môžete ľahko nájsť rezonančnú frekvenciu obvodu s neznámymi prvkami. Na tento účel pripojíme generátor k obvodu cez sériovo zapojený odpor s nominálnou hodnotou niekoľko stoviek ohmov a pripojíme sondu osciloskopu na svorky obvodu. Ak je obvod sériový, potom pri rezonančnej frekvencii bude amplitúda kmitov maximálna a ak je paralelná, bude minimálna. Zaznamenaním amplitúdy na obrazovke osciloskopu môžete zistiť rezonančnú frekvenciu obvodu.

    Ale nebudem sa odchyľovať od témy, nižšie uvediem niekoľko oscilogramov odlišné typy vibrácie a rôzne frekvencie.
    Sínus 1 kHz


    Sínus 10 kHz


    Sínus 100 kHz


    Sínus 1 MHz


    Sínus 5 MHz

    Videl 1 kHz


    Videl 10 kHz


    Videl 100 kHz


    Videl 1 MHz


    Videl 5 MHz


    Môžete tiež zmeniť sklon píly


    Štvorcová vlna 1KHz


    Štvorcová vlna 10 kHz


    Štvorcová vlna 100 kHz


    Štvorcová vlna 1 MHz


    Štvorcová vlna 5 MHz

    Štvorcová vlna 100 kHz s výstupom TTL


    Štvorcová vlna 1MHz s TTL výstupom


    Štvorcová vlna 5 MHz s výstupom TTL

    Oscilogramy ukazujú, že frekvenčná stabilita je veľmi odlišná od deklarovanej, rád by som tiež poznamenal, že ak frekvencia obdĺžnikového signálu prekročí 1 MHz, signál sa začne silne chvieť.
    Signál na kontrolu frekvenčného merača bol prevzatý z kalibrátora osciloskopu, podľa pasových údajov by mal mať jeho výstup obdĺžnikovú vlnu s frekvenciou 1 kHz, merač frekvencie ukazoval presne 1 kHz. Režim počítadla impulzov som netestoval.

    Všetko vyššie uvedené možno pripísať výhodám, ale čo môžete chcieť od generátora signálu za 30 dolárov? A teraz tie mínusy, na čo sú len dve.....
    Vo všeobecnosti má tento generátor spínací systém napájania, ktorý je veľmi hlučný. Oscilogram nižšie ukazuje, čo sa deje na výstupe generátora pri absencii signálu.


    ale to je maličkosť v porovnaní s nastavením amplitúdy; keď otáčate gombíkom nastavenia amplitúdy, mení sa skokmi, preto je veľmi ťažké nastaviť požadovanú amplitúdu s chybou 100 mV.

    Rýchle vyhľadávanie na YouTube pre „generátor signálu od Ali“ ukázalo, že generátor signálu, ktorého amplitúda sa dá presne nastaviť, je oveľa drahší, takže z hľadiska pomeru ceny a výkonu je tento generátor bezkonkurenčný.
    Kúpil som generátor.



    mob_info