como controlar o duty cycle do PWM

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

como controlar o duty cycle do PWM

Mensagem  edson em Seg Set 27, 2010 9:28 am

Bom dia senhores. Estou iniciando em programação de Pic's. Estou tentando criar um programa para controlar um inversor de frequencia para motor monofásico. Estou usando a função de PWM para controlar as 'chaves' de potência. Eu preciso de uma função que controle o Duty cycle do Pwm de 0 a 100% e retorne a 0 (não necessariamente de 1 em 1) para gerar um semi ciclo da onda e a mesma função será usada em outra porta Pwm para controlar o outro semi ciclo. Alguém pode me ajudar com esse controle? Eu sei como alterar o Duty cycle, mas não sei como irei controlar essa variação de forma cadenciada.

edson

Mensagens : 6
Data de inscrição : 06/08/2010

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: como controlar o duty cycle do PWM

Mensagem  Bruno S. Avelar em Seg Set 27, 2010 5:13 pm

Bom dia Edson,
Bem vindo ao fórum. Como você não falou nada vou presumir que você está programando no PIC18F4550 usando o KIT PICMinas em C com o compilador C18 da microchip. Caso não seja isso me avise que eu mudo a resposta depois se necessário.

Não tenho certeza se realmente entendi o seu problema...
Pelo que eu entendi o mais complicado voce ja sabe que é configurar e utilizar o PWM. Agora o que você precisa é fazer um algoritimo que comece o Duty cycle do PWM em 0 e vá incrementando de tempos em tempos o Duty cycle até chegar a 100% e quando isso acontecer ele vá decrementando o Duty cycle de tempos em tempos até chegar novamente em 0. É isso?

Primeiramente temos que definir como tratar este "de tempo em tempos". Existem duas maneiras de fazer isso. Uma é com o uso da função delay da biblioteca <delays.h> do C18. Delays te da uma precisão de tempo boa, é mais simples de usar, mas trava sua CPU enquanto conta tempo fazendo espera ocupada. Uma maneira melhor de resolver isso é usar o periférico TIMER do PIC e interrupção. Você configura o tempo de estouro do TIMER e a cada estouro ou a cada x estouros você chama uma função para mudar o Duty cycle.

O PWM possui a função SetDCPWM1() que recebe um inteiro sem sinal onde os 10 bits menos significativos são usados. Logo ela pode ter 2^10 =1024 niveis.

O próximo ponto é pensar como fazer uma função que controla o Duty cycle. Claro que existem várias maneiras de implementar isso, a que eu pensei agora...

Código:

int duty = 0; // Variavel global onde armazena o valor atual do Duty cycle.
char isUping = 1; // Variavel que se 1 o duty está crescendo se 0 ele está decrescendo
..
#include <pwm.h>;
..
.. // main, função de tratamento de exceção , etc.
..
void DutyManager()
{
      if(isUping == 1) // Duty crescendo
      {
          if(duty < 1024)
          {
              duty ++;
          }
          else
          {
              duty = 1024;
              isUping = 0;
          }
      }
      else
      {
            if(duty > 0)
            {
                duty --;
            }
            else
            {
                duty = 0;
                isUping = 1;
            }
      }
      SetDCPWM1(duty);
}

Espero ter ajudado,
Bruno S. Avelar
avatar
Bruno S. Avelar
Admin

Mensagens : 74
Data de inscrição : 26/07/2009
Idade : 32
Localização : Belo Horizonte MG

Ver perfil do usuário http://picminas.forumeiros.com

Voltar ao Topo Ir em baixo

como controlar o duty cycle do PWM

Mensagem  edson em Ter Set 28, 2010 9:23 am

