Ir ao conteúdo

PIC16F877A - Como posso variar a frequência de um PWM?


Ls2

Posts recomendados

Postado

Pessoal,

Eu estou aprendendo PIC por causa de um projeto que preciso fazer. Nesse projeto eu preciso gerar um PWM e ter a possibilidade de variar a frequência do sinal PWM de 5 a 60 Hz. O objetivo é controlar a velocidade de um motor de indução monofásico utilizando um inversor, aí para isso preciso manter constante a relação Volt/Hz. O problema é que eu não tenho a mínima noção de como fazer isso, consegui aprender a gerar PWM, mas a frequência dele fica amarrada devido ao timer que usei. Alguém sabe como posso resolver isso?

Agradeço desde já.

Postado

Por já estar utilizando PIC provavelmente tem mais conhecimento do que eu. Mas já tentou utilizar o CI 555? Montando ele em modo astável dá para gerar PWM e variar a frequência através de um potenciômetro.

Postado
eu preciso gerar um PWM e ter a possibilidade de variar a frequência do sinal PWM de 5 a 60 Hz.

Tem algo estranho aqui.

Você quer variar a frequência PWM ou o DUTY CYCLE?? Frequência PWM é fixa.

Agricio

Postado

Alan,

Não posso usar o 555 porque eu vou precisar fazer uma interface com o PC.

Agricio,

Os dois. Preciso variar tanto o duty cycle como a frequência.

Postado

Variando o duty cycle você varia também a tensão de saída. É só conferir com um voltímetro.

Variar duty e frequência ao mesmo tempo me parece inviável, ou uma coisa ou outra, a menos que haja algum truque que eu ainda não conheça.

Agricio

Postado

O motor é AC, pelo que eu lembro o duty é fixo em 50% o que varia é a frequência.

Faca com o TIMER0

Prescaler em 256

TMR0 em 60

Interrupção em 50ms (50Hz), depois basta colocar um multiplicador para uma frequência menor:

//Interrupção

contador++;

IF (contador >= multiplicador){ // EX: multiplicador = 5

portx.x = 1;

}else{

portx.x = 0;

}

IF (contador == 2* multiplicador) contador = 0; // 5x2= 10 Hz

//Fim da interrupção

Postado

Olá pessoal,

Então, eu procurei outro professor e ele me disse a mesma coisa :P que era inviável. Porém, o professor que me passou o projeto deixou claro que queria isso. Passei a madrugada tentando e consegui algo semelhante ao que eu quero, porém estou com receio de testar. Por ser uma tensão razoavelmente alta (180V) e uma corrente considerável (1A), tenho medo do chaveamento não ficar certinho e acabar dando curto na fonte. Também não consegui fazer com que cada saída iniciasse em tempos diferentes.

Na verdade, é uma "técnica" que o pessoal chama de relação volt/hertz. É preciso manter costante essa relação para o motor não sofrer com aquecimento excessivo. Tomando como base o meu caso, temos um motor de 127V e 60 Hz. Dessa forma, para diminuir a velocidade dele pela metade, teria que ter 30 Hz e 63.5V, ou seja, manter a relação V/Hz constante. Variando só a frequência e mantendo o duty cycle em 50%, eu não teria variação de tensão.

Só uma dúvida em relação ao PIC... o tamanho do código da interrupção tem limite? Digo, se o código ficar muito grande a interrupção pode parar de funcionar (dúvida de iniciante mesmo...)?

Obrigado pela ajuda :D

Postado
Tomando como base o meu caso, temos um motor de 127V e 60 Hz. Dessa forma, para diminuir a velocidade dele pela metade, teria que ter 30 Hz e 63.5V, ou seja, manter a relação V/Hz constante.

Você tem que manter os mesmos 60Hz e variar apenas o duty cycle. Desse jeito dá certo.

O que você quer fazer só é possível com o C.I. 555 e assim mesmo, ou você varia somente a frequência ou somente o duty. Os dois ao mesmo tempo não tem como.

Agricio

Postado

Na verdade, é uma "técnica" que o pessoal chama de relação volt/hertz. É preciso manter costante essa relação para o motor não sofrer com aquecimento excessivo. Tomando como base o meu caso, temos um motor de 127V e 60 Hz. Dessa forma, para diminuir a velocidade dele pela metade, teria que ter 30 Hz e 63.5V, ou seja, manter a relação V/Hz constante. Variando só a frequência e mantendo o duty cycle em 50%, eu não teria variação de tensão.

é bem simples de fazer, embaixo um PWM :

//Interrupção

contador++;

IF (contador <= 3){ //Em 30%

portx.x = 1;

}else{

portx.x = 0;

}

IF (contador == 10) contador = 0;

//Fim da interrupção

Pode substituir por variáveis esses números, assim usa um codico pequeno na INT.

MAIN{

duty = 3;

freq= 10;

}

//Interrupção

contador++;

IF (contador <= duty){ //Em 30%

portx.x = 1;

}else{

portx.x = 0;

}

IF (contador == freq) contador = 0;

//Fim da interrupção

Postado

rafael.luc,

Obrigado pelo código :D Eu consegui fazer ontem. No meu caso, são 4 PWMs; eles têm a mesma frequência, mas cada um possui duty diferentes. Além disso, dois precisam com um atraso inicial. Acho que consegui, levarei amanhã para o professor.

Agradeço pela atenção de todos e o moderador pode encerrar o tópico :D

Mais uma vez, obrigado a todos.

  • Coordenador
Postado

Caso o autor do tópico necessite, o mesmo será reaberto, para isso deverá entrar em contato com a moderação solicitando o desbloqueio.

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!