Curso sobre Microcontroladores Familia HC9S08 de Freescale Por Ing. Daniel Di Lella – EduDevices – www.edudevices.com.ar e-mail: [email protected] Responsable Area Educación – ELKO / ARROW – www.elkonet.com e-mail: [email protected] Capítulo 4. Entrega Nº 8 Timer / PWM – TPM. Función Output Compare. La función “Output Compare” (OC) del módulo TPM de la familia HC9S08 es idéntica a la implementada en el módulo TIM08 de la familia HC908. Solo hay que tener en cuenta la configuración del bit CPWMS = 0 para que se realice la cuenta ascendente en el contador de 16 bits. Bloques utilizados en el TPM durante la función “Output Compare” (OC). Al igual que en el módulo TIM08 de los HC908, la función OC funciona de la siguiente forma: Se configura el canal elegido para realizar la función OC y se coloca el bit CPWMS = 0, luego se cargan los registros TPMxMODH / TPMxMODL con el valor del período de la señal a generar y los registros del canal elegido TPMCnVH / TPMCnVL con el valor del ciclo activo de la señal. Además se configura la salida del canal para que imponga un estado lógico durante la generación de la señal y se habilita la interrupción del canal. Una vez que se inicia la cuenta en el contador free – running, cuando este alcanza el valor contenido en los registros del canal TPMCnVH / TPMCnVL se genera una interrupción si esta ha sido habilitada (CHnIE) y además se pone a “1” el bit “CHnF” indicando que se ha cumplido con el ciclo activo de la señal. Se sugiere al lector, consultar el curso de microcontroladores HC908 contenido en el EDUKIT08 para profundizar en la función OC y en el manual de referencia de la familia HC9S08. Función PWM (Edge Aligned / Center Aligned). La función PWM del módulo TPM en la familia HC9S08, es algo distinta a lo que dispone el módulo TIM08 del HC908. En este último módulo, se dispone de la función PWM Unbuffered (no buffereado) y de la función PWM Buffered, ambas alineadas en el flanco de comienzo (Edge Aligned). Mientras que en el módulo TPM se dispone de PWM Buffered alineado en el flanco de comienzo (Edge Aligned) o alineado en el centro del período (Center Aligned). Es bueno Recordar que en la generación de PWM Unbuffered, el cambio de ciclo de servicio (Duty Cycle) de la señal generada se realiza durante el intervalo de tiempo que comprende la finalización del ciclo activo y la culminación del período de la señal. Este tiempo, que en la mayoría de las circunstancias es suficiente como para escribir los registros de control del canal para cambiar el ancho del pulso, en algunos casos extremos NO es suficiente e imposibilita la escritura de estos registros, generando “ausencias” de pulsos activos o pulsos espurios de la señal PWM. Esta característica del PWM Unbuffered, puede eliminarse utilizando generación de PWM Buffered, pero en el TIM08 involucra la “perdida” de 2 canales del Timer ya que trabajan en forma “concatenada” como se explica en detalles en el curso de HC908. Esto no sucede con el módulo TPM de los HC9S08, ya que cada canal puede generar PWM Buffered en forma independiente uno de otro. Ello constituye una ventaja importante con respecto al TIM08, sin pagar el precio de “perder” un canal extra en la generación de PWM Buffered. Función PWM Edge Aligned. La función PWM Edge – Aligned (alineada en el flanco de comienzo) utiliza el contador de Free – Running de 16 bits en modo ascendente (Up Count) con el bit CPWMS = 0. Se debe tener en cuenta que se pueden utilizar otros canales del mismo módulo TPM con funciones como Input Capture (ICAP) o Output Compare (OC), junto con la función PWM Edge aligned si el bit CPWMS = 0 en dicho módulo. Se puede obtener ciclos de servicio (Duty Cycle) de la señal de salida desde 0% al 100% cuando se cargan los registros del canal con valores de $0000 y valores mayores al período de la señal (registros de módulo) respectivamente. El valor de comparación de salida (Output Compare) en el registro del canal del TPM determina el ancho del pulso (Duty Cycle) de la señal de PWM. El tiempo transcurrido entre el “overflow” (vuelta a cero del contador) del módulo y la comparación de salida (Output Compare) es el ancho del pulso. Si se observan los registros afectados por la función PWM Edge – Aligned veremos que la configuración de los registros de módulo (TPMxMODH / TPMxMODL) determinan el período de la señal de PWM. Los registros del timer del canal determinan el ciclo de servicio (duty cycle) de la misma y los bits ELSnB / ELSnA en el registro de estado y control (TPMCnSC) determinan la polaridad de la señal. Ahora, una vez que se ha configurado el módulo TPM para la función PWM Edge – Aligned, ¿Que sucede luego? ... Cuando el valor en el contador de 16 Bits iguala al contenido en los registros del canal, la transición de la señal de salida programada (en el ejemplo aquí presentado corresponde a un estado de “0” lógico cuando se produce el Output Compare), es forzada en el pin de la señal de salida. Si las interrupciones están habilitadas, una interrupción ocurrirá cada vez que suceda lo anteriormente comentado, y el usuario deberá limpiar el Flag del canal (CHnF) dentro de la rutina de servicio de la interrupción primero leyendo este Flag y luego escribiendo un “0” en el. El habilitar las interrupciones permite al usuario cambiar el ciclo de servicio dentro de la rutina de servicio de la interrupción. Cuando el valor en el contador de 16 Bits iguala al valor contenido en los registros de módulo se fuerza un “overflow” del contador y este se “resetea” ($0000) además de forzar una señal de salida “alta” (“1”). Función PWM Center – Aligned. La única función del módulo TPM que requiere que el Bit CPWMS = 1 es la de PWM Center – Aligned (alineada en el centro del período). Este tipo de PWM utiliza el modo de contador ascendente / descendente (Up / Down) el cual se incrementa hasta alcanzar el valor en el registro del canal antes de decrementar hasta el “0”, donde el “0” es el centro del período. Para configurar el ciclo de servicio al 0%, el valor del registro del canal debe ser igual a un valor negativo o cero. Para configurar el ciclo de servicio al 100%, el valor del registro del canal debe ser mayor al contenido en el registro de módulo. Echemos un vistazo a los registros del TPM que son afectados por la configuración del PWM Center – Aligned. El período de la señal de PWM es igual a 2 veces lo configurado en los registros del módulo, efectivamente si se le dan a estos registros un rango utilizable desde $0001 a $7FFE. El valor “cero” ($0000) es un caso especial que no debe usarse en el modo de PWM Center – Aligned y $7FFF solo puede ser usado si un Duty Cycle de 100% no es necesario. El ciclo de servicio o Duty Cycle (ancho del pulso) es igual al doble de los valores programados en los registros del canal. La polaridad de la señal de salida se determina por la configuración de los Bits de control ELSnB y ELSnA en el registro de estado y control del módulo. En este ejemplo se han configurado dichos bits en “10” el cual provocará que la salida se fuerce a cero “0” cuando se produzca la comparación mientras el contador está contando en forma ascendente y se pondrá en “1” en la comparación cuando el contador está contando en forma descendente. Tener en cuenta que se deberán habilitar las interrupciones cuando se trabaje con el modo PWM Center – Aligned. Después de configurar el módulo TPM para la función PWM Center – Aligned, y cuando el valor en el contador de 16 Bits iguala al contenido de los registros del canal, si el contador estaba contando en forma ascendente, la transición de la señal de salida programada (en este ejemplo, un cero “0” cuando la comparación se hace en la etapa ascendente del contador) es forzada en el pin de la señal de salida. Si el contador estaba contando en forma descendente, ocurrirá la transición opuesta en la señal de salida. Cuando el valor del contador de 16 Bits iguale al de los registros del módulo, se forzará un “overflow” (reset del contador a $0000) y si las interrupciones han sido habilitadas, el usuario podrá cambiar el ciclo de servicio (Duty Cycle) en la rutina de servicio de la interrupción y este cambió estará sincronizado con el próximo overflow del contador. Es bueno recordar que el usuario debe limpiar el Flag de interrupción en la rutina de servicio de la forma que se explicó para la función PWM Edge – Aligned. Continuará....... Nota de Redacción: El lector puede descargar este capítulo y capítulos anteriores del curso desde la sección “Artículos” (Curso_HC9S08) en el sitio web de EduDevices (www.edudevices.com.ar )