Frekvenciagenerátor áramkör egy mikrokontrolleren. Digitális funkciógenerátor DDS

Minden otthoni műhelynek rendelkeznie kell a szükséges szerszámokkal és mérőeszközökkel. Azok számára, akik hobbiként foglalkoznak rádióamatőrrel, gyakran elfogadhatatlanok a szükséges berendezések beszerzésének magas pénzbeli költségei.

Így az én esetemben ennek a berendezésnek a listája messze nem volt teljes és hiányzott jelgenerátor.

Jelgenerátor Kiderült, hogy könnyen elkészíthető a rendelkezésre álló rádióelemekből, és végül nem is drága. Így az interneten való turkálás után nagyszámú áramkört találtam különféle generátorokhoz, beleértve a fejlettebb DAC-s modelleket is, de a gyártás már drága. Kezdésnek megálltam az egyszerűnél. DDS jelgenerátor az Atmel ATMEGA8 mikrokontrollerén. Ezen nem javítottam vagy változtattam semmit - mindent úgy hagytam, ahogy van, csak létrehoztam egy másolatot, és főleg nem állítom ennek az eszköznek a szerzőségét.

Így, jelgenerátor jó tulajdonságokkal rendelkezik, egyszerű problémák megoldására alkalmas.

Információk megjelenítése a jelgenerátor 16x2 karakteres LCD kijelzőn készült HD44780 vezérlővel. Figyelemre méltó, hogy a mikrokontroller portjainak megtakarítása érdekében az LCD-kijelzőt csak három vezetéken keresztül vezérelték, ezt egy eltolási regiszter használatával sikerült elérni - olvassa el a kijelző három vezetéken keresztüli csatlakoztatását.

Portok mentése szükséges, 8 port egy rezisztív DAC, 7 port a gombokhoz használ. Az eredeti cikkben a szerző megígérte, hogy PWM modulációt használ, de láthatóan nem fejezte be, mivel elkezdett egy fejlettebb verziót fejleszteni az ATMEGA16-on.

DDS jelgenerátor sematikus diagramjaés nyomtatott áramköri lap.

Az áramkör és a kártyák az eredetiben láthatóak.

A DAC-hoz kifejezetten precíziós ellenállásokat vettem ±0,05%-os hibával, de mint kiderült, az egyszerű ±5%-os hibával is bőven elég. A hullámforma minden jeltípushoz elfogadható volt.

Amikor generátorösszeszerelve és a programot betöltve a mikrokontrollerbe, nincs szükség beállításra, hacsak nem állítja be a kijelző kontrasztját.

A készülékkel való munkavégzés egyszerű - válassza ki a jel alakját, állítsa be a kívánt frekvenciát, és lépésenként 1 - 10 - 100 - 1000 Hz-es határértékekkel módosíthatja a frekvenciabeállítási lépést. Ezután kattintson a Start gombra, és a generátor elkezd dolgozni. Megjegyzendő, hogy a generátor indításakor a jel frekvenciája és alakja nem változtatható, ez abból adódik, hogy a program egy végtelen hurokba megy át, és a maximális generálási frekvencia növelése érdekében a gomb lekérdezési eljárás el kellett távolítani. A generálás leállításához kattintson a stop/reset gombra, ezzel újraindul a program és visszatér a beállítások menübe. Itt az árnyalat.

Külön szeretném elmondani a generátor házának gyártásáról. Vásárolhat kész tokot egy boltban, vagy használhat egy megfelelőt más eszközről, de úgy döntöttem, hogy teljesen magam készítem. Egy darab kétoldalas üvegszál hevert tétlenül, amit adományoztam a testnek.

Először is meg kell venni az összes mérést, az LCD kijelző és a jelgenerátor kártya méreteit, a tápegységet, a csatlakozókat és a gombokat, majd egy papírlapra kell helyezni, ahogy a tokban lesz. A kapott méretek alapján megkezdheti a gyártást.

Maximális frekvencia - 65534 Hz ​​(és akár 8 MHz HS kimenet négyszöghullámmal). És akkor arra gondoltam, hogy egy generátor kiváló feladat, ahol az FPGA a legjobban tudja megmutatni magát. Sportszerűen úgy döntöttem, megismétlem a projektet FPGA-n, miközben a határidőket két hétvégén belül betartom, és a nem szigorúan meghatározott paramétereket, hanem a lehető legtöbbet kapom. Hogy mi sült ki ebből, azt a vágás alatt megtudhatja.

Nulladik nap

