„Arduino“ SPWM generatoriaus grandinė - išsami informacija apie kodą ir schema

Išbandykite Mūsų Instrumentą, Kaip Pašalinti Problemas





Šiame įraše mes sužinome, kaip generuoti sinusinės bangos impulso pločio moduliaciją arba SPWM per „Arduino“, kuris gali būti naudojamas grynos sinusinės bangos keitiklio grandinei ar panašioms programėlėms gaminti.

Arduino kodas yra mano sukurtas ir tai yra mano pirmasis „Arduino“ kodas ... ir jis atrodo gana gerai



Kas yra SPWM

Aš jau paaiškinau kaip sugeneruoti SPWM naudojant opampus viename iš ankstesnių mano straipsnių galėtumėte jį peržvelgti, kad suprastumėte, kaip jį galima sukurti naudojant atskirus komponentus, ir atsižvelgdami į jo svarbą.

Iš esmės SPWM, reiškiantis sinusinės bangos impulsų pločio moduliaciją, yra impulsų moduliacijos tipas, kai impulsai moduliuojami imituojant sinusinę bangos formą, kad moduliacija galėtų pasiekti grynos sinusinės bangos savybes.



Norėdami įgyvendinti SPWM, impulsai moduliuojami iš pradžių siauresniais pločiais, kurie ciklo centre palaipsniui tampa vis platesni, o galiausiai ciklo pabaigoje jie būna siauresni.

Tiksliau sakant, impulsai prasideda siauriausiais pločiais, kurie palaipsniui tampa vis platesni su kiekvienu paskesniu impulsu ir yra plačiausi ties centro impulsu, po to seka tęsiasi, tačiau su priešinga moduliacija, tai yra impulsai dabar palaipsniui pradeda siaurėti kol ciklas baigsis.

Vaizdo demonstracija

Tai sudaro vieną SPWM ciklą, kuris kartojasi tam tikru greičiu, kurį nustato taikymo dažnis (paprastai 50Hz arba 60Hz). Paprastai SPWM naudojamas maitinimo prietaisams, tokiems kaip „mosfets“ ar „BJT“, valdyti keitikliuose ar keitikliuose.

Šis specialus moduliacijos modelis užtikrina, kad dažnio ciklai būtų vykdomi palaipsniui kintant vidutinei įtampos vertei (dar vadinama RMS verte), užuot metus staigius Hi / žemos įtampos šuolius, kaip paprastai matyti plokščių kvadratinių bangų cikluose.

Tai palaipsniui modifikuojant SPWM PWM yra tikslingai vykdoma taip, kad jis glaudžiai atkartoja standartinių sinusinių bangų ar sinusoidinės bangos formos eksponentiškai kylantį / krentantį modelį, taigi ir pavadinimas sinewave PWM arba SPWM.

SPWM generavimas naudojant „Arduino“

Pirmiau paaiškintą SPWM galima lengvai įdiegti naudojant kelias atskiras dalis ir naudojant „Arduino“, kuris tikriausiai leis jums gauti daugiau tikslumo pagal bangos formos periodus.

Šis „Arduino“ kodas gali būti naudojamas įgyvendinant numatytą SPWM konkrečiai programai.

Dieve!! atrodo baisiai didelis, jei žinote, kaip jį sutrumpinti, tikrai galite drąsiai tai padaryti savo pabaigoje.

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

Kitame įraše paaiškinsiu, kaip naudoti pirmiau nurodytą „Arduino“ pagrįstą SPWM generatorių padaryti gryną sinusinių bangų keitiklio grandinę .... skaityk toliau!

Pirmiau nurodytą SPWM kodą p. Attonas dar patobulino, kad pagerintų jo našumą, kaip nurodyta toliau:

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




Ankstesnis: „8X Over Joule Thief“ - įrodytas dizainas Kitas: „Arduino Pure Sine Wave“ keitiklio grandinė su visu programos kodu