Vezje generatorja Arduino SPWM - podrobnosti kode in diagram

Preizkusite Naš Instrument Za Odpravo Težav





V tem prispevku se naučimo, kako ustvariti modul modulacije širine impulza ali SPWM prek Arduina, ki ga lahko uporabimo za izdelavo čistega pretvornika sinusnih valov ali podobnih pripomočkov.

The Arduino kodo sem razvil jaz in je moja prva koda Arduino, ... in izgleda precej dobro



Kaj je SPWM

Sem že razložil kako ustvariti SPWM z uporabo opampov v enem od mojih prejšnjih člankov bi ga lahko prebrali, da bi razumeli, kako ga je mogoče ustvariti z uporabo ločenih komponent, in glede njegove pomembnosti.

V bistvu je SPWM, ki pomeni modulacijo širine impulzov s sinusnim valom, vrsta impulzne modulacije, pri kateri so impulzi modulirani tako, da simulirajo sinusoidno valovno obliko, tako da lahko modulacija doseže lastnosti čistega sinusnega vala.



Za izvedbo SPWM se impulzi modulirajo z začetnimi ožjimi širinami, ki se v središču cikla postopoma širijo in na koncu na koncu ožijo, da končajo cikel.

Natančneje, impulzi se začnejo z najožjimi širinami, ki se postopoma širijo z vsakim naslednjim impulzom in se širijo v srednjem pulzu, nato pa se zaporedje nadaljuje, vendar z nasprotno modulacijo, to je, da se impulzi zdaj postopoma ožijo dokler se cikel ne konča.

Video predstavitev

To predstavlja en cikel SPWM, ki se ves čas ponavlja s posebno hitrostjo, določeno s frekvenco aplikacije (običajno 50 Hz ali 60 Hz). Običajno se SPWM uporablja za pogon pogonskih naprav, kot so MOSFET-ji ali BJT-ji v pretvornikih ali pretvornikih.

Ta poseben modulacijski vzorec zagotavlja, da se frekvenčni cikli izvajajo s postopno spreminjajočo se vrednostjo povprečne napetosti (imenovane tudi RMS vrednost), namesto da bi vrgli nenadne hi / nizkonapetostne konice, kot so običajno priča ciklom z ravnimi kvadratnimi valovi.

To postopno spreminjanje PWM v SPWM je namensko uveljavljeno, tako da natančno ponovi eksponentno naraščajoči / padajoči vzorec standardnih sinusnih valov ali sinusoidne valovne oblike, od tod tudi ime sinewave PWM ali SPWM.

Ustvarjanje SPWM z Arduino

Zgoraj pojasnjeni SPWM je mogoče enostavno implementirati z nekaj ločenimi deli in tudi z uporabo Arduina, ki vam bo verjetno omogočil večjo natančnost obdobij valovnih oblik.

Naslednjo kodo Arduino lahko uporabite za izvajanje predvidenega SPWM za določeno aplikacijo.

Presneto!! to se zdi strašno veliko, če ga znate skrajšati, boste to zagotovo storili na koncu.

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

V naslednjem prispevku bom razložil, kako uporabiti zgornji generator SPWM, ki temelji na Arduinu naredite čisti sinusni pretvornik .... beri naprej!

Zgoraj navedeno kodo SPWM je g. Atton še izboljšal za izboljšanje njene učinkovitosti, kot je navedeno spodaj:

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




Prejšnja: 8X Prekomernost Joule Thief - preizkušen dizajn Naprej: Arduino Pure Sine Wave Inverter Circuit s popolno programsko kodo