Bom dia Bruno. Vou utilizar o 18F4550 do kit. Vou tentar explicar melhor.
Estamos montando um Inversor de frequencia monofásico para um projeto da faculdade (Anhanguera), a idéia é variar a frequencia de 0Hz até uns 90Hz em um motor AC de 1Kv.
O firmware que pretendo fazer vai ler um valor analógico em uma porta (potenciômetro) e vai fazer os cálculos para se obter a frequencia do PWM para que em 1/2 período da onda senoidal (se 60Hz= 1/60/2) o próprio firmware vai gerar uma variação do Duty Cycle de 0 ao máximo e volta a 0 (por exemplo 10 pulsos, do pulso 1 ao 5 sobe e do pulso 6 ao 10 volta a zero), e quando retornar a zero, será gerado em outra porta PWM o mesmo trem de pulsos para gerar o semiciclo negativo da onda senoidal. Bom acho que consegui me explicar. Agradeço se puder me ajudar.

edson

Mensagens : 6
Data de inscrição : 06/08/2010

Ver perfil do usuário

Voltar ao Topo Ir em baixo

como controlar o duty cycle do PWM

Mensagem  edson em Seg Out 04, 2010 11:30 am

Bom dia Bruno.
Gostaria da sua ajuda. Consegui desenvolver uma codigo que funciona da seguinte maneira:
> criei um vetor de 10 posições
> cada posição do vetor vai guardar uma porcentagem do período do PWM (duty cycle de 0% -> 100%->0%)
> a cada passagem do TMR2 por zero eu configuro o PWM com a nova posição de duty cyclo.
Agora eu preciso realizar essa mesma sequencia em outra saída do PIC. Eu li +ou- no datasheet do 18f4550 que ele tem apenas um modo de PWM mas que eu posso utilizar " ENHANCED CAPTURE/COMPARE/PWM (ECCP) MODULE" que me possibilita 1, 2, ou 4 saídas para o PWM. Como vou usar duas saídas penso em utilizar o modo " HALF-BRIDGE MODE", mas não sei se vai funcionar bem pois, pelo que li no datasheet, a saída 2 é o inverso da saída 1.
Eu preciso que uma saída só dispare seus pulsos quando a outra terminar sua sequencia, pois cada uma das saídas vai controlar um semiciclo da onda senoidal que será gerada.
Você poderia me ajudar com essa configuração do HALF-BRIDGE MODE? pag: 156 do datasheet

edson

Mensagens : 6
Data de inscrição : 06/08/2010

Ver perfil do usuário

Voltar ao Topo Ir em baixo

PWM

Mensagem  Matheus Pacheco em Ter Jan 25, 2011 4:11 pm

Eu preciso de uma ajuda maior. Não sei como configurar um PWM.
Já vi isso na aula de SPP, mas não entendi muito.
Como faz para configurar?

Obrigado
Matheus Pacheco

Matheus Pacheco

Mensagens : 7
Data de inscrição : 25/01/2011
Idade : 27
Localização : Belo Horizonte

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: como controlar o duty cycle do PWM

Mensagem  Bruno S. Avelar em Qua Jan 26, 2011 1:09 pm

Olá Matheus,

O PIC18F4550 que é utilizado no KIT PICMinas18 que você possui possui 2 modulos CCP (Capture Compare PWM). Você pode ler sobre o seu funcionamento no datasheet do PIC18F4550 (rev. E) na página 143. O compilador C18 possui uma biblioteca que facilita o uso deste periférico. Você pode ver a documentação da biblioteca no diretório onde voce instalou o C18, na pasta doc. (por exemplo: C:\mplabc18\doc). A documentação chama "PIC18F Peripheral Library Help Document.chm" Como é uma biblioteca do compilador basta incluir #include <pwm.h>

Nesta biblioteca existem duas funções muito uteis:
--> void OpenPWM1( char period ) : Esta função recebe um número de 8 bits para o período do PWM. O período pode ser calculado pela fórmula

PWM period = [(period ) + 1] x 4 x Tosc x TMR2 prescaler

Repare que o prescaler do timer2 é utilizado, logo é necessário inclui-lo e inicia-lo.

-->void SetDCPWM1(unsigned int dutycycle) : Esta função recebe o dutycycle. Dutycycle é um número de 10 bits que especifica o tempo em nivel lógico 1 que o PWM ficará. (o restante do periodo ele fica em 0)
Este parâmetro pde ser calculado por:

PWM x Duty cycle = (DCx<9:0>) x Tosc


Espero ter ajudado,

Bruno S. Avelar
avatar
Bruno S. Avelar
Admin

Mensagens : 74
Data de inscrição : 26/07/2009
Idade : 32
Localização : Belo Horizonte MG

Ver perfil do usuário http://picminas.forumeiros.com

Voltar ao Topo Ir em baixo

PWM

Mensagem  Matheus Pacheco em Qua Jan 26, 2011 9:14 pm

Ajudou bastante
Obrigado Bruno

Matheus Pacheco

Mensagens : 7
Data de inscrição : 25/01/2011
Idade : 27
Localização : Belo Horizonte

Ver perfil do usuário

Voltar ao Topo Ir em baixo

PWM

Mensagem  Matheus Pacheco em Qui Jan 27, 2011 4:11 pm

Oi Bruno,
tenho mais uma dúvida. Quero usar o pino PWM para
controlar a intensidade do brilho de 8 leds brancos.
Porém eu preciso de potência suficiente para alimentar
os oitos. A saída PWM consegue dar um brilho bom
para todos os 8 leds?

Obrigado
Matheus Pacheco

Matheus Pacheco

Mensagens : 7
Data de inscrição : 25/01/2011
Idade : 27
Localização : Belo Horizonte

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: como controlar o duty cycle do PWM

Mensagem  Bruno S. Avelar em Qui Jan 27, 2011 11:05 pm

Olá Matheus,

Infelizmente os pinos do PIC não suportam o dreno de corrente necessário para acender 8 LEDs.
Para que seja possível você deverá fazer um pequeno circuito que de um ganho de corrente. Uma forma de fazer é utilizar um transistor funcionando como uma chave que permite passagem de corrente provida da alimentação ou impede esta corrente. Este hardware utiliza apenas um resistor e um transistor (alem de fios e/ou protoboard e o circuito dos LEDs). Você deve olhar ainda se o transistor em questão consegue chavear na velocidade que você deseja o PWM. Em geral os transistores são bons o suficiente para isso.

Espero ter ajudado.
Bruno S. Avelar
avatar
Bruno S. Avelar
Admin

Mensagens : 74
Data de inscrição : 26/07/2009
Idade : 32
Localização : Belo Horizonte MG

Ver perfil do usuário http://picminas.forumeiros.com

Voltar ao Topo Ir em baixo

PWM

Mensagem  Matheus Pacheco em Sex Jan 28, 2011 8:38 am

Certo. Então se eu conseguir adaptar uma saída comum para PWM(da meneira como você explicou anteriormente utilizando timers),
posso conseguir o que eu quero, se eu ligar uma saida para cada Led?

Obrigado
Matheus Pacheco

Matheus Pacheco

Mensagens : 7
Data de inscrição : 25/01/2011
Idade : 27
Localização : Belo Horizonte

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: como controlar o duty cycle do PWM

Mensagem  Bruno S. Avelar em Sex Jan 28, 2011 12:37 pm

Sim, dado que cada porta possui corrente suficiente para alimentar um LED você pode utilizar timers para controlar o tempo de acionamento das portas digitais do PIC.

Bruno S. Avelar
avatar
Bruno S. Avelar
Admin

Mensagens : 74
Data de inscrição : 26/07/2009
Idade : 32
Localização : Belo Horizonte MG

Ver perfil do usuário http://picminas.forumeiros.com

Voltar ao Topo Ir em baixo

Re: como controlar o duty cycle do PWM

Mensagem  Conteúdo patrocinado


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum