Arduino SPWM -generaattoripiiri - Koodin tiedot ja kaavio

Kokeile Instrumenttia Ongelmien Poistamiseksi





Tässä viestissä opitaan, miten generoidaan siniaaltopulssin leveyden modulaatio tai SPWM Arduinon kautta, jota voidaan käyttää puhtaan siniaaltoinvertteripiirin tai vastaavien laitteiden valmistamiseen.

Arduino Olen itse kehittänyt koodin, ja se on ensimmäinen Arduino-koodini, ... ja se näyttää aika hyvältä



Mikä on SPWM

Olen jo selittänyt miten SPWM luodaan opampeilla eräässä aikaisemmissa artikkeleissani voit käydä sen läpi ymmärtämään, miten se voidaan luoda erillisillä komponenteilla, ja ottaa huomioon sen merkitys.

Pohjimmiltaan SPWM, joka tarkoittaa siniaaltopulssin leveyden modulointia, on eräänlainen pulssimodulaatio, jossa pulssit moduloidaan simuloimaan sinimuotoista aaltomuotoa siten, että modulointi pystyy saavuttamaan puhtaan siniaallon ominaisuudet.



SPWM: n toteuttamiseksi pulsseja moduloidaan aluksi kapeammilla leveydillä, jotka asteittain laajenevat syklin keskellä ja lopulta loppuvat kapeammiksi syklin loppuun mennessä.

Tarkemmin sanottuna pulssit alkavat kapeimmilla leveydillä, jotka laajenevat vähitellen jokaisen seuraavan pulssin kanssa ja laajentuvat keskipulssissa, minkä jälkeen jakso jatkuu, mutta päinvastaisella moduloinnilla, ts. Pulssit alkavat vähitellen kapenemaan kunnes jakso päättyy.

Videon esittely

Tämä muodostaa yhden SPWM-syklin, ja tämä toistuu koko ajan tietyllä nopeudella, joka määritetään sovellustaajuudella (yleensä 50 Hz tai 60 Hz). Tyypillisesti SPWM: ää käytetään voimalaitteiden, kuten mosfettien tai BJT: n, käyttämiseen taajuusmuuttajissa tai muuntimissa.

Tämä erityinen modulaatiokuvio varmistaa, että taajuusjaksot suoritetaan asteittain muuttuvalla keskimääräisellä jännitearvolla (kutsutaan myös RMS-arvoksi) sen sijaan, että heitettäisiin äkillisiä korkea- / matalajännitepiikkejä, kuten normaalisti havaitaan tasaisissa neliöaaltojaksoissa.

Tätä SPWM: n asteittain modifioivaa PWM: ää valvotaan tarkoituksellisesti siten, että se toistaa läheisesti tavallisen siniaallon tai sinimuotoisen aaltomuodon eksponentiaalisesti nousevan / laskevan mallin, tästä syystä nimi siniaallon PWM tai SPWM.

SPWM: n luominen Arduinolla

Edellä selitetty SPWM voidaan helposti toteuttaa muutamalla erillisellä osalla ja myös Arduinolla, mikä todennäköisesti auttaa sinua saamaan enemmän tarkkuutta aaltomuodon jaksoissa.

Seuraavaa Arduino-koodia voidaan käyttää aiotun SPWM: n toteuttamiseen tietylle sovellukselle.

Hitsi!! joka näyttää hirvittävän suurelta, jos osaat lyhentää sitä, voit varmasti tehdä sen lopussa.

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

Seuraavassa viestissä selitän, miten yllä olevaa Arduino-pohjaista SPWM-generaattoria käytetään tee puhdas siniaaltoinvertteripiiri ....jatka lukemista!

Mr Atton paransi yllä olevaa SPWM-koodia edelleen suorituskyvyn parantamiseksi, kuten alla on esitetty:

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




Edellinen: Joule Thiefin todistettu muotoilu yli 8 kertaa Seuraava: Arduino Pure Sine Wave -invertteripiiri täydellä ohjelmakoodilla