Exemplo de PWM 3 níveis com PIC18F4550

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Exemplo de PWM 3 níveis com PIC18F4550

Mensagempor KrafT » 08 Mar 2015 22:14

Bom, como algumas pessoas manifestaram interesse e esse circuito é bem fácil de montar inclusive para quem está começando, estou postando o código fonte para o circuito em malha aberta.

O comando é em ponte completa com IR2110.



Código: Selecionar todos

#include "PWM3Niveis.h"

#define MF 334    //Indice de modulação.
#define MF_2 MF/2 //Um semiciclo.
#byte CCP1CON = 0x0FBD
#byte CCPR1L = 0x0FBE

#include "tabelas.c"

#int_TIMER2
void  TIMER2_isr(void)
{
static int16 k;
static int meio_mf=167;
static int indice=0;

   k=(TAB_SENO[indice++]);
   if(indice>166)indice=0;
   set_pwm1_duty(k);

   if(!--meio_mf){    //Alterna o braço da ponte de mosfets.
      meio_mf=167;
      if(CCP1CON &0x80)CCP1CON&=0x7F;
      else CCP1CON|=0x80;
   }

}




void main()
{

   setup_adc_ports(AN0_TO_AN3|VSS_VDD);
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_wdt(WDT_OFF);
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DIV_BY_4,149,1);
   setup_timer_3(T3_INTERNAL|T3_DIV_BY_1);
   setup_ccp1(CCP_PWM_FULL_BRIDGE|CCP_PWM);
   set_pwm1_duty(0); //Vai para CCPR1L e CCP1CON 4:5
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);

   enable_interrupts(INT_TIMER2);
   enable_interrupts(GLOBAL);

   set_tris_a(3); //Duas entradas A/D.
   set_tris_b(0);
   set_tris_c(0);
   set_tris_d(0);
   set_tris_e(0);

   set_pwm1_duty(0);



   for(;;){
        }

}
"..."Come to the edge," he said. And so they came. And he pushed them. And they flew."― Guillaume Apollinaire
Avatar do usuário
KrafT
Dword
 
Mensagens: 2228
Registrado em: 11 Out 2006 14:15
Localização: Blumenau -SC

Re: Exemplo de PWM 3 níveis com PIC18F4550

Mensagempor andre_luis » 09 Mar 2015 22:30

KrafT,

Tem como postar também os códigos dos arquivos "PWM3Niveis.h" e "tabelas.c" ?
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Re: Exemplo de PWM 3 níveis com PIC18F4550

Mensagempor ze » 10 Mar 2015 09:53

... e o circuito?
1.jpg>1k.txt
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Re: Exemplo de PWM 3 níveis com PIC18F4550

Mensagempor KrafT » 10 Mar 2015 20:29

Bom, seguem os arquivos faltantes.

O interessante nesse circuito é que o trafo de ferro silício filtra os 20 kHz do PWM e deixa o sinal senoidal conforme o vídeo. É possível eliminar o indutor de saída e utilizar a indutância do trafo para esse fim:

080f04.gif


O trafo é necessário para elevação de tensão. Se for circuito abaixador e não for necessário isolação, ele pode ser dispensado. Acredito que reduzir muito sem trafo não fique eficiente, mas essa aplicação não é comum;

Para fazer malha fechada, medir a tensão de saída e aplicar uma lógica de controle sobre o valor lido da tabela PWM;

A tabela foi gerada no Excel;

O uso de dois mosfets só para selecionar o quadrante, permite menos perdas por comutação nos mesmos.
Você não está autorizado a ver ou baixar esse anexo.
Editado pela última vez por KrafT em 10 Mar 2015 20:41, em um total de 1 vez.
"..."Come to the edge," he said. And so they came. And he pushed them. And they flew."― Guillaume Apollinaire
Avatar do usuário
KrafT
Dword
 
Mensagens: 2228
Registrado em: 11 Out 2006 14:15
Localização: Blumenau -SC

Re: Exemplo de PWM 3 níveis com PIC18F4550

Mensagempor KrafT » 10 Mar 2015 20:32

Tabela: Observem que ela tem dois quadrantes. Seria possível operar só com um, mas como memória de programa não me faltava...
Você não está autorizado a ver ou baixar esse anexo.
"..."Come to the edge," he said. And so they came. And he pushed them. And they flew."― Guillaume Apollinaire
Avatar do usuário
KrafT
Dword
 
Mensagens: 2228
Registrado em: 11 Out 2006 14:15
Localização: Blumenau -SC

Re: Exemplo de PWM 3 níveis com PIC18F4550

Mensagempor KrafT » 10 Mar 2015 20:33

