Beruflich Dokumente
Kultur Dokumente
umento
Introduo
Os controles de potncia, inversores de freqncia, conversores para servomotor,
fonte chaveadas e muitos outros circuitos utilizam a tecnologia do PWM (Pulse
Width Modulation) ou Modulao de Largura de Pulso como base de seu
funcionamento.
Fonte Chaveada
ServoMotores
Inversores de Freqncia
Veja que o interruptor fechado pode definir uma largura de pulso pelo tempo em
que ele fica nesta condio, e um intervalo entre pulsos pelo tempo em que ele fica
aberto. Os dois tempos juntos definem o perodo e, portanto, uma freqncia de
controle. A relao entre o tempo em que temos o pulso e a durao de um ciclo
completo de operao do interruptor nos define ainda o ciclo ativo.
Variando-se a largura do pulso e tambm o intervalo de modo a termos ciclos
ativos diferentes, podemos controlar a potncia mdia aplicada a uma carga.
Assim, quando a largura do pulso varia de zero at o mximo, a potncia tambm
varia na mesma proporo (duty cycle), conforme est indicado na figura abaixo:
Pwm_Init
Pwm_Change_Duty
Pwm_Start
Pwm_Stop
//Sintaxe
Pwm_Init(valor_da_freqncia)
onde:
valor_da freqncia: fator da freqncia em Hz do sinal PWM.
Exemplo:
Pwm_Change_Duty(229); // carrega valor 229 pois : (90% * 255) / 100 = 229,50 , como somente
podemos colocar valores inteiros entre 0 a 255, o valor ser arrendondado para 229
Nem todos os PIC possuem um segundo mdulo CCP2, para os PIC que possuem este segundo mdulo
ou mais mdulos, basta acrescentar o nmero 1 ou 2 nas funes para informar o mdulo que est sendo
programado:
Exemplo:
Pwm1_Init
Pwm1_Change_Duty
Pwm1_Start
Pwm1_Stop
As funes acima faz referncia ao mdulo CCP2 do PIC e possue configurao identica a funo do
mdulo CCP1 estudado acima.
Exemplo de programa:
Para entendermos melhor o funcionamento da funo Pwm do mikroC, vamos estudar um exemplo de
programa simples, acomanhe:
Programa:
void main() {
Pwm_init(5000);
Pwm_Change_Duty(127);
Pwm_Start();
while(1);
}
No programa acima configuramos o mdulo CCP1 do PIC para trabalhar como PWM com freqncia de
5Khz e duty cycle de 50%, conforme grfico abaixo:
No qual:
Freqncia = 1 / perodo --> 5Khz
Duty = 50%
Segundo Programa
Programa:
void main() {
Pwm1_init(5000);
Pwm1_Change_Duty(127);
Pwm1_Start();
while(1);
}
repare que o programa acima tem a mesma funo do programa anterior, a nica diferena que
colocamos o nmero 1 nas funes para indicar que estamos trabalhando com o segundo mdulo CCP do
PIC, ou seja, o mdulo CCP2.
Vamos elaborar um programa em C cuja finalidade carregar na funo Pwm_change_duty() o valor lido
do conversor AN0 do PIC, ou seja, iremos ler constantemente o valor do AD AN0 do PIC, tratar o valor
nmerico da converso para que fique na escala de 0 a 255, pois esta a escala de 0% a 100% de duty do
PWM. A sada PWM do PIC controlar a velocidade de rotao de uma ventoinha.
Esquema:
Programa:
/*********************************************************************
*******
Centro de Tecnologia Microgenios
Programa: Leitura_AD_e_PWM
Placa: KIT PICGENIOS
Objetivo: Controlar uma ventoinha via PWM atravs da entrada AD0.
*/
//**************** definio de variveis
********************************
void main() {
int a = 0;
//define varivel
ADCON1 = 0b00001001;
trisa = 255;
Pwm_Init(5000);
Pwm_Start();
do
{
a = Adc_Read(0);
a = (a * 0.24);
Pwm_Change_Duty(a);
mdulo CCP1 pwm
Delay_10us;
}
while (1);
// rotina de loop
//l canal ad0 e salva em temp_res
//converte valor para o duty cycle
//envia o valor lido de "a" para o
//aguarda 10us
}
Termos como resultado o valor a seguinte forma de onda: