Okruh generátoru Arduino SPWM - podrobnosti a schéma kódu

Vyzkoušejte Náš Nástroj Pro Odstranění Problémů





V tomto příspěvku se učíme, jak generovat sinusové pulsně šířkové modulace nebo SPWM přes Arduino, které lze použít k výrobě čistého sinusového obvodu invertoru nebo podobných gadgetů.

The Arduino kód vyvíjím já a je to můj první kód Arduino, ... a vypadá docela dobře



Co je to SPWM

Už jsem to vysvětlil jak generovat SPWM pomocí opamps v jednom z mých dřívějších článků byste si ho mohli projít, abyste pochopili, jak jej lze vytvořit pomocí diskrétních komponent, a s ohledem na jeho důležitost.

V podstatě je SPWM, což je zkratka pro modulaci šířky sinusových pulsů, typem pulzní modulace, kde jsou pulsy modulovány tak, aby simulovaly sinusový průběh, takže modulace je schopna dosáhnout vlastností čisté sinusové vlny.



Pro implementaci SPWM jsou pulsy modulovány s počátečními užšími šířkami, které se postupně rozšiřují ve středu cyklu a nakonec končí tím, že jsou na konci užší a cyklus dokončí.

Přesněji řečeno, pulsy začínají nejužšími šířkami, které se s každým dalším pulsem postupně rozšiřují, a nejširší jsou u středního pulzu, poté sekvence pokračuje dále, ale s opačnou modulací, to znamená, že pulsy se nyní postupně začínají zužovat dokud cyklus nedokončí.

Video ukázka

To představuje jeden cyklus SPWM a to se opakuje po celou dobu určitou rychlostí, jak je určeno aplikační frekvencí (obvykle 50 Hz nebo 60 Hz). SPWM se obvykle používá k pohonu výkonových zařízení, jako jsou mosfety nebo BJT, ve střídačích nebo převaděčích.

Tento speciální vzor modulace zajišťuje, že frekvenční cykly jsou prováděny s postupně se měnící průměrnou hodnotou napětí (nazývanou také hodnota RMS), namísto házení náhlých špiček vysokého / nízkého napětí, jak je to obvyklé v cyklech ploché čtvercové vlny.

Tato postupně se měnící PWM v SPWM je záměrně vynucována tak, aby úzce replikovala exponenciálně vzestupný / sestupný vzorec standardních sinusových vln nebo sinusových vln, proto název sinewave PWM nebo SPWM.

Generování SPWM pomocí Arduina

Výše vysvětlený SPWM lze snadno implementovat pomocí několika samostatných částí a také pomocí Arduina, které vám pravděpodobně umožní získat větší přesnost s periodami vlnových průběhů.

Následující kód Arduino lze použít pro implementaci zamýšleného SPWM pro danou aplikaci.

Sakra!! který vypadá strašně velký, pokud víte, jak to zkrátit, můžete to klidně udělat na konci.

// 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 dalším příspěvku vysvětlím, jak použít výše uvedený generátor SPWM založený na Arduinu vytvořte čistý sinusový měnič ....čti dál!

Výše uvedený kód SPWM dále vylepšil pan Atton pro zvýšení jeho výkonu, jak je uvedeno níže:

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




Předchozí: 8X Overunity od Joule Thief - osvědčený design Další: Obvod střídače Arduino Pure Sine Wave s úplným programovým kódem