Arduino SPWM ģeneratora shēma - informācija par kodu un diagramma

Izmēģiniet Mūsu Instrumentu Problēmu Novēršanai





Šajā amatā mēs uzzinām, kā ģenerēt sinusa viļņu impulsa platuma modulāciju vai SPWM caur Arduino, ko var izmantot tīra sinusa viļņu invertora ķēdes vai līdzīgu sīkrīku izgatavošanai.

The Arduino kodu esmu izstrādājis es, un tas ir mans pirmais Arduino kods, ... un tas izskatās diezgan labi



Kas ir SPWM

Es jau paskaidroju kā ģenerēt SPWM, izmantojot opamps vienā no maniem iepriekšējiem rakstiem jūs varētu to izpētīt, lai saprastu, kā to var izveidot, izmantojot atsevišķus komponentus, un ņemot vērā tā nozīmi.

Būtībā SPWM, kas apzīmē sinusa viļņa impulsa platuma modulāciju, ir impulsa modulācijas veids, kur impulsi tiek modulēti, lai simulētu sinusoidālo viļņu formu, lai modulācija spētu sasniegt tīra sinusa viļņa īpašības.



Lai ieviestu SPWM, impulsi tiek modulēti ar sākotnēji šaurākiem platumiem, kas cikla centrā pakāpeniski kļūst platāki, un cikla beigās beidzot ir šaurāki, lai pabeigtu ciklu.

Precīzāk sakot, impulsi sākas ar šaurākajiem platumiem, kas ar katru nākamo impulsu pakāpeniski kļūst platāki, un visplašāk pie centra impulsa, pēc tam secība turpinās, bet ar pretēju modulāciju, tas ir, impulsi tagad pamazām sāk sašaurināties līdz cikls ir pabeigts.

Video demonstrācija

Tas veido vienu SPWM ciklu, un tas atkārtojas visā konkrētā ātrumā, ko nosaka lietojuma frekvence (parasti 50Hz vai 60Hz). Parasti SPWM tiek izmantots tādu enerģijas ierīču kā mosfetu vai BJT vadīšanai invertoros vai pārveidotājos.

Šis īpašais modulācijas modelis nodrošina, ka frekvenču cikli tiek izpildīti ar pakāpeniski mainīgu vidējo sprieguma vērtību (sauktu arī par RMS vērtību), nevis mest pēkšņus Hi / zema sprieguma tapas, kā parasti novēro plakanos kvadrātveida viļņu ciklos.

Šī pakāpeniski modificētā SPWM PWM tiek mērķtiecīgi ieviesta tā, ka tā cieši atkārto standarta sinusoidālo vai sinusoidālo viļņu eksponenciāli pieaugošā / krišanās modeli, līdz ar to nosaukums sinusoidālais PWM vai SPWM.

SPWM ģenerēšana ar Arduino

Iepriekš izskaidroto SPWM var viegli ieviest, izmantojot dažas atsevišķas daļas, kā arī izmantojot Arduino, kas, iespējams, ļaus jums iegūt lielāku precizitāti ar viļņu formas periodiem.

Lai ieviestu paredzēto SPWM konkrētai lietojumprogrammai, var izmantot šādu Arduino kodu.

Dievs !! tas izskatās šausmīgi liels, ja jūs zināt, kā to saīsināt, jūs noteikti varat justies brīvi to darīt savā galā.

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

Nākamajā ierakstā es paskaidrošu, kā izmantot iepriekš minēto Arduino balstīto SPWM ģeneratoru izveidojiet tīru sinewave invertora shēmu .... turpini lasīt!

Atton kungs vēl vairāk uzlaboja iepriekš minēto SPWM kodu, lai uzlabotu tā veiktspēju, kā norādīts zemāk:

/*
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āri: 8X pārmērība no Džoula zagļa - pārbaudīts dizains Nākamais: Arduino Pure Sine Wave Inverter ķēde ar pilnu programmas kodu