Você está na página 1de 8

Curso de Microcontroladores PIC Prof. Marcelo do C.C.

Gaiotto

Mdulo PWM (Pulse Width


Modulao por Largura de Pulso

Modulation)

Objetivos:

Conhecer o procedimento de configurao e utilizao dos canais de PWM do


microcontrolador PIC 16F877A
Aplicar o sinal de PWM para controle de velocidade de motores DC cm tcnicas de 100%
e 50% do sinal
Aplicar o acionamento de motores DC com PONTE H e com controle PWM 50% controle de velocidade e sentido
Desenvolver um projeto de uma ponte H com transistores (bipolares de potncia ou
MOSFET) e testar na prxima aula de laboratrio, utilizando os conceitos anteriores.

Desenvolvimento
Informaes necessrias:
Um sinal PWM (Pulse Width Modulation Modulao por Largura de Pulso) permite
que a energia entregue para a carga possa ser controlada. Ele consiste em manter o perodo do sinal
constante, mudando apenas a largura do pulso, ou seja, o tempo que o sinal fica em nvel lgico alto.
A figura 1 apresenta o grfico de um sinal quadrado com perodo constante e larguras de pulso em
50%, ou seja, simtrico.

Figura 1. Sinal quadrado com perodo constante.


Ento, se o sinal de PWM estiver com a maior parte do perodo em nvel lgico alto, ser
entregue mais energia para a carga, ou seja, o nvel mdio da carga ser maior. No caso da maior
parte do perodo estar em nvel lgico 0, menos energia ser entregue para a carga, e
conseqentemente o nvel da tenso mdia ser menor. A figura 2 apresenta os grficos dos efeitos
da variao da largura do pulso e o reflexo na tenso mdia.

Figura 2. Grficos com variao da largura de pulso e o efeito na tenso mdia.


Perceba que o perodo do sinal de PWM constante, e o que varia o tempo ou durao do
pulso que est em nvel alto.
Avaliando agora este conceito tendo como carga um motor DC, quando for entregue mais
energia, o motor dever rodar em determinada velocidade e em um sentido, por exemplo, sentido
horrio. No caso de reduzir a energia, o motor dever diminuir a velocidade, porm, permanece em
seu sentido de giro que neste caso continua sendo horrio. Neste tipo de acionamento o sinal PWM
controla apenas a velocidade do motor, ou seja, de 0 a 100% da velocidade, conhecido com PWM de
100%. A figura 3 demonstra os grficos e os efeitos deste tipo de aplicao.

Figura 3. Grficos de sada de um PWM de 0 a 100% aplicado, por exemplo, em um motor.


Considerando agora o conceito do PWM de 50%, aplicado a uma ponte H e um motor como
carga consegue-se um efeito bem interessante, o controle da velocidade e do sentido de rotao do
motor. Para isso, utiliza-se apenas um sinal de controle PWM e a ponte H deve estar preparada para
funcionar desta forma. A figura 4a apresenta os grficos de sada de um PWM de 50% aplicado, por
exemplo, em um motor ligado a uma ponte H rodando em sentido horrio. J a figura 4b demostra os
grficos de sada de um PWM de 50% aplicado, por exemplo, em um motor ligado a uma ponte H
rodando em sentido anti-horrio.

Figura 4 a. Grficos de sada de um PWM de


50% aplicado, por exemplo, em um motor
ligado a uma ponte H rodando em sentido
horrio.

Figura 4 b. Grficos de sada de um PWM de


50% aplicado, por exemplo, em um motor
ligado a uma ponte H rodando em sentido antihorrio.

O Microcontrolador PIC 16F877A (assim como alguns outros modelos) possui 2 canais de
PWM que podem operar com resoluo mxima de 1024 pontos (de 0 1023), ou seja, o ciclo ativo
pode ser configurado com at 10 bits, e possibilitar variaes de 0 100%. Conforme a freqncia
escolhida para a operao, esta resoluo pode ser alterada para menos de 10 bits.
Para definir o perodo do PWM, devemos ajustar o TIMER 2, que um contador de 8 bits, ou
seja, pode realizar uma contagem de 0 at 255. Este Timer possui ainda dois outros registradores
especiais chamados de PRESCALER e POSTSCALER. A figura 5 apresenta o diagrama em blocos
do TIMER 2.

Figura 5. Diagrama interno do TIMER 2.


Este TIMER possui uma diferena bastante interessante, sua contagem no segue de 0 at o
valor de 255, e sim de 0 at o valor que estiver armazenado no registrador PR2, ou seja, o limite de
contagem ser exatamente o que estiver armazenado no registrador PR2.

Toda vez que o valor do registrador TMR2 for igual ao valor do PR2, o
contador ser resetado e o registrador POSTSCALER incrementado.

