martes, 15 de diciembre de 2015

Experimento 1: Recuperación de una señal senoidal a partir de una señal PWM.

Nota: Para ver las fórmulas usar Firefox o Chrome con la extensión MathJax

En esta experiencia se describirá la conversión de una señal digital de modulación por pulso a una señal analógica determinística. Básicamente se trata la conversión de una señal PWM a una señal senoidal.

OBJETIVO

La finalidad de la experiencia será repasar los principales conceptos de la conversión analógica-digital y también servirá como base para desarrollar sistemas de comunicación prácticos como la transmisión digital de voz (modulada en PWM).

IMPLEMENTACION

Para el desarrollo de dicha experiencia necesitaremos:

  • Un generador de funciones
  • Un módulo Arduino UNO
  • Componentes electrónicos pasivos (un potenciómetro y un capacitor)
La siguiente figura muestra el diagrama general de conexiones del experimento:


Figura 1


De acuerdo a la figura, el generador de la onda senoidal se conecta a una de los pines analógicos del módulo ARDUINO UNO. Luego, la salida de uno de los pines digitales del ARDUINO UNO se conecta a una red RC configurada como filtro pasa bajos pasivo de primer orden.

Los parámetros de la señal senoidal de entrada se configuran de acuerdo a las características de la señal que reciben los pines analógicos del ARDUINO UNO.

Los pines analógicos A0 - A5 aceptan amplitudes de voltajes entre 0 a  5 V DC, entonces la amplitud de la onda senoidal será de 4 Vpp con un voltaje Offset de +2.5 V.

En cuanto a la frecuencia de la señal senoidal, esta debe ser menor a la mitad de la frecuencia de muestreo, bajo el criterio de Nyquist. La frecuencia de muestreo típica del ARDUINO es de 4.46 KHz, medida experimentalmente. Entonces, la frecuencia máxima de la señal senoidal de entrada deberá ser menor a 2.23 KHz. Para efectos del experimento consideramos una señal de 100 Hz.

De la descripción anterior se obtiene una expresión matemática (que es una característica de las señales determinísticas) de la señal de entrada:


x ( t ) = 2.5 + 2 cos ( 2 π f c t ) x(t) = 2.5+2 cdot cos(2%pi f_c t)             (1)


PROGRAMA DEL ARDUINO

El programa tiene básicamente 3 líneas de comando o instrucciones:

void loop()
{
  valor=analogRead(5);         //lee el dato analógico del pin 5 y lo guarda en una variable de 10 bits
  salida=valor*(255./1023);  //convierte el 'valor' en una variable de 0 a 255 valores.
  analogWrite(3,salida);       //muestra la variable de salida como una señal PWM.
}

El conjunto de instrucciones se repite indefinidamente debido a que se encuentra dentro de la función 'loop'.

DEMOSTRACION DE LA TRANSFORMACION

La tabla posterior muestra el cálculo de las magnitudes del valor medio y de los dos primeros armónicos para diversos valores de ciclo de trabajo.


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
Cálculo de los armónicos de una señal PWM


En el siguiente vídeo se demuestra el cálculo en la tabla cuando la frecuencia (fundamental) de la señal PWM es de 490 Hz.



Como se puede observar, los valores calculados coinciden con los experimentales.

CONVERSIÓN DE LA SEÑAL PWM A SENO

Se aplica la señal de la fórmula 1 al Arduino UNO y su salida convertida en PWM se filtra con un filtro pasa bajos pasivo de primer orden que es una red RC, como se muestra en la gráfica 1.

A continuación los resultados:

Gráfica 1:







La señal celeste es la señal senoidal aplicada y la señal amarilla es la señal PWM a la salida del pin digital 3 del arduino.

Vemos que la señal de entrada para que ingrese al módulo arduino se le suma un voltaje offset de 2.5 V aprox. para que la señal esté dentro del rango de valores aceptables por los pines de entrada analógicos del arduino. El voltaje aceptable está entre 0 y 5 Volts.

Gráfica 2:




Esta gráfica muestra la señal PWM de entrada al filtro, y la señal celeste que es la señal senoidal filtrada (recuperada). También se observa el espectro de la señal PWM.

Lo más importante para destacar en este punto es que en la transformada de la señal se observa:

  1. Un impulso en el origen que representa el valor medio de la señal PWM, el cual siempre es un valor de voltaje mayor que 0.
  2. Un impulso en 100 Hz muy cerca al impulso en el origen que es la frecuencia de la señal senoidal de entrada.
  3. Un impulso en 500 Hz que representa el primer armónico de la señal PWM.
Gráfica 3:



En esta tercera gráfica se observa la transformada de la señal filtrada con un filtro pasabajos formado por una red RC de 100 KΩ y 100nF (primer orden) lo cual da una frecuencia de corte de 100 Hz.

Pensemos en un filtro imaginario (línea de color rojo) que atenúa todas las frecuencias superiores a 100 Hz. Solo quedan relevantes las 3 armónicas de la gráfica 2 pero con magnitudes diferentes a causa del filtrado.

La forma senoidal general de la señal celeste se debe al impulso central ubicado en 100 Hz y el rizado de la señal celeste se debe al tercer impulso ya atenuado por el filtro.

Si cuantificamos la frecuencia de la señal de rizado vemos que existen 5 ciclos por cada periodo de la señal senoidal lo cual se comprueba en el espectro donde el tercer impulso mas pequeño esta en 500 Hz y entonces:

Nº de ciclos = 500 Hz 100 Hz = 5 Nº de ciclos = {500 Hz} over {100 Hz} = 5

Finalmente, si deseamos desaparecer el rizado, la solución más obvia según la gráfica 3 es incrementar la pendiente de corte del filtro lo cual se logra incrementando el orden del filtro. 

Para obtener filtros de mayor orden, lo más recomendable es realizar filtros activos (con OPAMPs) en lugar de las redes pasivas RC las cuales causan mayor atenuación de la señal filtrada,

Gráfica 4


Finalmente, para tener una señal similar a la original se pasa la señal filtrada por un capacitor de desacoplo el cual solo deja pasar las componentes de AC de la señal.

Lo que queda por demostrar es que si la eliminación o filtrado del tercer impulso ocasiona que la señal de salida se asemeje aún más a la original como es de esperarse.

Finalizo mostrando una fotografía con el circuito de prueba para analizar y demostrar la conversión de la señal analógica senoidal a señal PWM y su posterior recuperación.


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.