Académique Documents
Professionnel Documents
Culture Documents
Ahora vamos a generar PWM desde un TIMER que es mejor que con demoras en donde
dedicamos al uC solo a las demoras.
Como en el caso anterior debemos determinar la frecuencia de trabajo, y esta vez vamos a
trabajar a 300Hz, que normalmente si utilizamos uno de los módulos CCP tendríamos que trabajar
con un cristal de 4MHz pero si trabajamos con un cristal de 20MHz o si el uC no cuenta con el
módulo CCP.
Determinamos el periodo.
1
p
f
1
p
300
p 0, 00333s
p 3,33ms
Ahora utilizaremos un TIMER que puede ser cualquiera pero depende de nuestra aplicación para
saber cuál utilizaremos, ya que sería mejor utilizar uno sin pre‐escaler o post‐escaler utilizaremos
un TIMER de 16 bits.
Entonces el valor a precargar en el TIMER es 48886 y el valor correspondiente a 3,33ms es 16650.
Lo que quiere decir que para un duty cycle de 0% el valor es de 0 y para un 100% el valor es 16650
para un 50% es de 8325.
Entonces si cargamos el TMR1 con el valor máximo (65535) menos el Ciclo Útil el TIMER se
desbordará e ira a interrupción al completar el Ciclo Útil. TMR1= TMAX‐CICLO_UTIL para el valor
en alto.
Luego debemos cargar el tiempo que falta para completar el periodo TMR1= TMAX‐(PERIODO‐
CICLO_UTIL) con esto se completa el tiempo en bajo.
Finalmente para ver como varia la señal haremos:
WHILE TRUE 'bucle infinito
FOR CICLO_UTIL=0 to 16650
delay_ms(1)
next CICLO_UTIL
WEND
Esto solo es una muestra básica de cómo se puede hacer hay otras maneras para poder generar
varios PWM como por ejemplo para manejar varios servomotores, como práctica les propongo
generar 3PWM para controlar un LED RGB.
program PWM_TIMER