Lecția 11

Într-una din lecțiile timpurii, am aflat că PWM poate schimba ciclul de funcționare a semnalului. Astfel, luminozitatea LED-ului a fost ajustată. Cu toate acestea, există o modalitate mai interesantă de utilizare a modulației lățimii pulsului.






Deci ... Dacă treceți un semnal generat printr-un filtru trece-jos, veți obține o tensiune constantă.

Lecția 11

Deoarece ciclul de sarcină variază de la 0 la 0xFF (255), atunci vom avea 255 nivele de tensiune constantă. Pur și simplu pune, există un interval de tensiune, să spun de la 0 la 5V, acest interval este împărțit în 255 valori. Cu pasul 5/255 = 0.0196V, puteți seta orice tensiune.

Folosind aceste valori într-o anumită ordine, puteți obține aproape orice formă de undă. De exemplu, mărirea umplerii de la 0 la 255 și apoi scăderea de la 255 la 0, obținem un semnal de fierăstrău.

Acum, să mergem la un anumit obiectiv: obțineți un sinusoid la 50 Hz folosind un microcontroler Atmega8. Sarcina globală - de a seta la anumite intervale de timp tensiunea la ieșirea PWM, conform legii sinusoidale.

Vom aborda prima parte a problemei. Pentru a obține anumite intervale de timp, folosim un cronometru. Să presupunem că cronometrul este setat la 8MHz, adică va bifa 8000000 de ori pe secundă. Valoarea sinusoidală oscilează de 50 de ori pe secundă, deci pentru o perioadă pot exista maxim 8000000/50 = 1600000 de căpușe. Odată ce avem niveluri de tensiune de 256, atunci rezoluția maximă a sinusoidului va fi de 256.

Care este rezoluția sinusurilor? În acest caz, acesta este numărul de puncte pe durata perioadei în care este construit sinusoidul. De exemplu, am construit în Excel, atunci va arăta ca un sinusoid pentru diferite rezoluții.

Pentru un sinus cu o rezoluție de 4:

Lecția 11






Pentru un sinus cu o rezoluție de 8 puncte:

Lecția 11

Pentru un sinus cu o rezoluție de 16 puncte:

Lecția 11

Cred că "evoluția" sinusului este vizibilă - cu cât mai multe puncte (rezoluție), cu atât mai puțin unghiul și cu cât arată mai mult un sinusoid normal. Ca rezultat, am decis să mă opresc la rezoluția sinusului la 128 de puncte.

Acum, combina toate spus înainte, 160.000 ticuri împărțiți la o rezoluție de 128 obține 1250 - după atât de multe căpușe ar trebui să lucreze întrerupere, pentru a expune la următorul nivel de tensiune. Valoarea 1250 trebuie inserată în registrul de comparare OCR1A

A doua parte a sarcinii globale este cum să construim un sinusoid. Reamintește matematică: D ... Sine modificări de la -1 la 1. PWM genera o tensiune negativă nu va funcționa. Prin urmare, este necesar să se deplaseze graficul pe axa X - sin (x) +1. Acum se va schimba de la 0 la 2 și nu o opțiune, deoarece avem 256 valori de tensiune, deci se înmulțește cu 127, astfel încât valoarea maximă să fie de 256. În cele din urmă, am descoperit următoarea formulă:

128 - rezoluție sinusoidală, numărul de puncte x (de la 0 la 128). Numărate în Excel, avem o serie de păcate [] din 128 de valori, care la rândul lor sunt înlocuite în OCR2.

Ultimul lucru pe care merită menționat este filtrul low-pass, probabil că în viitorul apropiat va fi o lecție despre filtre. În prezent, formula pentru calculul său nu are sens. există site-uri cu posibilitatea de calcule online, este suficient să tastați "fnch" în Google.

Firmware și fișierul Proteus

Salut admin pe. Schema imediat colectate, lansate au început să dea vina pe valori pentru a vedea ce se va întâmpla. Cu rezoluția la înlocuire sau ce nu a funcționat. ICR1 modificat de formula a crescut astfel frecvența de până la 32 kHz, dar generația de pe celelalte picioare a dispărut. Valoarea SET_FREQ = 410 a explicat de asemenea substituția. Acum, valorile pe care le-am pus să le spun nu pot scrie de la muncă.

nikola56rus, nu este interesant să oferim soluții gata. Tot ce pot sfătui este să ia codul din articolul meu și să-l dau seama, cred că nu este dificil, trebuie doar să schimbi un registru. Sau dacă este prea leneș pentru a înțelege, scrie pe ce forum potrivit, veți scrie pentru bani tot ceea ce doriți.

utilizați un contor de timp de 2, și contează la 255 și resetează (în PVM mod rapid), dar avem nevoie de 1250tikov care nu este lipit
și de ce scrie valoarea OCR1AH ​​= 0x04; OCR1AL = 0xE2; ?
sau nu am înțeles ceva?

Chiar sunt confuz în general în codul dvs., OCR2 este registrul de comparație al celui de-al doilea cronometru și folosim primul cronometru
primul cronometru pe care nu l-ați configurat (cât de mult va conta, etc.)







Articole similare

Trimiteți-le prietenilor: