Sie sind auf Seite 1von 10

Centro de Tecnologia Microgenios - Todos os direitos reservados

Clique aqui para Imprimir o doc

umento

Canal PWM do PIC

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

PWM a abreviao de Pulse Width Modulation ou Modulao de Largura de Pulso.


Para que se entenda como funciona esta tecnologia no controle de potncia,
partimos de um circuito imaginrio formado por um interruptor de ao muito
rpida e uma carga que deve ser controlada, conforme a figura abaixo:

Quando o interruptor est aberto no h corrente na lmpada e a potncia aplicada


nula. No instante em que o interruptor fechado, a carga recebe a tenso total
da fonte e a potncia aplicada mxima.
Como fazer para obter uma potncia intermediria, digamos 50%, aplicada
carga? Uma idia fazermos com que a chave seja aberta e fechada rapidamente
de modo a ficar 50% do tempo aberta e 50% fechada. Isso significa que, em
mdia, teremos metade do tempo com corrente e metade do tempo sem corrente.
A potncia mdia e, portanto, a prpria tenso mdia aplicada carga neste caso
50% da tenso de entrada.

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:

Este princpio usado justamente no controle PWM: modulamos (variamos) a


largura do pulso de modo a controlar o ciclo ativo do sinal aplicado a uma carga e,
com isso, a potncia aplicada a ela.

Trabalhando com PWM no PIC


O microcontrolador PIC18F442 possui internamente 2 mdulos CCP
(capture/Compare/PWM Module), CCP1 e CCP2. Podemos manipular com grande
facilidade as instrues para gerao de sinal PWM no mikroC. Acompanhe:
Os comandos para manipular o mdulo CCP1 so os seguintes:

Pwm_Init
Pwm_Change_Duty
Pwm_Start
Pwm_Stop

Funo de Inicializao da gerao do sinal PWM:


No mikroC utilizamos a funo Pwm_Init() para informar a freqncia do sinal PWM:

//Sintaxe
Pwm_Init(valor_da_freqncia)
onde:
valor_da freqncia: fator da freqncia em Hz do sinal PWM.

PS.: Consultar datasheet do PIC utilizado para saber a freqncia de oscilao.

Exemplo:

Pwm_Init(4000); // inicia pwm com freqncia de 4khz

Funo de duty Cycle:


A travs da funo Pwm_Change_Duty() podemos controlar o duty cycle do sinal PWM. O valor do duty
cycle varia de 0 a 255, onde "0" igual a 0%, "127" igual a 50% e "255" igual a 100%.
Sintaxe:
Pwm_Change_Duty(valor_duty_cycle)
onde:
valor_duty_cycle: valor do tipo char (0 255) que determina a porcentagem do duty cycle PWM.
Exemplo:
Pwm_Change_Duty(192);

// carrega duty cycle para 75%

Para outros valores de duty cycle calculamos atravs da formula: (Percentual *


255) /100
No caso de configurarmos o duty conforme a figura acima, devemos carregar o
seguinte valor para:
Duty de 10%
Pwm_Change_Duty(25); // carrega valor 26 pois : (10% * 255) / 100 = 25,5 , como somente podemos
colocar valores inteiros entre 0 a 255, o valor ser arrendondado para 25
Duty de 50%
Pwm_Change_Duty(127); // carrega valor 127 pois : (50% * 255) / 100 = 127,50 , como somente
podemos colocar valores inteiros entre 0 a 255, o valor ser arrendondado para 127
Duty de 90%

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

Funo de Start e Stop:


Atravs da funo Pwm_Start(), damos incio a gerao do sinal PWM no PIC, e atravs da funo
Pwm_Stop() finalizamos a gerao do sinal Pwm.
Sintaxe:
Pwm_Start();
Pwm_Stop();

// inicial a gerao do sinal PWM no mdulo CCP1 do PIC


// interrompe a gerao do sinal PWM no mdulo CCP1 do PIC

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

Vamos programar o mdulo CCP2 do PIC18F442:

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.

Controlando a velocidade de uma ventoinha:

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;

//reconfigura e define pinos de A/D

trisa = 255;

//define os pinos como saida

Pwm_Init(5000);
Pwm_Start();

// Inicializa mdulo PWM com 5Khz


// Start PWM

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:

O programa exemplo foi compilado no mikroC e simulado no programa de simulao PROTEUS


(www.labcenter.co.uk).

Voltar para o topo da pgina

Centro de Tecnologia Microgenios - Curso de Microcontroladores PIC - Programao


em C

Microgenios 1998 - 2007. Todos os direitos reservados. proibido cpia parcial ou


integral desse material sem prvio aviso. Maiores informaes:
suporte@microgenios.com.br

Das könnte Ihnen auch gefallen