viernes, 17 de abril de 2015

Análisis de una aplicación usando PWM (Pulse Width Modulation)

PWM es una forma de modulación por ancho de pulso muy usada en ciertas aplicaciones como control de velocidad de motores DC, amplificación digital de audio (Amplificadores clase D), modulación AM de alta potencia, entre otras.

Hoy quiero analizar una aplicación quizás no muy conocida, pero muy importante por los conceptos que se tocan y analizan. Esta aplicación es la conversión de señales digitales a analógicas.

En algunos sistemas embebidos como Arduino, es posible generar una señal PWM con amplitud 5V, frecuencia aproximada de 500 Hz ó 1 KHz y ciclo de trabajo variable de 0 a 100% como se muestra en la figura 1:
Figura 1. Modulación PWM en Arduino.

La señal de la figura 1, en ciertas circunstancias, puede representar a una señal analógica digitalizada con Arduino. Para recuperar dicha señal, (conversión digital a analógica) se puede usar un filtro pasa bajos aplicado a la señal modulada PWM, como se muestra en la figura 2.
Figura 2. DAC usando filtrado pasabajos.

La función del filtro pasa bajos es filtrar o atenuar todos los componentes armónicos de la señal PWM, excepto la componente DC, en un instante dado. La componente DC también es conocida como el valor medio de una función periódica en un instante dado.

Para mostrar como es el proceso de conversión digital a analógica, calcularemos el espectro de la señal PWM, luego determinaremos la componente DC o valor medio desde su espectro, veremos como varia el valor medio en función del ciclo de trabajo y finalmente determinaremos la frecuencia de corte óptima del filtro pasa bajos.

Figura 3. Parámetros de la señal PWM.

Calculamos el espectro de la señal PWM con amplitud A, periodo T y ciclo de trabajo τ que se muestra en la figura 3 con la Serie Compleja de Fourier, como sigue:

Remplazando ω con 2π/T:

El módulo de Cn representan los armónicos de la señal periódica
Aplicando la identidad trigonométrica:
El primer término de Cn (n=0) es la componente DC o valor medio de la función PWM y esta dado por:


Analizando este término, vemos como a medida que varia τ de 0 a T, el valor medio de PWM varia de 0 a A.

Además, analizando la función, vemos que tiene envolvente tipo "sampling", que para  τ=0 el espectro es 0 y que para  τ=T el espectro es Aδ(t), como era de esperarse.
Finalmente, calculemos los valores de la 1ra y 2da armónica para distintos valores de τ distintos de 0 y T en la tabla 1.

PWM(f)
C0
C1
C2
τ = 0
0
0
0
τ = 0.2T
0.2A
0.19A
0.15A
τ = 0.5T
0.5A
0.32A
0
τ = 0.8T
0.8A
0.19A
0.15A
τ = T
A
0
0
Tabla 1. Cálculo de los armónicos de una señal PWM

En esta tabla se puede observar (entre otras cosas) que ningún armónico es mayor que el término DC (n=0) y como nos interesa este último término, cualquier filtro pasabajos con frecuencia de corte inferior a la frecuencia del primer armónico y ganancia unitaria servirá para recuperar la señal analógica. En este caso:

Lógicamente, mientras mayor sea el orden del filtro, aparecerán menos rizados en la señal analógica recuperada.

En el caso del arduino, si selecciono la frecuencia de corte de 200 Hz y tengo un capacitor de 100nF la resistencia deberá ser:

La demostración experimental de este análisis estará en la próxima entrada.