Página 1 de 2

Como fazer dois PWM no 877A

MensagemEnviado: 23 Mar 2007 13:36
por Adauto sampaio
Boa tarde pessoal. To com uma duvida cruel. Preciso fazer dois PWM com o F877A, de forma que seja um em "contrafase" do outro. Explico melhor: quando um está em nivel alto, o outro está em baixo, e assim por diante. Faze-los funcionar não foi problema, só to me matando pra conseguir esse sincronismo. É para o projeto de uma fonte chaveada em half bridge. Agradeço a quem puder dar uma força, to precisando mesmo.
Mais uma coisa, a linguagem é ASM, obrigado. :lol: :lol:

Re: Como fazer dois PWM no 877A

MensagemEnviado: 23 Mar 2007 13:50
por Renie
Olá Adauto,

Pelo que descreveu, não precisaria nem de 2 PWM, bastaria usar um PWM
(ainda economizaria um pino do PIC) e colocar um transistor e uns 2 resistores para inverter o sinal.

Re: Como fazer dois PWM no 877A

MensagemEnviado: 23 Mar 2007 14:00
por Adauto sampaio
Grande Renie, como vai, blz. É que já vi um equipamento que funciona desse jeito, usando os dois pwm nessa configuração, e queria entender (e fazer igual, é claro) o funcionamento dele. Ao ligar, a fonte apresenta um soft start, até estabilizar a tensão, ai então libera o resto do circuito. O problema maior tá em fazer esse bendito ajuste por soft, vc tem alguma idéia? Muito obrigado pela atenção!!!





Renie escreveu:Olá Adauto,

Pelo que descreveu, não precisaria nem de 2 PWM, bastaria usar um PWM
(ainda economizaria um pino do PIC) e colocar um transistor e uns 2 resistores para inverter o sinal.

Re: Como fazer dois PWM no 877A

MensagemEnviado: 23 Mar 2007 14:22
por andre_luis
Precisariamos conhecer a topologia do circuito a ser chaveado por esse controle...Voce saberia identificar ?

MensagemEnviado: 23 Mar 2007 14:25
por mastk
Cuidado com o dead time da ponte, hein, é bom dar um tempo desligando a ponte antes de aciona-la inversamente, o transistores demoram mais pra "deligar" do que pra "ligar". dependo é besteira mas...

MensagemEnviado: 23 Mar 2007 14:35
por Adauto sampaio
Andre_teprom, é um circuito push pull, meia ponte, com dois mosfets de acionamento. Mastk, o dead time já está previsto no projeto, algo em torno de 1uS. Só o que me falta é saber como fazer a "defasagem" (eita) do sinal do PWM1 com o 2. Voces tem alguma idéia de como fazer isso? Ah, antes que me esqueça, o cristal é 20MHz.
Abraços!!!




mastk escreveu:Cuidado com o dead time da ponte, hein, é bom dar um tempo desligando a ponte antes de aciona-la inversamente, o transistores demoram mais pra "deligar" do que pra "ligar". dependo é besteira mas...

MensagemEnviado: 23 Mar 2007 15:43
por andre_luis
Se é push-pull, e ambos os Mosfet ( /BJT ) sao canalN ( /NPN ) voce nao precisa inverter os sinais.

Sendo esse o caso ( que é o mais usual ), o dead time fica subntendido, se seu duty-cicle for inferior ao 50%. Voce estaria se preocupando com algo desnecessário. O que o mastk quiz dizer, creio que fosse exatamente isso : A defasagem é o proprio dead-time.


+++

MensagemEnviado: 23 Mar 2007 15:54
por Adauto sampaio
Sim, ambos os fets são canal N, mas eu precisaria de dois sinais para excita-los: quando o PWM1 estiver no nivel alto, o PWM2 estará no nivel baixo, e vice-versa. Como vou ajustar o duty para um máximo de 49% para cada pwm, o dead time já entra automaticamente. Estes sinais serão aplicados posteriormente em um driver IR2010, e depois aos fets. Só não estou conseguindo imaginar uma solução para ligar ora um, ora outro, nunca os dois ao mesmo tempo (senão KABUMM!!!). Obrigado por tentar me ajudar, se tiver alguma outra idéia, agradeceria muito.

