Guia CNC Brasil - Tudo sobre CNC, Router, Laser, Torno e 3D Print

ELETRÔNICA / ELÉTRICA => Eletrônica Básica => Microcontroladores => Tópico iniciado por: Marcos Dornelas em 02 de Fevereiro de 2011, 21:44

Título: PWM
Enviado por: Marcos Dornelas em 02 de Fevereiro de 2011, 21:44
E ai pessoal!
Meu nome e Marcos e ja fiz um curso de Inst.Elet.Industria is e em breve farei um tecnico em eletroeletronica!

Futuramente (dentro de alguns meses) precisarei junto com uns amigos construir um robo.
Dividindo as tarefas eu fiquei com o CEREBRO do robo,ou seja a programaçao.Nosso professor nos recomendou usar o PIC18F452 e o MPLAB,pragramando em C.
Ja vimos algumas coisas,funçoes,converçao analogica/digital e outras porem,digamos assim que ele prende as informaçoes.
Gostaria de saber como e que eu ultilizo o PWM(Modulaçao de Largura de Pulso) dãaaa!
Sei o que é e suas aplicaçoes em controles de motores Cc e no controle de potencia,mas por mais que eu leia o MPLAB C18 C compiler libraries nao consigo entender como programa-lo.
Visito o forum ja algum tempo e percebo que alem de pessoas inteligentes,ha pessoas dispostas a ajudar.
Por favor uma luz ou um "pisca-pisca"!
Obrigado!
Título: Re:PWM
Enviado por: Blackmore em 04 de Fevereiro de 2011, 17:55
Não sou bom em programação, e nunca trabalhei com o 452, mas acho q as orientações podema ajudar, pois entendi que você vai utilizar o C18 como compilador (as orientações foram retiradas do livro do Alberto Noboru)
Vamos por partes:
1 - Habilitar o PWM, função OpenPWM(período) carrega o valor do argumento para o registro do PR2 do timer. Lembre-se de que o timer tem que ser configurado primeiro.
O período é um valor de 8 bits (0 a 255) e é determinado pela equação:

 período_pwm= [(periodo)+1]*4*(valor_prescaler_TMR 2)/Fosc

2 - Setar o DutyCycle, função SetDCPWMx(duty_cycle) onde no lugar do x deve ser colocado o número do PWM utilizado do uC, neste caso o duty é um valor de 10 bits (0 a 1023) e o tempo do sinal ativo é obtido pela equação:

 Tempo_ativo= (duty_cycle*valor_prescaler_TMR2)/Fosc

Exemplo simples:

Citar
#include <p18f452.h>
#include <timers.h>
#include <pwm.h>

//Fosc = 10Mhz
#pragma config FOSC= HS

void main (void)
{
unsigned int taxa_pwm = 0; //largura do pulso PWM

TRISx = 0bxxxxxxxx; // escolher o port onde está o módulo PWM e setar devidament suas entradas e saídas

OpenTimer2(TIMER_INT_OFF    //desabilita interrupçãp tmr2
                       &T2_PS_14); //Prescaler igual a 4 (1:4)

OpenPWMx (239); //PRx = 239 período pwm = 348us.

SetDCPWMx (120); // Tsinal alto = 120*4/10M = 48us.

while(1); //Looping infinito
}

Este exemplo foi retirado do livro Microcontroladores PIC18, Aprenda e Programe em Linguagem C, Alberto Noboru Miyadaira, Ed. Érica.
Título: Re:PWM
Enviado por: Marcos Dornelas em 05 de Fevereiro de 2011, 13:28
Blackmore,
Muito Obrigado cara,
Vou agora usar o seu exemplo,ficou bem mais claro algumas coisas!
Valeu! Quanto ao livro vou procura-lo!
Obrigado!
Título: Re:PWM
Enviado por: Blackmore em 05 de Fevereiro de 2011, 18:51
Espero que seja útil.
Quanto ao livro, eu gostei bastante e recomendo a todos que me perguntam sobre.

abraço!
Título: Re:PWM
Enviado por: Marcos Dornelas em 06 de Fevereiro de 2011, 19:15
Valeu Blackmore pela ajuda,mas incomodando mais um pouquinho,
por acaso voce poderia me dizer qual e a frequencia maxima PWM,"criada" pelo PIC?
Valeu e desculpa o incomodo!
Título: Re:PWM
Enviado por: minilathe em 06 de Fevereiro de 2011, 19:28

Um pitaco, a frequência do PWM é ajustável e depende das opções que o processador oferece (divisões do prescaler,...) e da frequência de clock utilizada. No caso do PIC16F628 vale a tabela abaixo.

Eu daria uma olhada no datasheet do processador.

Título: Re:PWM
Enviado por: Marcos Dornelas em 06 de Fevereiro de 2011, 19:50
Muito Obrigado pela ajuda minilathe.

Se nao digo abobrinhas,tambem esta relacionado com a frequencia do oscilador correto!?
Título: Re:PWM
Enviado por: Blackmore em 06 de Fevereiro de 2011, 21:31
Marcos Dornelas

Citar
tambem esta relacionado com a frequencia do oscilador correto!?

a frequência do oscilador e frequência do clock citado pelo mestre minilathe são a mesma coisa no seu caso.
Título: Re:PWM
Enviado por: Marcos Dornelas em 07 de Fevereiro de 2011, 13:42
ValeU!

Por acaso voce tambem poderia me dizer se PWM so "sai" dos pinos RC1(ccp2) ou em todo portC e se por acaso dar para configurar cada um de maneira diferente,com uma frequencia diferente?

Desculpa a amolação!
Obrigado!
Título: Re:PWM
Enviado por: Blackmore em 07 de Fevereiro de 2011, 21:46
Se vc for utilizar o PWM interno do microcontrolador, vc soh vai conseguir utilizar o PWM dos pinos indicados (CCP1, CCP2, CCPx) ... se o microcontrolador possuir 2 ou mais saidas com PWM vc pode utilizálos independente um do outro, porém com frequências diferentes eu digo que não é possível, pq os PWM são atrelados ao TMR2, e você não vai conseguir mudar a config do TMR2 toda hora sem perder performance. O pessoal mais experiente me puxe a orelha se falei algo errado.
Mas eu pergunto, é realmente necessário vc utilizar frequência diferente no PWM?
Título: Re:PWM
Enviado por: Marcos Dornelas em 09 de Fevereiro de 2011, 15:45
Nao,nao e nescessario,era so por curiosidade mesmo!
Valeu por toda ajuda!
Muito Obrigado!