Vista previa del material en texto
MICROCONTROLADOR ATmega328P Modulación por Ancho de Pulso (PWM) PWM ➢ La modulación por ancho de pulso es una técnica para generar “señales analógicas” en alguna salida de un sistema digital. ➢ Puede usarse para controlar la velocidad de un motor, la intensidad luminosa de una lámpara, etc. ➢ La base de PWM es la variación del ciclo de trabajo (duty cycle) de una señal cuadrada. PWM Para un ciclo de trabajo del 50% el tiempo en alto es TON = T/2 y por lo tanto VAVG = Vp/2. Voltaje Promedio ATmega328P 8-bit Timer/ Counter0 with PWM ATmega328P - PWM ➢ El microcontrolador ATmega328P puede generar señales PWM en dos modos diferentes: ▪ PWM rápido (fast PWM). ▪ PWM con fase correcta (phase correct PWM). ➢ Las señales PWM se generan al configurar adecuadamente los temporizadores. ➢ Las salidas PWM están en las terminales OC0x (x=A y x=B) las cuales son generadas por los módulos Waveform Generation. ATmega328P - PWM Modos de operación Timer/Counter0 Bits WGM0[2:0] (Waveform Generation Mode): Para definir el modo de operación, se tienen las siguientes combinaciones: ATmega328P - PWM Modos de operación Timer/Counter0 ➢ Modo 0: En este modo es un temporizador sin alguna funcionalidad extra y sólo genera eventos de desbordamiento. ➢ Modos 1 y 5: Modos de PWM en fase correcta, el temporizador automáticamente se incrementa de cero a máximo y de máximo a cero, al coincidir con los registros de comparación conmutará una salida para la generación de una señal PWM. ➢ Modo 2: Es un modo CTC (clear timer on compare match), en donde el temporizador se limpia automáticamente después de una coincidencia con el registro OCR0A. ATmega328P - PWM Modos de operación Timer/Counter0 ➢ Modos 3 y 7: Modos de PWM rápido, el temporizador automáticamente se incrementa de cero a máximo, al coincidir con los registros de comparación conmutará una salida para la generación de una señal PWM. ATmega328P - PWM Bits COM0A[1:0] y COM0B[1:0] (Compare Output Mode): Con estos bits se configura una respuesta automática en OC0x, ante eventos de comparación. ATmega328P - PWM ATmega328P - PWM ATmega328P - PWM PWM Rápido ➢ Es un modo para generar una señal PWM a una frecuencia alta. ➢ En este modo el temporizador cuenta de 0 a su valor máximo (MAX) y se reinicia. ➢ El conteo se realiza continuamente, de manera que, en algún instante de tiempo, el temporizador coincide con el contenido del registro de comparación (OCRx). ATmega328P - PWM PWM Rápido ➢ La señal PWM se genera de la siguiente manera: La salida OCx es puesta en alto cuando el registro del temporizador realiza una transición de MAX a 0 y es puesta en bajo cuando ocurre una coincidencia por comparación. ➢ Este modo se conoce como No Invertido. En el modo Invertido ocurre lo contrario para OCx. ➢ El ancho del pulso está determinado por el valor del registro OCRx. ATmega328P - PWM Señales de PWM Rápido El registro OCRx se actualiza cuando el temporizador pasa de su valor máximo a cero. ATmega328P - PWM PWM con Fase Correcta ➢ En este modo, el temporizador cuenta en forma ascendente (de 0 a MAX), para después contar en forma descendente (de MAX a 0). ➢ La modificación de la terminal de salida OCx se realiza en las coincidencias por comparación con el registro OCRx. ➢ En el modo No Invertido la salida OCx se pone en bajo tras una coincidencia mientras el temporizador se incrementa y en alto cuando ocurra la coincidencia durante el decremento. ➢ En el modo Invertido ocurre lo contrario para la salida OCx. ATmega328P - PWM Las escrituras en el registro OCRx se realizan cuando TCNTx alcanza su valor máximo. Señales de PWM con Fase Correcta ATmega328P - PWM Ejemplo: Generación de una Señal PWM Empleando el temporizador 0 de un ATMega328P, genere una señal PWM en modo no invertido en la terminal PD6, que corresponde con OC0A, con el ciclo de trabajo determinado por el valor del Puerto B. ATmega328P - PWM Solución Puesto que no se han establecido otras restricciones, se utiliza al temporizador 0 (8 bits) empleando el modo de PWM rápido, la salida queda disponible en la terminal OC0A (PD6, terminal 12). Configuración: Modo no invertido: COM0A[1:0]=0b10 PWM rápido, MAX = 0xFF: WGM0[2:0]=0b011 ATmega328P - PWM #include <avr/io.h> int main() { DDRB = 0x00 ; // Entrada para definir el ancho de pulso PORTB = 0xFF; // Pull-up DDRD = 0xFF; // Salida en OC0A (PD6) TCCR0A = 0x83 ; // PWM rápido // COM0A[1:0] = ”10” , WGM0[2:0] = ”011” TCCR0B = 0x01 ; // Reloj sin pre-escala while ( 1 ) { OCR0A = PINB; } } ATmega328P - PWM Como no se emplea el pre-escalador, suponiendo que el microcontrolador va a operar con una frecuencia de 1 MHz, la frecuencia de la señal PWM generada es de: 𝑓𝑃𝑊𝑀 = 1𝑀𝐻𝑧 256 = 3,906 KHz. BIBLIOGRAFÍA Interrupciones Externas, Temporizadores y PWM. Microcontroladores. M. C. Felipe Santiago Espinosa Abril / 2019 ATmega328P 8-bit AVR Microcontroller with 32K Bytes In-System Programmable Flash, DATASHEET. Capítulo 5. El Microcontrolador ATMega328P de Microchip. Felipe Santiago Espinosa.