Baixe o app para aproveitar ainda mais
Prévia do material em texto
1 UTFPR – Campus Curitiba Prof. Amauri Assef 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 Módulos Capture/Compare/PWM 2 UTFPR – Campus Curitiba Prof. Amauri Assef 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 Módulos 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 Módulos Capture/Compare/PWM 4 UTFPR – Campus Curitiba Prof. Amauri Assef 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 Módulos Capture/Compare/PWM 5 UTFPR – Campus Curitiba Prof. Amauri Assef 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 Módulos Capture/Compare/PWM 6 UTFPR – Campus Curitiba Prof. Amauri Assef 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 Módulos Capture/Compare/PWM 7 UTFPR – Campus Curitiba Prof. Amauri Assef Diagrama em blocos simplificado do PWM Módulos Capture/Compare/PWM 8 UTFPR – Campus Curitiba Prof. Amauri Assef 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: Tosc é o período do oscilador (clock) Período PWM = [(PR2) + 1)] . 4 . Tosc . TMR2 Prescaler Módulos Capture/Compare/PWM 9 UTFPR – Campus Curitiba Prof. Amauri Assef 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 Módulos Capture/Compare/PWM 10 UTFPR – Campus Curitiba Prof. Amauri Assef 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: Tosc é o período do oscilador (clock) Duty Cycle PWM = (CCPR1L: CCP1CON <5:4>) . Tosc . TMR2 Prescaler Calcular o valor de carga para razão de trabalho igual a 50%: Obs: O valor deve ser <= 1023 Módulos Capture/Compare/PWM 11 UTFPR – Campus Curitiba Prof. Amauri Assef 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 Módulos Capture/Compare/PWM 12 UTFPR – Campus Curitiba Prof. Amauri Assef Exemplo de hardware Módulos 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 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: Módulos Capture/Compare/PWM 14 UTFPR – Campus Curitiba Prof. Amauri Assef 1) Programa principal (Assembly): INICIO BANK1 MOVLW 0X00 MOVWF TRISC ; CONFIGURA PORTC COMO SAÍDA 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 Configura o PIC16F877A Módulos Capture/Compare/PWM 15 UTFPR – Campus Curitiba Prof. Amauri Assef 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 Módulos Capture/Compare/PWM 16 UTFPR – Campus Curitiba Prof. Amauri Assef 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); } } } Módulos 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 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 10msDelay_ms(5); } } } Módulos Capture/Compare/PWM 18 UTFPR – Campus Curitiba Prof. Amauri Assef 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. Módulos Capture/Compare/PWM 19 UTFPR – Campus Curitiba Prof. Amauri Assef CI L293D Módulos Capture/Compare/PWM 20 UTFPR – Campus Curitiba Prof. Amauri Assef Fonte:http://www.mecatronicaatual.com.br/educacao/1835-sensor-de- proximidade-infravermelho-com-pci-12f675?start=1 Exemplo com foto-emissor infravermelho e foto-receptor:
Compartilhar