Circuit del generador Arduino SPWM: detalls i diagrama del codi

Proveu El Nostre Instrument Per Eliminar Problemes





En aquest post aprenem a generar modulació d’amplada de pols d’ona sinusoïdal o SPWM mitjançant Arduino, que es pot utilitzar per crear un circuit inversor d’ona sinusoïdal pura o aparells similars.

El Arduino el codi el vaig desenvolupar jo, i és el meu primer codi Arduino, ... i sembla bastant bo



Què és SPWM

Ja ho he explicat com generar SPWM mitjançant opamps en un dels meus articles anteriors, podríeu revisar-lo per comprendre com es pot crear utilitzant components discrets i quant a la seva importància.

Bàsicament, SPWM, que significa modulació d'amplada d'impulsos d'ona sinusoïdal, és un tipus de modulació d'impulsos en què els impulsos es modulen per simular una forma d'ona sinusoïdal, de manera que la modulació és capaç d'assolir propietats d'una ona sinusoïdal pura.



Per implementar un SPWM els polsos es modulen amb unes amplades inicials més reduïdes que gradualment s’amplien al centre del cicle i, finalment, acaben sent més estretes al final del cicle.

Per ser més precisos, els polsos comencen amb amplades més estretes que s’amplien gradualment amb cada pols posterior i s’amplien al pols central, després d’això, la seqüència continua però amb una modulació oposada, és a dir, que els polsos ara comencen gradualment a reduir-se. fins que acabi el cicle.

Demostració de vídeo

Això constitueix un cicle SPWM, que es repeteix a tota velocitat a una velocitat determinada segons la freqüència de l'aplicació (normalment 50Hz o 60Hz). Normalment, SPWM s'utilitza per conduir dispositius de potència com mosfets o BJT en inversors o convertidors.

Aquest patró de modulació especial garanteix que els cicles de freqüència s’executin amb un valor de voltatge mitjà canviant gradualment (també anomenat valor RMS), en lloc de llançar pics sobtats d’alta / baixa tensió, com normalment es veu en cicles d’ona quadrada plana.

Aquesta modificació gradual dels PWMs en un SPWM s’aplica a propòsit de manera que replica de prop el patró exponencialment ascendent / descendent d’una onda sinusoidal estàndard o forma d’ona sinusoïdal, d’aquí el nom d’ona sinusoïdal PWM o SPWM.

Generació de SPWM amb Arduino

El SPWM explicat anteriorment es pot implementar fàcilment mitjançant algunes parts discretes i també mitjançant Arduino, que probablement us permetrà obtenir més precisió amb els períodes de forma d'ona.

El següent codi Arduino es pot utilitzar per implementar el SPWM previst per a una aplicació determinada.

Vaja !! que sembla terriblement gran, si sabeu escurçar-lo, segur que no dubteu a fer-ho al vostre final.

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

A la següent entrada explicaré com utilitzar el generador SPWM basat en Arduino anterior fer un circuit inversor d’ona sinusoïdal pura .... segueix llegint!

Atton va millorar el codi SPWM anterior per millorar el seu rendiment, tal com es mostra a continuació:

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




Anterior: 8X sobreunitat de Joule Thief: disseny provat Següent: Circuit d’inversors d’ona sinusoïdal pura Arduino amb codi de programa complet