Innholdsfortegnelse:

Arduino Sinewave for invertere: 4 trinn
Arduino Sinewave for invertere: 4 trinn

Video: Arduino Sinewave for invertere: 4 trinn

Video: Arduino Sinewave for invertere: 4 trinn
Video: DIY 1 кВт синусоидальный инвертор 12 В до 220 В, jlcpcb 2024, Juli
Anonim
Arduino Sinewave for omformere
Arduino Sinewave for omformere

I dette prosjektet har jeg generert et SPWM (sinusbølgepuls bred modulert) signal fra to arduino pwm digitale utganger.

Fordi for å lage et slikt program, må jeg snakke om mange andre funksjoner og egenskaper for arduinoen, hele prosjektet, inkludert oscilloskopbilder og for forskjellige frekvenser, vennligst besøk mitt nettsted:

eprojectszone

Trinn 1: Generering av Pwm -signalet for 50Hz

For å generere et 50Hz signal med høyere frekvens er det nødvendig å gjøre noen beregninger. Frekvenser fra arduino kan være på 8MHz, men vi ønsker et signal med variabel driftssyklus.

For å forstå typer arduinosykler med variabel drift kan du lese disse 3 delene av samme innlegg 1, 2 og 3.

La oss anta at frekvensen vår er 50Hz som betyr at tidsperioden er 20 ms. Så 10ms er en halv syklusperiode. I disse 10 ms må vi ha mange pulser med forskjellige driftssykluser som starter med små driftssykluser, i midten av signalet har vi maksimal driftssyklus og avslutter også med små driftssykluser. For å generere en sinusbølge bruker vi to pinner en for positiv halv syklus og en for negativ halv syklus. I vårt innlegg for dette bruker vi pinne 5 og 6 som betyr tidtaker 0.

For et jevnt signal velger vi fasekorrekt pwm med en frekvens 31372 Hz-se forrige innlegg. Et av de største problemene er at hvordan vi beregner den nødvendige driftssyklusen for hver puls. Så fordi frekvensen vår er f = 31372Hz, er perioden for hver puls T = 1/31372 = 31,8 oss, så antallet pulser for en halv syklus er N = 10ms/31.8us = 314 pulser. Nå for å beregne driftssyklusen for hver puls har vi y = sinx, men i denne ligningen trenger vi grader, så halv syklus har 180 grader for 314 pulser. For hver puls har vi 180/314 = 0,57deg/puls. Det betyr at for hver puls går vi fremover med 0,57 grader.

y er driftssyklusen og x verdien av stillingen i halv driftssyklus. ved første x er 0, etter at x = 0,57, x = 1,14 og så videre til x = 180.

hvis vi beregner alle 314 verdiene får vi en matrise 314 elementer (type "int" beregnes lettere av arduino).

Et slikt utvalg 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 pliktssyklusen er som en sinusbølge lavest ved første og siste element og høyest i midten.

Trinn 2: Arduino -program for variabel driftssyklus

Arduino -program for variabel driftssyklus
Arduino -program for variabel driftssyklus

På bildet ovenfor har vi variabel driftssyklus signaler med verdier fra matrisen.

Men hvordan lage et slikt signal ??

delen av programmet nedenfor bruker avbrudd for å endre verdiene for driftssykluser

sei (); // aktiver avbrudd

}

ISR (TIMER1_COMPA_vect) {// avbryte når tidtaker 1 samsvarer med OCR1A -verdien

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

i = 0; // gå til første verdi av vektor (matrise)

OK = 1; // aktiver pin 5

}

x = sinPWM ; // x ta verdien fra vektoren som tilsvarer posisjon i (i er null indeksert) -verdien av driftssyklusen

i = i+1; // gå til neste posisjon

}

Trinn 3: Vekslende ved 50Hz Arduino Pins

Vekslende ved 50Hz Arduino Pins
Vekslende ved 50Hz Arduino Pins

Fordi hver pinne bare genererer en halv driftssyklus for å lage en full sinusbølge, bruker vi to pinner som veksler hverandre etter nøyaktig 10 msekunder (for 50Hz). Denne endringen av pinner gjøres på slutten av matrisen- etter la oss si at pin 5 har generert 314 pulser, blir denne pinnen slått av og aktivert pin 6 som gjør det samme, men for den negative driftssyklusen.

Fordi arduino bare kan generere positive signaler, blir negativ driftssyklus laget i h-broen- du kan lese her om det

Programmet for å bytte pins:

sei (); // aktiver avbrudd

}

ISR (TIMER1_COMPA_vect) {// avbryte når tidtaker 1 samsvarer med OCR1A -verdien

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

i = 0; // gå til første verdi av vektoren

OK = 1; // aktiver pin 5

}

if (i> 313 && OK == 1) {// sluttverdi fra vektor for pin 5

i = 0; // gå til første verdi av vektoren

OK = 0; // aktiver pin 6

}

x = sinPWM ; // x ta verdien fra vektoren som tilsvarer posisjon i (i er null indeksert)

i = i+1; // gå til neste posisjon

hvis (OK == 0) {

OCR0B = 0; // lag pin 5 0

OCR0A = x; // aktiver pin 6 til tilsvarende driftssyklus

hvis (OK == 1) {

OCR0A = 0; // lag pin 6 0

OCR0B = x; // aktiver pin 5 til tilsvarende driftssyklus

}

}

Trinn 4: Kjøring av en H -bro og filtrering av Pwm -signalet

Signalene fra arduino er kontrolldelen for inverter -applikasjoner fordi begge er positive. For å lage en full sinusbølge og en praktisk omformer må vi bruke en h -bro og tømme pwm et lavpassfilter.

H-broen presenteres her.

Lavpassfilteret testet med små AC-motorer-her.

Anbefalt: