PWM (Modulación de Ancho de Pulso)
Contenido
- 1 Introduccion
- 2 Registros del TPM
- 2.1 Registros de status y control del TPM (TPMxSC)
- 2.2 Registro de contadores del TPM (TPMxCNTH:TPMxCNTL)
- 2.3 Registros del modulo del contador del TPM (TPMxMODH:TPMxMODL)
- 2.4 Registros de status y control de los canales del TPM (TPMxCnSC)
- 2.5 Registros del valor de los canales del TPM (TPMxCnVH:TPMxCnVL)
- 3 Reset
- 4 Interrupciones
Introduccion
Configuracion
El comparador analogico (ACMP) puede ser configurado para conectarse el a un canal TPM de entrada, colocando el bit SOPT2 [ACICx] en uno. Haciendo esto, el pin del canal 0 del TPM no está disponible de forma externa, es decir no puede ser modificado. La salida del ACMP 1 puede conectarse a TPM1CH0 y la salida del ACMP2 puede conectarse a TPM2CH0.
Al momento de programar, el codigo para la configuracion anterior seria de esta forma:
SOPT2=0x05, donde el valor hexadecimal 0x05 representa los 8 bits del registro SOPT2 que, como se observa en el cuadro anterior, son 00000101.
Compuerta de clocks
Los clocks de los modulos TPM1, TPM2 y TPM3 pueden activarse o desactivarse usando el modulo SCGC1 [TPMx]. Cuando los bits están en 1, los puertos se habilitan dejando usar los clocks de cada módulo, y en cero se desabilitan. Luego de un reset estos bits se colocan en 1.
Similar al caso anterior, el codigo para la configuracion anteriormente descrita es:
SCGC1=0xE0, nuevamente el valor hexadecimal 0xE0 representa los 8 bits del registro SCGC1, los cuales eran 11100000
Vector de interrupciones
Caracteristicas
El modulo PWM posee las siguientes caracteristicas:
- Cada canal se puede configurarse para ser capturador de entrada, comparador de salidas, o alineación de flancos PWM. Estos tipos de configuración se discutirán en la seccion de modos de operacion.
- Escoger la polaridad en las salidas del PWM (positiva o negativa)
- El modulo puede ser configurado como buffer o como alineación central de la modulación del ancho de pulso (CPMW por sus siglas en inglés).
- El timer puede ser modificado para usarse con una escala predeterminada del bus clock, un clock fijo o un clock externo:
- La preescala se define dividiendo el clock del bus entre 1, 2, 4, 8, 16, 32, 64 o 128. El bus clock al que opera el microcontrolador es de 1MHz.
- El clock fijo es sincronizado con el bus clock mediante un circuito sincronizador.
- Para el clock externo, el pin puede compartirse con un pin de un canal o de cualquier otra entrada, por lo tanto hay que tener cuidado al configurar este pin.
- Un interruptor por canal y un contador para las interrupciones.
Modos de operacion
Los canales pueden ser configurados independientemente como capturadores de entrada, comparador de salidas, o alineación de los flancos de PWM. Un bit de control puede modificarse para que todos los canales del módulo sean configurados como alineación de la modulación del ancho de pulso, si este es el caso se desabilitan las otras opciones de configuración. Cuando el microcontrolador esta en BDM background o BDM foreground, el TPM suspende las operaciones y las reanuda apenas el microcontrolador regresa a estado normal. Cuando esta en stop, todos los clocks del microcontrolador se paran, incluyendo el oscilador principal, por lo tanto el modulo TPM es desabilitado momentáneamente. En el modo de espera (wait mode), el TPM opera de forma normal ya que no genera una referencia a tiempo real ni el interrupt necesario para despertar el micro de este estado. Los modos de operacion son los siguientes:
- Modo de captura de entrada: Cuando un evento preseleccionado de flanco ocurre en el pin asociado al canal que se esta usando, el valor actual del contador del timer de 16 bits es guardado en el registro de valor del canal y una bandera de interrupción se coloca en uno. Un flanco de subida, flanco de bajada, cualquier flanco o ningún flanco (canal desabilitado) puede ser seleccionado como el flanco activo que dispara la captura de entrada.
- Modo de comparación de salida: Cuando el valor en el registro del contador es igual al valor del registro del canal, una bandera de un bit de interrupción se coloca en uno, y una acción de salida seleccionada es forzada en el pin del microcontrolador. La salida que se ve en el pin puede ser forzada a cero, a uno, intercambiar/conmutar las salidas o simplemente ignorarlo.
- Modo de alineación de flancos de PWM: El valor del registro de 16 bits +1 define el período de la señal de salida del PWM. El valor del registro del canal define el duty cicle (tiempo en que la señal permanece en un estado activo) de la señal de salida del PWM. También se puede definir la polaridad de la señal de salida. Las interrupciones ocurren apenas termine el período de la señal, es decir en el punto de transición del duty cicle (cuando la señal pasa de activa a inactiva)
- Modo de alineacion central del PWM: El doble del valor del registro del modulo de 16 bits define el period de las salidas PWM, y los registros de valores de los canals definen la mitad de la duracion del duty cycle. El contador del timer cuenta hasta que llega al valor del registro del modulo y luego cuenta desde este valor hasta cero. Mientras el contador esta contando hacia abajo, y el valor del contador es el mismo que el del modulo, la salida PWM se activa. En el caso contrario, es decir cuando esta contando hacia arriba y los valores coinciden, la salida PWM se desactiva.
Diagrama de bloques
El modulo TPM usa un pin de entrada/salida por canal (TPMxCHn), donde n representa el numero del canal. Hay que tener cuidado a usar estos pines ya que los pines de entrada/salida del TPM están asociados a los puertos de entrada/salida generales del microcontrolador. El componente central es el contador de 16 bits, el cual provee el tiempo de referencia para los modos de operación. Los registros del modulo del contador (TPMxMODH:TPMxMODL) registra el valor del modulo. Este dato se puede leer cuando sea, mas si se modifica este dato en la parte baja (TPMxMODL) o en la parte alta (TPMxMODH), se resetea el contador.
Registros del TPM
Registros de status y control del TPM (TPMxSC)
El registro TPMxSC contiene la bandera de overflow y los bits de control para determinar la habilitacion de las interrupciones, el modo de operación que se va a usar, el tipo de clock y la escala en caso de ser necesaria.
- TOF (Bit 7): Este bit se conoce como la bandera de overflow del timer. Este bit se coloca en uno cuando el contador del TPM se resetea (0x0000) luego de haber alcanzado el valor guardado en el registro de modulo del contador. Para borrar este bit (ponerlo en cero), es necesario leer el registro TPMxSC cuando la bandera este en uno y escribir en este bit un cero. Si llegase a ocurrir otro overflow antes de colocar el bit 7 en cero, la secuencia se resetea por lo tanto la bandera quedaría en uno para que una interrupción del tipo TOF no se pierda debido a una anterior.
- TOIE (Bit 6): Tambien llamado habilitador de interrupciones de overflow del timer. Si este bit esta en uno se habilita la interrupción debido a overflows. Es decir que aunque el bit de la bandera de overflow este en uno, si este bit esta en cero nunca van a ocurrir interrupciones del tipo TOF.
- CPWMS (Bit 5): Si este bit esta en uno, se activa el modo de operación de alineación central de PWM para todos los canales, desactivando las demás opciones. Además configura el TPM para que el contador opere tanto hacia arriba como hacia abajo (up/down counting) en vez de solo hacia arriba. Un reset coloca este bit en cero habilitando los demás modos de operación.
- CLKS[B:A] (Bit 4:3): Estos dos bits se usan para definir que tipo de clock se va a utilizar. El clock fijo solo sirve cuando el clock del sistema esta basado en un sistema PLL (divisor del clock). En caso de no ser así el clock va a ser el mismo que el bus clock, 1MHz para este caso. La sincronización de un clock externo se genera mediante el modulo del bus clock del TPM, mientras que para el caso de un clock fijo es a través de un circuito sincronizador.
- PS[2:0] (Bit 2:0): Estos 3 bits se usan para modificar el clock del TPM escogiendo uno de los factores de división que se observan en la siguiente tabla.
Registro de contadores del TPM (TPMxCNTH:TPMxCNTL)
Los registros TPMxCNTH y TPMxCNTL contienen el bit más significativo y menos significativo respectivamente del valor en el contador del TPM. Leer cualquiera de los valores en estos registros coloca los datos de ambos en un buffer hasta que se finalice esta operación. Estos registros se resetean apenas se resetee el microcontrolador o se escriba en el registro TPMxSC. Como ambos son registros de solo lectura, apenas se intente escribir en alguno de ellos se reseteara el contador.
Registros del modulo del contador del TPM (TPMxMODH:TPMxMODL)
El registro de modulo del TPM contiene el valor para el contador del TPM. Cuando este contador alcance el valor asignado en este registro se reinicia y coloca en uno la bandera de overflow para saber que termino un ciclo. Al escribir en los registros TPMxMODH o TPMxMODL, que representan los 16 bits del módulo, evita que ocurran interrupciones por overflow hasta que se termine de escribir, además de que guarda el valor de los registros en un buffer, y se actualizará dependiendo de los valores en CLKSB:CLKSA entonces:
- CLKSB y CLKSA son cero los registros se van a actualizar apenas se termine de escribir el segundo byte.
- CLKSB y CLKSA son diferentes de cero los registros se van a actualizar cuando se terminen de escribir en ambos.
Resetear coloca los 16 bits del módulo en cero.
- CHnF (Bit 7): Cuando el canal esta en el modo de captura de entrada, este bit se pondra en uno cuando ocurra el flanco que se definió como flanco activo. Cuando el canal esta en comparación de salida, en alineación de flancos o alineación central de PWM, el bit CHnF se coloca en uno cuando el valor en el registro del contador es igual al valor en el registro del canal, siempre y cuando el duty cycle no sea ni cero ni cien porciento. La interrupción ocurrirá siempre y cuando este bit este en uno y que las interrupciones estén habilitadas, es decir que el bit CHnIE sea uno. Resetear coloca el bit CHnF en cero.
- CHnIE (Bit 6): Este bit habilita las interrupciones del canal especifico cuando esta en uno. Resetear modifica este bit y lo fuerza a cero.
- MSnB (Bit 5): Se conoce tambien como seleccion de modo A para los canales. Cuando CPWMS esta en cero y el bit MSnB esta en uno, configura el canal TPM especifico para alineación de flancos PWM.
- MSnA (Bit 4): Conocido tambien como modo de seleccion A para los canals. Cuando CPWMS y MSnB son cero, MSnA va a configurar el canal para capturador de entrada o comparador de salida.
Registros de status y control de los canales del TPM (TPMxCnSC)
Registros del valor de los canales del TPM (TPMxCnVH:TPMxCnVL)
Reset
Interrupciones
Contributors
AK, Dalak, Francjsalanova, Leofragachan, Minleung, Misato, Nivmizzet, Racuna, Vegabante