Modulacion PWM
Nuestro controlador (digital) eventualmente tendrá que interactuar con el mundo exterior (analógico). Al margen de usar dispositivos externos (convertidor digital analógico o DAC) muchos microcontroladores cuentan con un módulo PWM (Pulse Width Modulation) que puede usarse (con ciertas limitaciones) para mandar "ordenes" analógicas.
En este tutorialdescribiremos en que consiste la modulación por ancho de pulsos (PWM), veremos las rutinas disponibles en C18 y, como hacemos habitualmente, describiremos los registros asociados y su funcionalidad.
Aprovecharemos los conocimientos adquiridos para escribir una rutina para inicializar el módulo PWM especificando la frecuencia deseada y escribiremos un pequeño programa para usar los dos módulosPWM de un PIC para crear transiciones de colores en un LED bicolor.
En una entrada posterior aplicaremos lo que hemos aprendido a una aplicación más interesante usando el módulo PWM como conversor DAC para un archivo de audio.
Archivos de código asociados a esta entrada: pwm1.c y pwm2.c-----------------------------------------------------------------------------------------------------------------------------
Descripción de la modulación por ancho de pulso (PWM)
En algunos de los tutoriales anteriores usábamos un truco para estimar la ocupación del PIC. Consistía en poner a 1 un cierto pin mientras estábamos haciendo una cierta tarea. Luego, nos bastaba con medir el voltaje medio (con un voltímetro) en dicho pin. Dicho voltaje (dividido por los 5V de alimentación) nos dabael % del tiempo que el pin estaba alto.
La modulación PWM consiste precisamente en eso. El módulo PWM del micro genera una onda cuadrada con una frecuencia dada (típicamente bastante alta, por ejemplo 10 KHz). Luego nosotros podemos ir cambiando el ciclo de trabajo (% del periodo en ON) de la señal:
Si usamos un dispositivo externo con un ancho de banda suficiente (p.e. unosciloscopio) veremos la señal al completo, esto es, la modulación rápida (o portadora) de 10 KHz y las variaciones más lentas (señal a transmitir) del ciclo de trabajo.
Si por el contrario aplicamos un filtro paso-bajo a la señal PWM, los cambios rápidos (10 KHz) de la señal se eliminarán y simplemente veremos los cambios lentos del ciclo de trabajo, observando un voltaje "medio" entre 0 y 5Vdependiendo del ciclo de trabajo (0% -> 100%) programado.
No siempre es necesario implementar un filtro paso-bajo de forma explícita. Muchas veces usamos un dispositivo externo (voltímetro, motor, etc) con suficiente "inercia", de forma que no es capaz de seguir los cambios rápidos de la señal (los 10 KHz). Por así decirlo el dispositivo (motor, altavoz) lleva incorporado su propio filtro paso-bajo.Lo que hemos conseguido es una especie de conversor digital analógico que nos permite traducir una orden digital (ciclo de trabajo del periodo PWM) en una variable analógica (el voltaje medio a la salida entre 0 y 5V).
Obviamente tendremos algunas limitaciones. Como queremos que desaparezca la frecuencia de modulación (los 10 KHz) de antes los cambios (frecuencia) de la señal que queremostransmitir deben ser lo suficientemente lentos (frecuencia baja) para que no desaparezcan también en el filtrado paso-bajo (explícito o implícito) de nuestro dispositivo.
El módulo(s) PWM de un PIC
El parámetro fundamental de una modulación PWM es la frecuencia (o su inverso el periodo) de modulación. En los PIC dicha frecuencia es programable (con ciertas limitaciones) en base a variasvariables:
• La frecuencia del oscilador principal Fosc
• El pre-scaler (PRE) o divisor previo del timer TMR2 que puede tomar los valores 1:1, 1:4 o 1:16
• El registro PR2 (0-255) asociado al timer TMR2
La frecuencia PWM responde a la fórmula:
F_pwm = F_osc / [4 x PRE x (PR2+1)]
o lo que...
Regístrate para leer el documento completo.