MICROCONTROLADORES II EN C. TEMA 3

32
MICROCONTROLADORES II MÓDULO CCP (CAPTURA/COMPARACIÓN/PWM) PROF. LUIS ZURITA IUT Cumaná

Transcript of MICROCONTROLADORES II EN C. TEMA 3

Page 1: MICROCONTROLADORES II EN C. TEMA 3

MICROCONTROLADORES IIMÓDULO CCP

(CAPTURA/COMPARACIÓN/PWM)

PROF. LUIS ZURITA

IUT Cumaná

Page 2: MICROCONTROLADORES II EN C. TEMA 3

MODO CAPTURA

• En este modo CCP1 y CCP2 funcionan de forma idéntica. (En losnombres de registros a continuación x=1,2)

• En este modo la pareja de registros CCPRxH:CCPRxL captura elvalor de 16 bits que contiene TMR1 cuando sucede un evento enla pata RCy/CCPx del PORTC (estos pines deben configurarsecomo entradas con un 1 en TRISC).

• Los eventos son los configurados en CCPxM3:CCPxM0 delregistro de control CCPxCON, para el modo Captura.

• Al realizar la captura se activa el bit de interrupción CCPxIF y sila interrupción está habilitada mediante CCPxIE, se genera unainterrupción al cargar el CCPRxH:CCPRxL con TMR1.

• TMR1 en este modo debe estar configurado como temporizador ocontador síncrono, nunca en modo asíncrono.

• Al cambiar la condiciones de funcionamiento dentro del modocaptura conviene desactivar el módulo primero.

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 3: MICROCONTROLADORES II EN C. TEMA 3

FLUJOGRAMA CCP1 CAPTURA

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 4: MICROCONTROLADORES II EN C. TEMA 3

MODO COMPARACIÓN

• Los registros CCPRxH:CCPRxL comparan su valor de formacontinua con el valor de TMR1. Cuando coinciden el pin RCy/CCPxdel PORTC (configurado como salida) sufre un evento.

• Los eventos son los configurados en CCPxM3:CCPxM0 delregistro de control CCPxCON para el modo Comparación.

• Al coincidir CCPRxH:CCPRxL y TMR1 se activa el bit deinterrupción CCPxIF y si la interrupción está habilitada medianteCCPxIE, se genera un interrupción.

• TMR1 en este modo debe estar configurado como temporizador ocontador síncrono, nunca en modo asíncrono.

• Si se ha seleccionado el modo disparo especial, el módulo CCP1 yCCP2 realizan tareas distintas. El CCP1 pone a 0 el TMR1 y elCCPR1 funciona como un Registro de Período capaz de generarperiódicamente interrupciones. El CCP2 pone a 0 el TMR1 yademás inicia una conversión del A/D, con lo que se puedenrealizar conversiones periódicas. Aunque TMR1=0 no se generainterrupción del timer1.

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 5: MICROCONTROLADORES II EN C. TEMA 3

FLUJOGRAMA CCP1 COMPARACIÓN

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 6: MICROCONTROLADORES II EN C. TEMA 3

MODO PWM

• Con este modo se consiguen impulsos, cuya anchura de nivel alto es deduración variable y sirven para control de motores y generación deseñales.

• Se utiliza un módulo CCP, el timer2 y un pin RCy/CCPx de salida.• El comparador entre el valor PR2 y TMR2 cuando detecta la igualdad:

1. Activa ‘1’ el flip-flop de salida.2. Resetea TMR2.3. El valor de CCPRxL se carga en CCPRxH.

• El periodo de la señal se calcula como:Periodo=[(PR2)+1]*4*Tosc*(Valor predivisor TMR2)

• Se comparan los valores de 10 bits ([CCPRxH:CCP1CON(5:4)]) y TMR2concatenados con los dos bits de menor peso del reloj interno) cuandoson iguales:1. Desactiva ‘0’ el flip-flop de salida.2. No resetea TMR2

• El ciclo activo es:Ancho pulso=(CCPRxL:CCP1CON(5:4))*Tosc*(V. predivisor TMR2)

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 7: MICROCONTROLADORES II EN C. TEMA 3

FLUJOGRAMA PWM

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 8: MICROCONTROLADORES II EN C. TEMA 3

SEÑAL PWM

Periodo=[(PR2)+1]*4*Tosc*(Valor predivisor TMR2)

Duty Cycle=(CCPRxL:CCP1CON(5:4))*Tosc*(V. predivisor TMR2)

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 9: MICROCONTROLADORES II EN C. TEMA 3

SEÑAL PWM

Nota: Si el valor del duty cycle de la PWM es máslargo que el período de la PWM, el pin CCP1 nopodrá ser puesto a cero

La resolución máxima en bits viene dada por:

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 10: MICROCONTROLADORES II EN C. TEMA 3

Modo PWM

Pasos para configurar el PWM:

1. Asignar PR2.

2. Asignar CCPRxL y CCPxCON(5:4).

3. Configurar RCy/CCPx de salida.

4. Asignar Pre-divisor en T2CON.

5. Activar TMR2 en T2CON.

6. Configurar CCPx en modo PWM.

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 11: MICROCONTROLADORES II EN C. TEMA 3

Bit 7-6: No implementados: Se lee como "0"Bit 5-4: CCP1X: CCP1Y: bit menos significativos de PWMModo Captura sin usarModo Comparación sin usarModo PWM: Estos dos bit son los menos significativos del ciclo

de PWM.Los ocho bits más significativos se encuentran en CCPR1L.Bit 3-0: CCP1M3-.CCP1M0; bit de selección del modo de

trabajo del módulo comparador CCP1.

CCP1CON

U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

--- CCP1X CCP1Y CCP1M3 CCP1M2 CCP1M1 CCP1M0

Bit 7 Bit 0

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 12: MICROCONTROLADORES II EN C. TEMA 3

CCP1CON

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 13: MICROCONTROLADORES II EN C. TEMA 3

TABLAS MÓDULO CCP

Modo CCP Recurso de Timer

Captura Timer1

Comparación Timer1

PWM Timer2

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 14: MICROCONTROLADORES II EN C. TEMA 3

EJERCICIOS CCPZ

ona

de

Config

ura

ció

n Se configuran los bancos

Se configura el módulo CCP

Se configuran lasInterrupciones (opcional)

Se regresa al Banco 0

Resto del programa(Tratamiento de la información)

Captura:Medir período,

Ton, Toff

Captura:Comparaciones

Y acciones

Comparación:Setpoint 16 bits

PWM:Genera señal

Comparación:Acción sobre RCx

PWM:En base a acción

Generar Señal

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 15: MICROCONTROLADORES II EN C. TEMA 3

El compilador C contiene un conjunto de funciones para elmanejo del módulo CCP.

• Para leer el contenido de un módulo CCP se utiliza:valor=CCP_x;donde valor es un entero de 16 bits que se carga con el valor delCCP respectivo.

• Para escribir el contenido de un módulo CCP se utiliza:CCP_x=valor;donde valor es un entero de 16 bits que se carga con el valor delCCP respectivo.

• Configuración del módulo CCPX:setup_ccpx (modo);modo hace referencia a los bits CCPxM3:CCPxM0 del registro

CCPxCON.El modo permite configurar al PIC para que trabaje en modo PWM,

Captura o comparación.

MÓDULO CCP EN LENGUAJE C

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 16: MICROCONTROLADORES II EN C. TEMA 3

MÓDULO CCP EN LENGUAJE C

Setup_CCPx(modo) Modo Registro CCPxCON

CCP_OFF Deshabilitación 00000000

CCP_CAPTURE_FE Captura por flanco de bajada 00000100

CCP_CAPTURE_RE Captura por flanco de subida 00000101

CCP_CAPTURE_DIV_4 Captura cada 4 pulsos 00000110

CCP_CAPTURE_DIV_16 Captura cada 16 pulsos 00000111

CCP_COMPARE_SET_ON_MATCH Salida a 1 en comparación 00001000

CCP_COMPARE_CLR_ON_MATCH Salida a 0 en comparación 00001001

CCP_COMPARE_INT Interrupción en comparación 00001010

CCP_COMPARE_RESET_TIMER Reset TMR1 en comparación 00001011

CCP_PWM Modo PWM habilitado 00001100

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 17: MICROCONTROLADORES II EN C. TEMA 3

• Los valores para comparar se fijan en los registrosCCPRx. En el compilador C, estos registros estándefinidos en el fichero include, por ejemplo para el16F87x.h:

MÓDULO CCP EN LENGUAJE C

long CCP_1; long CCP_2;

#byte CCP_1=0x15 #byte CCP_2=0x1B

#byte CCP_1_LOW=0x15 #byte CCP_2_LOW=0x1B

#byte CCP_1_HIGH=0x16 #byte CCP_2_HIGH=0x1C

set_pwmx_duty(valor);

valor: dato de 8 o 16 bits que determina el ciclo detrabajo. Este valor, junto con el valor del preescaler delTMR2, determina el valor del ciclo de trabajo. En laconfiguración del TIMER2, el postcaler debe valer 1.

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 18: MICROCONTROLADORES II EN C. TEMA 3

#include <16f877A.h>#fuses XT,NOWDT,NOPROTECT,NOLVP#use delay(clock=4000000)#define use_portD_lcd_true#include <lcd.c>#byte PIR1=0x0Cint1 nuevopulso=0; //Entra otro pulsoint16 TFF=0,TFI=0,TFTOTAL=0; //Tiempo flancosfloat APERIODO=0.0; //Valor final del ancho de pulsoint1 cambio=0; //Cambio de flanco de disparo#int_ccp1 //Función interrupción por Capturavoid ccp1_int(){if(cambio==0){ //Flanco de subida. Lectura inicial

TFI=CCP_1; //Carga del valor del registro CCPR1 en flanco subida//setup_ccp1(CCP_CAPTURE_FE); //Configuración modo Captura en flanco de bajada

cambio=1; //Control de cambio de flanco inicial a final} else { //Flanco FinalTFF=CCP_1; //Carga del valor del registro CCPR1 en flanco bajada

//setup_ccp1(CCP_CAPTURE_RE); //Configuración modo Captura en flanco de subidacambio=0; //Control de cambio de flanco

if(nuevopulso==0){ //Fin de pulso...nuevopulso=1; //pulso a medir}

}}

Ejercicio 1. Medición de Período de una señal

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 19: MICROCONTROLADORES II EN C. TEMA 3

void main() {

lcd_init();setup_timer_1(T1_INTERNAL); //Configuración TMR1setup_ccp1(CCP_CAPTURE_RE);

//Configuración modo Captura en flanco de subidacambio = 0; //Control de cambio a 0enable_interrupts(int_ccp1); //Habilitación interrupción modulo CCPenable_interrupts(global); //Habilitación interrupción global

while(true) {if(nuevopulso==1){ //¿Pulso nuevo?

TFTOTAL=(TFF-TFI); //Período total.APERIODO = TFTOTAL*1.0; //Período total en microsegundos (a 4MHz:1us)printf(lcd_putc,"\fMED. FRECUENCIA\n");

printf(lcd_putc,"T = %6.1fuS ", APERIODO);nuevopulso=0; //Periodo medido, espera nuevo

}}

}

Ejercicio 1. Medición de Período de una señal

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 20: MICROCONTROLADORES II EN C. TEMA 3

Ejercicio 1. Medición de Período de una señal

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 21: MICROCONTROLADORES II EN C. TEMA 3

• El CCP en modo comparación, comparacontinuamente el valor del TIMER1 con el valorprecargado en el registro CCPR2H:L; Cuando soniguales se produce un cambio de nivel en el pin CCPcorrespondiente y se puede activar la interrupciónpor comparación del módulo CCP si la misma ha sidohabilitada.

• En cada cambio de nivel del pin CCP se debe cargar elvalor para obtener una señal cuadrada con un dutydel 50%. Haga los cálculos para generar una señal de2 kHz.

Ejercicio 2. Generación de una señal cuadradamediante la Comparación con el CCP2

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 22: MICROCONTROLADORES II EN C. TEMA 3

#include <16f877A.h>#fuses XT,NOWDT,NOPROTECT,NOLVPint1 cambio=0; //Variable de control de cambio

#int_ccp2void ccp2_int(){ //Función de interrupciónif(++cambio==1){ //cambio++;

setup_ccp2(CCP_COMPARE_CLR_ON_MATCH); //Modo Comparación, cambio a 0} else{

setup_ccp2(CCP_COMPARE_SET_ON_MATCH); //Modo Comparación, cambio a 1}set_timer1(0); //Borrado de TMR1CCP_2 = 199; //Inicialización del registro CCPR2 para un Duty del 50%

}void main() {disable_interrupts(global);setup_timer_1(T1_INTERNAL | T1_DIV_BY_1); //Configuración TMR1setup_ccp2(CCP_COMPARE_SET_ON_MATCH); //Configuración inicial modulo CCPCCP_2 = 199; //Inicialización del registro CCPR2 para un Duty del 50%enable_interrupts(int_ccp2); //Habilitación interrupción modulo CCP2enable_interrupts(global); //Habilitación interrupción general

while (TRUE){}

}

Ejercicio 2. Generación de una señal cuadradamediante la Comparación con el CCP2

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 23: MICROCONTROLADORES II EN C. TEMA 3

Ejercicio 2. Generación de una señal cuadradamediante la Comparación con el CCP2

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 24: MICROCONTROLADORES II EN C. TEMA 3

• En el siguiente ejercicio se va a generar una señal PWMcon cuatro coeficientes cíclicos distintos que dependende dos interruptores que seleccionan el modo de la señal(25%, 50%, 60% y 80%). El modo elegido debe mostrarseen una pantalla LCD:

#include <16F877A.h>#fuses XT,NOWDT,NOPROTECT,NOLVP#use delay(clock=4000000)#use fast_io(c)#use fast_io(d)#use standard_io(a)#define use_portd_lcd_true#include <lcd.c>byte A=0;

Ejercicio 3. Generación de una señal PWMmediante el CCP1

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 25: MICROCONTROLADORES II EN C. TEMA 3

void main(){set_tris_c(0xF0);set_tris_d(0x00);setup_timer_2(T2_DIV_BY_1,224,1);setup_ccp1(CCP_PWM);lcd_init();while(TRUE){

A=input_a();switch(A){case (0):set_pwm1_duty(0xC8);printf(lcd_putc,"\fPORC= 25");break;case (1):set_pwm1_duty(0x1F4);printf(lcd_putc,"\fPORC= 50");break;case (2):

set_pwm1_duty(0x2EE);printf(lcd_putc,"\fPORC= 60");break;case (3):set_pwm1_duty(0x304);printf(lcd_putc,"\fPORC= 80");break;}}

}

Ejercicio 3. Generación de una señal PWMmediante el CCP1. Continuación.

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 26: MICROCONTROLADORES II EN C. TEMA 3

Ejercicio 3. Generación de una señal PWMmediante el CCP1

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 27: MICROCONTROLADORES II EN C. TEMA 3

Ejercicio 3. Generación de una señal PWMmediante el CCP1

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 28: MICROCONTROLADORES II EN C. TEMA 3

Ejercicio 3. Generación de una señal PWMmediante el CCP1

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 29: MICROCONTROLADORES II EN C. TEMA 3

Ejercicio 3. Generación de una señal PWMmediante el CCP1

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 30: MICROCONTROLADORES II EN C. TEMA 3

EJERCICIO CCP1 COMPARACIÓN

• Configure el Módulo CCP en modoComparación, donde:

• El TMR1 está configurado para contar pulsosexternos, con un prescaler 1:1, flancoascendente.

• Se debe cargar CCPR1L con la constanteNcompar, y producir una interrupción cada vezque se alcanza el valor fijado.

• Al ocurrir esto, RB0 cambia de estado.

• RC2, no debe modificar su valor.

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 31: MICROCONTROLADORES II EN C. TEMA 3

EJERCICIO CCP1 CAPTURA

• Realice la medición de la duración de un pulso en alto.

• Emplear el módulo CCP1 y capturar el valor del TMR1cada vez que llegue un flanco ascendente y otrodescendente por la línea RC2/CCP1. Conocida lavelocidad a la que evoluciona el TMR1, se puededeterminar la duración del tiempo transcurrido entreambos flancos, lo que nos dará la anchura del pulso.

• Configure al Timer1 con reloj interno y prescaler 1:1,para obtener medida máxima de período= 65,536 ms.

• Cambie la orden de captura de ascendente adescendente al ocurrir la primera captura. (Dentro dela RSI).

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 32: MICROCONTROLADORES II EN C. TEMA 3

EJERCICIO PWM

• Generar una señal de onda cuadrada por la líneaRC2/CCP1 cuyo periodo puede ser modificado así comola anchura del pulso (Duty Cycle).

• Utilice las siguientes fórmulas– (Período) T=(PR2+1)*4*Tosc*TMR2 preescaler.

– (Duty Cycle)=

– (DC)=(CCPR1L:CCPCON1<5:4>)*Tosc*TMR2 preescaler.

• La señal de salida tiene un periodo determinado por laconstante "Periodo" y una anchura "Duty Cycle”determinada por la constante "Duty"

Prof. Luis Zurita Microcontroladores II

IUT Cumaná