MÓDULO PWM DO PIC

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

MÓDULO PWM DO PIC

Mensagempor Pask » 03 Jan 2010 18:25

Amigos, fiz o módulo PWM do PIC 16F876 funcionar para gerar um sinal de 1,22 kHz com ciclo ativo de 20% sem problemas. Este PIC possui 2 módulos PWM com saídas pelos pinos C1 e C2.
Agora estou com um pequeno probleminha: os sinais retangulares que saem pelos pinos C1 e C2 são em fase, ou seja, não tem defasagem entre si. Eu gostaria que houvesse uma defasagem de 180º entre um sinal e outro.
O código, em linguagem C, para geração deste sinal é o seguinte:

setup_timer_2(t2_div_by_16,50,1); //timer2 configurado (prescaler 1:16,PR2=50 e postcaler 1:1)
set_timer2(0); //timer 2 inicializado com zero
setup_ccp1(ccp_pwm); //módulo CCP1 ativado no modo PWM
setup_ccp2(ccp_pwm); //módulo CCP2 ativado no modo PWM dt=41; //valor do duty-cicle aplicado aos registradores do módulo PWM
set_pwm1_duty(dt);
set_pwm2_duty(dt);
}

//Ajusta forma de onda para duty-cicle de 20%
//819,7us = 100% => Um duty-cicle de 20% = 819,7*20% = 164us
//Qual o valor de CCPRL:CCPCON para se atingir esse duty-cicle?
//PWMciclo ativo = Tp * (CCPRL:CCPCON) => 164us = 4,018us * (CCPRL:CCPCON)
//Portanto, CCPRL:CCPCON = 41 (valor da variável dt acima.)
//---------------------------------------------------------------------------------
Espero que seja possível entendê-lo....rsrsrsrs. Está bem comentado!

Se alguém puder me dar uma idéia de como defasar esses sinais de 180° para que não haja coincidência entre seus níveis altos, eu agradeceria muito.
P.S: Eu gostaria que essa defasagem fosse conseguida via programação e não através de componentes adicionais externos ao PIC.
Quero usar esses sinais para acionar um par de transistores em configuração (push-pull) e, como vocês sabem, ambos os transistores não podem conduzir ao mesmo tempo senão ficam em curto-circuito.

Obrigado.

Pask.
Pask
Word
 
Mensagens: 600
Registrado em: 22 Dez 2006 19:19

Mensagempor Djalma Toledo Rodrigues » 03 Jan 2010 19:06

Você os acionou simultâneamente, claro que vai sair em fase .

Aciona PWM2 após conclusão Duty1 e mais alguns us


-------------------------------------------------------------------------
"Agente se forma e pensa que vai curar todas as doenças.
Depois se acaba descobrindo que todos os nossos pacientes acabam morrendo. "
( Antigo Ator da Globo -- Depois coloco o nome )
-------

DJ
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor MOR_AL » 03 Jan 2010 19:12

Olá Pask. Tudo bem?
Olha eu sou leigo em C, mas estou vendo que parece que você está ativando os dois PWM com instruções consecutivas. O que aconteceria se você colocasse um delay (entre as duas instruções) de T/2, ou 1/(2 * 1,22KHz)?
Acho que eles iniciariam com uma defasagem de 50%.

Verifique!!
MOR_AL
"Para o triunfo do mal só é preciso que os bons homens não façam nada." Edmund Burke.
"Nunca discutas com pessoas estúpidas. Elas irão te arrastar ao nível delas e vencê-lo por possuir mais experiência em ser ignorante". Mark Twain
Avatar do usuário
MOR_AL
Dword
 
Mensagens: 2934
Registrado em: 19 Out 2006 09:38
Localização: Mangaratiba - RJ

Mensagempor fender » 03 Jan 2010 19:31

Fala MOR_AL, tudo blz?

Fui tentar acessar o seu site outro dia, e vi que ele se encontra fora do ar.

Não tem mais com ce disponiblizar aquele material sobre Eletrônica Analógica?

Em quais livros você baseou seus estudos?

Abraços
Fender
fender
Byte
 
Mensagens: 268
Registrado em: 13 Out 2006 19:31

Mensagempor MOR_AL » 03 Jan 2010 19:35

fender escreveu:Fala MOR_AL, tudo blz?

Fui tentar acessar o seu site outro dia, e vi que ele se encontra fora do ar.

Não tem mais com ce disponiblizar aquele material sobre Eletrônica Analógica?

Em quais livros você baseou seus estudos?

Abraços
Fender

Olá Fender.
Vou te responder em mensagem particular. Este tópico é sobre outro assunto. Não quero levar um "puxão de orelha" do administrador. OK? :D
Encaminhada!!!
[]'s
MOR_AL
"Para o triunfo do mal só é preciso que os bons homens não façam nada." Edmund Burke.
"Nunca discutas com pessoas estúpidas. Elas irão te arrastar ao nível delas e vencê-lo por possuir mais experiência em ser ignorante". Mark Twain
Avatar do usuário
MOR_AL
Dword
 
Mensagens: 2934
Registrado em: 19 Out 2006 09:38
Localização: Mangaratiba - RJ

