- Hvad er SPWM (sinusformet pulsbreddemodulation)?
- Sådan fungerer SPWM-inverteren
- Komponenter, der kræves for at opbygge SPWM-inverter
- SPWM inverter kredsløbskonstruktion
- Arduino-program til SPWM-inverter
- Test af TL494 PWM inverter kredsløb
Inverterkredsløb er ofte nødvendige, hvor det ikke er muligt at få vekselstrømforsyning fra nettet. Et inverterkredsløb bruges til at konvertere jævnstrøm til vekselstrøm, og det kan opdeles i to typer, det vil sige Pure Sine Wave Inverters eller Modified Square Wave Inverters. Disse rene sinusbølgeomformere er meget dyre, hvor de modificerede firkantbølgeomformere er billige. Lær mere om forskellige typer inverter her.
I en tidligere artikel har jeg vist dig, hvordan du ikke laver en modificeret firkantbølge-inverter ved at løse de problemer, der er forbundet med den. Så i denne artikel laver jeg en simpel ren sinusbølgeomformer ved hjælp af Arduino og forklarer kredsløbets funktionsprincip.
Hvis du laver dette kredsløb, skal du være opmærksom på, at dette kredsløb ikke har nogen feedback, ingen overstrømsbeskyttelse, ingen kortslutningsbeskyttelse og ingen temperaturbeskyttelse. Derfor er dette kredsløb kun bygget og demonstreret til uddannelsesmæssige formål, og det anbefales absolut ikke at opbygge og bruge denne type kredsløb til kommercielle apparater. Du kan dog tilføje dem til dit kredsløb, hvis det kræves, de almindeligt anvendte beskyttelseskredsløb som
Overspændingsbeskyttelse, overstrømsbeskyttelse, omvendt polaritetsbeskyttelse, kortslutningsbeskyttelse, hot swap-controller osv. Er allerede blevet diskuteret.
FORSIGTIG: Hvis du laver denne type kredsløb, skal du være ekstra forsigtig med højspændings- og spændingsspidser, der genereres af koblingssignalet til indgangen.
Hvad er SPWM (sinusformet pulsbreddemodulation)?
Som navnet antyder, står SPWM for S inusoidal P ulse W idth M odulation. Som du måske allerede ved, er et PWM-signal et signal, hvor vi kan ændre frekvensen af pulsen såvel som on-time og off-time, som også er kendt som driftscyklus. Hvis du vil lære mere om PWM, kan du læse det her. Så ved at variere driftscyklussen ændrer vi pulsens gennemsnitlige spænding. Billedet nedenfor viser, at-
Hvis vi overvejer et PWM-signal, der skifter mellem 0 - 5V, som har en driftscyklus på 100%, får vi en gennemsnitlig udgangsspænding på 5V, igen hvis vi betragter det samme signal med en driftscyklus på 50%, vil vi få udgangsspændingen på 2,5 V, og for driftscyklussen på 25% er det halvdelen af det. Det opsummerer det grundlæggende princip for PWM-signalet, og vi kan gå videre til at forstå det grundlæggende princip for SPWM-signalet.
En sinusspænding er primært en analogspænding, der ændrer dens størrelse over tid, og vi kan reproducere denne opførsel af en sinusbølge ved konstant at ændre PWM-bølgens arbejdscyklus, nedenstående billede viser det.
Hvis du ser på skemaet nedenfor, vil det se, at der er en kondensator tilsluttet ved transformatorens output. Denne kondensator er ansvarlig for at udjævne AC-signalet fra bærefrekvensen.
Det anvendte indgangssignal oplader og aflader kondensatoren i henhold til indgangssignalet og belastningen. Da vi har brugt et meget højfrekvent SPWM-signal, vil det have en meget lille driftscyklus, der er som 1%, denne 1% driftscyklus oplader kondensatoren lidt, den næste driftscyklus er 5%, dette oplades igen kondensatoren lidt mere, efter puls vil have en driftscyklus på 10%, og kondensatoren oplades lidt mere, vi anvender signalet, indtil vi har nået en driftscyklus på 100%, og derfra vil vi gå ned igen til 1%. Dette vil skabe en meget glat kurve som en sinusbølge ved udgangen. Så ved at tilvejebringe korrekte værdier for driftscyklussen ved indgangen vil vi have en meget sinusformet bølge ved udgangen.
Sådan fungerer SPWM-inverteren
Ovenstående billede viser den vigtigste drivende sektion i SPWM inverter, og som man kan se, har vi brugt to N-kanal MOSFETs i halvbrokobling at drive transformeren i dette kredsløb, at reducere uønsket omskiftning støj og for at beskytte MOSFET, har vi brugt 1N5819-dioder parallelt med MOSFET'erne. For at reducere eventuelle skadelige pigge, der genereres i portafsnittet, har vi brugt 4,7 ohm modstande parallelt med 1N4148 dioder. Endelig er BD139- og BD 140-transistorer konfigureret i en push-pull- konfigurationat køre porten til MOSFET, fordi denne MOSFET har en meget høj portkapacitans og kræver mindst 10V ved basen for at tænde ordentligt. Lær mere om funktionen af Push-Pull forstærkere her.
For bedre at forstå kredsløbets funktionsprincip har vi reduceret det til et punkt, hvor dette afsnit af MOSFET er TIL. Når MOSFET er på strømmen, flyder den først gennem transformeren og bliver derefter jordforbundet af MOSFET, således vil en magnetisk flux også blive induceret i den retning, i hvilken strømmen strømmer, og kernen i transformeren vil passere den magnetiske flux i sekundærviklingen, og vi får den positive halvcyklus af det sinusformede signal ved udgangen.
I den næste cyklus er den nederste del af kredsløbet på den øverste del af kredsløbet slukket, hvorfor jeg har fjernet den øverste del, nu strømmer strømmen i den modsatte retning og genererer en magnetisk flux i den retning og vender således retningen af den magnetiske flux i kernen. Lær mere om MOSFETs arbejde her.
Nu ved vi alle, at en transformer fungerer ved magnetiske fluxændringer. Så ved at tænde og slukke for begge MOSFET'erne, den ene inverteret til den anden og gøre det 50 gange på et sekund, genereres en flot oscillerende magnetisk flux inde i transformatorens kerne, og den skiftende magnetiske flux vil inducere en spænding i sekundærspolen vi kender det til faradays lov. Sådan fungerer den grundlæggende inverter.
Det komplette SPWM inverter kredsløb brugt i dette projekt er angivet nedenfor.
Komponenter, der kræves for at opbygge SPWM-inverter
Sl. Nr |
Dele |
Type |
Antal |
1 |
Atmega328P |
IC |
1 |
2 |
IRFZ44N |
Mosfet |
2 |
3 |
BD139 |
Transistor |
2 |
4 |
BD140 |
Transistor |
2 |
5 |
22pF |
Kondensator |
2 |
6 |
10K, 1% |
Modstand |
1 |
7 |
16 MHz |
Krystal |
1 |
8 |
0,1 uF |
Kondensator |
3 |
9 |
4.7R |
Modstand |
2 |
10 |
1N4148 |
Diode |
2 |
11 |
LM7805 |
Strøm regulator |
1 |
12 |
200uF, 16V |
Kondensator |
1 |
13 |
47uF, 16V |
Kondensator |
1 |
14 |
2.2uF, 400V |
Kondensator |
1 |
SPWM inverter kredsløbskonstruktion
Til denne demonstration er kredsløbet udformet på Veroboard, med hjælp af skematiske, Ved udgangen af transformatoren, vil en enorm mængde af strøm løbe gennem forbindelsen, så forbindelseselementerne jumpere skal være så tyk som muligt.
Arduino-program til SPWM-inverter
Før vi går videre og begynder at forstå koden, lad os rydde det grundlæggende. Fra ovenstående arbejdsprincip har du lært, hvordan PWM-signalet vil se ud på udgangen, nu er spørgsmålet stadig, hvordan vi kan lave en sådan varierende bølge ved Arduino's udgangsstifter.
For at skabe det varierende PWM-signal skal vi bruge 16-bit timer1 med en prescaler-indstilling på 1, hvilket giver os 1600/16000000 = 0,1 ms tid for hver optælling, hvis vi overvejer en enkelt halvcyklus af en sinusbølge, der passer nøjagtigt 100 gange inden for en halv cyklus af bølgen. Enkelt sagt vil vi være i stand til at prøve vores sinusbølge 200 gange.
Derefter skal vi dele vores sinusbølge til 200 stykker og beregne deres værdier med en korrelation af amplituden. Derefter skal vi konvertere disse værdier til timer-tællerværdier ved at gange det med tællergrænsen. Endelig er vi nødt til at sætte disse værdier i en opslagstabel for at føde den til tælleren, og vi får vores sinusbølge.
For at gøre tingene lidt enklere bruger jeg en meget velskrevet SPWM-kode fra GitHub, som er lavet af Kurt Hutten.
Koden er meget enkel. Vi begynder vores program med at tilføje de nødvendige headerfiler
# inkluderer # inkluderer
Dernæst har vi vores to opslagstabeller, hvorfra vi får timertællerværdierne.
int lookUp1 = {50, 100, 151, 201, 250, 300, 349, 398, 446, 494, 542, 589, 635, 681, 726, 771, 814, 857, 899, 940, 981, 1020, 1058, 1095, 1131, 1166, 1200, 1233, 1264, 1294, 1323, 1351, 1377, 1402, 1426, 1448, 1468, 1488, 1505, 1522, 1536, 1550, 1561, 1572, 1580, 1587, 1593, 1597, 1599, 1600, 1599, 1597, 1593, 1587, 1580, 1572, 1561, 1550, 1536, 1522, 1505, 1488, 1468, 1448, 1426, 1402, 1377, 1351, 1323, 1294, 1264, 1233, 1200, 1166, 1131, 1095, 1058, 1020, 981, 940, 899, 857, 814, 771, 726, 681, 635, 589, 542, 494, 446, 398, 349, 300, 250, 201, 151, 100, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0}; int lookUp2 = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 100, 151, 201, 250, 300, 349, 398, 446, 494, 542, 589, 635, 681, 726, 771, 814, 857, 899, 940, 981, 1020, 1058, 1095, 1131, 1166, 1200, 1233, 1264, 1294, 1323, 1351, 1377, 1402, 1426, 1448, 1468, 1488, 1505, 1522, 1536, 1550, 1561, 1572, 1580, 1587, 1593, 1597, 1599, 1600, 1599, 1597, 1593, 1587, 1580, 1572, 1561, 1550, 1536, 1522, 1505, 1488, 1468, 1448, 1426, 1402, 1377, 1351, 1323, 1294, 1264, 1233, 1200, 1166, 1131, 1095, 1058, 1020, 981, 940, 899, 857, 814, 771, 726, 681, 635, 589, 542, 494, 446, 398, 349, 300, 250,201, 151, 100, 50, 0};
Dernæst initialiserer vi i installationssektionen timertællerens kontrolregistre for at være tydelige på hver. For yderligere information skal du gennemgå databladet for atmega328 IC.
TCCR1A = 0b10100010; / * 10 klart på match, indstillet til BUND for compA. 10 klart på match, indstillet til BUNDT for compB. 00 10 WGM1 1: 0 for bølgeform 15. * / TCCR1B = 0b00011001; / * 000 11 WGM1 3: 2 for bølgeform 15. 001 ingen forskalering på tælleren. * / TIMSK1 = 0b00000001; / * 0000000 1 TOV1 Aktivering af flagafbrydelse. * /
Derefter initialiseres inputregistreringsregistret med en foruddefineret værdi på 16000, da dette hjælper os med at generere nøjagtigt 200 prøver.
ICR1 = 1600; // Periode for 16MHz krystal, for en omskiftningsfrekvens på 100KHz for 200 underopdelinger pr. 50Hz sinusbølge-cyklus.
Dernæst aktiverer vi globale afbrydelser ved at kalde funktionen ind, sei ();
Endelig indstiller vi Arduino pin 9 og 10 som output
DDRB = 0b00000110; // Indstil PB1 og PB2 som output.
Det markerer slutningen af installationsfunktionen.
Loopafsnittet i koden forbliver tom, da det er et timer-tæller-afbrydelsesdrevet program.
ugyldig sløjfe () {; /*Gøre ingenting…. for evigt!*/}
Dernæst har vi defineret timer1 overløbsvektoren, denne afbrydelsesfunktion får et opkald, når timeren1 bliver overfyldt og genererer en afbrydelse.
ISR (TIMER1_OVF_vect) {
Dernæst erklærer vi nogle lokale variabler som statiske variabler, og vi er begyndt at føre værdierne til optagelses- og sammenligningsmodstanden.
statisk int num; statisk char trig; // skift arbejdscyklus hver periode. OCR1A = lookUp1; OCR1B = lookUp2;
Endelig øger vi tælleren for at føje de næste værdier til optagelsen og sammenligne modstande, hvilket markerer slutningen af denne kode.
hvis (++ num> = 200) {// Pre-increment num skal du kontrollere, at det er under 200. num = 0; // Nulstil nummer. trig = trig ^ 0b00000001; digitalWrite (13, trig); }
Test af TL494 PWM inverter kredsløb
For at teste kredsløbet anvendes følgende opsætning.
- 12V blybatteri.
- En transformer, der har en 6-0-6 hanen og en 12-0-12 hanen
- 100W glødepære som belastning
- Meco 108B + TRMS multimeter
- Meco 450B + TRMS multimeter
Udgangssignal fra Arduino:
Når jeg har uploadet koden. Jeg målte output-SPWM-signalet fra de to ben på Arduino, der ligner nedenstående billede,
Hvis vi zoomer en smule ind, kan vi se PWM-bølgens konstant skiftende driftscyklus.
Dernæst viser nedenstående billede udgangssignalet fra transformeren.
SPWM inverter kredsløb i ideel tilstand:
Som du kan se fra ovenstående billede, trækker dette kredsløb omkring 13W, mens det kører ideelt
Udgangsspænding uden belastning:
Omformerkredsløbets udgangsspænding er vist ovenfor, dette er spændingen, der kommer ud på udgangen uden nogen belastning.
Indgangseffektforbrug:
Ovenstående billede viser den indgangseffekt, som jeg bruger, når der tilsluttes en 40W belastning.
Udgangseffektforbrug:
Ovenstående billede viser den udgangseffekt, der forbruges af dette kredsløb (belastningen er en 40W glødepære)
Med det afslutter vi testdelen af kredsløbet. Du kan tjekke videoen nedenfor for en demonstration. Jeg håber, du kunne lide denne artikel og lærte lidt om SPWM og dens implementeringsteknikker. Fortsæt læsning, fortsæt med at lære, fortsæt med at bygge, og jeg vil se dig i det næste projekt.