Cuprins:
- Pasul 1: Considerații tehnice
- Pasul 2: Componente necesare
- Pasul 3: Construcție
- Pasul 4: Codul
- Pasul 5: utilizare
Video: Generator de forme de undă Arduino: 5 pași (cu imagini)
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:43
Actualizare februarie 2021: verificați noua versiune cu o rată de eșantionare de 300x, pe baza Raspberry Pi Pico
În laborator, de multe ori este nevoie de un semnal repetitiv cu o anumită frecvență, formă și amplitudine. Poate fi să testați un amplificator, să verificați un circuit, o componentă sau un actuator. Generatoare puternice de forme de undă sunt disponibile comercial, dar este relativ ușor să creați unul util cu Arduino Uno sau Arduino Nano, a se vedea de exemplu:
www.instructables.com/id/Arduino-Waveform-…
www.instructables.com/id/10-Resister-Ardui…
Iată descrierea alteia cu următoarele caracteristici:
* Forme de undă precise: ieșire pe 8 biți utilizând R2R DAC, formă de 256 de eșantioane
* Rapid: rata de eșantionare 381 kHz
* Precis: interval de frecvență pași 1mHz. La fel de precis ca cristalul Arduino.
* Funcționare ușoară: formă de undă și frecvență reglabilă cu un singur codor rotativ
* Gama largă de amplitudini: milivolți până la 20V
* 20 de forme de undă predefinite. Simplu pentru a adăuga mai multe.
* Ușor de realizat: Arduino Uno sau Nano plus componente standard
Pasul 1: Considerații tehnice
Realizarea unui semnal analogic
Unul dintre neajunsurile Arduino Uno și Nano este că nu are un convertor digital-analog (DAC), deci nu este posibil să-i faci o tensiune analogică direct pe pini. O soluție este scara R2R: 8 pini digitali sunt conectați la o rețea de rezistență, astfel încât să poată fi atins 256 de niveluri de ieșire. Prin acces direct la port, Arduino poate seta 8 pini simultan cu o singură comandă. Pentru rețeaua de rezistențe, sunt necesare 9 rezistențe cu valoarea R și 8 cu valoarea 2R. Am folosit 10kOhm ca valoare pentru R, care menține curentul de la pini la 0,5mA sau mai puțin. Cred că R = 1kOhm ar putea funcționa la fel de bine, deoarece Arduino poate livra cu ușurință 5mA pe pin, 40mA pe port. Este important ca raportul dintre rezistențele R și 2R să fie cu adevărat 2. Acest lucru se realizează cel mai ușor punând 2 rezistențe de valoare R în serie, pentru un total de 25 de rezistențe.
Acumulator de fază
Generarea unei forme de undă se reduce apoi la trimiterea repetată a unei secvențe de numere de 8 biți către pinii Arduino. Forma de undă este stocată într-o matrice de 256 de octeți și această matrice este eșantionată și trimisă pinilor. Frecvența semnalului de ieșire este determinată de viteza cu care se avansează prin matrice. O modalitate robustă, precisă și elegantă de a face acest lucru este cu un acumulator de fază: un număr de 32 de biți crește la intervale regulate și folosim cei 8 biți cei mai semnificativi ca index al matricei.
Eșantionare rapidă
Întreruperile permit eșantionarea la momente bine definite, dar cheltuielile generale ale întreruperilor limitează frecvența de eșantionare la ~ 100kHz. O buclă infinită pentru actualizarea fazei, eșantionarea formei de undă și setarea pinilor durează 42 de cicluri de ceas, realizând astfel o rată de eșantionare de 16MHz / 42 = 381kHz. Rotirea sau împingerea codificatorului rotativ determină o schimbare a pinului și o întrerupere care iese din buclă pentru a schimba setarea (forma de undă sau frecvența). În această etapă, cele 256 de numere din matrice sunt recalculate, astfel încât nu trebuie efectuate calcule reale ale formei de undă în bucla principală. Frecvența maximă absolută care poate fi generată este de 190 kHz (jumătate din rata de eșantionare), dar există doar două eșantioane pe perioadă, deci nu prea mult control al formei. Interfața nu permite astfel setarea frecvenței peste 100kHz. La 50kHz, există 7-8 eșantioane pe perioadă și la 1,5 kHz și sub toate cele 256 de numere stocate în matrice sunt eșantionate în fiecare perioadă. Pentru formele de undă în care semnalul se modifică ușor, de exemplu unda sinusoidală, omiterea eșantioanelor nu este o problemă. Dar pentru formele de undă cu vârfuri înguste, de exemplu o undă pătrată cu un ciclu de funcționare mic, există pericolul ca pentru frecvențe peste 1,5 kHz lipsesc un singur eșantion să poată avea ca rezultat ca forma de undă să nu se comporte așa cum era de așteptat.
Precizia frecvenței
Numărul cu care se crește faza la fiecare eșantion este proporțional cu frecvența. Frecvența poate fi astfel setată la o precizie de 381kHz / 2 ^ 32 = 0,089mHz. În practică, o astfel de precizie nu este niciodată necesară, astfel încât interfața limitează setarea frecvenței în trepte de 1mHz. Precizia absolută a frecvenței este determinată de precizia frecvenței ceasului Arduino. Acest lucru depinde de tipul Arduino, dar majoritatea specifică o frecvență de 16.000 MHz, deci o precizie de ~ 10 ^ -4. Codul permite modificarea raportului dintre frecvență și creșterea fazei pentru a corecta abaterile mici ale ipotezei de 16 MHz.
Tamponare și amplificare
Rețeaua de rezistențe are o impedanță de ieșire ridicată, astfel încât tensiunea sa de ieșire scade rapid dacă este atașată o sarcină. Acest lucru poate fi rezolvat prin tamponarea sau amplificarea ieșirii. Aici, tamponarea și amplificarea se fac cu un opamp. Am folosit LM358 pentru că aveam ceva. Este un opamp lent (viteza de rotire 0,5V pe microsecundă), astfel încât la frecvență înaltă și amplitudine mare semnalul este distorsionat. Un lucru bun este că poate gestiona tensiuni foarte apropiate de 0V. Tensiunea de ieșire este totuși limitată la ~ 2V sub șină, astfel încât utilizarea puterii de + 5V limitează tensiunea de ieșire la 3V. Modulele step-up sunt compacte și ieftine. Alimentând + 20V către opamp, poate genera semnale cu tensiune de până la 18V. (NB, schema spune LTC3105 pentru că acesta a fost singurul pas pe care l-am găsit în Fritzing. În realitate am folosit un modul MT3608, vezi imagini în pașii următori). Aleg să aplic o atenuare variabilă la ieșirea R2R DAC, apoi să folosesc unul dintre opamps pentru a tampona semnalul fără amplificare și celălalt pentru a amplifica cu 5.7, astfel încât semnalul să poată atinge o ieșire maximă de aproximativ 20V. Curentul de ieșire este destul de limitat, ~ 10mA, deci ar putea fi necesar un amplificator mai puternic dacă semnalul trebuie să acționeze un difuzor mare sau un electromagnet.
Pasul 2: Componente necesare
Pentru generatorul de forme de undă de bază
Arduino Uno sau Nano
Afișaj LCD 16x2 + aparat de tuns 20kOhm și rezistor din seria 100Ohm pentru iluminare din spate
Codificator rotativ cu 5 pini (cu buton integrat)
25 de rezistențe de 10kOhm
Pentru tampon / amplificator
LM358 sau alt opamp dual
modul step-up bazat pe MT3608
Rezistor variabil 50kOhm
Rezistor de 10kOhm
Rezistor de 47kOhm
Condensator 1muF
Pasul 3: Construcție
Am lipit totul pe o placă prototip de 7x9cm, așa cum se arată în imagine. Deoarece s-a cam dezordonat cu toate firele, am încercat să colorez cablurile care poartă tensiunea pozitivă în roșu și cele care au solul negru.
Codificatorul pe care l-am folosit are 5 pini, 3 pe o parte, 2 pe cealaltă parte. Partea cu 3 pini este codificatorul real, partea cu 2 pini este butonul integrat. Pe partea cu 3 pini, pinul central trebuie conectat la masă, ceilalți doi pini la D10 și D11. Pe partea cu 2 pini, un pini trebuie conectat la masă și celălalt la D12.
Este cel mai urât lucru pe care l-am făcut vreodată, dar funcționează. Ar fi frumos să puneți o incintă, dar pentru moment munca și costul suplimentar nu o justifică. Nano și afișajul sunt atașate cu anteturi. Nu aș mai face asta dacă aș construi unul nou. Nu am pus conectori pe placă pentru a prelua semnalele. În schimb, le ridic cu fire de crocodil din bucăți proeminente de sârmă de cupru, etichetate după cum urmează:
R - semnal brut de la R2R DAC
B - semnal tamponat
A - semnal amplificat
T - semnal temporizator de la pinul 9
G - sol
+ - tensiune „înaltă” pozitivă de la modulul step-up
Pasul 4: Codul
Codul, o schiță Arduino, este atașat și trebuie încărcat pe Arduino.
20 de forme de undă au fost predefinite. Ar trebui să fie simplu să adăugați orice altă undă. Rețineți că undele aleatorii completează matricea cu 256 de valori cu valori aleatorii, dar același model se repetă în fiecare perioadă. Semnalele aleatoare adevărate sună ca zgomotul, dar această formă de undă sună mult mai mult ca un fluierat.
Codul setează un semnal de 1kHz pe pinul D9 cu TIMER1. Acest lucru este util pentru a verifica sincronizarea semnalului analogic. Acesta este modul în care mi-am dat seama că numărul de cicluri de ceas este de 42: Dacă presupun 41 sau 43 și generez un semnal de 1 kHz, acesta are în mod clar o frecvență diferită de semnalul de pe pinul D9. Cu valoarea 42 se potrivesc perfect.
În mod normal, Arduino întrerupe fiecare milisecundă pentru a ține evidența timpului cu funcția millis (). Acest lucru ar perturba generarea exactă a semnalului, astfel încât întreruperea specială este dezactivată.
Compilatorul spune: "Sketch folosește 7254 octeți (23%) din spațiul de stocare al programului. Maximul este 30720 octeți. Variabilele globale utilizează 483 octeți (23%) de memorie dinamică, lăsând 1565 octeți pentru variabilele locale. Maximul este 2048 octeți." Deci, există un spațiu suficient pentru un cod mai sofisticat. Aveți grijă că poate fi necesar să alegeți „ATmega328P (vechi bootloader)” pentru a încărca cu succes pe Nano.
Pasul 5: utilizare
Generatorul de semnal poate fi alimentat pur și simplu prin cablul mini-USB al Arduino Nano. Cel mai bine se face cu o bancă de alimentare, astfel încât să nu existe o buclă de împământare accidentală cu aparatul cu care ar putea fi conectat.
Când este pornit, va genera o undă sinusoidală de 100Hz. Prin rotirea butonului, poate fi ales unul dintre celelalte 20 de tipuri de undă. Rotind în timp ce este apăsat, cursorul poate fi setat la oricare dintre cifrele frecvenței, care pot fi apoi schimbate la valoarea dorită.
Amplitudinea poate fi reglată cu potențiometrul și poate fi utilizat semnalul tamponat sau amplificat.
Este foarte util să folosiți un osciloscop pentru a verifica amplitudinea semnalului, în special atunci când semnalul furnizează curent unui alt dispozitiv. Dacă se trage prea mult curent, semnalul se va clipi și semnalul este puternic distorsionat
Pentru frecvențe foarte mici, ieșirea poate fi vizualizată cu un LED în serie cu un rezistor de 10kOhm. Frecvențele audio pot fi auzite cu un difuzor. Asigurați-vă că setați semnalul foarte mic ~ 0,5V, altfel curentul devine prea mare și semnalul începe să se decupeze.
Recomandat:
NeckLight V2: Coliere Glow-In-The-Dark cu forme, culori și LUMINI: 10 pași (cu imagini)
NeckLight V2: Coliere Glow-In-The-Dark cu forme, culori și LUMINI: Bună tuturor, după primele Instructables: NeckLight pe care l-am postat, care a fost un mare succes pentru mine, am ales să fac V2-ul acestuia. V2 este de a corecta o greșeală a V1 și de a avea mai multe opțiuni vizuale. În acest Instructables voi ex
Funcție DIY / Generator de forme de undă: 6 pași (cu imagini)
Funcția DIY / Generator de formă de undă: În acest proiect vom analiza pe scurt generatoarele de funcții / forme de undă comerciale pentru a determina ce caracteristici sunt importante pentru o versiune DIY. Apoi vă voi arăta cum să creați un generator de funcții simplu, analogul și cifra
Generator de forme de undă low cost (0 - 20 MHz): 20 de pași (cu imagini)
Generator de forme de undă low cost (0 - 20MHz): REZUMAT Acest proiect vine din necesitatea obținerii unui generator de unde cu o lățime de bandă de peste 10 Mhz și o distorsiune armonică sub 1%, toate acestea cu un preț scăzut. Acest document descrie un proiect al unui generator de unde cu o lățime de bandă mai mare
Generator de impulsuri cu undă pătrată Fast Edge: 4 pași
Generator de impulsuri de undă pătrată Fast Edge: Generator de impulsuri de margine rapidă - Generator de impulsuri de undă pătrată ultra rapid Acest circuit simplu, utilizând un invertor 74HC14N (șase invertoare TTL cu viteză redusă de rotire), este capabil să genereze semnale de undă pătrată de până la 10MHZ. Ideal pentru unele teste electronice. Cu o putrezire
Generator de undă pătrată Fast Edge: 4 pași
Generator de undă pătrată de margine rapidă: Dacă doriți să măsurați inductanța, capacitatea oricărei componente, atunci aveți nevoie de o undă pătrată de margine rapidă în acest articol aflăm despre acest lucru