Sisällysluettelo:

Arduino -aaltomuodon generaattori: 5 vaihetta (kuvilla)
Arduino -aaltomuodon generaattori: 5 vaihetta (kuvilla)

Video: Arduino -aaltomuodon generaattori: 5 vaihetta (kuvilla)

Video: Arduino -aaltomuodon generaattori: 5 vaihetta (kuvilla)
Video: How to Interface Industrial Sensors with Arduino Nano 2024, Marraskuu
Anonim
Arduino -aaltomuodon generaattori
Arduino -aaltomuodon generaattori

Helmikuun 2021 päivitys: tutustu uuteen versioon, jonka näytteenottotaajuus on 300 -kertainen Raspberry Pi Picon perusteella

Laboratoriossa tarvitaan usein toistuvaa tietyn taajuuden, muodon ja amplitudin signaalia. Se voi olla testata vahvistinta, tarkistaa piiri, komponentti tai toimilaite. Tehokkaita aaltomuodon generaattoreita on saatavana kaupallisesti, mutta hyödyllisen generaattorin tekeminen Arduino Unon tai Arduino Nanon avulla on suhteellisen helppoa, katso esimerkiksi:

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

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

Tässä on kuvaus toisesta, jolla on seuraavat ominaisuudet:

* Tarkat aaltomuodot: 8-bittinen lähtö käyttäen R2R DAC: tä, 256 näytteen muoto

* Nopea: 381 kHz näytteenottotaajuus

* Tarkka: 1mHz askeltaajuusalue. Yhtä tarkka kuin Arduino -kristalli.

* Helppo käyttää: aaltomuoto ja taajuus asetettavissa yhdellä pyörivällä anturilla

* Laaja amplitudialue: millivolttia - 20 V.

* 20 ennalta määriteltyä aaltomuotoa. Suora lisätä.

* Helppo tehdä: Arduino Uno tai Nano plus vakiokomponentit

Vaihe 1: Tekniset näkökohdat

Analogisen signaalin lähettäminen

Yksi Arduino Unon ja Nanon puutteista on se, että siinä ei ole DAC-muunninta, joten sitä ei voida antaa antamaan analogista jännitettä suoraan nastoille. Yksi ratkaisu on R2R -tikkaat: 8 digitaalista nastaa on kytketty vastusverkkoon niin, että 256 lähtötasoa voidaan saavuttaa. Suoran portin kautta Arduino voi asettaa 8 nastaa samanaikaisesti yhdellä komennolla. Vastusverkkoa varten tarvitaan 9 vastusta, joiden arvo on R ja 8, joiden arvo on 2R. Käytin 10 kOhm: n arvoa R: lle, joka pitää virran nastoista 0,5 mA: iin tai alle. Luulen, että R = 1 kOhm voisi myös toimia, koska Arduino voi helposti toimittaa 5 mA per pin, 40 mA per portti. On tärkeää, että R- ja 2R -vastuksen välinen suhde on todella 2. Tämä saavutetaan helpoimmin asettamalla kaksi R -arvoista vastusta sarjaan, yhteensä 25 vastusta.

Vaihevaraaja

Aaltomuodon luominen sitten lähettää toistuvasti 8-bittisen numerosarjan Arduino-nastoille. Aaltomuoto tallennetaan 256 tavun matriisiin, ja tästä taulukosta otetaan näytteitä ja lähetetään nastoille. Lähtösignaalin taajuus määräytyy sen mukaan, kuinka nopeasti ryhmä etenee. Vankka, tarkka ja tyylikäs tapa tehdä tämä on vaiheakulla: 32-bittinen luku kasvaa säännöllisin väliajoin, ja käytämme 8 merkittävintä bittiä taulukon indeksinä.

Nopea näytteenotto

