Circuito Gerador Arduino SPWM - Detalhes de Código e Diagrama

Experimente Nosso Instrumento Para Eliminar Problemas





Neste post, aprendemos como gerar modulação por largura de pulso de onda senoidal ou SPWM por meio do Arduino, que pode ser usado para fazer um circuito inversor de onda senoidal pura ou dispositivos semelhantes.

O Arduino código é desenvolvido por mim, e é meu primeiro código Arduino, ... e parece muito bom



O que é SPWM

Eu já expliquei como gerar SPWM usando opamps em um de meus artigos anteriores, você poderia percorrê-lo para entender como ele pode ser criado usando componentes discretos e quanto à sua importância.

Basicamente, SPWM que significa modulação de largura de pulso de onda senoidal, é um tipo de modulação de pulso onde os pulsos são modulados para simular uma forma de onda senoidal, de forma que a modulação seja capaz de atingir as propriedades de uma onda senoidal pura.



Para implementar um SPWM, os pulsos são modulados com larguras iniciais mais estreitas que gradualmente ficam mais largas no centro do ciclo, e finalmente acabam sendo mais estreitos no final para finalizar o ciclo.

Para ser mais preciso, os pulsos começam com larguras mais estreitas que gradualmente ficam mais largas com cada pulso subsequente, e fica mais amplo no pulso central, após isso, a sequência continua, mas com uma modulação oposta, ou seja, os pulsos agora começam gradualmente a ficar mais estreitos até que o ciclo termine.

Demonstração de vídeo

Isso constitui um ciclo SPWM e se repete a uma taxa específica, conforme determinado pela frequência de aplicação (geralmente 50 Hz ou 60 Hz). Normalmente, SPWM é usado para dispositivos de alimentação de condução, como mosfets ou BJTs em inversores ou conversores.

Este padrão de modulação especial garante que os ciclos de frequência sejam executados com um valor de tensão média que muda gradualmente (também chamado de valor RMS), em vez de lançar picos de alta / baixa tensão repentinos, como normalmente ocorre em ciclos de onda quadrada plana.

Essa modificação gradual dos PWMs em um SPWM é intencionalmente aplicada de modo que replique de perto o padrão exponencialmente crescente / decrescente de ondas senoidais padrão ou forma de onda senoidal, daí o nome onda senoidal PWM ou SPWM.

Gerando SPWM com Arduino

O SPWM explicado acima pode ser facilmente implementado usando algumas partes discretas e também usando o Arduino, o que provavelmente permitirá que você obtenha mais precisão com os períodos da forma de onda.

O seguinte código do Arduino pode ser usado para implementar o SPWM pretendido para um determinado aplicativo.

Poxa!! que parece terrivelmente grande, se você souber como encurtá-lo, certamente se sentirá à vontade para fazê-lo do seu lado.

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

No próximo post irei explicar como usar o gerador SPWM baseado em Arduino acima para faça um circuito inversor de onda senoidal pura ....continue lendo!

O código SPWM acima foi aprimorado pelo Sr. Atton para aprimorar seu desempenho, conforme indicado abaixo:

/*
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 Overunity de Joule Thief - Design comprovado Próximo: Circuito inversor de onda senoidal Arduino Pure com código de programa completo