Arduino SPWM generaatori vooluahel - koodi üksikasjad ja skeem

Proovige Meie Instrumenti Probleemide Kõrvaldamiseks





Selles postituses õpime, kuidas Arduino kaudu luua siinusimpulsi laiuse modulatsiooni või SPWM-i, mida saab kasutada puhta siinusmuunduri vooluahela või sarnaste vidinate valmistamiseks.

The Arduino minu poolt välja töötatud kood ja see on minu esimene Arduino kood, ... ja see näeb päris hea välja



Mis on SPWM

Olen juba selgitanud kuidas SPWM-i genereerida opampide abil ühes minu varasemas artiklis võiksite selle läbi vaadata, mõistmaks, kuidas seda saab luua diskreetsete komponentide abil, ja arvestades selle olulisust.

Põhimõtteliselt on siinuslaine impulsi laiuse modulatsiooni tähistav SPWM impulsi modulatsiooni tüüp, kus impulsse moduleeritakse siinuslaine kuju simuleerimiseks, nii et modulatsioon suudab saavutada puhta siinuslaine omadused.



SPWM-i rakendamiseks moduleeritakse impulsse esialgsete kitsamate laiustega, mis tsükli keskel järk-järgult laienevad ja lõpuks tsükli lõpul kitsamad.

Täpsemalt öeldes algavad impulsid kõige kitsamate laiustega, mis lähevad iga järgneva impulsiga järk-järgult laiemaks ja saavad keskimpulsis kõige laiemaks, pärast seda jätkub järjestus edasi, kuid vastupidise modulatsiooniga, see tähendab, et impulsid hakkavad nüüd järk-järgult kitsenema kuni tsükkel lõpeb.

Video demo

See moodustab ühe SPWM-tsükli ja see kordub kogu kindla kiirusega, mis on määratud rakendussagedusega (tavaliselt 50Hz või 60Hz). Tavaliselt kasutatakse SPWM-i muundurites või muundurites töötavate jõuseadmete, näiteks mosfettide või BJT-de juhtimiseks.

See spetsiaalne modulatsioonimuster tagab sagedustsüklite järkjärgulise muutumise keskmise pingeväärtusega (nimetatakse ka RMS-väärtuseks), selle asemel, et visata äkilisi Hi / madalpinge naelu, nagu tavaliselt on näha lamedate ruudukujuliste tsüklite korral.

Seda järk-järgult modifitseerivat SPWM-i PWM-e rakendatakse sihilikult nii, et see kordab tihedalt standardse siinuslaine või sinusoidse lainekuju eksponentsiaalselt tõusvat / langevat mustrit, sellest ka nimi sinewave PWM või SPWM.

SPWM-i genereerimine Arduinoga

Eespool selgitatud SPWM-i saab hõlpsasti rakendada mõne eraldiseisva osa ja ka Arduino abil, mis tõenäoliselt võimaldab teil lainekujulise perioodiga täpsust saada.

Järgmist Arduino koodi saab kasutada rakenduse jaoks kavandatud SPWM-i juurutamiseks.

Kuule !! mis tundub kohutavalt suur, kui teate, kuidas seda lühendada, võite kindlasti oma lõpus seda teha.

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

Järgmises postituses selgitan, kuidas ülaltoodud Arduino-põhist SPWM-i generaatorit kasutada tehke puhas siinuslaine inverter .... jätka lugemist!

Ülaltoodud SPWM-koodi parandas hr Atton oma jõudluse parandamiseks veelgi, nagu allpool esitatud:

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




Eelmine: Joule Thief 8X üleküllus - tõestatud disain Järgmine: Arduino puhta siinuslaine inverter koos täieliku programmikoodiga