El MPLAB II - IES Antonio Machado

Anuncio
TEMA 21
PWM
MODULACION DE
ANCHURA DE PULSO
INTRODUCCIÓN
Seguidamente comenzamos el estudio de la modulación por
anchura de impulsos PWM, como ya conocemos el PIC 16F876
dispone de dos módulos CCP captura/comparación/modulación
de anchura de impulsos.
Comenzaremos con el estudio del CCP1, este módulo se
multiplexa con el latch del puerto C y en particular nos da la
señal por el pin RC2.
El recurso que se utiliza es el TIMER2, por lo que deberemos
programarlo.
Cuando generamos un PWM, y realizamos la programación en
C y en concreto con el compilador CCS, deberemos utilizar las
siguientes funciones :
setup_timer_2(mode,period,postscale);
set_pwm1_duty(duty)
que pasamos a comentar
CCFF D.P.E. MÓDULO DE PROYECTOS
2
setup_timer_2 (mode, period, postscale)
Su función es inicializar el el TIMER2 (T2 es un
contador temporizador de 8 bits), los parámetros que
incluye esta función son:
MODO: especifica el divisor para el reloj del
microprocesador, tiene 4 opciones:
T2_DISABLED
T2_DIV_BY_1
T2_DIV_BY_4
T2_DIV_BY_16
→
→
→
→
T2_Desactivado
Se divide por 1
Se divide por 4
Se divide por 16
PERIOD (periodo): Es un INT de 0 a 255, que nos
indica el número de impulsos necesarios para el
overflov del timer recordemos que T2 es un contador
CCFF D.P.E. MÓDULO DE PROYECTOS
3
de 8 bits.
POSTSCALE (postescaler): es un número de 1 a 16
que especifica el número de desbordamientos del T2
que se deben producir para que se solicite una
interrupción. En el modo PWM no tiene significado y
se suele poner a 1 .
Los parámetros que introduzcamos en esta función,
será los que determinen la frecuencia de del PWM.
Veamos un ejemplo:
Dispositivo 16F876, con un reloj a 20 MHz, o lo que es
lo mismo, un periodo de oscilador de 0,05 μs.
La función está definida:
setup_timer_2(T2_DIV_BY_4,191,1);
CCFF D.P.E. MÓDULO DE PROYECTOS
4
Sin divisor de frecuencia, El contador (T2) aumentaría
su cuenta cada 4 ciclos de reloj o sea cada 0,2 μs,
pero como el mode indica que está divido por 4, lo
hará cada 0,8 μs.
Por otra parte el periodo es 191, luego se desborda
cada (191+1) * 0,8 μs = 153,6 μs
F = 1/ 153,2 μs = 6.527 KHz.
En resumen el ciclo del PWM viene determinado por la
expresión:
F(pwm) = (1/clock) * 4 *T2DIV*(period+1)
De todos modos es el propio compilador el que realiza
los cálculos y nos da el valor de cada uno de ellos
siempre y cuando utilicemos PIC WIZAR.
CCFF D.P.E. MÓDULO DE PROYECTOS
5
set_pwm1_duty(value)
Esta función es la encargada de escribir los 10 bits
que determinarán el tiempo en alta del PWM (ciclo de
trabajo). El valor de value se obtiene despejando en la
siguiente expresión expresión:
duty= value*(1/clock)*t2div
Donde duty es el tiempo que deseamos que esté en
alta la señal
En nuestro caso: Frecuencia de reloj
20 MHz,
frecuencia del PWM:6,527 KHz → T = 153,6 μs
Tiempo en alta que deseamos 50%= 76,8 μs(duty)
value = 0.0000768 s* (reloj/modo)
value = 0.0000768 s * (20.000.000/ 4)= 384
CCFF D.P.E. MÓDULO DE PROYECTOS
6
Realicemos ahora un ejercicio práctico, cuyo
enunciado respondería a:
Deseamos generar un PWM a través del pin RC2/CCP1
con un PIC 16F876, el reloj del microcontrolador es de
4 MHz, la frecuencia de la señal PWM será de 1 KHz, y
deseamos que el ciclo de trabajo sea del 50%.
Comenzamos
arrancando
el
seleccionamos project, PIC WIZAR
compilador,
CCFF D.P.E. MÓDULO DE PROYECTOS
y
7
En la pantalla general fijamos los parámetro usuales
del microcontrolador como son: frecuencia de
funcionamiento, código no protegido, tipo de
oscilador etc.
CCFF D.P.E. MÓDULO DE PROYECTOS
8
El fichero.h que se genera con todas las opciones seleccionadas
es:
Seguidamente pulsamos sobre la pestaña Oters, con lo que nos
abre la siguiente ventana de selección
CCFF D.P.E. MÓDULO DE PROYECTOS
9
En esta ventana seleccionamos: PWM, y posteriormente l en
CCPX, CCP1
Una vez que hemos seleccionado modo PWM y que deseamos
trabajar con CCP1, picamos sobre More options, emergerá
una nueva ventana
CCFF D.P.E. MÓDULO DE PROYECTOS
10
Ene esta nueva ventana introducimos el valor de la frecuencia de
PWM deseada en nuestro caso 1000Hz., y validamos picando en
OK
CCFF D.P.E. MÓDULO DE PROYECTOS
11
Si picamos sobre View Code Generated.. Obtenemos el
sentencia que se insertará en la función main
CCFF D.P.E. MÓDULO DE PROYECTOS
12
El código y el fichero.h generados son:
Importante
T2DIV = 4
CCFF D.P.E. MÓDULO DE PROYECTOS
13
Nos resta editar el resto de código, en concreto fijar el ciclo de
trabajo del PWM.
En nuestro caso ya que deseamos un ciclo de 50%, deseamos
que duty sea igual a 500 μs =0,5 ms = 0,0005 s.
Como ya conocemos valor duty* (F reloj/T2DIV), observando
en el código (página anterior) obtenemos que T2DIV = 4.
Operando obtendríamos que Valor = 500;
No olvide que la variable valor se debe incluir como un long.
Una vez realizados estos cálculos pasamos a escribir el resto
de sentencias:
CCFF D.P.E. MÓDULO DE PROYECTOS
14
CCFF D.P.E. MÓDULO DE PROYECTOS
15
Nos resta simular el programa, para ello construimos el siguiente
circuito en Proteus:
CCFF D.P.E. MÓDULO DE PROYECTOS
16
Simulación en modo contínuo, en el osciloscopio se puede observar la
señal PWM generada.
CCFF D.P.E. MÓDULO DE PROYECTOS
17
Mediante el análisi digital comprobamos la frecuencia del PWM.
CCFF D.P.E. MÓDULO DE PROYECTOS
18
Medición del ciclo de trabajo:
CCFF D.P.E. MÓDULO DE PROYECTOS
19
Descargar