Innholdsfortegnelse:
- Trinn 1: Generering av Pwm -signalet for 50Hz
- Trinn 2: Arduino -program for variabel driftssyklus
- Trinn 3: Vekslende ved 50Hz Arduino Pins
- Trinn 4: Kjøring av en H -bro og filtrering av Pwm -signalet
Video: Arduino Sinewave for invertere: 4 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:25
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
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
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:
Arduino bilvarslingssystem for omvendt parkering - Trinn for trinn: 4 trinn
Arduino Car Reverse Parking Alert System | Trinn for trinn: I dette prosjektet skal jeg designe en enkel Arduino Car Reverse Parking Sensor Circuit ved hjelp av Arduino UNO og HC-SR04 Ultrasonic Sensor. Dette Arduino -baserte bilreverseringssystemet kan brukes til autonom navigasjon, robotavstand og andre områder
Trinn for trinn PC -bygging: 9 trinn
Steg for trinn PC -bygging: Rekvisita: Maskinvare: HovedkortCPU & CPU -kjøler PSU (strømforsyningsenhet) Lagring (HDD/SSD) RAMGPU (ikke nødvendig) CaseTools: Skrutrekker ESD -armbånd/mathermal pasta m/applikator
Slik laster du fôr til kyr: 9 trinn
Slik laster du fôr til kyr: Alt som lever trenger mat for å overleve. I vinter- og vårmånedene er det ikke gress for kyr å beite på. Dette gjør det veldig viktig at kuene blir matet skikkelig slik at de produserer sunne kalver. I de følgende trinnene vil pr
RC -sporet robot ved hjelp av Arduino - Trinn for trinn: 3 trinn
RC -sporet robot ved bruk av Arduino - Steg for trinn: Hei folkens, jeg er tilbake med et annet kult Robot -chassis fra BangGood. Håper du har gått gjennom våre tidligere prosjekter - Spinel Crux V1 - Gesture Controlled Robot, Spinel Crux L2 - Arduino Pick and Place Robot with Robotic Arms og The Badland Braw
DIY Arduino robotarm, trinn for trinn: 9 trinn
DIY Arduino robotarm, trinn for trinn: Denne opplæringen lærer deg hvordan du bygger en robotarm selv