Arduino SPWM Generator Circuit - Kodedetaljer og diagram

Prøv Instrumentet Vårt For Å Eliminere Problemer





I dette innlegget lærer vi hvordan vi kan generere sinusbølge-pulsbreddemodulering eller SPWM gjennom Arduino, som kan brukes til å lage en ren sinusbølgeomformerkrets eller lignende dingser.

De Arduino koden er utviklet av meg, og det er min første Arduino-kode, ... og den ser ganske bra ut



Hva er SPWM

Jeg har allerede forklart hvordan generere SPWM ved hjelp av opamps i en av mine tidligere artikler, kan du gå gjennom den for å forstå hvordan den kan opprettes ved hjelp av diskrete komponenter og om dens betydning.

I utgangspunktet er SPWM som står for sinusbølgepulsbreddemodulasjon, en type pulsmodulasjon der pulser er modulert for å simulere en sinusformet bølgeform, slik at modulasjonen er i stand til å oppnå egenskaper av en ren sinusbølge.



For å implementere en SPWM moduleres pulser med innledende smalere bredder som gradvis blir bredere i sentrum av syklusen, og til slutt slutter å være smalere på slutten for å fullføre syklusen.

For å være mer presis, begynner pulser med smaleste bredder som gradvis blir bredere for hver påfølgende puls, og blir bredest ved midtpulsen, etter dette fortsetter sekvensen, men med en motsatt modulering, det vil si at pulser nå gradvis begynner å bli smalere til syklusen er ferdig.

Video Demo

Dette utgjør en SPWM-syklus, og dette gjentas gjennom en bestemt hastighet som bestemt av applikasjonsfrekvensen (vanligvis 50Hz eller 60Hz). Vanligvis brukes SPWM til å drive kraftenheter som mosfets eller BJT i ​​omformere eller omformere.

Dette spesielle modulasjonsmønsteret sikrer at frekvenssyklusene blir utført med en gradvis skiftende gjennomsnittsspenningsverdi (også kalt RMS-verdien), i stedet for å kaste plutselige høy- / lavspennings pigger som normalt sett i flate firkantbølgesykluser.

Denne gradvise modifiseringen av PWM i en SPWM håndheves med vilje slik at den nøyaktig replikerer det eksponentielt stigende / fallende mønsteret til en standard sinusbølger eller sinusformet bølgeform, derav navnet sinusbølge PWM eller SPWM.

Genererer SPWM med Arduino

Ovennevnte forklarte SPWM kan enkelt implementeres ved hjelp av noen få diskrete deler, og også ved hjelp av Arduino, som sannsynligvis vil gjøre det mulig for deg å få mer nøyaktighet med bølgeformperioder.

Følgende Arduino-kode kan brukes til å implementere den tiltenkte SPWM for en gitt applikasjon.

Goss !! det ser veldig stort ut. Hvis du vet hvordan du skal forkorte det, kan du sikkert gjøre det på slutten.

// 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 neste innlegg forklarer jeg hvordan du bruker den ovennevnte Arduino-baserte SPWM-generatoren til lage en ren sinusbølgeomformerkrets ....Fortsett å lese!

Ovennevnte SPWM-kode ble ytterligere forbedret av Atton for å forbedre ytelsen, som gitt 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 - Proven Design Neste: Arduino Pure Sine Wave Inverter Circuit med full programkode