Mensagempor Pask » 04 Jan 2010 07:22

Olá amigos. O fabricante do PIC cometeu um erro ao meu ver, pois deveria haver um bit especial em algum registrador relacionado ao PWM para inverter a fase de um dos sinais. Isto, infelizmente, não existe no PIC.
Realmente a solução seria provocar uma espécie de "atraso de tempo" entre os acionamentos do PWM1 e do PWM2. Mas, já tentei fazer isto ontém e ainda não deu certo. Será que errei alguma coisa?

Por exemplo: sendo a variável dt=41 (20% de ciclo ativo), eu tentei fazer o seguinte:

set_pwm1_duty(dt);
set_pwm2_duty(2*dt);

Ou, talvez, poderia ser assim:

setup_ccp1(ccp_pwm);
delay_us (410); //50% do tempo de duração do ciclo completo
setup_ccp2(ccp_pwm);

Mas não obtive o resultado desejado nas duas alternativas acima.
Alguém teria uma segestão melhor. Se tiver, eu agradeço.

Obrigado.
Pask
Word
 
Mensagens: 600
Registrado em: 22 Dez 2006 19:19

Mensagempor fabim » 04 Jan 2010 07:33

pask,. entra aqui.
www.mikroe.com

vai em exemplos, em basic.

tem um exemplo simples de inversão de fase em duas pwm do pic.

ou se tiver usando um PIC18F, tem o advanced pwm...

Abraços
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor fabim » 04 Jan 2010 07:43

www.mikroe.com/en/projects/download/dualpwm.zip

Date: 22-05-2006
This program demosntrates 2 ccp pwm signals 2 khz rate 180 degree out of phase tested on EP3 , 8 mHz , 16F877a , 18F242 , 18F452, 18F4520 and 18F4620. this unit uses Timer1 , CCP1 and CCP2 modules and installs interrupt-services for these . principle : use CCP-module in compare-mode setup timer1 for interrupt every 0.5 ms clear CCP1 output , set CCP2 output setup both CCP-modules to generate interrupt on compare match.
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor MOR_AL » 04 Jan 2010 07:59

Se não encontrar solução usando o hardware, faça por software.
1 - Crie uma interrupção a cada T/2.
2 - Na interrupção N, gere um Ton na saída 1. Ton máximo é menor ou igual a T/2 (50%).
3 - Na interrupção N + 1, gere o mesmo Ton na saída 2. Ton máximo é menor ou igual a T/2 (50%).
4 - Altere (ou não) Ton.
5 - Vá para o item 2.

MOR_AL
"Para o triunfo do mal só é preciso que os bons homens não façam nada." Edmund Burke.
"Nunca discutas com pessoas estúpidas. Elas irão te arrastar ao nível delas e vencê-lo por possuir mais experiência em ser ignorante". Mark Twain
Avatar do usuário
MOR_AL
Dword
 
Mensagens: 2934
Registrado em: 19 Out 2006 09:38
Localização: Mangaratiba - RJ

Mensagempor Djalma Toledo Rodrigues » 04 Jan 2010 08:54

Pask escreveu: ...set_pwm1_duty(dt);
set_pwm2_duty(2*dt); .


Aqui o que foi feito é Duty PWM2 com o doblo da largura de Duty1, e repetindo
erroneamente o acinamento simultâneo como coloquei em minha msg anterior.

----------------------------------------

Imaginem dois iterruptores:

Switch1 ligado ---> Tempo Duty
Desliga
Switch2 Ligado ----> tempo Duty
Desliga

<-------------->Imagem
(caso Push Pull deverá haver um pequeno intervalo de tempo (dead time) entre eles )


DJ
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor Pask » 04 Jan 2010 16:28

Amigos estou analisando as sugestões e as idéias de vocês e, assim que conseguir algo concreto, retornarei e postarei a solução aqui.

Abraços.
Pask
Word
 
Mensagens: 600
Registrado em: 22 Dez 2006 19:19

Mensagempor Pask » 05 Jan 2010 21:02

Amigos, realmente ainda não consegui encontrar uma solução para criar uma defasagem entre os sinais gerados.
Aguardo uma resposta mais concreta de algum de vocês e obrigado.
Pask
Word
 
Mensagens: 600
Registrado em: 22 Dez 2006 19:19

Mensagempor fabim » 06 Jan 2010 07:01

tio, o que tu quer fazer é atrasar 180° um de outro ?
Tipo como se fosse chavear um trafo em push pull ?

olha novamente o link que eu mandei para você..
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor Pask » 06 Jan 2010 07:40

Meu sobrinho, é muito difícil compreender um programa sem comentários.
Mas estive pensando e acho que encontrei a solução via hardware. Usando 2 transistores de sinal comuns, eu posso criar essa defasagem. Depois eu conto mais detalhes.
Pask
Word
 
Mensagens: 600
Registrado em: 22 Dez 2006 19:19

Mensagempor Djalma Toledo Rodrigues » 06 Jan 2010 10:12

Pask escreveu: ...Mas estive pensando e acho que encontrei a solução via hardware. Usando 2 transistores de sinal comuns, eu posso criar essa defasagem....


<------>rsrsrs

DJ
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Próximo

Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x