Arduino SPWM generátor áramkör - Kód részletek és ábra

Próbálja Ki A Műszerünket A Problémák Kiküszöbölésére





Ebben a bejegyzésben megtanuljuk, hogyan állíthatunk elő szinuszhullám-impulzusszélesség-modulációt vagy SPWM-et az Arduino révén, amely felhasználható tiszta szinuszhullámú inverter áramkör vagy hasonló modulok készítésére.

A Arduino kódot én fejlesztettem, és ez az első Arduino kódom, ... és nagyon jól néz ki



Mi az SPWM

Már elmagyaráztam hogyan lehet SPWM-et generálni opampok segítségével az egyik korábbi cikkemben áttanulmányozhatja, hogy megértse, hogyan hozható létre diszkrét komponensek segítségével, és tekintettel annak fontosságára.

Alapvetően az SPWM, amely a szinusz hullám impulzusszélesség modulációt jelenti, egyfajta impulzus moduláció, ahol az impulzusokat egy szinuszos hullámforma szimulálására modulálják, így a moduláció képes elérni a tiszta szinusz hullám tulajdonságait.



Az SPWM megvalósításához az impulzusokat kezdeti szűkebb szélességekkel modulálják, amelyek a ciklus közepén fokozatosan egyre szélesebbé válnak, és végül a ciklus végén szűkebbek lesznek.

Pontosabban: az impulzusok a legszűkebb szélességgel kezdődnek, amelyek az egyes következő impulzusokkal fokozatosan szélesebbek lesznek, és a középső impulzuson a legszélesebbek, ezt követően a szekvencia folytatódik, de ellentétes modulációval, vagyis az impulzusok most fokozatosan egyre szűkebbek amíg a ciklus be nem fejeződik.

Videó bemutató

Ez egy SPWM ciklust alkot, és ez az alkalmazás frekvenciája által meghatározott meghatározott sebességgel (általában 50Hz vagy 60Hz) megismétlődik. Az SPWM-et általában olyan energiaellátó eszközök meghajtására használják, mint a mosfetek vagy a BJT-k inverterekben vagy konverterekben.

Ez a speciális modulációs minta biztosítja, hogy a frekvenciaciklusok fokozatosan változó átlagos feszültségértékkel (más néven RMS-értékkel) kerüljenek végrehajtásra, ahelyett, hogy hirtelen Hi / alacsony feszültségű tüskéket dobnának, amint ez általában a sík négyzethullámú ciklusokban tapasztalható.

Ezt az SPWM-ben fokozatosan módosító PWM-eket szándékosan úgy hajtják végre, hogy szorosan megismételje a szokásos szinuszhullámok vagy szinuszos hullámformák exponenciálisan emelkedő / csökkenő mintázatát, ezért a szinuszhullám PWM vagy SPWM elnevezést.

SPWM előállítása Arduino segítségével

A fent ismertetett SPWM könnyen megvalósítható néhány különálló rész használatával, valamint az Arduino használatával, amely valószínűleg lehetővé teszi, hogy nagyobb pontosságot érjen el a hullámforma periódusaival.

A következő Arduino kód használható a tervezett SPWM végrehajtására egy adott alkalmazás számára.

Mindenit!! rettenetesen nagynak tűnik, ha tudja, hogyan lehet lerövidíteni, akkor biztosan nyugodtan megteheti a végén.

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

A következő bejegyzésben elmagyarázom, hogyan kell használni a fenti Arduino alapú SPWM generátort készítsen tiszta szinuszhullámú inverter áramkört ....Olvass tovább!

Mr Atton a fenti SPWM-kódot tovább javította a teljesítmény növelése érdekében, az alábbiak szerint:

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




Korábbi: 8x túlzások a Joule Thief-től - Bevált dizájn Következő: Arduino Pure Sine Wave Inverter áramkör teljes programkóddal