Arduino SPWM Generator Circuit - Kodinformation och diagram

Prova Vårt Instrument För Att Eliminera Problem





I det här inlägget lär vi oss att generera sinusvågspulsbreddsmodulation eller SPWM genom Arduino, som kan användas för att skapa en ren sinusvågsomvandlare eller liknande prylar.

De Arduino koden är utvecklad av mig, och det är min första Arduino-kod, ... och den ser ganska bra ut



Vad är SPWM

Jag har redan förklarat hur man genererar SPWM med hjälp av opamps i en av mina tidigare artiklar kan du gå igenom den för att förstå hur den kan skapas med hjälp av diskreta komponenter och om dess betydelse.

I grund och botten är SPWM som står för sinusvågspulsbreddsmodulation, en typ av pulsmodulering där pulserna moduleras för att simulera en sinusformad vågform, så att moduleringen kan uppnå egenskaper hos en ren sinusvåg.



För att implementera en SPWM moduleras pulserna med initiala smalare bredder som gradvis blir bredare i mitten av cykeln och slutligen slutar att vara smalare i slutet för att avsluta cykeln.

För att vara mer exakt börjar pulserna med smalaste bredder som gradvis blir bredare med varje efterföljande pulser och blir bredast vid mittpulsen, efter detta fortsätter sekvensen men med en motsatt modulering, det vill säga pulserna börjar nu gradvis smalare tills cykeln är klar.

Videodemo

Detta utgör en SPWM-cykel, och detta upprepas hela tiden med en viss hastighet som bestäms av applikationsfrekvensen (vanligtvis 50Hz eller 60Hz). Vanligtvis används SPWM för att driva kraftenheter som mosfeter eller BJT i ​​omvandlare eller omvandlare.

Detta speciella moduleringsmönster säkerställer att frekvenscyklerna exekveras med ett gradvis föränderligt genomsnittligt spänningsvärde (även kallat RMS-värde), istället för att kasta plötsliga hög / lågspänningsspikar som normalt sett i platta fyrkantiga vågcykler.

Denna gradvis modifierande PWM i en SPWM verkställs medvetet så att den noggrant replikerar det exponentiellt stigande / fallande mönstret för en standard sinewaves eller sinusformad vågform, därav namnet sinewave PWM eller SPWM.

Genererar SPWM med Arduino

Ovanstående förklarade SPWM kan enkelt implementeras med hjälp av några diskreta delar, och även med Arduino vilket förmodligen gör att du kan få mer noggrannhet med vågformsperioderna.

Följande Arduino-kod kan användas för att implementera den avsedda SPWM för en given applikation.

Oj!! det ser väldigt stort ut, om du vet hur du förkortar det, kan du säkert gärna göra det i slutet.

// 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)
}
//-------------------------------------//

I nästa inlägg förklarar jag hur man använder ovanstående Arduino-baserade SPWM-generator till skapa en ren sinusvågomformarkrets ....Fortsätt läsa!

Ovanstående SPWM-kod förbättrades ytterligare av Mr Atton för att förbättra dess prestanda, enligt nedan:

/*
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
}
}
}




Tidigare: 8X Overunity from Joule Thief - beprövad design Nästa: Arduino Pure Sine Wave Inverter Circuit med fullständig programkod