Una parte central de este circuito es un registro CCPR1 de 16 bits que consiste en registros CCPR1L y CCOR1H. Se utiliza para capturar y comparar sus valores con los números almacenados en el registro del temporizador Timer1 (TMR1H y TMR1L).
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, el registro del temporizador Timer1 (que consiste en los TMR1H y TMR1L) se copia al registro CCP1 (que consiste en los CCPR1H y CCPR1L) en las siguientes situaciones:
- Cada flanco ascendente (1 -> 0) en el pin RC2/CCP;
- Cada flanco descendente (0 -> 1) en el pin RC2/CCP1;
- Cada cuarto flanco ascendente (0 -> 1) en el pin RC2/CCP1; y
- Cada decimosexto flanco descendente (0 -> 1) en el pin RC2/CCP1.
Una combinación de cuatro bits (CCP1M3 – CCP1M0) del registro de control determina cuál de estos eventos causará transmisión 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.
En caso de que el módulo CCP1 esté en modo de captura, puede producirse una interrupción no deseada. Para evitarlo, antes de que ocurra un cambio en el registro de control 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.
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 Timer1. Al igualarse los valores, el estado lógico en el pin de salida 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 DE PWM
El período de pulso de salida (T) se determina por 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 Timer2
Si el período de PWM (T) es conocido, es fácil determinar la frecuencia de señal F, porque estos dos valores están relacionados por la ecuación F=1/T.
CICLO DE TRABAJO DE PWM
El ciclo de trabajo 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 adicionales 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 Timer2
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).
FRECUENCIA [KHZ] | 1.22 | 4.88 | 19.53 | 78.12 | 156.3 | 208.3 |
---|---|---|---|---|---|---|
Pre-escalador del TMR2 | 16 | 4 | 1 | 1 | 1 | 1 |
Registro PR2 | FFh | FFh | FFh | 3Fh | 1Fh | 17h |
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 esta aplicación, no se puede utilizar el post-escalador del temporizador Timer2 para generar períodos de PWM largos.
RESOLUCIÓN DE 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 es determinada por el registro PR2. El máximo valor se obtiene al usar el número FFh.
Registro CCP1CON
P1M1, P1M0 – PWM Output Configuration bits (bits de configuración del modo PWM) – El pin P1A es la entrada del módulo de Captura/Comparación en todos los modos, menos en modo PWM. Los pines P1B, P1C y P1D actúan como los pines de E/S del puerto D.
En modo PWM estos bits afectan al funcionamiento del módulo CCP1 como se muestra en la siguiente tabla:
P1M1 | P1M0 | MODO |
---|---|---|
0 | 0 | PWM con una sóla 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. Por el pin P1D sale una señal modulada. 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 de selección de modo del módulo CCP1) determina el modo del módulo CCP1.
CCP1M3 | CCP1M2 | CCP1M1 | CCP1M0 | MODO |
---|---|---|---|---|
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 |
El 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 están 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. |
No hay comentarios:
Publicar un comentario