You are on page 1of 13

El módulo PWM

TMR2
lleva la
cuenta de
los pulsos
El tren de recibidos.
pulsos que
cuenta el
temporizador
proviene del
oscilador,
cuya
frecuencia se
divide entre 4
y luego pasa
por el divisor
de escala.

Se escribe el período deseado en PR2

Cuando la cuenta de TMR2 es igual a


lo almacenado en Duty Cycle

Se define el ciclo de
trabajo con la
instrucción
set_pwmX_duty();
MODO PWM
 En modo de modulación del ancho del pulso (PWM), el pin CCPx
produce una salida PWM de hasta 10 bits de resolución.
 La terminal CCP1 o la CCP2 deben configurarse como salida.
 Una salida PWM tiene un tiempo base (periodo) y un tiempo en el
que la salida permanece en nivel alto (Duty cicle).
 La frecuencia del PWM es la inversa del periodo.
PERIODO DE PWM
 El periodo se calcula con la fórmula:

 La frecuencia de PWM se define como 1/[período de PWM].

 Cuando TMR2 es igual a PR2, ocurren los tres acontecimientos


siguientes en el siguiente ciclo de incremento:
◦ TMR2 se reinicia en 0.
◦ Se activa el pin CCPx (si el duty cicle de PWM=0%, el pin CCPx no se
activa)

 Nota: Los postscalers Timer2 no se utilizan para calcular la


frecuencia de PWM.
DUTY CICLE PWM
 La ecuación siguiente se utiliza para calcular el ciclo de trabajo:

 CCPRxL y CCPxCON<5:4> se pueden escribir en cualquier momento,


pero el valor del duty cicle no se grabará en CCPRxH hasta después de
que se igualen PR2 y TMR2 (es decir, se complete el período). En modo
PWM, CCPRxH es un registro inalterable.

 El registro CCPRxH y un latch interno de 2bits se utilizan como buffer


doble del ciclo de trabajo de PWM. El buffer doble es esencial en los
problemas técnicos del PWM.

 Cuando se igualan los 2bits del latch de TMR2 y CCPRxH, se concatenan


con un reloj interno de 2bits Q o 2bits del prescaler de TMR2, el pin de
CCPx se borra.
 La máxima resolución de PWM (bits) para una
frecuencia PWM dada se calcula con la ecuación:

 Nota: Si el valor del ciclo de trabajo de PWM es mayor


que el periodo, el pin CCPx no se borrará.
PWM Period = [(PR2) + 1] • 4 • TOSC •(TMR2 Prescale Value)

TPWM=(255+1)x4x(1/40 MHz)x16=0.0004096 s
TPWM=(31+1)x4x(1/40 MHz)x1
F=1/TPWM=2441.40 Hz
=0.0000032 s

F=1/TPWM=312500 Hz

TPWM=(255+1)x4x(1/40 MHz)x4=0.0001024 s
F=1/TPWM=9 765.625 Hz
A 20 MHZ
1.22 KHz 4.88 KHz 19.53 KHz 78.12 KHz 156.25 KHz 208.33 KHz

TPWM=(255+1)x4x(1/20 MHz)x16= 0.0008192 s


F=1/TPWM= 1220.703125 Hz

TPWM=(23+1)x4x(1/20 MHz)x1= 0.0000048 s


F=1/TPWM= 208333.3Hz

TPWM=(63+1)x4x(1/20 MHz)x1= 0.0000128 s


F=1/TPWM= 78125 Hz
Configuración del timer 2
setup_timer2 (T2_DIV_BY_16,255,1)

El primer parámetro es el prescaler que puede ser 2, 4


o 16 para este microcontrolador, el segundo parámetro
es el PR2 el cual indica el momento de desborde del
timer y el último parámetro es el postcaler el cuál no
presenta ningún efecto.
PWM Ejemplo
0 255

0 μs 815 μs
F=1/TPWM= 1226.99 Hz
set_pwm2_duty(200);
0 μs 815 μs
F=1/TPWM= 1226.99 Hz
set_pwm2_duty(50);

You might also like