Sunteți pe pagina 1din 20

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ

DEPARTAMENTO ACADÊMICO DE ELETROTÉCNICA


CURSO DE ENGENHARIA INDUSTRIAL ELÉTRICA – TECNOLOGIA EM
AUTOMAÇÃO INDUSTRIAL

Sistemas Digitais e Microcontrolados


Módulos Capture/Compare/PWM - PIC16F877A

Prof. Amauri Assef


amauriassef@utfpr.edu.br

UTFPR – Campus Curitiba


1
Prof. Amauri Assef
Módulos Capture/Compare/PWM

Características dos módulos CCP


 2 módulos Capture/Compare/PWM
 CCP1
 CCP2
 Capture
 Registro de 16 bits
 Resolução máxima de 12,5 ns
 Compare
 Registro de 16 bits
 Resolução máxima de 200 ns
 PWM (Pulse Width Modulation)
 Modulação por largura de pulso
 Resolução máxima de 10 bits

UTFPR – Campus Curitiba


2
Prof. Amauri Assef
Módulos Capture/Compare/PWM

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

UTFPR – Campus Curitiba


3
Prof. Amauri Assef
Módulos Capture/Compare/PWM

Compare
 No modo de Comparação, os registros CCPR1H:CCPR1L são constantemente
comparados com o par de registradores TMR1 (Timer 1). Quando os valores
coincidem o pino RC2/CCP1 pode ser:
 Setado
 Resetado
 Permanecer inalterado

UTFPR – Campus Curitiba


4
Prof. Amauri Assef
Módulos Capture/Compare/PWM

PWM (Pulse Width Modulation)


 No modo PWM – modulação por largura de pulso – o pino CCPx gera uma saída
PWM com resolução 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 saída

UTFPR – Campus Curitiba


5
Prof. Amauri Assef
Módulos Capture/Compare/PWM

Registrador de configuração do módulo CCPx

 CCPxX:CPxY: Bits LSB do PWM


 Utilizado somente no modo PWM
 CCPxM3:CCPxM0: Modo de seleção 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 saída
 1001 – Compare – reseta saída
 1010 – Compare – gera interrupção sem afetar o pino
 1011 – Compare – trigger de evento especial (A/D)
 11xx - PWM

UTFPR – Campus Curitiba


6
Prof. Amauri Assef
Módulos Capture/Compare/PWM

Diagrama em blocos simplificado do PWM

UTFPR – Campus Curitiba


7
Prof. Amauri Assef
Módulos Capture/Compare/PWM

Cálculo do período PWM


 O período do PWM é especificado escrevendo no registro PR2
 O período pode ser calculado através da seguinte equação:

Período PWM = [(PR2) + 1)] . 4 . Tosc . TMR2 Prescaler

 Tosc é o período do oscilador (clock)

UTFPR – Campus Curitiba


8
Prof. Amauri Assef
Módulos Capture/Compare/PWM

Exemplo de cálculo do período PWM


 Parâmetros
 Período de 50 μs (f = 20 kHz)
 Frequência 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)

Período PWM = [(PR2) + 1)] . 4 . Tosc . TMR2 Prescaler


50 μs = [(PR2 + 1)] . 4 . 125ns . 1

PR2 = 99

UTFPR – Campus Curitiba


9
Prof. Amauri Assef
Módulos Capture/Compare/PWM

Cálculo do duty cycle


 O duty cycle do PWM é especificado através da escrita nos registradores CCPR1L
concatenado com o CCP1CON, bits 5 e 4, com resolução de 10 bits
 O duty cycle pode ser calculado através da seguinte equação:

Duty Cycle PWM = (CCPR1L: CCP1CON <5:4>) . Tosc . TMR2 Prescaler

 Tosc é o período do oscilador (clock)

Calcular o valor de carga para


razão de trabalho igual a 50%:

Obs: O valor deve ser <= 1023

UTFPR – Campus Curitiba


10
Prof. Amauri Assef
Módulos Capture/Compare/PWM

Configuração do Timer 2

 TOUTPS3:TOUTPS0: Seleção 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: Seleção do prescaler do Timer 2
 00 – 1:1
 01 – 1:4
 1x – 1: 16

UTFPR – Campus Curitiba


11
Prof. Amauri Assef
Módulos Capture/Compare/PWM

Exemplo de hardware

UTFPR – Campus Curitiba


12
Prof. Amauri Assef
Módulos Capture/Compare/PWM

Exemplo:
1) Escrever o firmware para gerar um sinal PWM no pino RC2/CCP1 com frequência
de 20 kHz (período = 50 μs) e duty cycle inicial de 20% (50 μs . 0,2 = 10 μs):

2) Escrever o firmware para ler o trimpot do canal 1, normalizar o resultado em 8 bits


e enviar para a função de controle da razão de trabalho do módulo PWM1. Utilizar
frequência de 20kHz:

3) Escrever o firmware para controlar o brilho de um LED conectado no pino RC2


através de um trimpot conectado no pino RA0:

UTFPR – Campus Curitiba


13
Prof. Amauri Assef
Módulos Capture/Compare/PWM

1) Programa principal (Assembly):


INICIO BANK1
MOVLW 0X00
Configura o MOVWF TRISC ; CONFIGURA PORTC COMO SAÍDA
PIC16F877A MOVLW B'00000000' ; TIMER 0 -> PRESCALER DE 1:2
MOVWF OPTION_REG
BANK0

BANK1
MOVLW D'99' ; VALOR PARA PERÍODO DE 50us (20kHz)
MOVWF PR2
BANK0
MOVLW D'20' ; 80/4 = 20%, PARA NÃO UTILIZAR 2 BITS
MOVWF CCPR1L ; DA PARTE BAIXA

UTFPR – Campus Curitiba


14
Prof. Amauri Assef
Módulos Capture/Compare/PWM

Continuação:
CLRF TMR2
MOVLW B'00000100'
; ||||||||-> T2CKPS0 - PRESCALE - 00 = 1:1
; |||||||--> T2CKPS1
; ||||||---> TMR2ON
; |||||----> TOUTPS0 - POSTSCALE - 0000 = 1:1
; ||||-----> TOUTPS1
; |||------> TOUTPS2
; ||-------> TOUTPS3
; |--------> NÃO IMPLEMENT.
MOVWF T2CON
MOVLW B'00001100' ; CONTROLE DO PWM
; ||||||||-> CCP1M0 - SELEÇÃO DE MODO DO CCP1 - 11XX PARA PWM
; |||||||--> CCP1M1
; ||||||---> CCP1M2
; |||||----> CCP1M3
; ||||-----> CCP1Y - PINOS LSB DO DUTY CYCLE DO PWM
; |||------> CCP1X
; ||-------> NÃO IMPLEMENT.
; |--------> NÃO IMPLEMENT.
MOVWF CCP1CON
GOTO $
END

UTFPR – Campus Curitiba


15
Prof. Amauri Assef
Módulos Capture/Compare/PWM

1) Programa principal (C):


unsigned short i;

void main() {
TRISC = 0x00; // PORTC COMO SAÍDA
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);
}
}
}

UTFPR – Campus Curitiba


16
Prof. Amauri Assef
Módulos Capture/Compare/PWM

1) Programa principal (C) para o Micro C Pro:


unsigned short i;

void main() {
TRISC = 0x00; // PORTC COMO SAÍDA
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);
}
}
}

UTFPR – Campus Curitiba


17
Prof. Amauri Assef
Módulos Capture/Compare/PWM

Exemplo com motor DC:


1) Escrever o firmware para fazer o controle de dois motores DC de 5V. Considerando
o CI L293D (ponte H dupla), utilizar os pinos RB0 e RB1 para controle do sentido
dos motores e dois sinais PWM do PIC para controle da velocidade (RC1 e RC2),
que será ajustada conforme o valor de um trimpot conectado no pino RA1 (canal
1). Se chave 1 (CH_1) pressionada, o motor deve girar no sentido horário, caso
contrário, anti-horário. Obs: Ler o valor do trimpot a cada 10 ms.

2) A partir do exercício 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.

UTFPR – Campus Curitiba


18
Prof. Amauri Assef
Módulos Capture/Compare/PWM

CI L293D

UTFPR – Campus Curitiba


19
Prof. Amauri Assef
Módulos Capture/Compare/PWM

Exemplo com foto-emissor infravermelho e foto-receptor:

Fonte:http://www.mecatronicaatual.com.br/educacao/1835-sensor-de-
proximidade-infravermelho-com-pci-12f675?start=1

UTFPR – Campus Curitiba


20
Prof. Amauri Assef

S-ar putea să vă placă și