Arduino SPWM Generator Circuit - Kodedetaljer og diagram

Prøv Vores Instrument Til At Fjerne Problemer





I dette indlæg lærer vi, hvordan man genererer sinusbølge-pulsbreddemodulation eller SPWM gennem Arduino, som kan bruges til at lave et rent sinusbølgeomformerkredsløb eller lignende gadgets.

Det Arduino kode er udviklet af mig, og det er min første Arduino-kode, ... og det ser ret godt ud



Hvad er SPWM

Jeg har allerede forklaret hvordan man genererer SPWM ved hjælp af opamps i en af ​​mine tidligere artikler kunne du gå igennem den for at forstå, hvordan den kan oprettes ved hjælp af diskrete komponenter og om dens betydning.

Dybest set er SPWM, der står for sinusbølgepulsbreddemodulation, en type pulsmodulation, hvor impulser er moduleret til at simulere en sinusformet bølgeform, så moduleringen er i stand til at opnå egenskaber for en ren sinusbølge.



For at implementere en SPWM moduleres impulser med en indledende smallere bredde, som gradvist bliver bredere i midten af ​​cyklussen og til sidst ender med at være smallere i slutningen for at afslutte cyklussen.

For at være mere præcis begynder impulser med smaleste bredder, som gradvist bliver bredere med hver efterfølgende impuls, og bliver bredest ved midterpulsen, efter dette fortsætter sekvensen, men med en modsat modulering, det vil sige pulserne begynder gradvist at blive smallere indtil cyklussen er færdig.

Video-demo

Dette udgør en SPWM-cyklus, og dette gentages igennem med en bestemt hastighed som bestemt af applikationsfrekvensen (normalt 50Hz eller 60Hz). Typisk bruges SPWM til at køre strømforsyningsenheder såsom mosfets eller BJT'er i invertere eller omformere.

Dette specielle modulationsmønster sikrer, at frekvenscyklusser udføres med en gradvis skiftende gennemsnitlig spændingsværdi (også kaldet RMS-værdien) i stedet for at kaste pludselige høj- / lavspændingsspidser som normalt ses i flade firkantbølgecyklusser.

Denne gradvis modificering af PWM'er i en SPWM håndhæves med vilje, så den nøje replikerer det eksponentielt stigende / faldende mønster for en standard sinusbølger eller sinusformet bølgeform, deraf navnet sinusbølge PWM eller SPWM.

Generering af SPWM med Arduino

Ovenstående forklarede SPWM kan let implementeres ved hjælp af et par diskrete dele og også ved hjælp af Arduino, hvilket sandsynligvis giver dig mulighed for at få mere nøjagtighed med bølgeformperioderne.

Følgende Arduino-kode kan bruges til at implementere den tilsigtede SPWM til en given applikation.

Gosh !! det ser forfærdeligt stort ud, hvis du ved, hvordan du forkorter det, er du helt sikkert velkommen til at gøre det ved din afslutning.

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

I det næste indlæg forklarer jeg, hvordan man bruger ovenstående Arduino-baserede SPWM-generator til lav et rent sinusbølge inverter kredsløb .... læs videre!

Ovennævnte SPWM-kode blev yderligere forbedret af hr. Atton for at forbedre dens ydeevne som angivet nedenfor:

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




Forrige: 8X Overunity from Joule Thief - dokumenteret design Næste: Arduino Pure Sine Wave Inverter Circuit med fuld programkode