Indholdsfortegnelse:

Arduino Sinewave til invertere: 4 trin
Arduino Sinewave til invertere: 4 trin

Video: Arduino Sinewave til invertere: 4 trin

Video: Arduino Sinewave til invertere: 4 trin
Video: Sine Wave Inverter | Using Arduino | With Feedback 2024, Juli
Anonim
Arduino Sinewave til invertere
Arduino Sinewave til invertere

I dette projekt har jeg genereret et SPWM (sinusbølgepuls bred moduleret) signal fra to arduino pwm digitale udgange.

Fordi for at lave et sådant program, skal jeg tale om mange andre funktioner og egenskaber ved arduinoen det fulde projekt inklusive oscilloskopbilleder og for forskellige frekvenser, besøg mit websted:

eprojectszone

Trin 1: Generering af Pwm -signalet til 50Hz

For at generere et 50Hz signal ved højere frekvens er det nødvendigt at foretage nogle beregninger. Frekvenser fra arduino kan være ved 8MHz, men vi ønsker et signal med variabel driftscyklus.

For at forstå typerne af arduino -cykler med variabel drift kan du læse disse 3 dele af det samme indlæg 1, 2 og 3.

Lad os antage, at vores frekvens er 50 Hz, hvilket betyder, at tidsperioden er 20 ms. Så 10ms er en halvcyklusperiode. I disse 10 ms skal vi have mange impulser med forskellige driftscyklusser, der starter med små driftscyklusser, i midten af signalet har vi maksimale driftscyklusser og slutter også med små driftscyklusser. For at generere en sinusbølge vil vi bruge to ben en til positiv halvcyklus og en for negativ halvcyklus. I vores indlæg til dette bruger vi ben 5 og 6, der betyder Timer 0.

For et glat signal vælger vi fasekorrekt pwm med en frekvens 31372 Hz-se forrige indlæg. Et af de største problemer er, hvordan vi beregner den nødvendige driftscyklus for hver puls. Så fordi vores frekvens er f = 31372Hz, er perioden for hver puls T = 1/31372 = 31,8 os, så antallet af pulser for en halv cyklus er N = 10ms/31.8us = 314 pulser. For nu at beregne arbejdscyklussen for hver puls har vi y = sinx, men i denne ligning har vi brug for grader, så halvcyklus har 180 grader for 314 pulser. For hver puls har vi 180/314 = 0,57deg/puls. Det betyder, at vi for hver puls bevæger os fremad med 0,57 grader.

y er driftscyklussen og x værdien af positionen i den halve driftscyklus. ved første x er 0, efter at x = 0,57, x = 1,14 og så videre indtil x = 180.

hvis vi beregner alle de 314 værdier, får vi en matrix 314 elementer (type "int" beregnes lettere af arduino).

Sådan en matrix er:

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, at som en sinusbølge er arbejdscyklussen lavest ved første og sidste element og højest i midten.

Trin 2: Arduino -program til variabel driftscyklus

Arduino -program til variabel driftscyklus
Arduino -program til variabel driftscyklus

I billedet ovenfor har vi variable driftscyklussignaler med værdier fra arrayet.

Men hvordan laver man sådan et signal ??

delen af programmet nedenfor bruger afbrydelser til at ændre værdierne for driftscyklusser

sei (); // aktiver afbrydelser

}

ISR (TIMER1_COMPA_vect) {// afbrydelse, når timer 1 matcher OCR1A -værdi

hvis (i> 313 && OK == 0) {// slutværdi fra vektor for pin 6

i = 0; // gå til første værdi af vektor (array)

OK = 1; // aktiver pin 5

}

x = sinPWM ; // x tage værdien fra vektor svarende til position i (i er nul indekseret) -værdi af driftscyklus

i = i+1; // gå til den næste position

}

Trin 3: Skiftevis ved 50Hz Arduino Pins

Skiftevis ved 50Hz Arduino Pins
Skiftevis ved 50Hz Arduino Pins

Fordi hver stift kun genererer en halv driftscyklus for at lave en fuld sinusbølge, bruger vi to stifter, der skifter efter hinanden efter nøjagtige 10 msekunder (i 50Hz). Denne ændring af stifter foretages i slutningen af arrayet- efter lad os sige, at pin 5 har genereret 314 pulser, er denne pin slukket og aktiveret pin 6, hvilket gør det samme, men for den negative driftscyklus.

Fordi arduino kun kan generere positive signaler, laves negativ driftscyklus i h-broen- du kan læse her om det

Programmet til skift af stifter:

sei (); // aktiver afbrydelser

}

ISR (TIMER1_COMPA_vect) {// afbrydelse, når timer 1 matcher OCR1A -værdi

hvis (i> 313 && OK == 0) {// slutværdi fra vektor for pin 6

i = 0; // gå til vektorens første værdi

OK = 1; // aktiver pin 5

}

hvis (i> 313 && OK == 1) {// slutværdi fra vektor for pin 5

i = 0; // gå til vektorens første værdi

OK = 0; // aktiver pin 6

}

x = sinPWM ; // x tage værdien fra vektor svarende til position i (i er nul indekseret)

i = i+1; // gå til den næste position

hvis (OK == 0) {

OCR0B = 0; // lav pin 5 0

OCR0A = x; // aktiver pin 6 til den tilsvarende driftscyklus

hvis (OK == 1) {

OCR0A = 0; // lav pin 6 0

OCR0B = x; // aktiver pin 5 til den tilsvarende driftscyklus

}

}

Trin 4: Kørsel på en H -bro og filtrering af Pwm -signalet

Signalerne fra arduino er kontroldelen for inverter -applikationer, fordi begge er positive. For at lave en fuld sinusbølge og en praktisk inverter skal vi bruge en h -bro og rydde pwm et lavpasfilter.

H-broen præsenteres her.

Lavpasfilteret testet med små AC-motorer-her.

Anbefalede: