View
46
Download
5
Category
Preview:
DESCRIPTION
CCP
Citation preview
Prof. Rodrigo Ramos
Módulo CCP
Microcontroladores & Microprocessadores
MCU & MPU ESTRUTURA BÁSICA DE UM PROGRAMA EM LINGUAGEM C
2
Módulo CCP (Capture/Compare/PWM)
MCU & MPU
Introdução
• Módulos usados para medição e controle de sinais temporais baseados em largura de pulsos.
• Formado por registrador de 16 bits, operando como: – Registrador de captura – Registrador de comparação – Registrador de ciclo de trabalho (duty
cycle) no modo PWM
MÓDULO CCP
3
MCU & MPU
Introdução
• No PIC16F877A, existem dois módulos CCP1 e CPP2, que operam de forma idêntica, exceto pelo “Special Event Trigger”.
• Divididos nos registradores de 8 bits CCPRxL e CCPRxH, onde x é 1 ou 2.
• “Special Event Trigger” é gerado no modo comparação quando há concordância entre os valores do Timer1 e do CCPRx. – Resseta Timer1 nos módulos 1 e 2; – Pode começar conversão A/D no módulo 2.
MÓDULO CCP
4
MCU & MPU
Introdução
• CCPxCON: Registrador de controle de operação
• Recursos de Temporizadores:
MÓDULO CCP
5
MCU & MPU
Introdução
MÓDULO CCP
6
Registradores de Controle CCP1CON e CCP2CON (endereços 17h e 1Dh) Bits 3-0 (bit CCPxM3: CCPxM0 – bits de seleção de modo de operação) – Estes bits selecionam o modo como operarão os blocos CCP1 e CCP2.
MCU & MPU
Introdução
MÓDULO CCP
7
0000 = Modos Captura/Comparação/PWM desligados (reseta módulo
CCPx )
0100 = Modo captura, a cada transição negativa (1→0)
0101 = Modo captura, a cada transição positiva (0→1)
0110 = Modo captura, a cada 4 transições positivas (1→0)
0111 = Modo captura, a cada 16 transições positivas (1→0)
1000 = Modo comparação, seta pino de saída (bit CCPxIF é setado)
1001 = Modo comparação, reseta pino de saída (bit CCPxIF é setado)
1010 = Modo comparação, gera interrupção (bit CCPxIF é setado, pino
CCPx não é afetado)
MCU & MPU
Introdução
MÓDULO CCP
8
1011 = Modo comparação, ativa “Special Event trigger”(bit CCPxIF é setado, pino CCPx não é afetado); CCP1 resseta TMR1; CCP2 resseta TMR1 e inicia uma conversão A/D (se módulo A/D habilitado). 11xx = Modo PWM Bits 5-4 (bits CCPxX:CCPxY – bits menos significativos do PWM) – Estes bits representam os dois bits menos significativos do valor de duty-cycle do sinal PWM. Modo Captura: Não usado Modo Comparação: Não usado Modo PWM: Dois bits LSB do duty-cycle do sinal PWM. Os oito MSB’s são gravados no registrador CCPRxL.
MCU & MPU ESTRUTURA BÁSICA DE UM PROGRAMA EM LINGUAGEM C
9
Módulo de Captura
MCU & MPU
Captura • Espera que um evento ocorra em um pino específico do
MCU; • Eventos:
– A cada borda de descida do sinal; – A cada borda de subida do sinal; – A cada 4ª borda de subida do sinal; – A cada 16ª Borda de subida do sinal.
• Evento configurado através de CCPxCON<3:0> • Timer1 deve operar no modo temporizador ou contador
síncrono • Pinos RC1/CCP2 ou RC2/CCP1 devem ser configurads
como entrada.
MÓDULO CCP
10
MCU & MPU
Captura • Quando o evento ocorre, os 16 bits do TMR1
são capturados e colocados em CCPRxH:CCPRxL. – Flag CCPxIF é setado. – Ocorrência de novo evento sobrescreve CCPRx.
MÓDULO CCP
11
MCU & MPU
Captura
MÓDULO CCP
12
• Em quais situações devo usar esse módulo? – Situações onde é necessário medir o tempo
percorrido entre dois eventos consecutivos.
• Exemplo: – Acelerômetros: variam o “duty cycle” de uma
onda quadrada proporcionalmente à aceleração do sistema que está sendo medido.
MCU & MPU
Captura
MÓDULO CCP
13
Exemplo: Para um clock de 4 MHz, com pre-escalonador do Timer 1 em 1:1, teremos uma freq. de operação de 1 MHz, ou cada incremento do Timer 1 ocorrerá a cada 1 us. Assim, se após uma captura o valor no par de registradores CCPR1L:CCPR1H for igual a 100010, significa que o período do sinal aplicado ao pino RC2/CCP1 é de 1 ms.
MCU & MPU
Captura
1. Configure os bits de controle CCPxCON<3:0> para capturar a cada borda de subida;
2. Configure o prescaler do TMR1 levando TMAX em consideração; portanto. sem deixar que o mesmo atinja overflow;
3. Habilite a interrupção de CCP (CCPxIE bit)
MÓDULO CCP
14
Medindo o período de uma onda quadrada
MCU & MPU
Captura
4. Quando uma interrupção CCP ocorrer: a) Subtraia o tempo armazenado (t1) do tempo
capturado (t2) e armazene-o. Use o flag do TMR1 para sinalizar overflow;
b) Armazene o t2; c) Ressete o flag do TMR1;
5. O resultado obtido em 4(a) é o período desejado.
MÓDULO CCP
15
Medindo o período de uma onda quadrada
MCU & MPU
Captura
1. Configure os bits de controle CCPxCON<3:0> para capturar a cada evento de borda de subida;
2. Configure o prescaler do TMR1 considerando WMAX (largura máxima) sem permitir que o mesmo atinja overflow;
3. Habilite a interrupção de CCP (CCPxIE bit).
MÓDULO CCP
16
Medindo largura de pulsos
MCU & MPU
Captura
4. Quando uma interrupção CCP ocorrer: a) Armazene t1;
5. Configure CCPxCON<3:0> para capturar a cada evento de borda de descida;
6. Quando uma interrupção CCP ocorrer: a) Subtraia o tempo capturado (t2) do tempo armazenado
(t1) e armazene-o; b) Use o flag do TMR1 para sinalizar overflow; c) Ressete o flag do TMR1.
MÓDULO CCP
17
Medindo largura de pulsos
MCU & MPU
Captura
• Configure os bits de controle CCPxCON<3:0> para capturar a cada evento de borda de subida;
• Configure o prescaler do TMR1 considerando TMAX (período máximo), sem permitir que o mesmo atinja overflow;
• Habilite a interrupção de CCP (CCPxIE bit);
MÓDULO CCP
18
Medindo o Duty cycle
MCU & MPU
Captura
4. Quando uma interrupção CCP ocorrer: a) Armazene t1;
5. Configure CCPxCON<3:0> para capturar a cada evento de borda de descida;
6. Quando uma interrupção CCP ocorrer: a) Subtraia o tempo capturado (t2) do tempo
armazenado (t1) e armazene-o; b) Use o flag do TMR1 para sinalizar overflow; c) Ressete o flag do TMR1.
MÓDULO CCP
19
Medindo o Duty cycle
MCU & MPU
Captura
7. Configure os bits de controle CCPxCON<3:0> para capturar a cada evento de borda de subida;
8. Configure o prescaler do TMR1 considerando TMAX (período máx.), sem permitir que o mesmo atinja overflow;
9. Habilite a interrupção de CCP (CCPxIE bit); 10. Quando uma interrupção CCP ocorrer:
a) Armazene t3; b) Subtraia o tempo armazenado (t3) do tempo capturado (t2) e
armazene-o; c) Use o flag do TMR1 para sinalizar overflow.
11. Divida o tempo armazenado em 10 b) por 6 a) para obter o duty cycle (W/T).
MÓDULO CCP
20
Medindo o Duty cycle
MCU & MPU ESTRUTURA BÁSICA DE UM PROGRAMA EM LINGUAGEM C
21
Módulo de Comparação
MCU & MPU
Comparação
• Nesse módulo, o valor do registrador CCPRx é comparado com o registrador do TMR1;
• Quando uma coincidência ocorre, o pino RC1/CCP2 ou RC2/CCP1 ficam: – Em nível lógico 1; – Em nível lógico 0; – Fica inalterado;
• Tudo vai depender da programação de CCPxCON; • Pinos RC1 e/ou RC2 devem ser configurados como
saída. • CCPxCON configura o nível do pino CCPx; • O flag CCPxIF é setado quando a coincidência ocorre,
podendo gerar uma interrupção se habilitada.
MÓDULO CCP
22
MCU & MPU
Comparação
MÓDULO CCP
23
MCU & MPU
Comparação
MÓDULO CCP
24
MCU & MPU
Comparação
• Em quais situações devo usar esse módulo? – Situações onde é necessário contar de um tempo inicial
(t0) até um determinado tempo t; – Esse módulo é útil para gerar ações em intervalos de
tempo muito precisos; – Diferente de timers, que necessitam que um certo valor
seja pré carregado em seus registradores a cada vez.
• Exemplos: – Atualizar LCDs n vezes durante um certo período; – Gerar interrupções ou períodos de amostragem em
intervalos de tempo fixos para RTOS (Real Time Operating Systems);
– Gerar interrupções ou períodos de amostragem de um sinal analógico em intervalos de tempo fixos.
MÓDULO CCP
25
MCU & MPU ESTRUTURA BÁSICA DE UM PROGRAMA EM LINGUAGEM C
26
Módulo PWM
MCU & MPU
PWM
MÓDULO CCP
27
• Sinal PWM (pulse width modulation) – ciclo de trabalho de uma forma de onda quadrada periódica é alterado.
• O módulo CCPx produz um sinal PWM com uma resolução de até 10 bits.
• Um sinal PWM é caracterizado pelo seu período e o ciclo de trabalho (duty cycle), que corresponde ao tempo em que o sinal permanece em nível alto.
MCU & MPU
PWM
MÓDULO CCP
28
Quando TMR2 é igual a PR2, os seguintes eventos ocorrem: • TMR2 é apagado;
• O pino CCP1 é setado (exceto se o duty cycle do PWM = 0%, quando o CCP1 não será setado);
• O duty cycle do PWM é copiado de CCPR1L para CCPR1H.
MCU & MPU
PWM
MÓDULO CCP
29
• O período do sinal PWM é especificado pelo registrador PR2:
TPWM = (N + 1) • 4 • TOSC • P
• O duty cycle do PWM é definido escrevendo no registrador CCPR1L (bits mais significativos) e nos bits 5 e 4 do registrador CCP1CON.
• Determinação do período de duty-cycle em termos de tempo:
TON (Duty Cycle do PWM) = M • TOSC • P Duty cycle (%) = (TON/TPWM) • 100
N: valor de PR2 P: valor do prescaler TMR2 M: número decimal correspondente aos 10 bits CCPRxL:CCPxCON<5:4>
MCU & MPU
PWM
MÓDULO CCP
30
• Passos para ajustar o módulo CCP para funcionar no modo PWM: • Ajustar o período do sinal PWM, escrevendo um valor
adequado no registrador PR2; • Ajustar o duty-cycle do sinal PWM, escrevendo um
valor adequado para o registrador CCPR1L e para os bits 5 e 4 do registrador CCP1CON;
• Configurar os pinos RC2/CCP1 ou RC1/CCP2 como uma saída;
• Configurar o módulo CCP1 ou CCP2 para operação no modo PWM;
• Ajustar o valor do pré-escalonador e habilitar o Timer 2 configurando o registrador T2CON;
MCU & MPU
PWM
• Em quais situações devo usar esse módulo? – Situações onde é necessário converter informação
em um canal de comunicação; – Situações onde é necessário controlar a potência
(corrente) entregue a uma carga; • Exemplos: – Controle de um motor de CC (motor DC); – Gerar uma saída analógica (Vrms = duty cycle x
Vmax): conversor D/A; – Variar a intensidade de luminosidade de um LED; – Telecomunicações; – Efeitos de áudio.
MÓDULO CCP
31
MCU & MPU
PWM
• Princípio: variação do duty-cycle com VRMS.
MÓDULO CCP
32
!
Vrms =1T
v 2 (t)dtt1
t1 +T"
MCU & MPU
PWM
MÓDULO CCP
33
Registradores associados com a operação PWM
MCU & MPU
Exercícios
MÓDULO CCP
34
1) Escreva um programa em assembly para medir o período de um sinal aplicado ao pino RC2/CCP1 (use o gerador de sinais). Coloque o resultado nas portas B e D (PORTB<RB7:RB0> e PORTD<RD7:RD0>), acionando leds para mostrar o resultado do período (como um número binário). 2) Escreva um programa em assembly para gerar uma forma de onda PWM com 'duty-cycle' de 30% e período TPWM = 25 us (use P=1 para prescaler). Utilize o osciloscópio para comprovar o resultado e um clock de 20MHz.
MCU & MPU
Exercícios
MÓDULO CCP
35
3) Escreva um programa em C do XC8 para gerar um sinal PWM com TPWM = 25us e duty cycle variável de 10 a 90%. Utilize duas teclas externas: uma para incrementar e outra para decrementar o valor percentual do duty cycle, com incrementos/decrementos de 10%. Mostre o valor percentual do duty cycle em dois displays de 7 segmentos. 4) Usar o módulo PWM do PIC16F877A para controlar a intensidade do brilho de um LED. Faça a implementação em hardware do sistema usando o kit AcePic.
MCU & MPU ESTRUTURA BÁSICA DE UM PROGRAMA EM LINGUAGEM C
36
Bibliografia
MCU & MPU BIBLIOGRAFIA
37
• PEREIRA, F.,”Microcontroladores PIC – Programação em C“, Érica, 7ª ed., 2009.
• Microchip Technology, “MPLAB XC8 C Compiler User’s Guide”, 2012. • Microchip Technology, “MPLAB XC8 Getting Started Guide”, 2013. • MPASM User's Guide, Microchip Technology Inc., 2005. • PIC16F87xA Data Sheet, Microchip Technology Inc., 2003. • PICmicro Mid-Range MCU Family Reference Manual, Microchip
Technology Inc., 1997. • M. Predko, “Programming and Customizing the PIC Microcontroller”,
3rd. Ed., McGraw-Hill, 2008. • F. Pereira, “Microcontroladores PIC: Técnicas Avançadas – 16F627 e
16F628”, 5a. Ed., Érica, 2008. • Perez, E. V. and Areny, R. P., “Microcontrollers: fundamentals and
applications with PIC”, CRC Press, 2009.
Recommended