Esquema do microcontrolador...
Você não está autorizado a ver ou baixar esse anexo.
"..."Come to the edge," he said. And so they came. And he pushed them. And they flew."― Guillaume Apollinaire
Avatar do usuário
KrafT
Dword
 
Mensagens: 2228
Registrado em: 11 Out 2006 14:15
Localização: Blumenau -SC

Re: Exemplo de PWM 3 níveis com PIC18F4550

Mensagempor KrafT » 10 Mar 2015 20:40

Esquema do módulo de potência.

O capacitor em série com o trafo é para evitar problemas de parar o PWM ao debugar.

A tensão de entrada foi especificada para um sistema foto-voltaico. O mesmo circuito pode operar numa ampla faixa de tensões, a depender só das características dos Mosfets.
Você não está autorizado a ver ou baixar esse anexo.
"..."Come to the edge," he said. And so they came. And he pushed them. And they flew."― Guillaume Apollinaire
Avatar do usuário
KrafT
Dword
 
Mensagens: 2228
Registrado em: 11 Out 2006 14:15
Localização: Blumenau -SC

Re: Exemplo de PWM 3 níveis com PIC18F4550

Mensagempor andre_luis » 10 Mar 2015 22:19

Voce fez com uma resolução bastante razoável, 42 pontos por ¼ de ciclo da senoide.
Eu fiz um inversor com 32 pontos, e ainda assim já era quase imperceptível a variação.

Mas só um detalhe que eu não entendi, que foi o título "PWM 3 níveis".
Acho que passei batido por algum detalhe no video...rsrs.
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Re: Exemplo de PWM 3 níveis com PIC18F4550

Mensagempor KrafT » 10 Mar 2015 22:28

Três níveis porque não há uma transição de +V para -V na ponte. Temos, +V, zero e -V, ou seja, três níveis.

O interessante dessa técnica é que o núcleo do trafo vai saturando num semicilho, porque o PWm não inverte no semiciclo. Só no próximo semiciclo o núcleo é "desaturado". Se fosse trafo de ferrite, o resultado não seria satisfatório por causa dessa saturação.
"..."Come to the edge," he said. And so they came. And he pushed them. And they flew."― Guillaume Apollinaire
Avatar do usuário
KrafT
Dword
 
Mensagens: 2228
Registrado em: 11 Out 2006 14:15
Localização: Blumenau -SC

Re: Exemplo de PWM 3 níveis com PIC18F4550

Mensagempor ze » 11 Mar 2015 09:23

há alguns anos fiz um treco deste pra girar um motor dum tanquinho. Como de praxe, postei no efêmero boteco e já era. Dicas preciosas do amigo proex, fabim e ... perdoem-me os d+... idade... já viu. Usei um driver igbt sucateado. Devido a alta indutância, eram apenas 17 'steps' de seno. Olhando com mais calma agora, percebo que a tabela poderia ir até 90º só. Mas era minha 1ª vez pow. dá um tempo...
A senoide ficou bunitinha e rodou direitinho. Deu um previsível apitinho. Ai que fofo. A fonte era um gerador 110vdc que era tocado a água. Atualmente está parado pois o córrego secou.
Colo o conteúdo pra somarmos algo
Código: Selecionar todos
/* Programa para uControlador para controle de motor ac com igbt*/
/* 26/09/2011 V0.0A - alpha pic16f627 com portas nand*/
// 30/09 - pic16f876a 2 pwm
//10/10 -dicas do asm51
#include <pic.h>
#define FOSC 10000000 //cristal
#define SAMPLE 17 //num de amostras por semiciclo
#define FREQ 60*2 //120-> 1 semiciclo
#define FREQINT (SAMPLE*FREQ)//freq de interrupção
#define PRESC 16 //prescaler
#define tmr0 0x100-((FOSC/4)/PRESC)/FREQINT
//************************ configuração fusíveis hitech -c*******************
__CONFIG(CP_ON & FOSC_HS & WDTE_OFF & BOREN_ON & LVP_OFF & PWRTE_ON);
static bit comuta;
unsigned char i; //global

unsigned int const tabseno[17]=
{   
99   ,
199   ,
391   ,
568   ,
723   ,
850   ,
945   ,
1003,
1023,
1003,
945   ,
850   ,
723   ,
568   ,
391   ,
199   ,
99
};

//controle pwm
void duty(unsigned int dt)
{
CCP1Y=CCP2Y=dt; //LSB (bit0 pro bit4 de CCP1CON)
dt>>=1;
CCP1X=CCP2X=dt; //LSB (bit1 pro bit5 de CCP2CON)
dt>>=1;
CCPR1L=CCPR2L=dt; //MSB (byte + significativo)
}

