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:
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
Include Include Include Include Include Include Include Include Include Include Include Include Include Include Include Include Include Include Include Include
Endereçamentos - I OEndereçamentos - I OEndereçamentos - I OEndereçamentos - I OEndereçamentos - I OEndereçamentos - I OEndereçamentos - I OEndereçamentos - I O
Sep-Sistema ESEP-SISTEMA ELETRICO DE POTÊNCIASEP-SISTEMA ELETRICO DE POTÊNCIASEP-SISTEMA ELETRICO DE POTÊNCIASEP-SISTEMA ELETRICO DE POTÊNCIAletrico de Potência