Innehållsförteckning:

Arduino Sinewave för växelriktare: 4 steg
Arduino Sinewave för växelriktare: 4 steg

Video: Arduino Sinewave för växelriktare: 4 steg

Video: Arduino Sinewave för växelriktare: 4 steg
Video: How to Generate Sine Wave using Arduino?? 2024, November
Anonim
Arduino Sinewave för växelriktare
Arduino Sinewave för växelriktare

I detta projekt har jag genererat en SPWM (sinusvågspulsbred modulerad) signal från två arduino pwm digitala utgångar.

För att göra ett sådant program måste jag prata om många andra funktioner och egenskaper hos arduino hela projektet inklusive oscilloskopbilder och för olika frekvenser, besök min webbplats:

eprojectszone

Steg 1: Generera Pwm -signalen för 50Hz

För att generera en 50Hz -signal med högre frekvens är det nödvändigt att göra några beräkningar. Frekvenser från arduino kan vara vid 8MHz, men vi vill ha en signal med variabel driftscykel.

För att förstå typerna av variabla arbetscykler för arduino kan du läsa dessa 3 delar av samma inlägg 1, 2 och 3.

Låt oss anta att vår frekvens är 50 Hz, vilket betyder att tidsperioden är 20 ms. Så 10ms är en halvcykelperiod. På dessa 10 ms måste vi ha många pulser med olika driftcykler som börjar med små driftcykler, i mitten av signalen har vi maximala driftscykler och avslutar också med små driftscykler. För att generera en sinusvåg använder vi två stift en för positiv halvcykel och en för negativ halvcykel. I vårt inlägg för detta använder vi stift 5 och 6 som betyder timer 0.

För en smidig signal väljer vi faskorrekt pwm vid en frekvens 31372 Hz-se föregående inlägg. Ett av det största problemet är att hur vi beräknar den nödvändiga driftscykeln för varje puls. Så eftersom vår frekvens är f = 31372Hz är perioden för varje puls T = 1/31372 = 31,8 oss, så antalet pulser för en halvcykel är N = 10ms/31,8us = 314 pulser. Nu för att beräkna arbetscykeln för varje puls har vi y = sinx, men i denna ekvation behöver vi grader så halvcykeln har 180 grader för 314 pulser. För varje puls har vi 180/314 = 0,57deg/puls. Det betyder att för varje puls går vi framåt med 0,57 grader.

y är arbetscykeln och x värdet av positionen i halvdriftscykeln. vid första x är 0, efter att x = 0,57, x = 1,14 och så vidare tills x = 180.

om vi beräknar alla 314 -värdena får vi en array 314 -element (typ "int" beräknas enklare av arduino).

En sådan array är:

int sinPWM = {1, 2, 5, 7, 10, 12, 15, 17, 19, 22, 24, 27, 30, 32, 34, 37, 39, 42, 44, 47, 49, 52, 54, 57, 59, 61, 64, 66, 69, 71, 73, 76, 78, 80, 83, 85, 88, 90, 92, 94, 97, 99, 101, 103, 106, 108, 110, 113, 115, 117, 119, 121, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 169, 171, 173, 175, 177, 178, 180, 182, 184, 185, 187, 188, 190, 192, 193, 195, 196, 198, 199, 201, 202, 204, 205, 207, 208, 209, 211, 212, 213, 215, 216, 217, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 237, 238, 239, 240, 240, 241, 242, 242, 243, 243, 244, 244, 245, 245, 246, 246, 247, 247, 247, 248, 248, 248, 248, 249, 249, 249, 249, 249, 250, 250, 250, 250, 249, 249, 249, 249, 249, 248, 248, 248, 248, 247, 247, 247, 246, 246, 245, 245, 244, 244, 243, 243, 242, 242, 241, 240, 240, 239, 238, 237, 237, 236, 235, 234, 233, 232, 231, 230, 229, 228, 227, 226, 225, 224, 223, 222, 221, 220, 219, 217, 21 6, 215, 213, 212, 211, 209, 208, 207, 205, 204, 202, 201, 199, 198, 196, 195, 193, 192, 190, 188, 187, 185, 184, 182, 180, 178, 177, 175, 173, 171, 169, 168, 166, 164, 162, 160, 158, 156, 154, 152, 150, 148, 146, 144, 142, 140, 138, 136, 134, 132, 130, 128, 126, 124, 121, 119, 117, 115, 113, 110, 108, 106, 103, 101, 99, 97, 94, 92, 90, 88, 85, 83, 80, 78, 76, 73, 71, 69, 66, 64, 61, 59, 57, 54, 52, 49, 47, 44, 42, 39, 37, 34, 32, 30, 27, 24, 22, 19, 17, 15, 12, 10, 7, 5, 2, 1};

Du kan se att arbetscykeln är som en sinusvåg lägst vid första och sista elementet och högst i mitten.

Steg 2: Arduino -program för variabel driftcykel

Arduino -program för variabel arbetscykel
Arduino -program för variabel arbetscykel

I bilden ovan har vi variabla driftcykler signaler med värden från matrisen.

Men hur gör man en sådan signal ??

delen av programmet nedan använder avbrott för att ändra värdena för driftcykler

sei (); // aktivera avbrott

}

ISR (TIMER1_COMPA_vect) {// avbrott när timer 1 matchar OCR1A -värdet

if (i> 313 && OK == 0) {// slutvärde från vektor för stift 6

i = 0; // gå till första värdet för vektor (array)

OK = 1; // aktivera stift 5

}

x = sinPWM ; // x ta värdet från vektorn som motsvarar position i (i är noll indexerad) -värdet för driftscykeln

i = i+1; // gå till nästa position

}

Steg 3: Alternerande vid 50Hz Arduino Pins

Växlande vid 50Hz Arduino Pins
Växlande vid 50Hz Arduino Pins

Eftersom varje stift genererar bara en halv arbetscykel för att göra en full sinusvåg använder vi två stift som alternerar varandra efter exakt 10 msekunder (för 50Hz). Denna ändring av stift görs i slutet av matrisen- efter att vi säger att stift 5 har genererat 314 pulser stängs stiftet av och aktiveras stift 6 vilket gör samma sak men för den negativa driftscykeln.

Eftersom arduino bara kan generera positiva signaler görs negativ driftcykel i h-bryggan- du kan läsa här om det

Programmet för att byta stift:

sei (); // aktivera avbrott

}

ISR (TIMER1_COMPA_vect) {// avbrott när timer 1 matchar OCR1A -värdet

if (i> 313 && OK == 0) {// slutvärde från vektor för stift 6

i = 0; // gå till vektorens första värde

OK = 1; // aktivera stift 5

}

if (i> 313 && OK == 1) {// slutvärde från vektor för stift 5

i = 0; // gå till vektorens första värde

OK = 0; // aktivera stift 6

}

x = sinPWM ; // x ta värdet från vektorn som motsvarar position i (i är noll indexerat)

i = i+1; // gå till nästa position

om (OK == 0) {

OCR0B = 0; // gör stift 5 0

OCR0A = x; // aktivera stift 6 till motsvarande driftscykel

om (OK == 1) {

OCR0A = 0; // gör stift 6 0

OCR0B = x; // aktivera stift 5 till motsvarande driftscykel

}

}

Steg 4: Köra en H -bro och filtrera Pwm -signalen

Signalerna från arduino är styrdelen för växelriktarapplikationer eftersom båda är positiva. För att göra en hel sinusvåg och en praktisk inverter måste vi använda en h -bro och för att rensa pwm ett lågpassfilter.

H-bron presenteras här.

Lågpassfiltret testat med små AC-motorer-här.

Rekommenderad: