Logo Studenta

Microcontrolador AtpMega328p - PWM

¡Este material tiene más páginas!

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.