Keskeytykset mahdollistavat näytteenoton tarkasti määriteltyinä aikoina, mutta keskeytysten yleiskustannukset rajoittavat näytteenottotaajuuden ~ 100 kHz: iin. Ääretön silmukka vaiheen päivittämiseksi, aaltomuodon näytteenottamiseksi ja nastojen asettamiseksi kestää 42 kellojaksoa, jolloin näytteenottotaajuus on 16 MHz/42 = 381 kHz. Pyörivän anturin kiertäminen tai työntäminen aiheuttaa nastan vaihdon ja silmukasta poistuvan keskeytyksen, joka muuttaa asetusta (aaltomuoto tai taajuus). Tässä vaiheessa taulukon 256 numeroa lasketaan uudelleen siten, että aalomuodon todellisia laskelmia ei tarvitse suorittaa pääsilmukassa. Absoluuttinen enimmäistaajuus, joka voidaan luoda, on 190 kHz (puolet näytteenottotaajuudesta), mutta silloin on vain kaksi näytettä jaksoa kohden, joten muotoa ei ole paljon hallittavissa. Liitäntä ei siis salli taajuuden asettamista yli 100 kHz. 50 kHz: n taajuudella on 7-8 näytettä jaksoa kohden ja 1,5 kHz: n taajuudella ja alle kaikkien matriisiin tallennettujen 256 numeron näytteitä otetaan joka jakso. Aaltomuodoissa, joissa signaali muuttuu tasaisesti, esimerkiksi siniaalto, näytteiden ohittaminen ei ole ongelma. Mutta aaltomuodoille, joilla on kapeat piikit, esimerkiksi neliöaalto, jolla on pieni toimintajakso, on olemassa vaara, että yli 1,5 kHz: n taajuuksilla yhden näytteen puuttuminen voi johtaa siihen, että aaltomuoto ei toimi odotetusti

Taajuuden tarkkuus

Luku, jolla vaihetta lisätään jokaisessa näytteessä, on verrannollinen taajuuteen. Taajuus voidaan siten asettaa 381 kHz/2^32 = 0,089 MHz tarkkuuteen. Käytännössä tällaista tarkkuutta tuskin koskaan tarvitaan, joten käyttöliittymä rajoittaa taajuuden asettamista 1 MHz: n askelin. Taajuuden absoluuttinen tarkkuus määräytyy Arduinon kellotaajuuden tarkkuuden mukaan. Tämä riippuu Arduino-tyypistä, mutta useimmat määrittävät taajuuden 16.000 MHz, joten tarkkuus on ~ 10^-4. Koodin avulla voidaan muuttaa taajuuden ja vaiheen lisäyksen suhdetta korjatakseen 16 MHz: n oletuksen pienet poikkeamat.

Puskurointi ja vahvistaminen

Vastusverkossa on suuri lähtöimpedanssi, joten sen lähtöjännite laskee nopeasti, jos kuorma liitetään. Tämä voidaan ratkaista puskuroimalla tai vahvistamalla lähtöä. Tässä puskurointi ja vahvistaminen tehdään opampilla. Käytin LM358, koska minulla oli niitä. Se on hidas opamp (kääntymisnopeus 0,5 V / mikrosekunti), joten korkealla taajuudella ja suurella amplitudilla signaali vääristyy. Hyvä asia on, että se pystyy käsittelemään jännitteitä hyvin lähellä 0V. Lähtöjännite on kuitenkin rajoitettu ~ 2 V kiskon alle, joten +5 V tehon käyttö rajoittaa lähtöjännitteen 3 V: iin. Step-up-moduulit ovat kompakteja ja halpoja. Syöttää +20 V opampille, se voi tuottaa signaaleja, joiden jännite on jopa 18 V. (Huomaa, kaaviossa sanotaan LTC3105, koska se oli ainoa askel, jonka löysin Fritzingissä. Käytännössä käytin MT3608-moduulia, katso kuvat seuraavissa vaiheissa). Päätän soveltaa muuttuvaa vaimennusta R2R DAC: n ulostuloon ja käyttää toista opampeista puskuroimaan signaalin ilman vahvistusta ja toista vahvistamaan 5,7: llä, jotta signaali voi saavuttaa noin 20 V: n maksimilähdön. Lähtövirta on melko rajallinen, ~ 10mA, joten voimakkaampaa vahvistinta saatetaan tarvita, jos signaalin halutaan ohjaavan suurta kaiutinta tai sähkömagneettia.

Vaihe 2: Tarvittavat komponentit

Sydämen aaltomuodon generaattorille

Arduino Uno tai Nano

16x2 LCD -näyttö + 20 kOhm trimmeri ja 100 ohmin sarjan vastus taustavalolle

5-nastainen pyörivä anturi (integroidulla painikkeella)

25 vastusta 10 kOhm

Puskurille/vahvistimelle

LM358 tai muu dual opamp

tehostusmoduuli, joka perustuu MT3608: een

50 kOhm: n muuttuva vastus

10 kOhm vastus

47 kOhm vastus

1 muF kondensaattori

Vaihe 3: Rakentaminen

Rakentaminen
Rakentaminen
Rakentaminen
Rakentaminen

Juotin kaiken 7x9 cm: n prototyyppilaudalle, kuten kuvassa. Koska se meni vähän sotkuiseksi kaikkien johtojen kanssa, yritin värittää positiivisen jännitteen johtavat johdot punaisiksi ja maadoitetut johdot.

