Vous êtes sur la page 1sur 19

1

UTFPR Campus Curitiba


Prof. Amauri Assef
UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN
DEPARTAMENTO ACADMICO DE ELETROTCNICA
CURSO DE ENGENHARIA INDUSTRIAL ELTRICA TECNOLOGIA EM
AUTOMAO INDUSTRIAL


Sistemas Digitais e Microcontrolados
Mdulos Capture/Compare/PWM - PIC16F877A

Prof. Amauri Assef
amauriassef@utfpr.edu.br

Mdulos Capture/Compare/PWM
2
UTFPR Campus Curitiba
Prof. Amauri Assef
Caractersticas dos mdulos CCP
2 mdulos Capture/Compare/PWM
CCP1
CCP2
Capture
Registro de 16 bits
Resoluo mxima de 12,5 ns
Compare
Registro de 16 bits
Resoluo mxima de 200 ns
PWM (Pulse Width Modulation)
Modulao por largura de pulso
Resoluo mxima de 10 bits
Mdulos Capture/Compare/PWM
3
UTFPR Campus Curitiba
Prof. Amauri Assef
Recurso dos Timers
Timer 1 16 bits
Timer 2 8 bits

Capture
No modo de Captura, os registros CCPR1H:CCPR1L capturam o valor de 16 bits do
par de registradores TMR1 (Timer 1) quando um evento ocorre no pino RC2/CCP1
Um evento definido como:
Cada borda de descida
Cada borda de subida
Cada 4 borda de subida
Cada 16 borda de descida

Mdulos Capture/Compare/PWM
4
UTFPR Campus Curitiba
Prof. Amauri Assef
Compare
No modo de Comparao, os registros CCPR1H:CCPR1L so constantemente
comparados com o par de registradores TMR1 (Timer 1). Quando os valores
coincidem o pino RC2/CCP1 pode ser:
Setado
Resetado
Permanecer inalterado

Mdulos Capture/Compare/PWM
5
UTFPR Campus Curitiba
Prof. Amauri Assef
PWM (Pulse Width Modulation)
No modo PWM modulao por largura de pulso o pino CCPx gera uma sada
PWM com resoluo de 10 bits
Como o CCP1 multiplexado como o latch de dado do PORTC, o registro TRISC, bit
2, deve ser zerado para configurar o pino RC2/CCP1 como sada

Mdulos Capture/Compare/PWM
6
UTFPR Campus Curitiba
Prof. Amauri Assef
Registrador de configurao do mdulo CCPx




CCPxX:CPxY: Bits LSB do PWM
Utilizado somente no modo PWM
CCPxM3:CCPxM0: Modo de seleo dos CCPx
0000 CCP desabilitado
0100 Capture a cada borda de descida
0101 - Capture a cada borda de subida
0110 - Capture a cada 4 borda de subida
0111 - Capture a cada 16 borda de subida
1000 Compare, seta sada
1001 Compare reseta sada
1010 Compare gera interrupo sem afetar o pino
1011 Compare trigger de evento especial (A/D)
11xx - PWM




Mdulos Capture/Compare/PWM
7
UTFPR Campus Curitiba
Prof. Amauri Assef
Diagrama em blocos simplificado do PWM
Mdulos Capture/Compare/PWM
8
UTFPR Campus Curitiba
Prof. Amauri Assef
Clculo do perodo PWM
O perodo do PWM especificado escrevendo no registro PR2
O perodo pode ser calculado atravs da seguinte equao:


Tosc o perodo do oscilador (clock)


Perodo PWM = [(PR2) + 1)] . 4 . Tosc . TMR2 Prescaler
Mdulos Capture/Compare/PWM
9
UTFPR Campus Curitiba
Prof. Amauri Assef
Exemplo de clculo do perodo PWM
Parmetros
Perodo de 50 s (f = 20 kHz)
Frequncia do cristal de 8 MHz (Tosc = 125 ns)
Prescaler do Timer 2 igual a 1:1
Calcular o valor de carga do registro PR2 (banco 1)


Perodo PWM = [(PR2) + 1)] . 4 . Tosc . TMR2 Prescaler
50 s = [(PR2 + 1)] . 4 . 125ns . 1
PR2 = 99
Mdulos Capture/Compare/PWM
10
UTFPR Campus Curitiba
Prof. Amauri Assef
Clculo do duty cycle
O duty cycle do PWM especificado atravs da escrita nos registradores CCPR1L
concatenado com o CCP1CON, bits 5 e 4, com resoluo de 10 bits
O duty cycle pode ser calculado atravs da seguinte equao:


Tosc o perodo do oscilador (clock)


Duty Cycle PWM = (CCPR1L: CCP1CON <5:4>) . Tosc . TMR2 Prescaler
Mdulos Capture/Compare/PWM
11
UTFPR Campus Curitiba
Prof. Amauri Assef
Configurao do Timer 2




TOUTPS3:TOUTPS0: Seleo do postscale do Timer 2
0000 1:1
....
1111 1:16
TMRON2: Bit para ligar o Timer 2
0 Timer 2 desligado
1 Timer 2 ligado
T2CKPS1:T2CKPS0: Seleo do prescaler do Timer 2
00 1:1
01 1:4
1x 1: 16



Mdulos Capture/Compare/PWM
12
UTFPR Campus Curitiba
Prof. Amauri Assef
Exemplo de hardware


Mdulos Capture/Compare/PWM
13
UTFPR Campus Curitiba
Prof. Amauri Assef
Exemplo:

1) Escrever o firmware para gerar um sinal PWM no pino RC2/CCP1 com frequncia
de 20 kHz (perodo = 50 s)e duty cycle inicial de 20% (50 s . 0,2 = 10 s):

2) Escrever o firmware para controlar o brilho de um LED conectado no pino RC2
atravs de um trimpot conectado no pino RA0:



Mdulos Capture/Compare/PWM
14
UTFPR Campus Curitiba
Prof. Amauri Assef
1) Programa principal (Assembly):

INICIO BANK1
MOVLW 0X00
MOVWF TRISC ; CONFIGURA PORTC COMO SADA
MOVLW B'00000000' ; TIMER 0 -> PRESCALER DE 1:2
MOVWF OPTION_REG
BANK0

BANK1
MOVLW D'99' ; VALOR PARA PERODO DE 50us (20kHz)
MOVWF PR2
BANK0
MOVLW D'20' ; 80/4 = 20%, PARA NO UTILIZAR 2 BITS
MOVWF CCPR1L ; DA PARTE BAIXA

Configura o
PIC16F877A
Mdulos Capture/Compare/PWM
15
UTFPR Campus Curitiba
Prof. Amauri Assef
Continuao:

CLRF TMR2
MOVLW B'00000100'
; ||||||||-> T2CKPS0 - PRESCALE - 00 = 1:1
; |||||||--> T2CKPS1
; ||||||---> TMR2ON
; |||||----> TOUTPS0 - POSTSCALE - 0000 = 1:1
; ||||-----> TOUTPS1
; |||------> TOUTPS2
; ||-------> TOUTPS3
; |--------> NO IMPLEMENT.
MOVWF T2CON
MOVLW B'00001100' ; CONTROLE DO PWM
; ||||||||-> CCP1M0 - SELEO DE MODO DO CCP1 - 11XX PARA PWM
; |||||||--> CCP1M1
; ||||||---> CCP1M2
; |||||----> CCP1M3
; ||||-----> CCP1Y - PINOS LSB DO DUTY CYCLE DO PWM
; |||------> CCP1X
; ||-------> NO IMPLEMENT.
; |--------> NO IMPLEMENT.
MOVWF CCP1CON
GOTO $
END
Mdulos Capture/Compare/PWM
16
UTFPR Campus Curitiba
Prof. Amauri Assef
1) Programa principal (C):

unsigned short i;

void main() {
TRISC = 0x00; // PORTC COMO SADA
PORTC = 0x00; // VALOR INICIAL = 00

Pwm_Init(20000); // INICIALIZA O MODULO PWM COM 20kHz
Pwm_Start(); // INICIA PWM

while(1) {
for (i = 1; i <= 255; i++)
{
Pwm_Change_Duty(i); // INCREMENTA O DUTY CYCLE A CADA 10ms
Delay_ms(5);
}
}
}


Mdulos Capture/Compare/PWM
17
UTFPR Campus Curitiba
Prof. Amauri Assef
1) Programa principal (C) para o Micro C Pro:

unsigned short i;

void main() {
TRISC = 0x00; // PORTC COMO SADA
PORTC = 0x00; // VALOR INICIAL = 00

PWM1_Init(20000); // INICIALIZA O MODULO PWM COM 20kHz
PWM1_Start(); // INICIA PWM

while(1) {
for (i = 1; i < 255; i++)
{
PWM1_Set_Duty(i); // INCREMENTA O DUTY CYCLE A CADA 10ms
Delay_ms(5);
}
}
}


Mdulos Capture/Compare/PWM
18
UTFPR Campus Curitiba
Prof. Amauri Assef
Exemplo com motor DC:

1) Escrever o firmware para fazer o controle de um motor DC de 5V. Considerando o
CI L293D (ponte H dupla), utilizar os pinos RD2 e RD3 para controle do sentido do
motor e um sinal PWM do PIC para controle da velocidade, que ser ajustada
conforme o valor de um trimpot conectado no pino RA0. Se chave 1 (CH_1)
pressionada, o motor deve girar no sentido horrio, caso contrrio, anti-horrio.
Obs: Ler o valor do trimpot a cada 100 ms.

2) A partir do exerccio anteiror, incluir um trimpot para controle de outro motor com
os pinos RD4 e RD5. Utilizar a chave (CH_2) para selecionar o sentido de giro do
segundo motor.


Mdulos Capture/Compare/PWM
19
UTFPR Campus Curitiba
Prof. Amauri Assef



CI L293D