Source: https://www.mikroe.com/ebooks/microcontroladores-pic-programacion-en-basic/modulos-ccp
Timestamp: 2018-11-18 20:38:49+00:00

Document:
modulos-ccp - MikroElektronika
HomeebooksMicrocontroladores PIC – Programación en BASIC modulos-ccp
Los módulos CCP pueden funcionar en muchos modos diferentes, por lo que se consideran los más complicados. Si usted intenta analizar su funcionamiento a base de tablas que describen las funciones de bits, comprenderá mejor de lo qué le estamos hablando. Si utiliza alguno de los módulos CCP, primero seleccione el modo que necesita, analice la figura apropiada y entonces póngase a modificar los bits de registros. Si no... El módulo CCP (Captura/Comparación/PWM) es un periférico que le permite medir y controlar diferentes eventos. Como indica su nombre, puede funcionar en tres modos diferentes: El modo de captura proporciona el acceso al estado actual de un registro que cambia su valor constantemente. En este caso, es el registro del temporizador Timer1. El modo de comparación compara constantemente valores de dos registros. Uno de ellos es el registro del temporizador Timer1. PWM (Pulse Width Modulation - modulación por ancho de pulsos) puede generar señales de frecuencia y de ciclo de trabajo variados por uno o más pines de salida. El microcontrolador PIC16F887 dispone de dos módulos CCP - CCP1 y CCP2. Ambos son idénticos en modo normal de funcionamiento, mientras que las características del PWM mejorado están disponibles sólo en el modo CCP1. Ésta es la razón por la que en este capítulo se describe detalladamente el funcionamiento del módulo CCP1. Con respecto al CCP2, se presentarán sólo las características que lo distinguen del CCP1.
MÓDULO CP1
Una parte central de este circuito es un registro CCPR1 de 16 bits que consiste en registros CCPR1L y CCOR1H. Se utiliza para capturar los números binarios desde el registro del temporizador TMR1(TMR1H y TMR1L) o para comparar los números binarios almacenados en los registros CCPR1 y TMR1.
Si está habilitado por software, puede ocurrir el reinicio del temporizador Timer1 al igualarse los valores en modo de Comparación. Además, el módulo CCP1 puede generar señales PWM de frecuencia y de ciclo de trabajo variados. Los bits del registro CCP1CON están en control del módulo CCP1.
CCP1 EN MODO DE CAPTURA
En este modo, registro CCP1 (que consiste en los registros CCPR1H y CCPR1L) captura el valor de 16 bits del registro del temporizador TMR1 (que consiste en los registros TMR1H y TMR1L) en las siguientes situaciones:
Cada flanco ascendente (1 g 0) en el pin RC2/CCP;
Cada flanco descendente (0 g 1) en el pin RC2/CCP1;
Cada cuarto flanco ascendente (0g 1) en el pin RC2/CCP1; y
Cada decimosexto flanco descendente (0g 1) en el pin RC2/CCP1.
Al combinar cuatro bits (CCP1M3, CCP1M2, CCP1M1 y CCP1M0) del registro de control se determina cuál de estos eventos causará la captura de dato de 16 bits. Además, se deben cumplir los siguientes requisitos:
El pin RC2/CCP1 debe estar configurado como entrada; y
El Timer1 debe funcionar como temporizador o contador síncrono.
El bit de bandera CCP1IF se pone a uno después de acabar la captura. Si se pone a 1 el bit CCP1IE del registro PIE1, se producirá una interrupción. Cuando el módulo CCP1 sale del modo de captura, puede producirse una interrupción de captura no deseada. Para evitarlo, antes de que ocurra un cambio en el registro de control CCP1CON se deben poner a 0 tanto el bit que habilita la interrupción CCP1IE, como el bit de bandera CCP1IF. Las interrupciones no deseadas pueden producirse al cambiar el valor del pre-escalador. Para evitarlo, el módulo CCP1 debe estar apagado temporalmente antes de cambiar el valor del pre-escalador. Se recomienda la siguiente secuencia de programa, escrita en ensamblador:
CLRF CCP1CON  'REGISTRO DE CONTROL BORRADO
'MÓDULO CCP1 ESTÁ APAGADO
MOVLW XX      'NUEVO MODO DEL PRE-ESCALADOR ESTÁ SELECCIONADO
MOVWF CCP1CON 'MÓDULO CCP1 SE ENCIENDE SIMULTÁNEAMENTE
'MÓDULO CCP1 SE ENCIENDE SIMULTÁNEAMENTE
MOVWF CCP1CON 'EN EL REGISTRO DE CONTROL SE INTRODUCE UN NUEVO VALOR
CCP1 EN MODO DE COMPARACIÓN
En este modo, el valor almacenado en el registro CCP1 se compara constantemente al valor almacenado en el registro del temporizador TMR1. Al igualarse los valores, el estado lógico en el pin de salida RC2/CCP1 puede ser cambiado, lo que depende del estado de bits en el registro de control (CCP1M3 - CCP1M0). El bit de bandera CCP1IF se pone a uno simultáneamente.
Para poner el módulo CCP1 en este modo de funcionamiento, se deben cumplir dos condiciones:
El pin RC2/CCP1 debe estar configurado como salida; y
El temporizador Timer1 debe estar sincronizado con el reloj interno.
CCP1 EN MODO PWM
Las señales de frecuencia y de ciclo de trabajo variados tienen una amplia gama de aplicaciones en automatización. Un ejemplo típico es un circuito de control de potencia. Refiérase a la siguiente figura. Si un cero lógico (0) indica un interruptor abierto y un uno lógico (1) indica un interruptor cerrado, la potencia eléctrica que se transmite a los consumidores será directamente proporcional a la duración del pulso. Esta relación se le denomina Ciclo de Trabajo.
El otro ejemplo, común en la práctica, es el uso de señales PWM en un circuito para generar señales de forma de onda arbitraria como una onda sinusoidal. Vea la siguiente figura:
Los dispositivos que funcionan según este principio se utilizan con frecuencia en la práctica como variadores de frecuencia ajustable que controlan motores eléctricos (velocidad, aceleración, desaceleración etc.).
La Figura anterior muestra el diagrama de bloques del módulo CCP1 puesto en el modo PWM. Para generar un pulso de forma arbitraria en el pin de salida, es necesario ajustar el período de pulsos (frecuencia) y la duración de pulsos.
PERÍODO PWM
El período de pulso de salida (T) depende del valor almacenado en el registro PR2 del temporizador Timer2. El período de PWM se puede calcular por la siguiente ecuación: Período PWM = (PR2 +1) * 4Tosc * Valor de pre-escala del TMR2 Si el período de PWM (T) es conocido, es fácil caluclar la frecuencia de señal (F), porque estos dos valores están relacionados por la ecuación F=1/T.
ANCHO DE PULSOS DE PWM
El ancho de pulsos de PWM se especifica al utilizar en total 10 bits: los ocho bits más significativos del registro CCPR1L y los dos bits menos significativos del registro CCP1CON (DC1B1 y DC1B0). El resultado es un número de 10 bits dado por la siguiente fórmula: Ancho de pulsos = (CCPR1L,DC1B1,DC1B0) * Tosc * Valor de pre-escala del TMR2 La siguiente tabla muestra cómo generar las señales PWM de diferentes frecuencias cuando el microcontrolador utiliza un cristal de cuarzo de 20 MHz (Tosc=50nS).
Pre-escalador del TMR2 16 4 1 1 1 1
Registro PR2 FFh FFh FFh 3Fh 1Fh 17h
CICLO DE TRABAJO DE PWM
El ciclo de trabajo se obtiene al dividir el ancho de pulsos por el período: Ciclo de trabajo = (CCPR1L,DC1B1,DC1B0) / ( 4(PR2 + 1)) Notas adicionales:
El pin de salida se va a poner a 1 constantemente, si por error el ancho de pulso generado es más largo que el período de PWM.
En este caso, no se puede utilizar el post-escalador del temporizador Timer2 para generar períodos de PWM largos.
RESOLUCIÓN DE SEÑAL PWM
Una señal PWM no es nada más que una secuencia de pulsos que varían su ciclo de trabajo. Para una frecuencia específica (número de pulsos por segundo), hay un número limitado de combinaciones de ciclos de trabajo. Este número representa una resolución medida en bits. Por ejemplo, si una resolución es de 10 bits estarán disponibles 1024 ciclos de trabajo discretos; si una resolución es de 8 bits estarán disponibles 256 ciclos de trabajo disretos etc. En este microcontrolador la resolución depende del contenido del registro PR2. La máxima resolución se obtiene al introducir el número FFh en este registro. Frecuencias y resoluciones de señales PWM (Fosc = 20MHz):
Pre-escala del temporizador 16 4 1 1 1 1
Valor del PR2 FFh FFh FFh 3Fh 1Fh 17h
Resolución máxima 10 10 10 8 7 6
Valor del PR2 65h 65h 65h 19h 0Ch 09h
Resolución máxima 8 8 8 6 5 5
' En este ejemplo, el módulo PWM está inicializado y ajustado para producir una secuencia
' de pulsos de ciclo de trabajo del 50%. Para este propósito, se utilizan las funciones
' PWM1_Init(), PWM1_Start() y PWM1_Set_Duty(). Todas las funciones las contiene la
' librería PWM del mikroC PRO for PIC. Sólo es necesario copiarlas al programa.
dim duty_c as byte   ' Definir la variable duty_c
ANSEL,ANSELH = 0      ' Todos los pines de  E/S se configuran como digitales
PORTC,TRISC = 0       ' Estado inicial de los pines de salida del puerto PORTC
PWM1_Init(5000)       ' Inicialización del módulo PWM (5KHz)
duty_c = 127          ' Valor inicial del ciclo de trabajo
PWM1_Start            ' Iniciar el módulo PWM1
PWM1_Set_Duty(duty_c) ' Ajustar el ciclo de trabajo de PWM al 50%
P1M1, P1M0 - PWM Output Configuration bits (bits de configuración del modo PWM). El pin P1A se siempre configura como una entrada en el modo de Captura/Comparación. Los pines P1B, P1C y P1D actúan como los pines de E/S del puerto PORTD. En el modo PWM estos bits afectan al funcionamiento del módulo CCP1 como se muestra en la siguiente tabla:
0 0 PWM con una sola salida
Por el pin P1A sale una señal modulada. Pines P1B, P1C y P1D son entradas/salidas del puerto D.
0 1 Configuración Full Bridge - Forward (puente completo con salida directa)
Por el pin P1D sale una señal modulada. Pin P1A está activo. Pines P1B y P1C están inactivos.
1 0 Configuración Half Bridge (medio-puente)
Por los pines P1A y P1B sale una señal modulada. Pines P1C y P1D son entradas/salidas del puerto D.
1 1 Configuración Full Bridge - Reverse (puente completo con salida inversa)
Por el pin P1B sale una señal modulada. Pin P1C está activo. Pines P1A y P1D están inactivos.
DC1B1, DC1B0 -PWM Duty Cycle Least Significant bits (bits menos significativos del ciclo de trabajo de PWM). Se utilizan sólo en el modo PWM y representan dos bits menos significativos de un número de 10 bits. Este número determina el ciclo de trabajo de la señal PWM. Los demás 8 bits se almacenan en el registro CCPR1L. CCP1M3 - CCP1M0 bits - CCP1 Mode Select bits (bits de selección de modo del módulo CCP1) determina el modo de funcionamiento del módulo CCP1.
0 0 0 0 Módulo está deshabilitado (reinicio)
0 0 0 1 No utilizado
0 0 1 0 Modo de comparación
El bit CCP1IF bit se pone a 1 al ocurrir una coincidencia.
0 0 1 1 No utilizado
0 1 0 0 Modo de captura
Cada flanco descendente en el pin CCP1
0 1 0 1 Modo de captura
Cada flanco ascendente en el pin CCP1
0 1 1 0 Modo de captura
Cada cuarto flanco ascendente en el pin CCP1
0 1 1 1 Modo de captura
Cada decimosexto flanco ascendente en el pin CCP1
1 0 0 0 Modo de comparación
La salida y el bit CCP1IF se ponen a 1 al ocurrir una coincidencia
1 0 0 1 Modo de comparación
La salida se pone a 0 y el bit CCP1IF se pone a 1 al ocurrir una coincidencia
1 0 1 0 Modo de comparación
Llega la solicitud de interrupción y el bit CCP1IF se pone a 1 al ocurrir una coincidencia
1 0 1 1 Modo de comparación
Wl bit CCP1IF se pone a 1 y los registros de temporizadores 1 o 2 se borran al ocurrir una coincidencia
1 1 0 0 Modo PWM
Pines P1A y P1C están activos a nivel alto Pines P1B y P1D estan activos a nivel alto
1 1 0 1 Modo PWM
Pines P1A y P1C están activos a nivel alto Pines P1B y P1D están activos a nivel bajo
1 1 1 0 Modo PWM
Pines P1A y P1C están activos a nivel bajo Pines P1B y P1D están activos a nivel alto
1 1 1 1 Modo PWM
Pines P1A y P1C están activos a nivel bajo Pines P1B y P1D están activos a nivel bajo
MÓDULO CCP2
Con exclusión de los nombres diferentes de los registros y de los bits en los módulos CCP1 y CCP2, el módulo CCP2 es una muy buena copia del módulo CCP1 puesto en modo normal. La única diferencia significativa entre ellos es el funcionamiento en modo de comparación del módulo CCP2. La diferencia se refiere a la señal de reinicio del temporizador Timer1. Concretamente, si el convertidor A/D está habilitado, al igualarse los valores de los registros TMR1 y CCPR2, la señal de reinicio del temporizador Timer1 iniciará automáticamente la conversión A/D.
El módulo CCP2 está bajo el control de los bits del registro de control. Esta vez es el registro CCP2CON.
Registro CCP2CON
DC2B1, DC2B0 -PWM Duty Cycle Least Significant bits (bits menos significativos del ciclo de trabajo de PWM). Se utilizan sólo en modo PWM y representan dos bits menos significativos de un número de 10 bits. Este número determina el ciclo de trabajo de la señal PWM. Los demás 8 bits se almacenan en el registro CCPR2L. CCP2M3 - CCP2M0 bits -CCP2 Mode Select bits (bits de selección de modo del módulo CCP2) determina el modo del módulo CCP2.
0 0 0 0 Módulo está deshabilitado (reinicio).
0 0 1 0 No utilizado
Cada flanco descendente en el pin CCP2
Cada flanco ascendente en el pin CCP2
Cada cuarto flanco ascendente en el pin CCP2
Cada decimosexto flanco ascendente en el pin CCP2
La salida y el bit CCP2IF bit se ponen a 1 al ocurrir una coincidencia
La salida se pone a 0 y el bit CCP2IF se pone a 1 al ocurrir una coincidencia
Se produce una interrupción, el bit CCP2IF bit se pone a 1 y no hay cambio en el pin CCP2 al ocurrir una coincidencia
Al ocurrir una coincidencia, el bit CCP2IF se pone a 1, los registros del temporizador Timer 1 se borran y la conversión A/D se inicia si el convertidor A/D está habilitado.
1 1 x x Modo PWM
¿Cómo configurar e iniciar el módulo CCP1 para funcionar en modo PWM?
Para configurar e iniciar el módulo CCP1 para funcionar en modo PWM, siga los siguientes pasos:
Deshabilitar el pin de salida del CCP1. Deberá estar configurado como entrada.
Seleccionar el período de señal PWM al introducir el valor en el registro PR2.
Configurar el módulo CCP1 para funcionar en modo PWM al combinar los bits del registro CCP1CON.
Ajustar el ciclo de trabajo de señal PWM al introducir el valor en el registro CCPR1L y al utilizar los bits DC1B1 y DC1B0 del registro CCP1CON.
Configurar e iniciar el temporizador Timer2:
Poner a cero el bit de bandera de interrupción TMR2IF en el registro PIR1
Ajustar el valor de división de frecuencia del temporizador Timer2 por los bits T2CKPS1 y T2CKPS0 del registro T2CON.
Iniciar el temporizador Timer2 al poner a uno el bit TMR2ON del registro T2CON.
Habilitar los pines de salida de PWM después de que haya sido acabado un ciclo de PWM:
Esperar el desbordamiento del temporizador Timer2 (el bit TMR2IF del registro PIR1 se pone a uno)
Configurar el pin apropiado como salida al poner a cero el bit en el registro TRIS.
MÓDULO CCP1 EN MODO MEJORADO
El módulo CCP1 es el único que se puede poner en modo mejorado. Este modo básicamente no difiere del modo normal del CCP1 y la mejora se refiere a la transmisión de la señal PWM a los pines de salida. ¿Por qué es eso tan importante? Por el uso cada vez más frecuente de los microcontroladores en los sistemas de control de motores eléctricos. Aquí no vamos a describir estos dispositivos, sin embrago si tiene la oportunidad de trabajar en el desarrollo de los dispositivos similares, reconocerá los elementos que se utilizaban hasta hace poco como los periféricos. Decimos “se utilizaban” porque todos estos elementos ahora están integrados en el microcontrolador y pueden funcionar en varios modos diferentes.
MODO PWM CON UNA SALIDA
El modo PWM con una salida está habilitado sólo en el caso de que se pongan a cero los bits P1M1 y P1M0 en el registro CCP1CON. En tal caso, una señal PWM puede estar disponible simultáneamente en como máximo cuatro diferentes pines de salida. Además, la secuencia de señales PWM puede aparecer en forma de onda básica o invertida. La distribución de señales depende de los bits del registro PSTRCON, mientras que su polaridad depende de los bits CCP1M1 y CCP1M0 del registro CCP1CON. Si se utiliza una salida invertida, los pines activos a nivel bajo y los pulsos que tienen la misma forma de onda se generan siempre en parejas: en los pines P1A y P1C así como en los pines P1B y P1D, respectivamente.
MODO DE MEDIO-PUENTE
En cuanto al modo de medio-puente, la señal PWM es una salida en el pin P1A, mientras que a la vez la señal complementaria PWM es una salida en el pin P1B. Estos pulsos activan a los controladores MOSFET en modo de Medio-Puente que habilitan/deshabilitan el flujo de corriente por el dispositivo.
En este modo es muy peligroso encender los controladores MOSFET simultáneamente (el cortocircuito producido en aquel momento sería fatal). Para evitarlo, es necesario proporcionar un tiempo muerto entre encender y apagar los controladores. Este tiempo muerto está marcado con ‘td’ (time delay) en la siguiente figura. El problema se resuelve al utilizar los bits PDC0-PDC6 del registro PWM1CON.
Como se muestra en la siguiente figura, el modo de medio-puente se puede utilizar para activar los controladores MOSFET en la configuración Puente completo:
MODO PUENTE-COMPLETO
Todos los cuatro pines se utilizan como salidas en el modo Puente completo. En la práctica, este modo es utiliza con frecuencia para activar los motores, lo que proporciona un control simple y completo de velocidad y dirección de rotación. Hay dos configuraciones de este modo: Full Bridge-Forward (puente completo con salida directa) y Full Bridge-Reverse (puente completo con salida inversa).
CONFIGURACIÓN PUENTE COMPLETO - DIRECTO
En modo Directo ocurre lo siguiente:
Un uno lógico (1) aparece en el pin P1A (pin está activo a nivel alto);
Secuencia de pulsos aparece en el pin P1D; y
Un cero lógico (0) en los pines P1B y P1C (pines están activos a nivel bajo).
La siguiente figura muestra el estado de los pines P1A-P1D durante un ciclo PWM completo:
CONFIGURACIÓN PUENTE COMPLETO - INVERSO
Lo similar ocurre en modo Inverso, a menos que estos pines dispongan de funciones diferentes:
Un uno lógico (1) aparece en el pin P1C (pin está activo a nivel alto);
Secuencia de pulsos aparece en el pin P1B; y
Un cero lógico (0) aparece en los pines P1A y P1D (pines están activos a nivel bajo).
Registro PWM1CON
PRSEN PWM Restart Enable bit (Bit de habilitación del reinicio automático del PWM)
1 - Después de un apagado automático, el módulo PWM se reinicia automáticamente, y el bit ECCPASE del registro ECCPAS se pone a cero.
0 - Para iciar el módulo PWM después de un apagado automático, el bit ECCPASE debe ponerse a cero por software.
PDC6 - PDC0 PWM Delay Count bits - (Bits de configuración del tiempo muerto en el modo PWM) El número binario de 7 dígitos determina el número de ciclos de instrucciones (4žTosc) añadidos como tiempo muerto al activar los pines de entrada PWM.
Registro PSTRCON
STRSYNC - Steering Sync bit (bit de sincronización de dirección) determina el momento de la dirección de los pulsos de PWM:
1 - La dirección ocurre después de que el registro PSTRCION haya sido cambiado, sólo si se ha completado la forma de onda del PWM.
0 - La dirección ocurre después de que el registro PSTRCION haya sido cambiado. La señal PWM en la salida del pin será cambiada inmediatamente sin reparar en si el ciclo anterior ha sido completado. Este procedimiento es útil cuando es necesario detener la transmisión de una señal PWM del pin.
STRD - Steering Enable bit D (bit D de habilitación de dirección) determina la función del pin P1D.
1 - El pin P1D tiene la forma de onda del PWM con polaridad determinada por los bits CCP1M0 y CCP1M1
0 - Pin está configurado como entrada/salida general del puerto PORTD.
STRC Steering Enable bit C (bit C de habilitación de dirección) determina la función del pin P1C.
1 - El pin P1C tiene la forma de onda del PWM con polaridad determinada por los bits CCP1M0 y CCP1M1
STRB - Steering Enable bit B (bit B de habilitación de dirección) determina la función del pin P1B.
1 - El pin P1B tiene la forma de onda del PWM con polaridad determinada por los bits CCP1M0 y CCP1M1.
STRA - Steering Enable bit A (bit A de habilitación de dirección) determina la función del pin P1A.
1 - El pin P1A tiene la forma de onda del PWM con polaridad determinada por los bits CCP1M0 y CCP1M1
0 -Pin está configurado como entrada/salida general del puerto PORTC.
Registro ECCPAS
ECCPASE - ECCP Auto-Shutdown Event Status bit (bit de estado del apagado automático) indica si ha ocurrido el apagado automático del módulo CCP (estado de Apagado):
1 - Módulo CCP está en estado de Apagado.
0 - Módulo CCP funciona normalmente.
ECCPAS2 - ECCPAS0 - ECCP Auto-Shutdown Source Select bits (Bits de selección de la fuente de apagado automático) selecciona la fuente de apagado automático.
FUENTE DEL ESTADO DE APAGADO
0 0 0 Estado del apagado deshabilitado
0 0 1 Cambio de salida del comparador C1
0 1 0 Cambio de salida del comparador C2
0 1 1 Cambio de salidas de los comparadores C1 o C2
1 0 0 Cero lógico (0) en el pin INT
1 0 1 Cero lógico (0) en el pin INT o cambio de salida del comparador C1
1 1 0 Cero lógico (0) en el pin INT o cambio de salida del comparador C2
1 1 1 Cero lógico (0) en el pin INT o cambio de salidas de los comparadores C1 o C2
PSSAC1, PSSAC0 - Pins P1A, P1C Shutdown State Control bits (Bits de configuración de los pines P1A y P1C en modo de apagado) define el estado lógico de los pines P1A y P1C cuando el módulo CCP está en el estado de apagado.
ESTADO LÓGICO DE LOS PINES
1 X Alta impedancia (Tri-estado)
PSSBD1, PSSBD0 - Pins P1B, P1D Shutdown State Control bits (Bits de configuración de los pines P1B y P1D en modo de apagado) define el estado lógico de los pines P1B y P1D cuando el módulo CCP está en el estado de apagado.
MikroElektronikaebooksMicrocontroladores PIC – Programación en BASIC modulos-ccp

References: RESOLUCIÓN 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución 

Resolución 

Resolución