- O que é SPWM (modulação de largura de pulso sinusoidal)?
- Como funciona o inversor SPWM
- Componentes necessários para construir o inversor SPWM
- Construção do circuito do inversor SPWM
- Programa Arduino para inversor SPWM
- Testando o circuito inversor TL494 PWM
Freqüentemente, os circuitos do inversor são necessários onde não é possível obter alimentação CA da rede. Um circuito inversor é usado para converter energia CC em energia CA e pode ser dividido em dois tipos: inversores de onda senoidal pura ou inversores de onda quadrada modificados. Esses inversores de onda senoidal pura são muito caros, enquanto os inversores de onda quadrada modificados são baratos. Saiba mais sobre os diferentes tipos de inversores aqui.
Em um artigo anterior, mostrei como não fazer um inversor de onda quadrada modificado abordando os problemas associados a ele. Portanto, neste artigo, farei um inversor de onda senoidal pura simples usando o Arduino e explicarei o princípio de funcionamento do circuito.
Se você estiver fazendo este circuito, observe que ele não apresenta feedback, proteção contra sobrecorrente, proteção contra curto-circuito e proteção contra temperatura. Portanto, este circuito é construído e demonstrado apenas para fins educacionais e não é absolutamente recomendável construir e usar este tipo de circuito para aparelhos comerciais. No entanto, você pode adicioná-los ao seu circuito, se necessário, os circuitos de proteção comumente usados como
A proteção contra sobretensão, proteção contra sobrecorrente, proteção contra polaridade reversa, proteção contra curto-circuito, controlador Hot Swap, etc. já foram discutidos.
CUIDADO: Se você estiver fazendo este tipo de circuito, tenha muito cuidado com a alta tensão e os picos de tensão gerados pelo sinal de comutação para a entrada.
O que é SPWM (modulação de largura de pulso sinusoidal)?
Tal como o nome sugere, SPWM meios S inusoidal P ulse W IDþ M odulation. Como você já deve saber, um sinal PWM é um sinal no qual podemos alterar a frequência do pulso, bem como o tempo de ativação e desativação, também conhecido como ciclo de serviço. Se você quiser saber mais sobre PWM, pode ler aqui. Assim, ao variar o ciclo de trabalho, alteramos a tensão média do pulso. A imagem abaixo mostra que-
Se considerarmos um sinal PWM que é comutação entre 0 - 5V que tem um ciclo de trabalho de 100%, teremos uma média de tensão de saída de 5V, mais uma vez, se considerarmos o mesmo sinal com um ciclo de trabalho de 50%, vamos obtenha a tensão de saída de 2,5 V, e para o ciclo de trabalho de 25%, é a metade disso. Isso resume o princípio básico do sinal PWM, e podemos avançar para a compreensão do princípio básico do sinal SPWM.
Uma tensão senoidal é principalmente uma tensão analógica que altera sua magnitude ao longo do tempo, e podemos reproduzir este comportamento de uma onda senoidal mudando continuamente o ciclo de trabalho da onda PWM, a imagem abaixo mostra isso.
Se você olhar o esquema abaixo, verá que há um capacitor conectado na saída do transformador. Este capacitor é responsável por suavizar o sinal AC da frequência portadora.
O sinal de entrada utilizado carregará e descarregará o capacitor de acordo com o sinal de entrada e a carga. Como usamos um sinal SPWM de frequência muito alta, ele terá um ciclo de trabalho muito pequeno que é como 1%, este ciclo de trabalho de 1% irá carregar o capacitor um pouco, o próximo ciclo de trabalho é de 5%, isso irá carregar novamente o capacitor um pouco mais, o pulso seguinte terá um duty cycle de 10% e o capacitor irá carregar um pouco mais, vamos aplicar o sinal até atingirmos um duty cycle de 100% e a partir daí, voltaremos a 1%. Isso criará uma curva muito suave como uma onda senoidal na saída. Portanto, ao fornecer valores adequados do ciclo de trabalho na entrada, teremos uma onda muito senoidal na saída.
Como funciona o inversor SPWM
A imagem acima mostra a seção de acionamento principal do inversor SPWM e, como você pode ver, usamos dois MOSFETs de canal N em configuração de meia ponte para acionar o transformador deste circuito, para reduzir o ruído de chaveamento indesejado e para proteger o MOSFET, usamos diodos 1N5819 em paralelo com os MOSFETs. Para reduzir quaisquer picos prejudiciais gerados na seção do portão, usamos os resistores de 4,7 ohms em paralelo com diodos 1N4148. Finalmente, os BD139 e BD 140 transistores são configurados num push-pull configuraçãopara acionar a porta do MOSFET, porque este MOSFET tem uma capacitância de porta muito alta e requer um mínimo de 10 V na base para ligar corretamente. Saiba mais sobre o funcionamento dos amplificadores Push-Pull aqui.
Para entender melhor o princípio de funcionamento do circuito, nós o reduzimos a um ponto em que esta seção do MOSFET está LIGADA. Quando o MOSFET está na corrente, primeiro flui através do transformador e, em seguida, é aterrado pelo MOSFET, assim, um fluxo magnético também será induzido na direção em que a corrente está fluindo, e o núcleo do transformador passará o fluxo magnético no enrolamento secundário, e teremos o meio ciclo positivo do sinal senoidal na saída.
No próximo ciclo, a parte inferior do circuito está na parte superior do circuito desligada, por isso retirei a parte superior, agora a corrente flui na direção oposta e gera um fluxo magnético nessa direção, invertendo assim a direção do fluxo magnético no núcleo. Saiba mais sobre o funcionamento do MOSFET aqui.
Bem, todos nós sabemos que um transformador funciona por mudanças de fluxo magnético. Assim, ligar e desligar ambos os MOSFETs, um invertido para o outro e fazer isso 50 vezes por segundo, irá gerar um fluxo magnético oscilante agradável dentro do núcleo do transformador e a mudança do fluxo magnético irá induzir uma tensão na bobina secundária como sabemos pela lei do faraday. É assim que o inversor básico funciona.
O circuito inversor SPWM completo usado neste projeto é fornecido abaixo.
Componentes necessários para construir o inversor SPWM
Sim. Não |
Peças |
Tipo |
Quantidade |
1 |
Atmega328P |
IC |
1 |
2 |
IRFZ44N |
Mosfet |
2 |
3 |
BD139 |
Transistor |
2 |
4 |
BD140 |
Transistor |
2 |
5 |
22pF |
Capacitor |
2 |
6 |
10K, 1% |
Resistor |
1 |
7 |
16MHz |
Cristal |
1 |
8 |
0,1uF |
Capacitor |
3 |
9 |
4.7R |
Resistor |
2 |
10 |
1N4148 |
Diodo |
2 |
11 |
LM7805 |
Regulador de voltagem |
1 |
12 |
200uF, 16V |
Capacitor |
1 |
13 |
47uF, 16V |
Capacitor |
1 |
14 |
2,2uF, 400V |
Capacitor |
1 |
Construção do circuito do inversor SPWM
Para esta demonstração, o circuito é construído em Veroboard, com a ajuda do esquema, Na saída do transformador, uma grande quantidade de corrente fluirá pela conexão, portanto os jumpers de conexão precisam ser o mais grossos possíveis.
Programa Arduino para inversor SPWM
Antes de prosseguirmos e começarmos a entender o código, vamos esclarecer o básico. A partir do princípio de funcionamento acima, você aprendeu como o sinal PWM ficará na saída, agora a questão permanece como podemos fazer essa onda variável nos pinos de saída do Arduino.
Para fazer o sinal PWM variável, vamos usar o temporizador 1 de 16 bits com uma configuração de prescaler de 1, o que nos dará 1600/16000000 = 0,1 ms de tempo para cada contagem se considerarmos um único meio-ciclo de uma onda senoidal, que se encaixa exatamente 100 vezes em meio ciclo da onda. Em termos simples, seremos capazes de amostrar nossa onda senoidal 200 vezes.
Em seguida, temos que dividir nossa onda senoidal em 200 peças e calcular seus valores com uma correlação da amplitude. Em seguida, temos que converter esses valores em valores do contador do temporizador, multiplicando-os pelo limite do contador. Finalmente, temos que colocar esses valores em uma tabela de pesquisa para alimentá-los no contador e obteremos nossa onda senoidal.
Para tornar as coisas um pouco mais simples, estou usando um código SPWM muito bem escrito do GitHub, feito por Kurt Hutten.
O código é muito simples, começamos nosso programa adicionando os arquivos de cabeçalho necessários
#include #include
Em seguida, temos nossas duas tabelas de pesquisa, das quais obteremos os valores do contador do cronômetro.
int lookUp1 = {50, 100, 151, 201, 250, 300, 349, 398, 446, 494, 542, 589, 635, 681, 726, 771, 814, 857, 899, 940, 981, 1020, 1058, 1095, 1131, 1166, 1200, 1233, 1264, 1294, 1323, 1351, 1377, 1402, 1426, 1448, 1468, 1488, 1505, 1522, 1536, 1550, 1561, 1572, 1580, 1587, 1593, 1597, 1599, 1600, 1599, 1597, 1593, 1587, 1580, 1572, 1561, 1550, 1536, 1522, 1505, 1488, 1468, 1448, 1426, 1402, 1377, 1351, 1323, 1294, 1264, 1233, 1200, 1166, 1131, 1095, 1058, 1020, 981, 940, 899, 857, 814, 771, 726, 681, 635, 589, 542, 494, 446, 398, 349, 300, 250, 201, 151, 100, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0}; int lookUp2 = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 100, 151, 201, 250, 300, 349, 398, 446, 494, 542, 589, 635, 681, 726, 771, 814, 857, 899, 940, 981, 1020, 1058, 1095, 1131, 1166, 1200, 1233, 1264, 1294, 1323, 1351, 1377, 1402, 1426, 1448, 1468, 1488, 1505, 1522, 1536, 1550, 1561, 1572, 1580, 1587, 1593, 1597, 1599, 1600, 1599, 1597, 1593, 1587, 1580, 1572, 1561, 1550, 1536, 1522, 1505, 1488, 1468, 1448, 1426, 1402, 1377, 1351, 1323, 1294, 1264, 1233, 1200, 1166, 1131, 1095, 1058, 1020, 981, 940, 899, 857, 814, 771, 726, 681, 635, 589, 542, 494, 446, 398, 349, 300, 250,201, 151, 100, 50, 0};
A seguir, na seção de configuração , inicializamos os registros de controle do contador do temporizador para que sejam limpos em cada um. Para mais informações, é necessário consultar a ficha técnica do IC atmega328.
TCCR1A = 0b10100010; / * 10 limpo na partida, definido em BOTTOM para compA. 10 liberado na partida, definido em BOTTOM para compB. 00 10 WGM1 1: 0 para a forma de onda 15. * / TCCR1B = 0b00011001; / * 000 11 WGM1 3: 2 para a forma de onda 15. 001 sem pré-escala no contador. * / TIMSK1 = 0b00000001; / * 0000000 1 TOV1 Habilitação de interrupção de sinalização. * /
Depois disso, inicializamos o registro de captura de entrada com um valor predefinido de 16000, pois isso nos ajudará a gerar exatamente 200 amostras.
ICR1 = 1600; // Período para cristal de 16 MHz, para uma frequência de chaveamento de 100 KHz para 200 subdivisões por ciclo de onda senoidal de 50 Hz.
Em seguida, habilitamos interrupções globais chamando a função, sei ();
Finalmente, configuramos os pinos 9 e 10 do Arduino como saída
DDRB = 0b00000110; // Defina PB1 e PB2 como saídas.
Isso marca o fim da função de configuração.
A seção de loop do código permanece vazia, pois é um programa controlado por interrupção de contador de temporizador.
void loop () {; /*Fazer nada…. para sempre!*/}
Em seguida, definimos o vetor de estouro do timer1, esta função de interrupção recebe uma chamada assim que o timer1 está sobrecarregado e gera uma interrupção.
ISR (TIMER1_OVF_vect) {
Em seguida, declaramos algumas variáveis locais como variáveis estáticas e começamos a alimentar os valores para o resistor de captura e comparação.
static int num; static char trig; // muda o ciclo de trabalho a cada período. OCR1A = lookUp1; OCR1B = lookUp2;
Finalmente, nós pré-incrementamos o contador para alimentar os próximos valores para os resistores de captura e comparação, o que marca o fim deste código.
if (++ num> = 200) {// Pré-incremento num, então verifique se está abaixo de 200. num = 0; // Reset num. trig = trig ^ 0b00000001; digitalWrite (13, trig); }
Testando o circuito inversor TL494 PWM
Para testar o circuito, a seguinte configuração é usada.
- Bateria de chumbo-ácido 12V.
- Um transformador que tem uma torneira 6-0-6 e uma torneira 12-0-12
- Lâmpada incandescente de 100 W como carga
- Meco 108B + multímetro TRMS
- Multímetro Meco 450B + TRMS
Sinal de saída do Arduino:
Depois de fazer o upload do código. Eu medi o sinal SPWM de saída dos dois pinos do Arduino que se parece com a imagem abaixo,
Se ampliarmos um pouco, podemos ver o ciclo de trabalho em constante mudança da onda PWM.
A seguir, a imagem abaixo mostra o sinal de saída do transformador.
Circuito do inversor SPWM em estado ideal:
Como você pode ver na imagem acima, este circuito consome cerca de 13W enquanto funciona de maneira ideal
Tensão de saída sem carga:
A tensão de saída do circuito do inversor é mostrada acima, esta é a tensão que sai na saída sem nenhuma carga anexada.
Consumo de energia de entrada:
A imagem acima mostra a potência de entrada que consome quando uma carga de 40W é conectada.
Consumo de energia de saída:
A imagem acima mostra a potência de saída que é consumida por este circuito, (a carga é uma lâmpada incandescente de 40W)
Com isso, concluímos a parte de teste do circuito. Você pode conferir o vídeo abaixo para uma demonstração. Espero que tenha gostado deste artigo e aprendido um pouco sobre SPWM e suas técnicas de implementação. Continue lendo, continue aprendendo, continue construindo e até o próximo projeto.