Escolar Documentos
Profissional Documentos
Cultura Documentos
(PWM)
A sigla PWM é traduzida como Modulação por Largura de Pulso, um sinal PWM
pode ser definido como um sinal de frequência fixa e largura de pulso variável. A
largura de pulso, também chamada de ciclo ativo (Duty Cycle) é a parte do sinal que
se mantém em lógico 1.
Embora o sinal PWM seja digital, existe um nível DC (valor médio) associado a ele,
a variação na largura do ciclo ativo resulta na variação do seu nível DC, assim
temos:
Ex: Suponha um sinal PWM de 5V de pico com período de 10us e ciclo ativo de 5us
(o que corresponde a 50% do ciclo ativo), assim temos um nível DC de:
5us
Vdc = x 5 = 2,5v
10us
1
Fc =
2 πRC
● Timer 2
0000 = 1:1
0001 = 1:2
0010 = 1:3
0011 = 1:4
.
.
.
1111 = 1:16
00 = 1:1
01 = 1:4
10 = 1:8
11 = 1:16
Ex: Suponha que escolhamos o postscaler de 1:8 assim será necessário 8 estouros
do TMR2 para que a interrupção seja gerada.
Dois módulos são capazes de gerar o sinal PWM no PIC, são eles o CCP1 e CCP2,
onde os registradores CCP1CON e CCP2CON são responsáveis por ativar o modo
de operação PWM
CCP1CON:
Mostraremos como gerar o PWM pelo módulo CCP1 que está ligado a saída física
RC2 do PIC (Pino 17), assim o pino RC2 deve ser configurado como saída e seu
valor de saída será o sinal PWM.
Podemos usar 4 saídas do PIC para tratar o PWM, são elas P1A,P1B,P1C,P1D
Através dos bits 7:6 (P1M1:P1M0) do registrador CCP1CON definimos como essas
saídas serão utilizadas:
Assim sendo para alterarmos o período do sinal PWM devemos alterar o valor
armazenado no registrador PR2
Ex: Qual valor deve ser inserido no PR2 para que o PWM tenha uma frequência de
15625Hz sendo a frequência do oscilador principal de 8MHz e prescaler de 1:1 no
Timer 2?
Assim:
DC1B1 DC1B0
CCPR1
9 8 7 6 5 4 3 2 1 0
Observe que CCPR1 permanece com os 8 bits mais significativos dos 10 bits.
CCP1CON = 0bxx00xxxx;
CCPR1 = 0b00110010;
Logo temos que quando TMR2 = PR2 o PWM vai a nível alto e quando
TMR2 = (CCPR1L+DC1B1:DC1B0) o PWM vai a nível baixo.
onde active-high (ativo em nível alto) e active-low (ativo em nível baixo) funcionam
conforme a figura abaixo:
Na nossa aplicação queremos o sinal PWM do tipo ativo em nível alto, como nossa
saída será o P1A, temos que usar a configuração: 1100 ou 1101 nos bits
CCP1M3:CCP1M0 (CCP1CON<3:0>)
Ex: Gerando um sinal PWM na saída P1A(RC2) através do módulo CCP1, o sinal
gerado terá frequência de 20kHz e duty cycle de 25us (50% do ciclo ativo). O tipo do
PWM será ativo em nível alto. (Obs: Fosc = 20MHz)
#include "lib.h"
void config_pwm(void)
{
DutyCycle_PWM ();
Periodo_PWM();
#include "lib.h"
void Inicializa_PWM(void)
{
CCP1CON = 0b00001100 ;
T2CON = 0b00000100;
}