Abraços!!!

andre_teprom escreveu:Se é push-pull, e ambos os Mosfet ( /BJT ) sao canalN ( /NPN ) voce nao precisa inverter os sinais.

Sendo esse o caso ( que é o mais usual ), o dead time fica subntendido, se seu duty-cicle for inferior ao 50%. Voce estaria se preocupando com algo desnecessário.

+++

MensagemEnviado: 23 Mar 2007 16:01
por andre_luis
Entendi...sua dúvida nao é conceitual, mas operacional.
Voce quer saber como implementar isso no PIC.

Bom, se for usando o CCS, há uma série de funcoes que manipulam o módulo de PWM, pelo menos na versao 3.249.
O modo como usei, foi o seguinte :

1) Utilizei o Timer0 para gerar interrupcoes fixas em 120Hz.
2) Dentro da interrupção, acionei o módulo, pelo comando set-duty, se nao me engano.

Em cada ciclo, voce terá de alternar entre o módulo CCP 1 ou 2

É bem simples....

MensagemEnviado: 23 Mar 2007 16:18
por Adauto sampaio
A idéia é exatamente essa, mas infelizmente não programo em C (mas to aprendendo devagar), somente em ASM.
Bom, deixa eu ver se entendi. A cada interrupção, vc aciona ora o pwm 1, ora o pwm2? Os registradores PR2, CCPxL e CCPxCON não precisam ser alterados, a não ser que se deseje mudar o duty?

Abraços!

andre_teprom escreveu:Entendi...sua dúvida nao é conceitual, mas operacional.
Voce quer saber como implementar isso no PIC.

Bom, se for usando o CCS, há uma série de funcoes que manipulam o módulo de PWM, pelo menos na versao 3.249.
O modo como usei, foi o seguinte :

1) Utilizei o Timer0 para gerar interrupcoes fixas em 120Hz.
2) Dentro da interrupção, acionei o módulo, pelo comando set-duty, se nao me engano.

Em cada ciclo, voce terá de alternar entre o módulo CCP 1 ou 2

É bem simples....

MensagemEnviado: 23 Mar 2007 16:49
por fabim
http://www.mikroe.com/en/projects/download/dualpwm.zip

da uma olhada no asm que vai junto..

Fiz uma adaptação pra C e pascal..

Facim

Fabim

MensagemEnviado: 23 Mar 2007 17:27
por Adauto sampaio
Blz Fabim. Pelo que entendi, a idéia original é parecida com o que o nosso colega Andre_teprom falou. Vou "desmembrar" o código pra entender melhor. Vou tentar implementar a idéia, e depois subir a frequencia até 20Khz. Valeu.

Abraços!!!

fabim escreveu:http://www.mikroe.com/en/projects/download/dualpwm.zip

da uma olhada no asm que vai junto..

Fiz uma adaptação pra C e pascal..

Facim

Fabim

MensagemEnviado: 26 Mar 2007 09:53
por andre_luis
Pessoal,

Aproveitando carona no tópico, eu gostaria de pedir uma favor para voces; pois preciso saber se meu compilador está com problemas. Trata-se de algo que nunca precisei usar, mas...

É o seguinte : Quando tento executar o comando :

setup_power_pwm(PWM_CLOCK_DIV_4 | PWM_FREE_RUN | PWM_DEAD_CLOCK_DIV_4,1,10000,1000,0,1,0);

Dá a mensagem undefined identifier --setup_power_pwm, porém eu copiei este exemplo do HELP do CCS. E na descrição do comando, não aparecem restriçoes para este comando.

Alguem poderia testar ?

+++

MensagemEnviado: 26 Mar 2007 12:28
por fabim
rsrs.. tem um pobreminha, que eu observei que todos os maleditos compiladores tem. nos include de funções muitas vezes ele serve tipo para 877 ou >... pra um 628 etc, num funfa nem que a vaca tussa

abraços

Fabim

MensagemEnviado: 26 Mar 2007 14:55
por andre_luis
Poisé....só que estou usando o 16F877.
Eu tentei compilar um programa de teste no 18F ( num dispositivo com CCP ) e também deu esse erro.

+++