Arduino SPWM krug generatora - detalji koda i dijagram

Isprobajte Naš Instrument Za Uklanjanje Problema





U ovom postu saznajemo kako generirati modul modulacije širine impulsa sinusnog vala ili SPWM putem Arduina, koji se može koristiti za izradu čistog kruga pretvarača sinusnog vala ili sličnih uređaja.

The Arduino kod sam razvio i to je moj prvi Arduino kôd, ... i izgleda prilično dobro



Što je SPWM

Već sam objasnio kako generirati SPWM koristeći opampe u jednom od mojih ranijih članaka, mogli biste to proći kako biste razumjeli kako se to može stvoriti pomoću diskretnih komponenti i s obzirom na njegovu važnost.

U osnovi, SPWM koji predstavlja sinusnu modulaciju širine impulsa, vrsta je impulsne modulacije gdje se impulsi moduliraju da simuliraju sinusni valni oblik, tako da modulacija može postići svojstva čistog sinusnog vala.



Da bi se implementirao SPWM, impulsi se moduliraju s početnim užim širinama koje se postupno šire u središtu ciklusa, a na kraju na kraju postaju uži na kraju da bi ciklus završio.

Točnije, impulsi počinju najužim širinama koje se postupno šire sa svakim sljedećim impulsima, a postaju najširi u središnjem impulsu, nakon toga se slijed nastavlja, ali s suprotnom modulacijom, tj. Impulsi sada postupno počinju sužavati sve dok ciklus ne završi.

Video demonstracija

To predstavlja jedan SPWM ciklus i on se ponavlja tijekom određene brzine utvrđene frekvencijom primjene (obično 50Hz ili 60Hz). Tipično se SPWM koristi za pogon pogonskih uređaja kao što su MOSFET-ovi ili BJT-ovi u pretvaračima ili pretvaračima.

Ovaj poseban modulacijski obrazac osigurava da se frekvencijski ciklusi izvode s postupno mijenjajućom vrijednosti prosječnog napona (koja se naziva i RMS vrijednost), umjesto da se bacaju nagli skokovi visokog / niskog napona kao što je to uobičajeno u ravnim ciklusima kvadratnih valova.

Ova postupna modifikacija PWM-a u SPWM-u namjerno se provodi tako da usko ponavlja eksponencijalno rastući / padajući uzorak standardnih sinusnih valova ili sinusoidnog valnog oblika, pa otuda i naziv sinewave PWM ili SPWM.

Generiranje SPWM-a s Arduinom

Gore objašnjeni SPWM može se jednostavno implementirati pomoću nekoliko diskretnih dijelova, a također i pomoću Arduina koji će vam vjerojatno omogućiti veću preciznost s razdobljima valnog oblika.

Sljedeći Arduino kôd može se koristiti za implementaciju predviđenog SPWM-a za određenu aplikaciju.

Bože !! to izgleda užasno veliko, ako ga znate skratiti, zasigurno to možete učiniti slobodno na svom kraju.

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

U sljedećem postu objasnit ću kako koristiti gornji SPWM generator zasnovan na Arduinu napraviti čisti sinusno-inverterski krug ....nastavi čitati!

Gospodin Atton je dodatno poboljšao gornji SPWM kôd radi poboljšanja njegovih performansi, kako je navedeno u nastavku:

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




Prethodno: 8X prekomjernost od Joule Thief - provjereni dizajn Dalje: Arduino krug pretvarača s čistim sinusnim valom s punim programskim kodom