static void interrupt
isr(void)         // Here be interrupt function - the name is unimportant.
{
TMR0=tmr0;//restaura
TMR0IF=0;
if (i>16) //completou um semiciclo
   {
   CCP2CON=CCP1CON=0;//pwm off para garantir 0...
   i=0;
   comuta^=1; //próximo seniciclo
   PORTC=0;//... 0 no outro canal
   }
if (!comuta)
   {
   CCP1CON=0b00001100;//pwm1 on
   RC0=1;//liga igbt H direita
   }
else
   {
   CCP2CON=0b00001100;//pwm2 on
   RC3=1;//liga igbt H esquerda
   }
duty(tabseno[i]);
i++;
}

/**********************************************************************/
void main()
{
TRISA=TRISB=TRISC=0;//tudo saída
PORTA=PORTB=PORTC=0;//tudo zerado
CMCON=0xff;//pinos cmcon=digital
CCP1CON=CCP2CON=0;
PR2=0xff;//ajuste freq pwm
T2CON=0b00000100; //timer2 on, prescaler 1:1
OPTION_REG=0b10000011;// TMR0 prescaler 1:16
TMR0=tmr0;//520uS
TMR0IE=1;//habilita interrupt timer0
GIE=1;//interrupção geral
for (;;)
{
//só interrupt por enquanto
}

}

Meu plano era controlar a velocidade, mas ainda não sei como. Creio que tem que diminuir a freq de 60Hz E amplitude, né isso? Bom... dx a água rolar literalmente primeiro. Quem sabe depois de me aposentar... contagem regressiva
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Re: Exemplo de PWM 3 níveis com PIC18F4550

Mensagempor ze » 11 Mar 2015 09:35

ah sim. antes que o kraft peça, não tenho o circuito. Ou melhor, tenho. Só que está em aranhaico (aff doeu). Se precisar tiro foto da aranha.
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Re: Exemplo de PWM 3 níveis com PIC18F4550

Mensagempor KrafT » 12 Mar 2015 20:13

Que é isso Zé... Esquema é para os fracos, hehehe...

O meu protótipo final ficou assim:

Imagem

Os TO-220 na frente dos mosfets são diodos rápidos que botei para testar uma outra topologia. Não são necessários ao circuito proposto.
"..."Come to the edge," he said. And so they came. And he pushed them. And they flew."― Guillaume Apollinaire
Avatar do usuário
KrafT
Dword
 
Mensagens: 2228
Registrado em: 11 Out 2006 14:15
Localização: Blumenau -SC

Re: Exemplo de PWM 3 níveis com PIC18F4550

Mensagempor Rodrigoev » 19 Jan 2016 20:51

Olá amigo!

Estou trabalhando num projeto muito parecido, que terá duas variantes:
- Uma versão será um inversor 2 em 1, ou seja, será um inversor senoidal com carregador de baterias. Obviamente que o equipamento terá o modo inversor e o modo carregador.
- Inversor grid-tie.

Assim que começar a evoluir posto as novidades.

Um detalhe, os pdf's que disponibilizaste no forum, referentes aos esquemas abrem em branco. Poderias postar novamente?

Grande abraço a todos.
Rodrigoev
 
Mensagens: 2
Registrado em: 19 Jan 2016 16:39

Re: Exemplo de PWM 3 níveis com PIC18F4550

Mensagempor KrafT » 20 Jan 2016 21:08

O sol deve ter apagado os PDFs.
SCHEMATIC1 _ 1- CONTROLE.pdf
Você não está autorizado a ver ou baixar esse anexo.
"..."Come to the edge," he said. And so they came. And he pushed them. And they flew."― Guillaume Apollinaire
Avatar do usuário
KrafT
Dword
 
Mensagens: 2228
Registrado em: 11 Out 2006 14:15
Localização: Blumenau -SC

Re: Exemplo de PWM 3 níveis com PIC18F4550

Mensagempor KrafT » 20 Jan 2016 21:11

Lembrando que esse circuitinho foi um trabalhinho de aula e com o PIC utilizado até dá para fazer um controle rudimentar, que para algumas aplicações pode ser suficiente. Mas grid-tie é beeeeeeeeeeeeeeem diferente. Teria que usar um FPGA ou DSP, ou os dois.

SCHEMATIC1 _ 2- POTENCIA.pdf


Não vá se machucar com as altas tensões do circuito.
Você não está autorizado a ver ou baixar esse anexo.
"..."Come to the edge," he said. And so they came. And he pushed them. And they flew."― Guillaume Apollinaire
Avatar do usuário
KrafT
Dword
 
Mensagens: 2228
Registrado em: 11 Out 2006 14:15
Localização: Blumenau -SC

Próximo

Voltar para PIC

Quem está online

Usuários navegando neste fórum: Google [Bot] e 1 visitante

x