Sadržaj:
- Korak 1: Tehnička razmatranja
- Korak 2: Potrebne komponente
- Korak 3: Izgradnja
- Korak 4: Kôd
- Korak 5: Upotreba
Video: Arduino generator valova: 5 koraka (sa slikama)
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:34
Ažuriranje veljače 2021.: pogledajte novu verziju s 300x stopom uzorkovanja, temeljenu na Raspberry Pi Pico
U laboratoriju je često potreban ponavljajući signal određene frekvencije, oblika i amplitude. Možda je potrebno testirati pojačalo, provjeriti krug, komponentu ili aktuator. Snažni generatori valnih oblika dostupni su na tržištu, ali relativno je jednostavno sami napraviti koristan s Arduino Uno ili Arduino Nano, pogledajte na primjer:
www.instructables.com/id/Arduino-Waveform-…
www.instructables.com/id/10-Resister-Ardui…
Evo opisa još jednog sa sljedećim značajkama:
* Točni valni oblici: 8-bitni izlaz pomoću R2R DAC-a, oblik od 256 uzoraka
* Brzo: brzina uzorkovanja od 381 kHz
* Precizno: frekvencijski raspon koraka od 1 mHz. Točan kao kristal Arduino.
* Jednostavan rad: valni oblik i frekvencija podesivi s jednim rotacijskim davačem
* Širok raspon amplituda: milivolti do 20V
* 20 unaprijed definiranih valnih oblika. Jednostavno dodati još.
* Jednostavno za izradu: Arduino Uno ili Nano plus standardne komponente
Korak 1: Tehnička razmatranja
Izrada analognog signala
Jedan nedostatak Arduino Uno i Nano je što nema digitalno-analogni (DAC) pretvarač, pa ga nije moguće natjerati da izlazi analogni napon izravno na pinove. Jedno rješenje su ljestve R2R: 8 digitalnih pinova spojeno je na otporničku mrežu tako da se može doseći 256 razina izlaza. Izravnim pristupom portu, Arduino može postaviti 8 pinova istovremeno s jednom naredbom. Za mrežu otpornika potrebno je 9 otpornika s vrijednošću R i 8 s vrijednošću 2R. Koristio sam 10kOhm kao vrijednost za R, koja održava struju s pinova na 0,5mA ili manje. Pretpostavljam da bi R = 1 kOhm također mogao raditi, jer Arduino može lako isporučiti 5mA po pinu, 40mA po portu. Važno je da omjer između otpornika R i 2R bude doista 2. To se najlakše postiže stavljanjem 2 otpornika vrijednosti R u nizu, za ukupno 25 otpornika.
Fazni akumulator
Generiranje valnog oblika tada se svodi na ponavljano slanje slijeda 8-bitnih brojeva na Arduino pinove. Valni oblik je pohranjen u nizu od 256 bajta i ovaj niz se uzorkuje i šalje na pinove. Učestalost izlaznog signala određena je brzinom napredovanja kroz niz. Robustan, precizan i elegantan način za to je pomoću faznog akumulatora: 32-bitni broj se povećava u pravilnim intervalima, a mi koristimo 8 najznačajnijih bitova kao indeks niza.
Brzo uzorkovanje
Prekidi omogućuju uzorkovanje u točno definirano vrijeme, ali dodatni prekidi ograničavaju frekvenciju uzorkovanja na ~ 100 kHz. Beskonačna petlja za ažuriranje faze, uzorkovanje valnog oblika i postavljanje pinova traje 42 takta, čime se postiže brzina uzorkovanja od 16 MHz/42 = 381 kHz. Rotiranje ili guranje rotacijskog davača uzrokuje promjenu pina i prekid koji izlazi iz petlje radi promjene postavke (valni oblik ili frekvencija). U ovoj fazi 256 brojeva u nizu se ponovno izračunava tako da u glavnoj petlji nije potrebno izvoditi stvarne proračune valnog oblika. Apsolutna maksimalna frekvencija koja se može generirati je 190 kHz (polovica brzine uzorkovanja), ali tada postoje samo dva uzorka po razdoblju, pa nema velike kontrole oblika. Sučelje stoga ne dopušta postavljanje frekvencije iznad 100kHz. Na 50 kHz postoji 7-8 uzoraka po razdoblju, a na 1,5 kHz i ispod svih 256 brojeva pohranjenih u nizu uzorkuje se svako razdoblje. Za valne oblike gdje se signal glatko mijenja, na primjer sinusni val, preskakanje uzoraka nije problem. No, za valne oblike s uskim šiljcima, na primjer kvadratni val s malim radnim ciklusom, postoji opasnost da za frekvencije iznad 1,5 kHz propuštanje jednog uzorka može dovesti do toga da se valni oblik ne ponaša kako je očekivano
Točnost frekvencije
Broj za koji se faza povećava za svaki uzorak proporcionalan je frekvenciji. Frekvencija se tako može postaviti na točnost od 381kHz/2^32 = 0,089mHz. U praksi takva točnost rijetko treba, pa sučelje ograničava postavljanje frekvencije u koracima od 1 mHz. Apsolutna preciznost frekvencije određena je preciznošću Arduino takta. To ovisi o vrsti Arduina, ali većina navodi frekvenciju od 16.000 MHz, pa je preciznost ~ 10^-4. Kôd omogućuje izmjenu omjera frekvencije i faznog prirasta kako bi se ispravila mala odstupanja pretpostavke od 16 MHz.
Međuspremnik i pojačanje
Mreža otpornika ima visoku izlaznu impedanciju, pa njezin izlazni napon brzo pada ako je priključeno opterećenje. To se može riješiti međuspremnikom ili pojačanjem izlaza. Ovdje se međuspremnik i pojačanje obavljaju pomoću opampa. Koristio sam LM358 jer sam ga imao. To je spor opamp (brzina naprezanja 0,5V po mikrosekundi) pa se pri visokoj frekvenciji i velikoj amplitudi signal iskrivljuje. Dobra stvar je što može podnijeti napone vrlo blizu 0V. Izlazni napon je međutim ograničen na ~ 2V ispod tračnice, pa upotreba +5V snage ograničava izlazni napon na 3V. Step-up moduli su kompaktni i jeftini. Napajajući opamp +20V, može generirati signale napona do 18V. (Napomena: shema kaže LTC3105 jer je to bio jedini korak koji sam pronašao u Fritzingu. U stvarnosti sam koristio modul MT3608, pogledajte slike u sljedećim koracima). Odlučio sam primijeniti promjenjivo slabljenje na izlaz R2R DAC -a, a zatim upotrijebiti jednu od opampi za spremanje signala bez pojačanja, a drugu za pojačanje za 5,7, tako da signal može doseći maksimalni izlaz od oko 20V. Izlazna struja je prilično ograničena, ~ 10 mA, pa će možda biti potrebno jače pojačalo ako signal želi pokrenuti veliki zvučnik ili elektromagnet.
Korak 2: Potrebne komponente
Za generator valnog oblika jezgre
Arduino Uno ili Nano
16x2 LCD zaslon + trimer 20kOhm i otpornik serije 100Ohm za pozadinsko osvjetljenje
5-pinski rotacijski davač (s integriranim gumbom)
25 otpornika od 10kOhm
Za međuspremnik/pojačalo
LM358 ili drugi dvostruki opamp
step-up modul temeljen na MT3608
50kOhm promjenjivi otpornik
10kOhm otpornik
Otpor 47kOhm
Kondenzator 1muF
Korak 3: Izgradnja
Lemio sam sve na prototipnu ploču 7x9cm, kao što je prikazano na slici. Budući da je postalo pomalo neuredno sa svim žicama, pokušao sam obojati elektrode koje nose pozitivni napon u crveno, a one koje nose masu u crno.
Enkoder koji sam koristio ima 5 pinova, 3 s jedne strane, 2 s druge strane. Strana s 3 igle je stvarni davač, strana s 2 pina je integrirani gumb. Na 3-polnoj strani središnji pin treba biti spojen na masu, a druga dva na D10 i D11. Na 2-polnoj strani jedan pin treba spojiti na masu, a drugi na D12.
To je nešto najružnije što sam ikad napravio, ali djeluje. Bilo bi lijepo staviti u kućište, ali za sada dodatni rad i troškovi to zapravo ne opravdavaju. Nano i zaslon povezani su pin-headerima. Ne bih to ponovio da sam sagradio novu. Nisam stavio konektore na ploču da pokupim signale. Umjesto toga, pokupim ih krokodilskim tragovima iz izbočenih komada bakrene žice, označenih na sljedeći način:
R - sirovi signal iz R2R DAC -a
B - međuspremni signal
A - pojačani signal
T - signal tajmera s pina 9
G - tlo
+ - pozitivni 'visoki' napon iz pojačavajućeg modula
Korak 4: Kôd
Kôd, Arduino skica, nalazi se u privitku i treba ga prenijeti na Arduino.
Unaprijed je definirano 20 valnih oblika. Bilo bi jednostavno dodati bilo koji drugi val. Imajte na umu da nasumični valovi ispunjavaju niz od 256 vrijednosti slučajnim vrijednostima, ali isti se obrazac ponavlja svaki period. Istinski slučajni signali zvuče kao šum, ali ovaj valni oblik zvuči mnogo više kao zvižduk.
Kod postavlja signal od 1 kHz na pin D9 s TIMER1. Ovo je korisno za provjeru vremena analognog signala. Tako sam zaključio da je broj ciklusa takta 42: Ako pretpostavim 41 ili 43 i generiram signal od 1 kHz, očito ima drugačiju frekvenciju od signala na pinu D9. S vrijednošću 42 savršeno se slažu.
Uobičajeno, Arduino prekida svaku milisekundu kako bi pratio vrijeme pomoću funkcije millis (). To bi poremetilo stvaranje točnog signala, pa je određeni prekid onemogućen.
Prevoditelj kaže: "Sketch koristi 7254 bajta (23%) prostora za pohranu programa. Maksimalno je 30720 bajtova. Globalne varijable koriste 483 bajta (23%) dinamičke memorije, ostavljajući 1565 bajtova za lokalne varijable. Maksimalno je 2048 bajtova." Dakle, ima dovoljno prostora za sofisticiraniji kod. Pazite da ćete možda morati odabrati "ATmega328P (stari bootloader)" za uspješan prijenos na Nano.
Korak 5: Upotreba
Generator signala može se jednostavno napajati putem mini-USB kabela Arduino Nano. Najbolje je to učiniti s napajanjem, kako ne bi došlo do slučajne petlje uzemljenja s uređajem na koji se može spojiti.
Kad se uključi, generirat će sinusni val od 100Hz. Okretanjem gumba može se izabrati jedan od ostalih 20 tipova valova. Okretanjem dok se pritisne, kursor se može postaviti na bilo koju znamenku frekvencije, koja se zatim može promijeniti na željenu vrijednost.
Amplituda se može regulirati potenciometrom, a može se koristiti ili međuspremnik ili pojačani signal.
Doista je korisno upotrijebiti osciloskop za provjeru amplitude signala, osobito kada signal dovodi struju na drugi uređaj. Ako se izvuče previše struje, signal će se isjeći i signal će biti jako izobličen
Za vrlo niske frekvencije, izlaz se može vizualizirati serijski LED sa 10kOhm otpornikom. Audio frekvencije mogu se čuti zvučnikom. Signal treba biti vrlo mali ~ 0,5 V, u protivnom će struja postati previsoka i signal počinje prelaziti.
Preporučeni:
Glazbeni generator temeljen na vremenu (Midi generator temeljen na ESP8266): 4 koraka (sa slikama)
Glazbeni generator temeljen na vremenu (Midi Generator temeljen na ESP8266): Bok, danas ću vam objasniti kako napraviti vlastiti mali glazbeni generator temeljen na vremenu. Baziran je na ESP8266, koji je poput Arduina, a reagira na temperaturu, kišu i intenzitet svjetla. Ne očekujte da će to učiniti cijele pjesme ili akorde
Dupin-prijenosni izvor svjetlosti s više valova po iznimno niskim cijenama: 11 koraka
Dupin-prijenosni viševaljni svjetlosni izvor s iznimno niskim cijenama: Nazvan po Augusteu Dupinu, koji se smatra prvim izmišljenim detektivom, ovaj prijenosni izvor svjetla beži od bilo kojeg 5V USB punjača za telefon ili napajanja. Svaka LED glava magnetski se uključuje. Koristeći jeftine LED diode sa zvjezdicom od 3 W, koje aktivno hladi mali ventilator
Generator trofaznih sinusnih valova temeljen na Arduinu Due: 5 koraka
Generator trofaznih sinusnih valova temeljen na Arduino Due: svrha ovog udjela je pomoći nekome tko pokušava iskoristiti Dueve bolje performanse + nedostatak referenci + nepotrebne podatkovne tablice. Ovaj projekt može generirati do 3 fazne sinusne valove @ 256 uzorci / ciklus na niskim frekvencijama (<1 kHz) i 16 s
Uradi sam bežični bežični oblik električne energije radio valova u Katmanduu: 6 koraka
Uradi sam bežični bežični oblik električne energije radio valova u Katmanduu: Ono što sam učinio, dotjerao sam ga i učinio još jednostavnijim i ima samo dva kraja umjesto četiri. Palačinka odgovarajuće veličine s dva kraja spojena na Arial's i tlo funkcionira kao prijemnik. Dugačak niz od dva arijalna, jedan spojen na g
Kako napraviti interaktivni ispis zvučnih valova: 8 koraka (sa slikama)
Kako napraviti interaktivni ispis zvučnih valova: U ovom ćemo vam tutorijalu pokazati kako napraviti interaktivni ispis zvučnih valova unutar okvira slike, tako da možete vidjeti i čuti svoju omiljenu pjesmu u isto vrijeme! Kad dodirnete otisak kroz staklo okvira, on će glumiti sina