O sinal de incremento do TMR2 entregue pelo PRESCALER. Este registrador/contador


nada mais que um divisor de CLOCK (freqncias) que pode ser configurado como sendo:
1:1 divide o sinal de clock por 1, ou seja, o sinal (Fosc/4) responsvel pelo incremento do
TMR2
1:4 divide o sinal de clock por 4, ou seja, so necessrios 4 ciclos completos do sinal
(Fosc/4) para que ocorra um incremento do TMR2;
1:16 divide o sinal de clock por 16, ou seja, so necessrios 16 ciclos completos do sinal
(Fosc/4) para que ocorra um incremento do TMR2.
O POSTSCALER um contador de estouros do TIMER 2, ou seja, toda vez que a contagem
do TIMER 2 chegar ao fim, ocorrer o incremento do POSTSCALER. O valor do POSTSCALER pode
ser escolhido entre 1 e 16.
A interrupo ser gerada sempre que o valor escolhido para o POSTSCALER for alcanado.
Tanto o POSTSCALER quanto o PRESCALER so zerados quando ocorre uma das
seguintes operaes:
Operaes de escrita envolvendo o TMR2;
Operao de escrita envolvendo o T2CON;
Qualquer tipo de reset do PIC;
O TIMER 2 zerado somente em algum tipo de reset, o que o difere dos outros TIMERS.
Para calcular os valores de configurao do MDULO PWM, deve-se determinar os valores
do PRESCALER e do POSTSCALER. Utilizando o Exemplo a seguir:
Calcular um PWM com freqncia de 78,125KHz, com um PIC rodando com um cristal de 20
MHz e o PRESCALER em 1:1.
PERIODO = (PR2+1)*4*(1/xtal)*PRESCALER
(1/78,125KHz) = (PR2+1)*4*(1/20MHz)*1
12,8us = (PR2+1)*4*50ns*1
PR2 = 63.
Utilizando agora a diretiva (funo do compilador C da CCS) em C para configurar o TIMER
2:
SINTAXE: setup_timer2(modo,per,ps)
MODO: varivel ou constante de 8 bits;
Opes para o MODO:
T2_DISABLE: desliga o TIMER 2;
T2_DIV_BY_1: TIMER 2 habilitado com o PRESCALER 1:1;
T2_DIV_BY_4: TIMER 2 habilitado com o PRESCALER 1:4;
T2_DIV_BY_16: TIMER 2 habilitado com o PRESCALER 1:16;
Parmetro: PER: corresponde ao registrador PR2, especifica o mximo valor de contagem do
TIMER 2.
Parmetro: PS: corresponde ao registrador POSTSCALER, e seu valor pode variar de 1 at
16.
A resoluo define qual o valor mximo em bits que pode ser utilizado para uma configurao
de TIMER. Para calcular os valores de configurao do PWM utilizamos o seguinte calculo:
PWM RESOLUO

TPWM = (2

)*(1/xtal)*PRESCALER

PWM RESOLUO

(1/78,125KHz) = (2

)*(1/20MHz)*1

PWM RESOLUO

12,8us = (2

)*50ns*1

(2PWM RESOLUO) = 256


PWM RESOLUO * LOG(2) = LOG(256)
PWM RESOLUO = 8 bits
Com o circuito da figura 6 permite que sejam testados os dois canais de PWM do
microcontrolador PIC 16F877A. Atravs do ajuste de potencimetros, um para cada canal, pode-se

controlar a energia entregue para as sadas, onde esto conectados dois leds, os quais tero a
intensidade de brilho controlada pelo nvel mdio da tenso entregue a eles e de maneira
independente. O cdigo fonte para o teste deste hardware apresentado a seguir.

Figura 6. Circuito bsico de teste para o PWM de 100% dois canais.


