Obvod generátora Arduino SPWM - podrobnosti a schéma kódu

Vyskúšajte Náš Nástroj Na Odstránenie Problémov





V tomto príspevku sa naučíme, ako generovať sínuso-vlnovú pulzno-šírkovú moduláciu alebo SPWM cez Arduino, ktoré je možné použiť na výrobu čistého obvodu sínusovej vlny alebo podobných gadgetov.

The Arduino kód vyvíjam ja a je to môj prvý kód Arduino, ... a vyzerá celkom dobre



Čo je to SPWM

Už som to vysvetlil ako generovať SPWM pomocou opampov v jednom z mojich predchádzajúcich článkov by ste si ho mohli prečítať, aby ste pochopili, ako je možné ho vytvoriť pomocou samostatných komponentov, a ohľadom jeho dôležitosti.

V zásade je SPWM, čo je skratka pre moduláciu šírky impulzov sínusových vĺn, typom pulznej modulácie, pri ktorej sú impulzy modulované tak, aby simulovali sínusový priebeh, takže modulácia je schopná dosiahnuť vlastnosti čistej sínusovej vlny.



Na implementáciu SPWM sú impulzy modulované s počiatočnou užšou šírkou, ktorá sa postupne v strede cyklu rozširuje a na konci končí na konci užšia.

Presnejšie povedané, impulzy začínajú najužšími šírkami, ktoré sa s každým ďalším impulzom postupne rozširujú, a stredným impulzom sa rozširujú, potom sekvencia pokračuje ďalej, ale s opačnou moduláciou, to znamená, že impulzy sa postupne začínajú zužovať kým sa cyklus nedokončí.

Video ukážka

To predstavuje jeden cyklus SPWM a opakuje sa v určitej miere určenej frekvenciou aplikácie (zvyčajne 50 Hz alebo 60 Hz). SPWM sa zvyčajne používa na pohon energetických zariadení, ako sú mosfety alebo BJT, v invertoroch alebo konvertoroch.

Tento špeciálny modulačný vzor zaisťuje, že frekvenčné cykly sú vykonávané s postupne sa meniacou priemernou hodnotou napätia (nazývanou tiež hodnota RMS), namiesto toho, aby vrhali náhle špičky Hi / nízkeho napätia, ako je to bežné v cykloch plochých štvorcových vĺn.

Táto postupne sa meniaca PWM v SPWM je zámerne vynútená tak, aby úzko replikovala exponenciálne stúpajúci / klesajúci vzorec štandardných sínusových vĺn alebo sínusových tvarov vĺn, odtiaľ pochádza názov sinewave PWM alebo SPWM.

Generovanie SPWM s Arduinom

Vyššie vysvetlený SPWM možno ľahko implementovať pomocou niekoľkých samostatných častí a tiež pomocou Arduina, ktoré vám pravdepodobne umožní dosiahnuť väčšiu presnosť s periódami kriviek.

Nasledujúci kód Arduino možno použiť na implementáciu zamýšľaného SPWM pre danú aplikáciu.

Sakra!! ktorá vyzerá strašne veľká, ak viete, ako to skrátiť, určite to môžete pokojne urobiť 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 nasledujúcom príspevku vysvetlím, ako používať vyššie uvedený generátor SPWM založený na Arduine urobte čistý sínusový invertorový obvod .... čítaj ďalej!

Vyššie uvedený kód SPWM ďalej vylepšil pán Atton kvôli zlepšeniu svojho výkonu, ako je uvedené nižšie:

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




Dvojica: Osemnásobná nadvláda od zlodeja Joule - osvedčený dizajn Ďalej: Arduino Pure Sine Wave Inverter Circuit s úplným programovým kódom