Arduino SPWM Generator Circuit - Codedetails und Diagramm

Versuchen Sie Unser Instrument, Um Probleme Zu Beseitigen





In diesem Beitrag erfahren Sie, wie Sie mit Arduino eine Sinuswellen-Pulsweitenmodulation oder SPWM erzeugen, mit der eine reine Sinus-Wechselrichterschaltung oder ähnliche Geräte hergestellt werden können.

Das Arduino Code wurde von mir entwickelt und ist mein erster Arduino-Code ... und er sieht ziemlich gut aus



Was ist SPWM?

Ich habe es bereits erklärt wie man SPWM mit Opamps generiert In einem meiner früheren Artikel könnten Sie es durchgehen, um zu verstehen, wie es mit diskreten Komponenten erstellt werden kann und welche Bedeutung es hat.

Grundsätzlich ist SPWM, das für Sinuswellen-Pulsweitenmodulation steht, eine Art von Pulsmodulation, bei der die Pulse moduliert werden, um eine sinusförmige Wellenform zu simulieren, so dass die Modulation Eigenschaften einer reinen Sinuswelle erreichen kann.



Um ein SPWM zu implementieren, werden die Impulse mit anfänglich schmaleren Breiten moduliert, die in der Mitte des Zyklus allmählich breiter werden und schließlich am Ende schmaler werden, um den Zyklus zu beenden.

Genauer gesagt beginnen die Impulse mit engsten Breiten, die mit jedem nachfolgenden Impuls allmählich breiter werden, und werden am mittleren Impuls am breitesten. Danach wird die Sequenz fortgesetzt, jedoch mit einer entgegengesetzten Modulation, dh die Impulse werden jetzt allmählich schmaler bis der Zyklus beendet ist.

Video-Demo

Dies stellt einen SPWM-Zyklus dar und wiederholt sich durchgehend mit einer bestimmten Rate, die durch die Anwendungsfrequenz (normalerweise 50 Hz oder 60 Hz) bestimmt wird. In der Regel wird SPWM zum Ansteuern von Leistungsgeräten wie Mosfets oder BJTs in Wechselrichtern oder Konvertern verwendet.

Dieses spezielle Modulationsmuster stellt sicher, dass die Frequenzzyklen mit einem sich allmählich ändernden Durchschnittsspannungswert (auch als Effektivwert bezeichnet) ausgeführt werden, anstatt plötzliche Hi / Low-Spannungsspitzen auszulösen, wie dies normalerweise bei flachen Rechteckwellenzyklen der Fall ist.

Diese schrittweise Änderung von PWMs in einem SPWM wird absichtlich erzwungen, so dass das exponentiell ansteigende / abfallende Muster einer Standard-Sinuswelle oder einer sinusförmigen Wellenform, daher der Name Sinuswellen-PWM oder SPWM, genau nachgebildet wird.

SPWM mit Arduino generieren

Das oben erläuterte SPWM kann einfach mit wenigen diskreten Teilen und auch mit Arduino implementiert werden, wodurch Sie wahrscheinlich mehr Genauigkeit mit den Wellenformperioden erzielen können.

Der folgende Arduino-Code kann zum Implementieren des beabsichtigten SPWM für eine bestimmte Anwendung verwendet werden.

Meine Güte!! das sieht furchtbar groß aus, wenn Sie wissen, wie man es verkürzt, können Sie es sicher am Ende tun.

// By Swagatam (my first Arduino Code)
void setup(){
pinMode(8, OUTPUT)
pinMode(9, OUTPUT)
}
void loop(){
digitalWrite(8, HIGH)
delayMicroseconds(500)
digitalWrite(8, LOW)
delayMicroseconds(500)
digitalWrite(8, HIGH)
delayMicroseconds(750)
digitalWrite(8, LOW)
delayMicroseconds(500)
digitalWrite(8, HIGH)
delayMicroseconds(1250)
digitalWrite(8, LOW)
delayMicroseconds(500)
digitalWrite(8, HIGH)
delayMicroseconds(2000)
digitalWrite(8, LOW)
delayMicroseconds(500)
digitalWrite(8, HIGH)
delayMicroseconds(1250)
digitalWrite(8, LOW)
delayMicroseconds(500)
digitalWrite(8, HIGH)
delayMicroseconds(750)
digitalWrite(8, LOW)
delayMicroseconds(500)
digitalWrite(8, HIGH)
delayMicroseconds(500)
digitalWrite(8, LOW)
//......
digitalWrite(9, HIGH)
delayMicroseconds(500)
digitalWrite(9, LOW)
delayMicroseconds(500)
digitalWrite(9, HIGH)
delayMicroseconds(750)
digitalWrite(9, LOW)
delayMicroseconds(500)
digitalWrite(9, HIGH)
delayMicroseconds(1250)
digitalWrite(9, LOW)
delayMicroseconds(500)
digitalWrite(9, HIGH)
delayMicroseconds(2000)
digitalWrite(9, LOW)
delayMicroseconds(500)
digitalWrite(9, HIGH)
delayMicroseconds(1250)
digitalWrite(9, LOW)
delayMicroseconds(500)
digitalWrite(9, HIGH)
delayMicroseconds(750)
digitalWrite(9, LOW)
delayMicroseconds(500)
digitalWrite(9, HIGH)
delayMicroseconds(500)
digitalWrite(9, LOW)
}
//-------------------------------------//

Im nächsten Beitrag werde ich erklären, wie man den oben genannten Arduino-basierten SPWM-Generator verwendet Machen Sie eine reine Sinus-Wechselrichterschaltung ....weiter lesen!

Der obige SPWM-Code wurde von Herrn Atton weiter verbessert, um seine Leistung zu verbessern, wie unten angegeben:

/*
This code was based on Swagatam SPWM code with changes made to remove errors. Use this code as you would use any other Swagatam’s works.
Atton Risk 2017
*/
const int sPWMArray[] = {500,500,750,500,1250,500,2000,500,1250,500,750,500,500} // This is the array with the SPWM values change them at will
const int sPWMArrayValues = 13 // You need this since C doesn’t give you the length of an Array
// The pins
const int sPWMpin1 = 10
const int sPWMpin2 = 9
// The pin switches
bool sPWMpin1Status = true
bool sPWMpin2Status = true
void setup()
{
pinMode(sPWMpin1, OUTPUT)
pinMode(sPWMpin2, OUTPUT)
}
void loop()
{
// Loop for pin 1
for(int i(0) i != sPWMArrayValues i++)
{
if(sPWMpin1Status)
{
digitalWrite(sPWMpin1, HIGH)
delayMicroseconds(sPWMArray[i])
sPWMpin1Status = false
}
else
{
digitalWrite(sPWMpin1, LOW)
delayMicroseconds(sPWMArray[i])
sPWMpin1Status = true
}
}
// Loop for pin 2
for(int i(0) i != sPWMArrayValues i++)
{
if(sPWMpin2Status)
{
digitalWrite(sPWMpin2, HIGH)
delayMicroseconds(sPWMArray[i])
sPWMpin2Status = false
}
else
{
digitalWrite(sPWMpin2, LOW)
delayMicroseconds(sPWMArray[i])
sPWMpin2Status = true
}
}
}




Zurück: 8X Overunity von Joule Thief - Bewährtes Design Weiter: Arduino Pure Sinus-Wechselrichterschaltung mit vollständigem Programmcode