- Was ist SPWM (Sinusoidal Pulse Width Modulation)?
- Funktionsweise des SPWM-Wechselrichters
- Komponenten, die zum Erstellen des SPWM-Wechselrichters erforderlich sind
- SPWM Wechselrichterschaltungsaufbau
- Arduino-Programm für SPWM-Wechselrichter
- Testen der PWM-Wechselrichterschaltung TL494
Wechselrichterschaltungen werden häufig benötigt, wenn keine Wechselstromversorgung aus dem Netz möglich ist. Eine Wechselrichterschaltung wird verwendet, um Gleichstrom in Wechselstrom umzuwandeln , und kann in zwei Typen unterteilt werden, nämlich reine Sinus-Wechselrichter oder modifizierte Rechteck-Wechselrichter. Diese reinen Sinus-Wechselrichter sind sehr teuer, während die modifizierten Rechteck-Wechselrichter kostengünstig sind. Erfahren Sie hier mehr über verschiedene Wechselrichtertypen.
In einem früheren Artikel habe ich Ihnen gezeigt, wie Sie einen modifizierten Rechteckwechselrichter nicht herstellen können, indem Sie die damit verbundenen Probleme angehen. In diesem Artikel werde ich einen einfachen reinen Sinus-Wechselrichter mit Arduino herstellen und das Funktionsprinzip der Schaltung erläutern.
Wenn Sie diesen Stromkreis herstellen, beachten Sie bitte, dass dieser Stromkreis keine Rückkopplung, keinen Überstromschutz, keinen Kurzschlussschutz und keinen Temperaturschutz bietet. Daher wird diese Schaltung nur zu Bildungszwecken gebaut und demonstriert, und es wird absolut nicht empfohlen, diese Art von Schaltung für gewerbliche Geräte zu bauen und zu verwenden. Sie können sie jedoch bei Bedarf zu Ihrer Schaltung hinzufügen, wie es die üblicherweise verwendeten Schutzschaltungen mögen
Überspannungsschutz, Überstromschutz, Verpolungsschutz, Kurzschlussschutz, Hot-Swap-Regler usw. wurden bereits erörtert.
VORSICHT: Wenn Sie diese Art von Schaltung herstellen, achten Sie besonders auf Hochspannungen und Spannungsspitzen, die durch das Schaltsignal zum Eingang erzeugt werden.
Was ist SPWM (Sinusoidal Pulse Width Modulation)?
Wie der Name schon sagt, steht SPWM für S inusoidal P ulse W idth M odulation. Wie Sie vielleicht bereits wissen, ist ein PWM-Signal ein Signal, in dem wir die Frequenz des Impulses sowie die Ein- und Ausschaltzeit ändern können, die auch als Arbeitszyklus bezeichnet wird. Wenn Sie mehr über PWM erfahren möchten, können Sie es hier lesen. Durch Variieren des Arbeitszyklus ändern wir also die durchschnittliche Spannung des Impulses. Das Bild unten zeigt, dass-
Wenn wir ein PWM-Signal betrachten, das zwischen 0 und 5 V mit einem Tastverhältnis von 100% umschaltet , erhalten wir eine durchschnittliche Ausgangsspannung von 5 V. Wenn wir dasselbe Signal mit einem Tastverhältnis von 50% betrachten, werden wir dies auch tun Holen Sie sich die Ausgangsspannung von 2,5 V und für das Tastverhältnis von 25% ist es die Hälfte davon. Das fasst das Grundprinzip des PWM-Signals zusammen, und wir können das Grundprinzip des SPWM-Signals verstehen.
Eine Sinusspannung ist in erster Linie eine Analogspannung, die ihre Größe im Laufe der Zeit ändert , und wir können dieses Verhalten einer Sinuswelle reproduzieren, indem wir das Tastverhältnis der PWM-Welle kontinuierlich ändern. Das folgende Bild zeigt dies.
Wenn Sie sich das folgende Schema ansehen , sehen Sie, dass am Ausgang des Transformators ein Kondensator angeschlossen ist. Dieser Kondensator ist dafür verantwortlich , das Wechselstromsignal von der Trägerfrequenz zu glätten.
Das verwendete Eingangssignal lädt und entlädt den Kondensator entsprechend dem Eingangssignal und der Last. Da wir ein sehr hochfrequentes SPWM-Signal verwendet haben, hat es ein sehr kleines Tastverhältnis von 1%. Dieses Tastverhältnis von 1% lädt den Kondensator ein wenig auf, das nächste Tastverhältnis beträgt 5%, dies wird wieder aufgeladen Der Kondensator hat etwas mehr, der folgende Impuls hat ein Tastverhältnis von 10% und der Kondensator lädt sich etwas mehr auf. Wir werden das Signal anlegen, bis wir ein Tastverhältnis von 100% erreicht haben, und von dort aus werden wir wieder nach unten gehen auf 1%. Dies erzeugt eine sehr glatte Kurve wie eine Sinuswelle am Ausgang. Wenn wir also am Eingang die richtigen Werte für das Tastverhältnis angeben, haben wir am Ausgang eine sehr sinusförmige Welle.
Funktionsweise des SPWM-Wechselrichters
Das obige Bild zeigt den Hauptantriebsabschnitt des SPWM-Wechselrichters. Wie Sie sehen können, haben wir zwei N-Kanal-MOSFETs in Halbbrückenkonfiguration verwendet, um den Transformator dieser Schaltung anzusteuern, unerwünschtes Schaltrauschen zu reduzieren und den MOSFET zu schützen haben wir 1N5819-Dioden parallel zu den MOSFETs verwendet. Um schädliche Spitzen im Gate-Bereich zu reduzieren, haben wir die 4,7-Ohm-Widerstände parallel zu 1N4148-Dioden verwendet. Schließlich sind die Transistoren BD139 und BD 140 in einer Gegentaktkonfiguration konfiguriertum das Gate des MOSFET anzusteuern, da dieser MOSFET eine sehr hohe Gatekapazität hat und mindestens 10 V an der Basis benötigt, um richtig einzuschalten. Erfahren Sie hier mehr über die Funktionsweise von Push-Pull-Verstärkern.
Um das Funktionsprinzip der Schaltung besser zu verstehen, haben wir es auf einen Punkt reduziert, an dem dieser Abschnitt des MOSFET eingeschaltet ist. Wenn sich der MOSFET im Strom befindet, fließt er zuerst durch den Transformator und wird dann vom MOSFET geerdet. Auf diese Weise wird auch ein magnetischer Fluss in der Richtung induziert, in der der Strom fließt, und der Kern des Transformators lässt den magnetischen Fluss durch in der Sekundärwicklung erhalten wir die positive Halbwelle des Sinussignals am Ausgang.
Im nächsten Zyklus befindet sich der untere Teil des Stromkreises im oberen Teil des Stromkreises. Aus diesem Grund habe ich den oberen Teil entfernt. Jetzt fließt der Strom in die entgegengesetzte Richtung und erzeugt einen magnetischen Fluss in diese Richtung, wodurch er sich umkehrt die Richtung des Magnetflusses im Kern. Erfahren Sie hier mehr über die Arbeitsweise von MOSFET.
Jetzt wissen wir alle, dass ein Transformator durch Änderungen des Magnetflusses arbeitet. Wenn Sie also beide MOSFETs ein- und ausschalten, invertiert und 50 Mal in einer Sekunde, wird ein schöner oszillierender Magnetfluss im Kern des Transformators erzeugt, und der sich ändernde Magnetfluss induziert eine Spannung in der Sekundärspule als Wir wissen es nach dem Faradayschen Gesetz. So funktioniert der Basiswechselrichter.
Die vollständige SPWM-Wechselrichterschaltung, die in diesem Projekt verwendet wird, ist unten angegeben.
Komponenten, die zum Erstellen des SPWM-Wechselrichters erforderlich sind
Sl. Nein |
Teile |
Art |
Menge |
1 |
Atmega328P |
IC |
1 |
2 |
IRFZ44N |
Mosfet |
2 |
3 |
BD139 |
Transistor |
2 |
4 |
BD140 |
Transistor |
2 |
5 |
22pF |
Kondensator |
2 |
6 |
10 K, 1% |
Widerstand |
1 |
7 |
16 MHz |
Kristall |
1 |
8 |
0,1 uF |
Kondensator |
3 |
9 |
4.7R |
Widerstand |
2 |
10 |
1N4148 |
Diode |
2 |
11 |
LM7805 |
Spannungsregler |
1 |
12 |
200 uF, 16 V. |
Kondensator |
1 |
13 |
47 uF, 16 V. |
Kondensator |
1 |
14 |
2,2 uF, 400 V. |
Kondensator |
1 |
SPWM Wechselrichterschaltungsaufbau
Für diese Demonstration wird die Schaltung mit Hilfe des Schaltplans auf Veroboard aufgebaut. Am Ausgang des Transformators fließt eine große Menge Strom durch die Verbindung, sodass die Verbindungsbrücken so dick wie möglich sein müssen.
Arduino-Programm für SPWM-Wechselrichter
Bevor wir beginnen, den Code zu verstehen, klären wir die Grundlagen. Aus dem obigen Arbeitsprinzip haben Sie gelernt, wie das PWM-Signal am Ausgang aussehen wird. Nun bleibt die Frage, wie wir an den Ausgangspins des Arduino eine so unterschiedliche Welle erzeugen können.
Um das variierende PWM-Signal zu erzeugen, verwenden wir den 16-Bit-Timer1 mit einer Prescaler-Einstellung von 1, was uns 1600/16000000 = 0,1 ms Zeit für jede Zählung gibt, wenn wir einen einzelnen Halbzyklus einer Sinuswelle betrachten, das passt genau 100 mal in einen halben Zyklus der Welle. In einfachen Worten, wir können unsere Sinuswelle 200 Mal abtasten.
Als nächstes müssen wir unsere Sinuswelle in 200 Teile teilen und ihre Werte mit einer Korrelation der Amplitude berechnen. Als nächstes müssen wir diese Werte in Timer-Zählerwerte konvertieren, indem wir sie mit dem Zählerlimit multiplizieren. Schließlich müssen wir diese Werte in eine Nachschlagetabelle einfügen, um sie dem Zähler zuzuführen, und wir erhalten unsere Sinuswelle.
Um die Sache ein bisschen einfacher zu machen, verwende ich einen sehr gut geschriebenen SPWM-Code von GitHub, der von Kurt Hutten erstellt wurde.
Der Code ist sehr einfach. Wir beginnen unser Programm mit dem Hinzufügen der erforderlichen Header-Dateien
#include #include
Als nächstes haben wir unsere zwei Nachschlagetabellen, aus denen wir die Timer-Zählerwerte erhalten werden.
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, 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, 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};
Als nächstes initialisieren wir im Setup- Abschnitt die Timer-Zähler-Steuerregister so, dass sie jeweils klar sind. Für weitere Informationen müssen Sie das Datenblatt des atmega328 IC durchgehen.
TCCR1A = 0b10100010; / * 10 bei Spiel löschen, für compA auf UNTEN gesetzt. 10 Clear on Match, für CompB auf UNTEN gesetzt. 00 10 WGM1 1: 0 für Wellenform 15. * / TCCR1B = 0b00011001; / * 000 11 WGM1 3: 2 für Wellenform 15. 001 keine Vorskalierung am Zähler. * / TIMSK1 = 0b00000001; / * 0000000 1 TOV1 Flag Interrupt Enable. * /
Danach initialisieren wir das Eingabeerfassungsregister mit einem vordefinierten Wert von 16000, da dies uns hilft, genau 200 Abtastwerte zu generieren.
ICR1 = 1600; // Periode für 16-MHz-Quarz, für eine Schaltfrequenz von 100 kHz für 200 Unterteilungen pro 50-Hz-Sinuszyklus.
Als nächstes aktivieren wir globale Interrupts, indem wir die Funktion aufrufen.
sei ();
Schließlich setzen wir Arduino Pin 9 und 10 als Ausgang
DDRB = 0b00000110; // PB1 und PB2 als Ausgänge setzen.
Damit ist die Setup-Funktion beendet.
Der Schleifenabschnitt des Codes bleibt leer, da es sich um ein Interrupt-gesteuertes Timer-Zählerprogramm handelt.
void loop () {; /*Nichts tun…. für immer!*/}
Als nächstes haben wir den Timer1-Überlaufvektor definiert. Diese Interrupt-Funktion erhält einen Aufruf, sobald der Timer1 übergelaufen ist und einen Interrupt generiert.
ISR (TIMER1_OVF_vect) {
Als nächstes deklarieren wir einige lokale Variablen als statische Variablen und haben begonnen, die Werte dem Erfassungs- und Vergleichswiderstand zuzuführen.
statische int num; statisches Zeichen trig; // Arbeitszyklus in jeder Periode ändern. OCR1A = lookUp1; OCR1B = lookUp2;
Schließlich erhöhen wir den Zähler vor, um die nächsten Werte den Erfassungs- und Vergleichswiderständen zuzuführen, was das Ende dieses Codes markiert.
Wenn (++ num> = 200) {// num vor dem Inkrementieren, überprüfen Sie, ob es unter 200 liegt. num = 0; // num zurücksetzen trig = trig ^ 0b00000001; digitalWrite (13, trig); }}
Testen der PWM-Wechselrichterschaltung TL494
Zum Testen der Schaltung wird das folgende Setup verwendet.
- 12V Blei-Säure-Batterie.
- Ein Transformator mit einem 6-0-6-Abgriff und einem 12-0-12-Abgriff
- 100W Glühlampe als Last
- Meco 108B + TRMS Multimeter
- Meco 450B + TRMS Multimeter
Ausgangssignal von Arduino:
Sobald ich den Code hochgeladen habe. Ich habe das SPWM-Ausgangssignal von den beiden Pins des Arduino gemessen, das wie im folgenden Bild aussieht.
Wenn wir ein wenig zoomen, können wir den sich ständig ändernden Arbeitszyklus der PWM-Welle sehen.
Als nächstes zeigt das folgende Bild das Ausgangssignal vom Transformator.
SPWM-Wechselrichterschaltung im Idealzustand:
Wie Sie auf dem obigen Bild sehen können, verbraucht diese Schaltung bei idealem Betrieb etwa 13 W.
Ausgangsspannung ohne Last:
Die Ausgangsspannung der Wechselrichterschaltung ist oben gezeigt. Dies ist die Spannung, die am Ausgang ohne angeschlossene Last austritt.
Eingangsstromverbrauch:
Das obige Bild zeigt die Eingangsleistung, die beim Anschließen einer 40-W-Last verbraucht wird.
Ausgangsstromverbrauch:
Das obige Bild zeigt die Ausgangsleistung, die von dieser Schaltung verbraucht wird (die Last ist eine 40-W-Glühlampe).
Damit schließen wir den Testteil der Schaltung ab. Sie können das Video unten für eine Demonstration ansehen. Ich hoffe, Ihnen hat dieser Artikel gefallen und Sie haben etwas über SPWM und seine Implementierungstechniken gelernt. Lesen Sie weiter, lernen Sie weiter, bauen Sie weiter und wir sehen uns im nächsten Projekt.