Mielőtt eljött a hétvége, volt egy kis időm a megvalósításon gondolkodni. A feladatom leegyszerűsítése érdekében úgy döntöttem, hogy a generátort nem különálló eszközként készítem el gombokkal és LCD képernyővel, hanem USB-n keresztül PC-hez csatlakoztatható eszközként. Ehhez van egy USB2RS232 kártyám. Az alaplaphoz nem kell meghajtó (CDC), így szerintem Linux alatt is működni fog (ez egyeseknek fontos). Azt sem rejtem véka alá, hogy dolgoztam már üzenetek fogadásával RS232-n keresztül. Kész modulokat veszek az RS232-vel való munkához az opencores.com oldalról.

Szinuszos jel generálásához DAC-ra lesz szüksége. A DAC típust választottam, mint az eredeti projektben - R2R 8 bites. Lehetővé teszi, hogy magas frekvencián működjön, megahertzes nagyságrendben. Meggyőződésem, hogy az FPGA-nak meg kell birkóznia ezzel

Azon gondolkodtam, hogyan írjak programot COM porton keresztüli adatátvitelre. Egyrészt írhatsz Delphi7-ben, már van tapasztalatod egy ilyen program írásában, ráadásul a futtatható fájl mérete sem lesz nagy. Próbáltam egy html oldalon java szkript formájában is felvázolni valamit, ami a Serial-al működik, de ez többé-kevésbé csak a Chrome soros API-n keresztül működött, de ehhez telepíteni kell egy plugint... általában , az sem jöhet szóba. Kipróbáltam a PyQt5-öt újításként magamnak, de egy ilyen projekt terjesztésekor egy csomó könyvtárat kell húzni. Miután megpróbáltunk egy PyQt projektet exe fájlba fordítani, kiderült, hogy több mint 10 MB. Vagyis semmivel sem lesz jobb, mint egy C++\Qt5 nyelven írt alkalmazás. Azt is érdemes figyelembe venni, hogy pythonban nincs tapasztalatom fejlesztésben, de Qt5-ben igen. Ezért a választás a Qt5-re esett. Az ötödik verzió óta megjelent egy modul a soros munkavégzéshez, és már dolgoztam is vele. A Qt5 alapú alkalmazás pedig átvihető Linuxra és Macre (van akinek ez fontos), az 5.2-es verziótól pedig akár okostelefonra is átvihetők a QWidgetre épülő alkalmazások!

Mi kell még? Természetesen az alaplapon van FPGA. Nekem kettő van belőle (Cyclone iv EP4CE10E22C8N 10 ezer cellához, és Cyclone ii EP2C5 5 ezer cellához). Kizárólag a kényelmesebb csatlakozó miatt a bal oldaliat választom. A projekt volumenét tekintve nem kíván nagynak lenni, így a kettő bármelyikébe belefér. Sebességben nem különböznek egymástól. Mindkét táblán 50 MHz-es oszcillátorok vannak a fedélzeten, az FPGA-n belül pedig egy PLL, amivel tudom a frekvenciát a tervezett 200 MHz-re emelni.

Első nap

Tekintettel arra, hogy a szintetizátor projektemben már elkészítettem a DDS modult, azonnal kezembe vettem a forrasztópákát és elkezdtem ellenállásokkal forrasztani a DAC-t. Vettem egy prototípus táblát. A beszerelés burkolással történt. Az egyetlen változás, ami a technológiát érintette, az volt, hogy elhagytam az állványok ónozására szolgáló F38N savat, és a TT indikátor fluxus gél helyett. A technológia lényege egyszerű: a nyomtatott áramköri lapba rackeket, a nyomtatott áramköri lap felől ellenállásokat forrasztok rájuk. A hiányzó kapcsolatokat csavarással hozom létre. Ezenkívül a rackek kényelmesek, mert közvetlenül az FPGA kártyába helyezhetem őket.

Sajnos itthon nem volt kapható 1 és 2 kiloohmos ellenállás. Nem volt idő a boltba menni. Fel kellett adnom az egyik szabályomat, és eltávolítanom az ellenállásokat a régi, felesleges tábláról. Ott 15K és 30K ellenállásokat használtak. Az eredmény ez a Frankenstein:


A projekt létrehozása után be kell állítani a céleszközt: Menu Assigments -> Device


A projektben a vezérelhetetlen fő DDS modult rögzített frekvenciára kódoltam.

1000 Hz-es generátor modul

modul jelgenerátor(clk50M, jel_kimenet); bemeneti vezeték clk50M; vezeték kimeneti jel_kimenet; huzal clk200M; osc osc_200M reg akkumulátor; assign_out = akkumulátor; //próbálj meg generálni 1000 Hz-et //50 000 000 Hz - a külső generátor órafrekvenciája //2^32 = 4 294 967 296 - DDS bitmélység - 32 bit //osztás 1000 Hz / 50 000 000 Hz / 6 = 9,9, 2 mindig @ (posedge clk50M) kezdődik akkumulátor<= accumulator + 32"d42949; end endmodule


Ezt követően rákattintottam a „Fordítás indítása”-ra, hogy a fejlesztői környezet megkérdezze, hogy a projekt fő moduljában milyen bemeneti/kimeneti vonalak vannak, és ezek milyen fizikai PIN-kódokhoz csatlakoznak rendelje hozzá a megjelenő sorokat az FPGA chip valódi PIN-kódjához:

Menüpont Feladatok -> Pin Planner

Kérem, a HS_OUT, key0 és key1 sorokat egyelőre figyelmen kívül hagyja, ezek később megjelennek a projektben, de a legelején nem volt időm screenshotot készíteni.

Elvileg elég csak a PIN_nn „regisztrálása” a Location oszlopban, és a többi paramétert (I/O szabvány, Current Strench és Slew Rate) alapból meg lehet hagyni, vagy kiválaszthatjuk ugyanazokat, amelyeket alapértelmezett (alapértelmezett), hogy ne legyen figyelmeztetés „ov.

Hogyan tudhatom meg, hogy melyik PIN-kód felel meg a kártyán lévő csatlakozó számának?

A csatlakozó érintkezőinek számai a táblán vannak jelölve


Az FPGA érintkezőket, amelyekhez a csatlakozó érintkezői csatlakoztatják, az FPGA-kártyához mellékelt dokumentáció írja le.




A tűk hozzárendelése után újra lefordítom a projektet, és USB programozóval flashelgetem. Ha nincs telepítve illesztőprogram az USB Byte Blaster programozóhoz, akkor mondja meg a Windowsnak, hogy azok abban a mappában találhatók, ahová telepítette a Quartust. Aztán ő maga is megtalálja.

A programozót a JTAG csatlakozóhoz kell csatlakoztatni. A programozás menüpontja pedig az „Eszközök -> Programozó” (vagy kattintson az ikonra az eszköztáron). A „Start” gomb, az örömteli „Siker” és a firmware már az FPGA-n belül van, és már működik. Csak ne kapcsold ki az FPGA-t, különben mindent elfelejt.

Eszközök -> Programozó


A DAC az FPGA kártya csatlakozójához csatlakozik. A DAC kimenetre egy S1-112A oszcilloszkópot csatlakoztatok. Az eredmény egy „fűrész” legyen, mert a fázisakkumulátor DDS-szava magasabb rendű része a 8 bites kimenetre kerül. És mindig növekszik, amíg túl nem csordul.

Körülbelül 1,5 óra és 1000 Hz-es frekvencia esetén a következő oszcillogramot látom:

Szeretném megjegyezni, hogy a „fűrész” közepén egy kis törés van. Ez annak a ténynek köszönhető, hogy az ellenállásoknak számos értéke van.

Egy másik fontos pont, amelyet tisztázni kell, a DDS generátor maximális lehetséges frekvenciája. Helyesen konfigurált TimeQuest paraméterek esetén a „Compilation Report”-ban fordítás után láthatja, hogy az áramkör sebessége 200 MHz felett van egy margóval. Ez azt jelenti, hogy az 50 MHz-es generátorfrekvenciát PLL segítségével megszorzom 4-gyel. A DDS fázisakkumulátor értékét 200 MHz-es frekvenciával növelem. A mi körülményeink között elérhető végső frekvenciatartomány 0-100 MHz. Frekvencia beállítási pontosság:

200 000 000 Hz (clk) / 2^32 (DDS) = 0,047 Hz
Azaz jobb, mint ~0,05 Hz. A hertz töredékének pontosságát elégségesnek tartom egy ilyen üzemi frekvenciatartományú (0...100 MHz) generátorhoz. Ha valakinek növelnie kell a pontosságot, akkor ehhez növelheti a DDS bitmélységet (ne felejtse el ellenőrizni a TimeQuest Timing Analyzer-ben, hogy a logikai áramkör működési sebessége CLK = 200 MHz-en belül volt, mert ez egy összeadó), vagy egyszerűen csökkentse az órajelet, ha nincs szükség ilyen széles frekvenciatartományra.

TimeQuest Timing Analyzer


Miután megláttam a „fűrészt” a képernyőn, a családi ügyek miatt vidékre kellett mennem (szabadnapom volt). Ott kaszáltam, főztem, grilleztem és fogalmam sem volt arról a meglepetésről, ami este vár rám. Estéhez közelebb, lefekvés előtt úgy döntöttem, hogy megnézem a jel alakját más frekvenciákhoz.

100 kHz frekvenciához

250 kHz frekvenciához

500 kHz frekvenciához

1 MHz frekvenciához

Második nap

Tekintettel arra, hogy érdekes volt, hogyan működik a DAC 100 és 200 ohmos ellenállásokon, azonnal kezembe vettem a forrasztópákát. Ezúttal a DAC pontosabbnak bizonyult, és kevesebb időt vett igénybe a telepítése.

Az FPGA kártyára tesszük a DAC-t és rákötjük az oszcilloszkópra

1 MHz ellenőrzése - VO! Ez teljesen más kérdés!

10 MHz-et látott

25 MHz-et látott


A 10 MHz-es fűrész formája továbbra is hasonló a helyeshez. De 25 MHz-en már egyáltalán nem „szép”. A C1-112a azonban 10 MHz-es sávszélességű, így ebben az esetben már az oszcilloszkópban lehet az ok.

Elvileg ez a kérdés a DAC-val lezártnak tekinthető. Most vegyük a nagy sebességű kimenet hullámformáit. Ehhez a legjelentősebb bitet az FPGA külön PIN-kódjára írjuk ki. Ennek a sornak az adatait a DDS-akkumulátor legjelentősebb bitjéből vesszük.

Hs_out = akkumulátor hozzárendelése;

Négyszöghullám 1 MHz

Négyszög 5 MHz

Négyszög 25 MHz

Az 50 MHz-es négyszöghullám ma már szinte láthatatlan


De szerintem az FPGA kimenetet ellenállással kellene terhelni. Talán a frontok meredekebbek lettek volna.

A szinusz a táblázat szerint történik. A táblázat mérete 256 8 bites érték. Lehetett volna többet is vinni, de volt már kész mif fájlom. A varázsló segítségével a mif fájlból egy ROM elemet készítünk szinusztábla adatokkal.

ROM létrehozása - Eszközök -> Mega Wizard Plugin manager


Válassza ki az 1 port ROM-ot, és adjon nevet a modulnak

Egyetértünk

Itt is egyetértünk

A tallózás segítségével megtaláljuk a mif fájlunkat a szinusztáblázattal

Itt sem változtatunk semmit.

Törölje a sine_rom_bb.v modul jelölését – nincs rá szükség. Következő befejezés. A Quartus meg fogja kérni, hogy adjon hozzá egy modult a projekthez – egyetértünk. Ezt követően a modul ugyanúgy használható, mint bármely más Verilog modul.


A DDS gyűjtőszó felső 8 bitje lesz ROM címként, az adatkimenet pedig a szinusz érték lesz.

Kód

//sine rom vezeték szinusz_kimenet; sine_rom sine1(.clock(clk200M), .address(acumulator), .q(sine_out));


Egy szinuszhullám oszcillogramja különböző frekvenciákon... ugyanúgy néz ki.

Ha szükséges, mérlegelheti az ellenállás terjedésével kapcsolatos DAC-problémákat:

Na, itt a hétvége vége. De a számítógépről történő vezérléshez még nem írtak szoftvert. Kénytelen vagyok beismerni, hogy nem tartottam a tervezett határidőket.

Harmadik nap

Nagyon kevés az idő, ezért sietve írjuk a programot (a legjobb hagyományok szerint). Egyes helyeken a betűk számának csökkentése és a billentyűzetről történő információbevitel kényelme érdekében eseményszűrőt használnak a widget neve mellett. Kérlek értsd meg és bocsáss meg.

Felület

Kapcsolatok analógokkal

Nem teljes lista
Funkcionális DDS generátor. Az AVR alapján készült. Frekvenciák 0... 65534 Hz.
A GK101 DDS generátor áttekintése. Altera MAX240 FPGA segítségével készült. 10 MHz-ig terjedő frekvenciák.
Többfunkciós generátor a PIC16F870-en. Frekvencia tartomány: 11 Hz - 60 kHz.
generátorok Címkék hozzáadása

Az utóbbi időben a digitális frekvenciaszintézis (DDS) módszerek széles körben elterjedtek, és a megvalósítási módok igen változatosak. A megvalósítás módja és módja a generátorral szemben támasztott követelményektől függ.

    Alapvető követelményeim voltak a generátorral szemben:
  • 1. Frekvencia a 0,01 Hz és 50 000 Hz közötti tartományban 0,01 Hz-es lépésekben
  • 2. Maximális lehetséges linearitás a teljes tartományban.
  • 3. Dolgozzon alacsony impedanciájú terhelésen (hangszórók és ultrahangos magnetostrikciós emitterek teszteléséhez)
  • 4. A „forró” beállítás kényelme és sebessége.
  • 5. Adott tartomány pásztázása adott lépéssel (kényelmes bármi rezonanciafrekvenciájának meghatározására)
  • 6. Nagy számú hullámforma és állandó feszültség a kalibráláshoz.
  • 7. A kijelző információtartalma.
Mivel gyakran találkoztam AVR és Microchip vezérlőkhöz való programírással, ezek közül választottam... De az AVR olcsóbbnak és funkcionálisabbnak bizonyult. A sebesség és a szükséges tűszám tekintetében az ATMega16 megfelelő volt. Most a számításokról...
F max = 16000000Hz (atmega frekvencia)
15 ciklust veszünk igénybe a fázisakkumulátor, a LUT-ból vett minta és a kimenet megváltoztatására.
Teljes Fclk=16000000Hz/15=1066666,6667Hz
A szükséges pontosság érdekében 32 bites fázisakkumulátort választottam.
Most számoljuk ki a minimális lépést:
Lépés (Hz) = 1066666,6667 Hz/(2^32) = 0,0002483526865641276041667 (Hz)
Maga a generátor kódja:
while (1)( #asm ADD R1,R6 ADC R2,R7 ADC R3,R8 ADC R4,R9 #endasm PORTC=LUT_of_Signal;
50000Hz-en a periódusonkénti jel ~21 feszültségváltozással jön létre a DAC kimeneten.
DAC-ként egy normál R-2R mátrixot választottam - nem igényel stroboszkópot, és a 8 bit teljes mértékben kielégíti a feltételeket. Azok. (|12|+|-12|) / 2^8 = 0,09375 ~ 0,1 V

A frekvencia beállításának kényelme és sebessége érdekében egy léptetőmotorból valkódert használtam, a VK6BRO rádióamatőr által javasolt séma szerint.

A kódoló téves pozitív üzeneteinek elkerülése érdekében a vezérlő a lépések során többször ellenőrzi az irányokat, és csak ezután rögzíti a változásokat.
A többi paraméter 4 gombbal állítható be.

    A generátor a következő jelformákat képes reprodukálni:
  • 1. Szinuszhullám
  • 2. Meander
  • 3. H-hullám
  • 4. Szimmetrikus lépcsőház
  • 5. Trapéz
  • 6. Fűrész
  • 7. Szimmetrikus téglalap
  • 8. Aszimmetrikus lépcsőház
  • 9. Aszimmetrikus téglalap
  • 10. Állandó "+"
  • 11. Konstans "-"
Videó a munkáról
Hozzáadtam azt a funkciót is, hogy egy állítható lépéssel egy adott frekvenciatartományt letapogassunk.
A lépés 0,01Hz-0,1Hz-1Hz-10Hz-100Hz és fordítva. A könnyebb megjelenítés és a programírás megkönnyítése érdekében a Nokia 3310 (84x48) LCD-jét használtam. Maga a kódoló egy bipoláris léptetőmotort használtam egy régi merevlemezről. A Proteusban szimuláltam a teljes eszközt és programot.
A generátor analóg része


Mivel a DAC unipoláris jelet állít elő, és az ötlet egy bipoláris generátor létrehozása volt, ezért az erősítőn előfeszítést kell használni. A TL431-et választottam referencia feszültségforrásnak. Magát az erősítőt 2 fokozatban implementáltam. A terhelhetőség növelésére feszültségkövetőt használtam a TDA2030A chipen.

Az U3 eszköz kimenetén lévő jel alakjában és amplitúdójában megismétli a bemeneti jelet, de nagyobb a teljesítménye, pl. az áramkör alacsony impedanciájú terhelés mellett is működhet. Az átjátszó az alacsony frekvenciájú generátor kimeneti teljesítményének növelésére szolgál (hogy a hangszórófejek vagy az akusztikus rendszerek közvetlenül tesztelhetők legyenek). Az átjátszó működési frekvenciasávja DC-től 0,5...1 MHz-ig lineáris, ami több mint elegendő egy alacsony frekvenciájú generátorhoz.

Áramforrás - bármilyen (impulzusos vagy lineáris), lehetőleg +5, +12/-12V tápellátással stabilizálva.

Az összeszerelésről
Az összeszerelés során nem volt különösebb probléma a kimeneti jel szimmetriájának és amplitúdójának analóg részének beállításával. Az előfeszítést az R1 és R6 ellenállások állítják be. Az első fokozat amplitúdója R5, a második R8.

Már régóta használom a jelgenerátort. UDB1005S szerint épült DDS technológia, az Ali-n vásárolták 30 dollárért.

Röviden a sorozat UDB100 x 3 modellt tartalmaz UDB1002, UDB1005, UDB1008, az utolsó számjegy a maximális működési frekvenciát határozza meg, a végén lévő S betű pedig, ha van, azt jelzi, hogy a generátor támogatja sweep_mode. A generátor a plis + mikron kombináción alapul, a mikron a perifériát szolgálja ki (gombok, kódoló, kijelző), és a plis generálja a jelet.

A generátor egy analóg kimenettel rendelkezik az amplitúdó és az egyenfeszültség eltolás beállítására, egy digitális kimenet TTL szintekkel, és képes működni impulzusszámláló módban és frekvenciaszámláló módban.

Most pedig nézzük a főbb jellemzőket.

Analóg kimenet:

  • Kimeneti hullámforma: szinusz, négyzet, fűrészfog
  • Kimeneti amplitúdó ≤9Vp-p (terhelés nélkül)
  • Kimeneti impedancia 50Ω±10%
  • DC eltolás ±2,5 V (terhelés nélkül)
  • Frekvencia tartomány

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

  • Frekvencia pontosság ±5×10-6
  • Frekvenciastabilitás ±1×10-6
  • Négyzethullám emelkedési és süllyedési ideje ≤100n
  • Négyzethullám terhelhetőségi ciklus 1%-99%
TTL kimenet:
  • Frekvencia tartomány

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

  • Amplitúdó >3Vp-p
  • Terhelhetőség >20TTL
Számláló funkció:
  • Az impulzusszámláló tartománya 0-4294967295
  • Frekvenciamérő tartomány 1Hz-60MHz
  • Bemeneti feszültség tartomány 0,5Vp-p~20Vp-p
Oszcilláló frekvencia generátor(sweep_mode):
  • Frekvencia tartomány fM1-fM2 (a frekvenciák előre beállítottak)
  • Időtartom 1 s ~ 99 mp
Kiegészítő funkció: konfigurációk mentése és betöltése M0~M9(alapértelmezett M0)

Amivel kapcsolatban sweep frekvencia generátor, konfigurálásához be kell állítania két frekvenciaértéket és azt az időt, amely alatt a generátor frekvenciája megváltozik fM1-ről fM2-re. Ez nagyon kényelmes, ha meg kell találnia, hogy egy áramkör hogyan reagál a különböző frekvenciákra, például egy sweep-frekvencia-generátor segítségével könnyen megtalálhatja egy ismeretlen elemekkel rendelkező áramkör rezonanciafrekvenciáját. Ehhez a generátort több száz ohmos névleges értékű sorosan kapcsolt ellenálláson keresztül csatlakoztatjuk az áramkörhöz, és az oszcilloszkóp szondáját az áramköri kapcsokhoz csatlakoztatjuk. Ha az áramkör soros, akkor a rezonancia frekvencián az oszcillációs amplitúdó maximális, ha pedig párhuzamos, akkor minimális. Az oszcilloszkóp képernyőjén az amplitúdó rögzítésével megtudhatja az áramkör rezonanciafrekvenciáját.

De nem térek el a témától, az alábbiakban több oszcillogramot adok a különböző típusú rezgésekre és különböző frekvenciákra.
Szinusz 1KHz


Szinusz 10KHz


Szinusz 100KHz


Szinusz 1MHz


Szinusz 5MHz

1KHz-et láttam


10KHz-et látott


100KHz-et láttam


1 MHz-et láttam


5 MHz-et láttam


A fűrész dőlésszögét is módosíthatja


Négyszöghullám 1KHz


Négyszöghullám 10KHz


Négyszög 100 kHz


Négyszöghullám 1MHz


Négyszöghullám 5MHz

Négyszög 100KHz TTL kimenettel


Négyszög 1MHz TTL kimenettel


Négyszög 5MHz TTL kimenettel

Az oszcillogramok azt mutatják, hogy a frekvenciastabilitás nagyon eltér a deklarálttól. Szeretném megjegyezni azt is, hogy ha a téglalap alakú jel frekvenciája meghaladja az 1 MHz-et, akkor a jel erősen remegni kezd.
A frekvenciamérő ellenőrzésére szolgáló jelet az oszcilloszkóp kalibrátorából vettük az útlevél adatai szerint, a kimenetének 1KHz frekvenciájú négyszöghullámnak kell lennie, a frekvenciamérő pontosan 1KHz-et mutatott. Nem teszteltem az impulzusszámláló módot.

A fentiek mindegyike az előnyöknek tudható be, de mit akarhat egy jelgenerátor 30 dollárért? És most a hátrányok, csak kettő van belőlük, hogy minek.....
Általában ennek a generátornak kapcsolóüzemű tápegysége van, ami nagyon zajos. Az alábbi oszcillogram azt mutatja, hogy mi történik a generátor kimenetén jel hiányában.


de ez kicsi dolog az amplitúdó beállításához képest, amikor elforgatod az amplitúdó beállító gombot, az utóbbi hirtelen megváltozik, ezért nagyon nehéz 100mV-os hibával beállítani a kívánt amplitúdót.

A YouTube-on gyorsan rákeresve a „signal generator from Ali” kifejezésre, kiderült, hogy az a jelgenerátor, amelynek amplitúdója pontosan beállítható, sokkal drágább, így ár-képesség arányban ez a generátor páratlan.
Vettem egy generátort.

A DDS generátor vagy a Direct Digital Synthesis generátor jelenleg még messze nem újdonság. Az interneten számos áramkör található, főleg AVR mikrokontrollereken. A DAC főként R-2R mátrix, de az AD9850 lapkán is vannak kialakítások (mellesleg nem olcsók). De sajnos (vagy szerencsére?) nem volt az, amire szükségem volt: kis méret és alacsony költség. Ennek eredményeként ez a rendszer kidolgozásra került.

Ebben a cikkben egy ATmega8 mikrokontrolleren készült DDS generátort szeretnék bemutatni. Az információk megjelenítéséhez grafikus LCD LPH8731-3C szolgál. Ez az eszköz lehetővé teszi, hogy tetszőleges alakú (100 pontos felbontású) és meghatározott amplitúdójú periodikus jelet kapjon.

Műszaki adatok:

  • Tápfeszültség: 5V
  • Jelenlegi fogyasztás:<100мА
  • Min. kimeneti feszültség: 0,5V
  • Max. kimeneti feszültség: 2,5V
  • Feszültség beállítási lépés: 0,5V
  • Min. jel frekvencia: 10Hz
  • Max. Jelfrekvencia: 2kHz (10kHz)
  • Frekvencialépés: 10 Hz (100 Hz)
  • Előre beállított jelek száma: 8
  • Adatkijelző: grafikus LCD
  • Lehetőség a hullámforma „menet közben” hozzáadására (villogás nélkül): nincs jelen
  • Háttérvilágítás fényereje: állítható, villogást igényel
  • Max. a memóriában lévő űrlapok száma: legalább 20

A készülék diagramja az alábbiakban látható:

Az áramkör alapja, mint már említettük, az ATmega8-16AU mikrokontroller. A "...16" index szükséges, mivel az áramkör 16 MHz-es kvarc rezonátort használ. A DAC R-2R mátrixon készül. Ezzel a lépéssel elkerülhető a speciális mikroáramkörök használata, de sajnos 10 .. 12 bitnél nagyobb valós DAC felbontás elérését (amatőr körülmények között) nem teszi lehetővé. A mátrix kimenetére egy rezisztív feszültségosztón (R17, RV1) keresztül csatlakozik egy műveleti erősítő, amely egy átjátszó áramkör szerint van csatlakoztatva, és az áram erősítésére szolgál.

A készülék vezérlése gombokkal történik. Célszerű csak az SB1-SB4 gombokat elhelyezni az előlapon. Az SB5 gomb a „funkcionális” szerepét tölti be, és lehetővé teszi az SB1-SB4 gombok „fő” műveleteitől eltérő műveletek használatát. Az SA1 kapcsoló be- és kikapcsolja a „generálás” és a vezérlőgombokat. Az első helyzetében a vezérlés be van kapcsolva és a jelgenerálás ki van kapcsolva, a másikban pedig a helyzet homlokegyenest ellentétes az elsővel. A J2 csatlakozót nem kell a kártyán vezetni, mivel csak a kártya áramellátását szolgálja a mikrokontroller programozása közben (de közvetlenül a sávokhoz kell csatlakozni).

A készülék nyomtatott áramköri lapja kétoldalas fóliaanyagból készül, méretei (_ x _). A fő nehézséget a gyártás során a mikrokontroller felszereléséhez szükséges pályák elrendezése jelenti, de ha van tapasztalata az ilyen táblák gyártásában és/vagy képes a fotoreziszt/LUT használatára, akkor nem lehet gond a gyártás során.

A készülék összeszerelésekor kifejezetten javaslom, hogy ellenőrizze, hogy a vias-ok jól vannak-e forrasztva, és hogy a mikrokontroller lábai és a nyomtatott áramköri lapok sínjei közötti érintkezés megbízható-e. A mikrokontrollerből csak 1 forrasztás nélküli tű hiányzott, és ennek eredményeként pár napig tartott a probléma megtalálása.

Firmware

A mikrokontroller firmware-je nyelven íródott. A .hex fájl kitöltéséhez programozót és szoftvert használtak. Az alábbiakban bemutatunk egy képernyőképet a biztosítékbitek beállításának példájával. Mivel a nyomtatott áramköri lapon nem volt speciális programozási csatlakozó, a mikrokontroller firmware-ének felvillantásához ideiglenesen hozzá kell forrasztania a megfelelő sávokhoz (mikrokontroller „MISO”, „MOSI”, „SCK”, „RESET”).

A készülék összeszerelése és elrendezése

A készülék tokba helyezésekor az SB5 gombot célszerű az oldalára szerelni. Az SA1 kapcsoló az én verziómban az alsó végén volt, ahogy a terhelés csatlakoztatására szolgáló csatlakozó is. Az USB csatlakozó a ház tetejére került beépítésre, mert a tervek szerint 3,7 -> 5V DC-DC átalakítót használtak volna. De mivel sokoldalúságot akartam, úgy döntöttem, hogy ezt a blokkot eltávolíthatóvá teszem.

Lehetséges elemek cseréje

A mikrokontroller csak ATmega8-16AU használható. Az LM358 műveleti erősítő hasonló (például NE532, OP04, OP221, OP290, ...) SO-8 csomagban, és nem szabad megfeledkezni az esetleges érintkezési hibákról sem. A Q1 tranzisztor bármely kis teljesítményű n-p-n-ből átvehető, például a hazai KT315 vagy KT3102. Célszerű az R1-R16 ellenállásokat minimális tűréssel (0,5...1%) venni, de a gyakoribb 2...5%-os is beválik (de itt valamivel rosszabb lehet a jelforma). Sőt, célszerű azonos értékű ellenállásokat venni (legyen 10 kOhm), majd ahol 2R kell, 10 kOhm-ot, ahol pedig R - 2x10 kOhm-ot teszünk párhuzamosan. C1, C2 kondenzátorokat célszerű 22...33pF tartományba venni. Az alkalmazott kvarc rezonátor alacsony profilú, 16 MHz frekvenciájú. Az RV1 ellenállás többfordulatú. A zener dióda csak 3,3 V-ra állítható.

Az LCD kijelző csak sárga hátlappal és "LPH8731-3C" felirattal használható. Siemens A60, A65 stb. mobiltelefonokban található, felbontása 101x80 pixel.

Beállítások elemre

A helyesen összeszerelt eszköz nem igényel beállítást, és azonnal működnie kell a vezérlő összeszerelése és felvillantása után. Ha ez nem történik meg, akkor ellenőrizze a rövidzárlatokat a nyomtatott áramköri lapon, az LCD kijelző helyes csatlakoztatását, az SA1 kapcsoló vezetékeinek épségét, valamint a zener dióda és a tápegység/USB használhatóságát. kábel.

Ha az első bekapcsolás sikeres, akkor oszcilloszkóppal és RV1 trimmelő ellenállással kell beállítani a kimeneti jel szintjét a kijelzőn megjelenő beállításoknak megfelelően.

A gombok célja: SB1 - "Bal" (Kimeneti feszültség kisebb), SB2 - "Jobb" (A kimeneti feszültség nagyobb), SB3 - "Frekvencia +10" (Frekvencia +100), SB4 - "Frekvencia -10" ( Gyakoriság - 100)<-- SB5 - Отжата (Нажата).

Fotó és videó a készülékről:


Az alábbi két fotó bemutatja, hogyan lehet 2 kHz-nél magasabb frekvenciát elérni. De ez összefügg a jel minőségével (téglalap alakúaknál ez nem számít).



Az eszközzel kapott jelek oszcillogramjai:





Az összeszerelt készülék megjelenése:


Radioelemek listája

Kijelölés Írja be Megnevezés Mennyiség JegyzetÜzletA jegyzettömböm
U1 MK AVR 8 bites

ATmega8A-AU

1 Jegyzettömbhöz
U2 Műveleti erősítő

LM358

1 SO-8 ház (LM358D) Jegyzettömbhöz
Q1 Bipoláris tranzisztor

BC547

1 Jegyzettömbhöz
D1 Zener dióda

BZX55C3V3

1 Jegyzettömbhöz
RV1 Trimmer ellenállás220 kOhm1 Jegyzettömbhöz
R1-R9 Ellenállás

2,2 kOhm

9 0805, 1% Jegyzettömbhöz
R10-R16, R32 Ellenállás

1,1 kOhm

8 0805, 1% Jegyzettömbhöz
R17 Ellenállás

100 kOhm

1 0805 Jegyzettömbhöz
R19-R23 Ellenállás

5,6 kOhm

5 0805 Jegyzettömbhöz
R24-28, R18 Ellenállás

10 kOhm

5 0805 Jegyzettömbhöz
R29, R30 Ellenállás

220 Ohm

2 0805 Jegyzettömbhöz
R31 Ellenállás

75 Ohm

1 0805 Jegyzettömbhöz
R33 Ellenállás

510 Ohm

1 0805 Jegyzettömbhöz
C1, C2 Kondenzátor27 pF2 0805