Arduino SPWM Generator Circuit - Mga Detalye ng Code at Diagram

Subukan Ang Aming Instrumento Para Sa Pagtanggal Ng Mga Problema





Sa post na ito natututunan namin kung paano makabuo ng sine wave pulse-width-modulation o SPWM sa pamamagitan ng Arduino, na maaaring magamit para sa paggawa ng isang purong sine wave inverter circuit o mga katulad na gadget.

Ang Arduino Ang code ay binuo ko, at ito ang aking unang Arduino code, ... at mukhang maganda ito



Ano ang SPWM

Naipaliwanag ko na kung paano makabuo ng SPWM gamit ang mga opamp sa isa sa aking mga naunang artikulo, maaari mo itong mapunta sa pag-unawa sa kung paano ito malilikha gamit ang mga discrete na bahagi at tungkol sa kahalagahan nito.

Talaga, ang SPWM na kumakatawan sa modula ng lapad ng pulso ng sine, ay isang uri ng modulate ng pulso kung saan ang mga pulso ay na-modulate upang gayahin ang isang sinusoidal waveform, upang ang modulasyon ay makamit ang mga katangian ng isang purong sine wave.



Upang ipatupad ang isang SPWM ang mga pulso ay binago sa isang paunang mas makitid na mga lapad na unti-unting lumalawak sa gitna ng siklo, at sa wakas ay nagtatapos na mas makitid sa dulo upang matapos ang siklo.

Upang maging mas tumpak, ang mga pulso ay nagsisimula sa mga makitid na lapad na unti-unting lumalawak sa bawat kasunod na pulso, at lumalawak sa gitnang pulso, pagkatapos nito, nagpapatuloy ang pagkakasunud-sunod ngunit may isang kabaligtaran na pagbago, iyon ang mga pulso na unti-unting nagsisimulang makitid hanggang sa matapos ang siklo.

Video Demo

Ito ay bumubuo ng isang siklo ng SPWM, at inuulit ito sa kabuuan sa isang partikular na rate na tinutukoy ng dalas ng aplikasyon (karaniwang 50Hz o 60Hz). Karaniwan, ginagamit ang SPWM para sa pagmamaneho ng mga aparato ng kuryente tulad ng mga mosfet o BJT sa mga inverter o converter.

Tinitiyak ng espesyal na pattern ng pagbago na ang mga cycle ng dalas ay naisakatuparan ng isang unti-unting pagbabago ng average na halaga ng boltahe (tinatawag ding halaga ng RMS), sa halip na magtapon ng biglaang Hi / mababang boltahe na mga spike na karaniwang nasaksihan sa mga flat square cycle na alon.

Ang unti-unting pagbago ng PWMs sa isang SPWM ay sadyang ipinatupad upang malapit nitong masulit ang exponentially pagtaas / pagbagsak na pattern ng isang karaniwang sinewaves o sinusoidal waveform, samakatuwid ang pangalang sinewave PWM o SPWM.

Bumubuo ng SPWM kasama si Arduino

Ang ipinaliwanag sa itaas na SPWM ay madaling maipatupad gamit ang ilang mga discrete na bahagi, at ginagamit din ang Arduino na maaaring paganahin kang makakuha ng higit na kawastuhan sa mga yugto ng alon.

Ang sumusunod na Arduino code ay maaaring magamit para sa pagpapatupad ng inilaan na SPWM para sa isang naibigay na aplikasyon.

Sus !! na mukhang kakila-kilabot na malaki, kung alam mo kung paano ito paikliin, maaaring tiyak na malaya kang gawin ito sa iyong huli.

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

Sa susunod na post ipaliwanag ko kung paano gamitin ang nasa itaas na Arduino batay sa SPWM generator upang gumawa ng isang purong sinewave inverter circuit .... patuloy na basahin!

Ang nabanggit na SPWM code ay karagdagang pinagbuti ni Mr Atton para sa pagpapahusay ng pagganap nito, tulad ng ibinigay sa ibaba:

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




Nakaraan: 8X Overunity mula kay Joule Thief - Napatunayan na Disenyo Susunod: Arduino Pure Sine Wave Inverter Circuit na may Buong Code ng Program