//*******************************************************************************************************************
//
Programa exemplo para uso do PWM 100% - frequencia de 19,53KHz
//
- Dois canais de PWM controlados por dois potenciometros
//
conectados ao RA0 e RA11
//*******************************************************************************************************************
#include <16F877A.H> // configurar para o controlador a ser usado
#device ADC=10 // numero de bits do conversor AD - max de 10 bits e min de 8 bits
#use delay(clock=20000000) // informa qual e a frequencia do cristal que esta sendo utilizado
#fuses HS,NOWDT,PUT,NOBROWNOUT,NOLVP
//*******************************************************************************************************************
//
Programa principal
//*******************************************************************************************************************
void main()
{
long ValorAd;
setup_adc_ports(RA0_RA1_RA3_ANALOG); // Entradas RA0, RA1, RA3 Analogicas
setup_adc(ADC_CLOCK_INTERNAL);//seleciona o clock interno para o conversor AD
port_b_pullups(true); // ativa os pullups do PORT B
setup_timer_2 (T2_DIV_BY_1, 255, 1); // timer 2 = 19,53 KHz
setup_ccp1(CCP_PWM);// habilita o PWM 1 a operar
setup_ccp2(CCP_PWM);// habilita o PWM 2 a operar
set_pwm1_duty(512);// coloca a saida de pwm 1 com o ciclo em 50%
set_pwm2_duty(512);// coloca a saida de pwm 2 com o ciclo em 50%
while (true)
{
set_adc_channel(0); // indica qual canal ad sera lido
delay_us(20);// aguarda os capacitores internos se carregarem
ValorAd = read_adc(); // realiza a Leitura do canal selecionado
set_pwm1_duty(ValorAd);
set_adc_channel(1); // indica qual canal ad sera lido
delay_us(20);// aguarda os capacitores internos se carregarem
ValorAd = read_adc(); // realiza a Leitura do canal selecionado
set_pwm2_duty(ValorAd);
delay_ms(10);
}// while

}// void main


//*******************************************************************************************************************
//
FIM do Programa principal
//*******************************************************************************************************************

Com o circuito da figura 7 permite que sejam testados os dois canais de PWM do
microcontrolador PIC 16F877A. Atravs do ajuste de potencimetros, um para cada canal, pode-se
controlar a energia entregue para as sadas, onde esto conectados dois leds, os quais tero a
intensidade de brilho controlada pelo nvel mdio da tenso entregue a eles e de maneira
independente. O cdigo fonte para o teste deste hardware apresentado a seguir.

Figura 7. Circuito bsico de teste para o PWM 100% com Motor DC 24V de baixa corrente.

//*******************************************************************************************************************
//
Programa exemplo para uso do PWM 100% - frequencia de 19,53KHz
//
- Um canal de PWM controlado por um potencimetro conectado
//
ao RA0 controlando a rotao de um motor DC
//*******************************************************************************************************************
#include <16F877A.H> // configurar para o controlador a ser usado
#device ADC=10 // numero de bits do conversor AD - max de 10 bits e min de 8 bits
#use delay(clock=20000000) // informa qual e a frequencia do cristal que esta sendo utilizado
#fuses HS,NOWDT,PUT,NOBROWNOUT,NOLVP
//*******************************************************************************************************************
//
Programa principal
//*******************************************************************************************************************
void main()
{
long ValorAd;
setup_adc_ports(RA0_ANALOG); // PORT A0 Analogica
setup_adc(ADC_CLOCK_INTERNAL);//seleciona o clock interno para o conversor AD
port_b_pullups(true); // ativa os pullups do PORT B
setup_timer_2 (T2_DIV_BY_1, 255, 1); // timer 2 = 19,53 KHz
setup_ccp1(CCP_PWM);// habilita o PWM 1 a operar
set_pwm1_duty(0);// coloca a saida de pwm 1 com o ciclo em 0%
while (true)
{
set_adc_channel(0); // indica qual canal ad sera lido
delay_us(20);// aguarda os capacitores internos se carregarem
ValorAd = read_adc(); // realiza a Leitura do canal selecionado
set_pwm1_duty(ValorAd);
delay_ms(10);
}// while
}// void main
//*******************************************************************************************************************
//
FIM do Programa principal
//*******************************************************************************************************************

Circuito da Ponte H com Rels

Figura 8. Ponte H com rels.


Uma ponte H com rels permite apenas a troca do sentido de rotao do motor, sua
energizao ou freio, no permitindo o controle de velocidade, pois os rels no respondem a altas
velocidades de comutao, sendo utilizados transistores em seus lugares para este feito.
A ponte H pode ser testada em qualquer tenso (VCC), utilizando um circuito que permita
simular o funcionamento do motor, testando o sentido da corrente eltrica que passa pela ponte. Para
realizar o teste, alimente a ponte com uma tenso VCC de 5V ou 12V e conecte o circuito com os
dois leds da figura 9 no lugar do motor.
Acionando somente o rel K1, o led D1 dever acender o que simularia o motor rodando em
um dos sentidos. Ao acionar somente o rel K2, o led D2 dever acender, o que representa o giro do
motor para o outro sentido. No caso dos dois rels estarem desligados ou ligados ao mesmo tempo,
nenhum led dever acender. Este procedimento ira fazer o motor ser freado, pois suas bobinas
ficaro em curto.
OBS: Lembre de dimensionar o resistor R1 para uma corrente de no mximo 15mA
para os leds, independente da tenso.

Figura 9. Circuito de teste da Ponte H com Rels sem motor somente com Leds.

Você também pode gostar