Käyttämässäni anturissa on 5 nastaa, 3 toisella puolella, 2 toisella puolella. Sivu, jossa on 3 nastaa, on todellinen anturi, ja puoli, jossa on 2 nastaa, on integroitu painike. 3-napaisella puolella keskitappi on liitettävä maahan, kaksi muuta nastaa D10 ja D11. 2-nastaisella puolella yksi nasta tulee liittää maahan ja toinen D12-liittimeen.

Se on rumin asia, jonka olen koskaan tehnyt, mutta se toimii. Olisi mukava laittaa kotelo, mutta toistaiseksi ylimääräinen työ ja kustannukset eivät oikeuta sitä. Nano ja näyttö on kiinnitetty nastoilla. En tekisi sitä uudestaan, jos rakentaisin uuden. En laittanut liittimiä levylle signaalien vastaanottamiseksi. Sen sijaan poimin ne krokotiilijohtimilla kuparilangan ulkonevista paloista, jotka on merkitty seuraavasti:

R - raakasignaali R2R DAC: sta

B - puskuroitu signaali

A - vahvistettu signaali

T - ajastimen signaali nastasta 9

G - maa

+ - positiivinen 'korkea' jännite lisämoduulista

Vaihe 4: Koodi

Koodi, Arduino -luonnos, on liitteenä ja se on ladattava Arduinoon.

20 aaltomuotoa on ennalta määritelty. Muiden aaltojen lisäämisen pitäisi olla helppoa. Huomaa, että satunnaiset aallot täyttävät 256-arvoisen taulukon satunnaisarvoilla, mutta sama kuvio toistuu joka jakso. Todelliset satunnaiset signaalit kuulostavat melulta, mutta tämä aaltomuoto kuulostaa paljon enemmän viheltämiseltä.

Koodi asettaa 1 kHz: n signaalin nastaan D9 ja TIMER1. Tämä on hyödyllistä tarkistaa analogisen signaalin ajoitus. Näin ymmärsin, että kellosyklien lukumäärä on 42: Jos oletan, että 41 tai 43 ja synnytän 1 kHz: n signaalin, sen taajuus on selvästi erilainen kuin nastan D9 signaali. Arvon 42 kanssa ne sopivat täydellisesti.

Normaalisti Arduino keskeyttää joka millisekunti, jotta voit seurata aikaa millis () -toiminnon avulla. Tämä häiritsisi tarkan signaalin luomista, joten tietty keskeytys on poistettu käytöstä.

Kääntäjä sanoo: "Sketch käyttää 7254 tavua (23%) ohjelman tallennustilaa. Enintään 30720 tavua. Globaalimuuttujat käyttävät 483 tavua (23%) dynaamista muistia jättäen 1565 tavua paikallisille muuttujille. Suurin sallittu määrä on 2048 tavua." Joten paljon tilaa kehittyneemmälle koodille. Varo, että sinun on ehkä valittava "ATmega328P (vanha käynnistyslatauslaite)" ladataksesi onnistuneesti Nano -laitteeseen.

Vaihe 5: Käyttö

Signaaligeneraattoria voidaan käyttää yksinkertaisesti Arduino Nanon mini-USB-kaapelin kautta. Se on parasta tehdä virtalähteellä, jotta laitteeseen, johon se voidaan liittää, ei ole tahatonta maasilmukkaa.

Kun se kytketään päälle, se synnyttää 100 Hz siniaaltoa. Pyörittämällä nuppia voidaan valita yksi muista 20 aaltotyypistä. Pyörittämällä painettuna kohdistin voidaan asettaa mille tahansa taajuuden numerolle, joka voidaan sitten muuttaa haluttuun arvoon.

Amplitudia voidaan säätää potentiometrillä ja joko puskuroitua tai vahvistettua signaalia voidaan käyttää.

On todella hyödyllistä käyttää oskilloskooppia signaalin amplitudin tarkistamiseen erityisesti silloin, kun signaali syöttää virtaa toiselle laitteelle. Jos virtaa vedetään liikaa, signaali leikkuu ja signaali vääristyy voimakkaasti

Hyvin matalilla taajuuksilla lähtö voidaan visualisoida 10 kOhm: n vastuksella varustetulla LED -sarjalla. Äänitaajuudet voidaan kuulla kaiuttimella. Varmista, että asetat signaalin hyvin pieneksi ~ 0,5 V, muuten virta nousee liian korkeaksi ja signaali alkaa leikata.

Suositeltava: