Tartalomjegyzék:

Arduino hullámforma generátor: 5 lépés (képekkel)
Arduino hullámforma generátor: 5 lépés (képekkel)

Videó: Arduino hullámforma generátor: 5 lépés (képekkel)

Videó: Arduino hullámforma generátor: 5 lépés (képekkel)
Videó: Начало работы с QLC+ Управление цветомузыкой с компьютера. Как управлять светом. 2024, November
Anonim
Arduino hullámforma generátor
Arduino hullámforma generátor

2021

A laborban gyakran szükség van egy bizonyos frekvenciájú, alakú és amplitúdójú ismétlődő jelre. Ez lehet egy erősítő tesztelése, egy áramkör, egy alkatrész vagy egy hajtómű ellenőrzése. Erőteljes hullámforma -generátorok kaphatók a kereskedelemben, de viszonylag könnyen saját maguk készíthetnek hasznosat egy Arduino Uno vagy Arduino Nano segítségével, lásd például:

www.instructables.com/id/Arduino-Waveform-…

www.instructables.com/id/10-Resister-Ardui…

Íme egy másik leírása a következő jellemzőkkel:

* Pontos hullámformák: 8 bites kimenet R2R DAC használatával, 256 minta

* Gyors: 381 kHz mintavételi frekvencia

* Pontos: 1mHz lépéses frekvenciatartomány. Olyan pontos, mint az Arduino kristály.

* Egyszerű kezelés: hullámforma és frekvencia állítható egyetlen forgó jeladóval

* Széles amplitúdójú tartomány: millivolt 20 V -ig

* 20 előre meghatározott hullámforma. Egyszerű hozzáadás.

* Könnyen elkészíthető: Arduino Uno vagy Nano plusz szabványos alkatrészek

1. lépés: Műszaki szempontok

Analóg jel készítése

Az Arduino Uno és Nano egyik hiányossága, hogy nem rendelkezik digitális-analóg (DAC) átalakítóval, így nem lehet közvetlenül a tüskéken analóg feszültséget kiadni. Az egyik megoldás az R2R létra: 8 digitális csap csatlakozik egy ellenálláshálózathoz, így 256 kimeneti szint érhető el. Közvetlen port hozzáférés révén az Arduino egyetlen paranccsal egyszerre 8 tűt állíthat be. Az ellenálláshálózathoz 9 R értékű és 8 2R értékű ellenállás szükséges. 10 kOhm -ot használtam az R értékeként, ez tartja a feszültséget a csapoktól 0,5 mA -ig vagy annál kevesebbig. Azt hiszem, az R = 1 kOhm is működhet, mivel az Arduino könnyen szállít 5 mA -t tűn, 40 mA -t portonként. Fontos, hogy az R és a 2R ellenállások aránya valóban 2. Ezt a legkönnyebben úgy érhetjük el, ha 2 db R értékű ellenállást sorba rakunk, összesen 25 ellenállást.

Fázisakkumulátor

A hullámforma létrehozása ezután ismétlődően elküldi a 8 bites számok sorozatát az Arduino csapokhoz. A hullámformát 256 bájtos tömb tárolja, és ebből a tömbből mintát vesznek, és elküldik a csapokhoz. A kimenő jel frekvenciáját az határozza meg, hogy az ember milyen gyorsan halad előre a tömbön. Ennek robusztus, pontos és elegáns módja a fázisakkumulátor: egy 32 bites szám rendszeres időközönként növekszik, és a 8 legjelentősebb bitet használjuk a tömb indexeként.

Gyors mintavétel

A megszakítások lehetővé teszik a mintavételt pontosan meghatározott időpontokban, de a megszakítások költségei korlátozzák a mintavételi frekvenciát ~ 100 kHz-re. A végtelen ciklus a fázis frissítéséhez, a hullámforma mintavételéhez és a csapok beállításához 42 óra ciklust vesz igénybe, így 16MHz/42 = 381kHz mintavételi sebességet ér el. A forgó jeladó elforgatása vagy megnyomása csapváltást és megszakítást okoz a hurokból, ami megváltoztatja a beállítást (hullámforma vagy frekvencia). Ebben a szakaszban a tömb 256 számát újraszámítják, így a hullámforma tényleges számításait nem kell elvégezni a főhurokban. Az abszolút maximális generálható frekvencia 190 kHz (a mintavételi frekvencia fele), de akkor csak két minta van periódusonként, tehát nem sok irányítás az alakzat felett. Az interfész így nem teszi lehetővé a frekvencia 100 kHz feletti beállítását. 50 kHz-en periódusonként 7-8 minta, 1,5 kHz-en és alatta pedig a tömbben tárolt mind a 256 számból mintát vesznek minden periódusban. Azon hullámformák esetében, ahol a jel zökkenőmentesen változik, például a szinuszhullám, a minták kihagyása nem jelent problémát. De a keskeny tüskés hullámformák, például egy kis hullámhosszú, kis teljesítményciklusú hullámformák esetén fennáll annak a veszélye, hogy 1,5 kHz feletti frekvenciáknál egyetlen minta hiánya azt eredményezheti, hogy a hullámforma nem az elvárt módon viselkedik

A frekvencia pontossága

Az a szám, amellyel a fázist minden mintán növelik, arányos a gyakorisággal. A frekvencia így 381kHz/2^32 = 0,089mHz pontosságú. A gyakorlatban ilyen pontosságra aligha van szükség, ezért az interfész korlátozza a frekvencia 1 mHz -es lépésekben történő beállítását. A frekvencia abszolút pontosságát az Arduino órajelének pontossága határozza meg. Ez az Arduino típustól függ, de a legtöbb 16.000 MHz frekvenciát ad meg, tehát ~ 10^-4 pontosságot. A kód lehetővé teszi a frekvencia és a fázisnövekedés arányának módosítását, hogy kijavítsa a 16 MHz -es feltételezés kis eltéréseit.

Pufferelés és erősítés

Az ellenálláshálózat nagy kimeneti impedanciával rendelkezik, így terhelés esetén a kimeneti feszültsége gyorsan csökken. Ez megoldható a kimenet pufferelésével vagy erősítésével. Itt a pufferelés és az erősítés opamp -el történik. Az LM358 -at használtam, mert volt nálam. Ez egy lassú opamp (fordulatszám 0,5 V / mikroszekundum), így nagy frekvencián és nagy amplitúdóban a jel torzul. Jó dolog, hogy képes 0V közeli feszültséget kezelni. A kimeneti feszültség azonban a sín alatt ~ 2 V -ra korlátozódik, így a +5 V teljesítmény használata 3 V -ra korlátozza a kimeneti feszültséget. A lépcsőzetes modulok kompaktok és olcsók. +20 V -ot táplál az opamp -nak, és akár 18 V feszültségű jeleket is generálhat. (Megjegyzés: a vázlat LTC3105-öt ír, mert ez volt az egyetlen lépés, amit a Fritzingben találtam. A valóságban MT3608 modult használtam, lásd a képeket a következő lépésekben). Úgy döntök, hogy változó csillapítást alkalmazok az R2R DAC kimenetére, majd az egyik opamp segítségével a jelet pufferelni kell erősítés nélkül, a másikat pedig 5,7 -tel erősíteni, hogy a jel elérje a körülbelül 20 V -os maximális kimenetet. A kimeneti áram meglehetősen korlátozott, ~ 10mA, ezért erősebb erősítőre lehet szükség, ha a jel nagy hangszórót vagy elektromágnest akar meghajtani.

2. lépés: Szükséges összetevők

A mag hullámforma generátorhoz

Arduino Uno vagy Nano

16x2 LCD kijelző + 20 kOhm trimmer és 100 Ohm sorozatú ellenállás a háttérvilágításhoz

5 tűs forgó kódoló (beépített nyomógombbal)

25 db 10 kOhm -os ellenállás

A pufferhez/erősítőhöz

LM358 vagy más kettős opamp

fokozó modul az MT3608-on alapul

50 kOhm változó ellenállás

10 kOhm ellenállás

47 kOhm ellenállás

1muF kondenzátor

3. lépés: Építés

Építkezés
Építkezés
Építkezés
Építkezés

Mindent forrasztottam egy 7x9 cm -es prototípus táblára, ahogy a képen is látszik. Mivel kicsit összezavarodott az összes vezeték, megpróbáltam pirosra színezni azokat a vezetékeket, amelyek pozitív feszültséget hordoznak, és azokat, amelyek földeltek.

Az általam használt kódolónak 5 csapja van, 3 az egyik oldalon, 2 a másik oldalon. A 3 érintkezős oldal a tényleges jeladó, a 2 érintkezős oldal a beépített nyomógomb. A 3-tűs oldalon a központi csapot a földhöz kell csatlakoztatni, a másik két csapot a D10-hez és a D11-hez. A 2-tűs oldalon az egyik érintkezőt a földhöz, a másikat a D12-hez kell csatlakoztatni.

Ez a legcsúnyább dolog, amit valaha készítettem, de működik. Jó lenne behelyezni egy házat, de egyelőre a plusz munka és a költségek nem igazán indokolják. A Nano és a kijelző csapszegekkel van rögzítve. Nem csinálnám újra, ha újat építenék. Nem tettem csatlakozókat a táblára a jelek felvételéhez. Ehelyett krokodilvezetékekkel veszem fel őket a rézhuzal kiálló darabjaiból, a következő címkével:

R - nyers jel az R2R DAC -ból

B - pufferelt jel

A - erősített jel

T - időzítő jel a 9. tűből

G - föld

+ - pozitív „magas” feszültség a fokozó modulból

4. lépés: A kód

A kód, egy Arduino vázlat, csatolva van, és fel kell tölteni az Arduino -ba.

20 hullámformát határoztak meg előre. Egyszerűnek kell lennie bármilyen más hullám hozzáadásával. Vegye figyelembe, hogy a véletlenszerű hullámok a 256 értékű tömböt véletlen értékekkel töltik fel, de ugyanaz a minta ismétlődik minden periódusban. A valódi véletlenszerű jelek zajnak hangzanak, de ez a hullámforma sokkal inkább sípként hangzik.

A kód 1 kHz -es jelet állít be a D9 érintkezőn a TIMER1 segítségével. Ez hasznos az analóg jel időzítésének ellenőrzéséhez. Így jöttem rá, hogy az órajel -ciklusok száma 42: Ha 41 -et vagy 43 -at feltételezek, és 1kHz -es jelet generálok, akkor egyértelműen más a frekvenciája, mint a D9 -es tűn. 42 -es értékkel tökéletesen illeszkednek.

Általában az Arduino minden ezredmásodpercben megszakít, hogy nyomon követhesse az időt a millis () függvénnyel. Ez megzavarná a pontos jelképzést, ezért az adott megszakítás le van tiltva.

A fordító ezt mondja: "A Sketch 7254 bájt (23%) program tárhelyet használ. Maximum 30720 bájt. A globális változók 483 bájt (23%) dinamikus memóriát használnak, így 1565 bájt marad a helyi változóknak. Maximum 2048 bájt." Tehát bőven van hely a kifinomultabb kódok számára. Vigyázzon, hogy a Nano -hoz való sikeres feltöltéshez esetleg az "ATmega328P (régi rendszerbetöltő)" lehetőséget kell választania.

5. lépés: Használat

A jelgenerátor egyszerűen táplálható az Arduino Nano mini-USB-kábelén keresztül. A legjobb, ha tápegységgel végezzük, hogy ne legyen véletlen földhurok a készülékkel, amelyhez csatlakoztatható.

Bekapcsolva 100 Hz -es szinuszhullámot generál. A gomb elforgatásával a másik 20 hullámtípus közül választhat egyet. Nyomva tartva forgatva a kurzort a frekvencia bármelyik számjegyére lehet állítani, amelyet ezután a kívánt értékre lehet változtatni.

Az amplitúdó a potenciométerrel szabályozható, és akár a pufferelt, akár az erősített jel használható.

Nagyon hasznos oszcilloszkóp segítségével ellenőrizni a jel amplitúdóját, különösen akkor, ha a jel áramot szolgáltat egy másik eszköznek. Ha túl sok áramot húz, a jel lecsípődik, és a jel erősen torz

Nagyon alacsony frekvenciák esetén a kimenet 10 kOhm -os ellenállású soros LED -del jeleníthető meg. Hangfrekvenciák hangszóróval hallhatók. Ügyeljen arra, hogy a jel nagyon kicsi legyen ~ 0,5 V, különben az áram túl magas lesz, és a jel vágni kezd.

Ajánlott: