Convertir PWM en una señal analógica

7

Estoy tratando de pensar en la mejor manera de convertir una señal PWM en una señal analógica. Yo podría usar un filtro RC, pero eso requiere una frecuencia PWM muy alta para crear una reproducción fiel de la señal. En mi caso, estoy tratando con frecuencias de audio para la señal analógica, hasta 20 kHz. Entonces, ¿qué otras opciones hay?

    
pregunta Thomas O

4 respuestas

8

La respuesta simple es que no puedes. Hay varias cosas que van en contra de usted:

  1. sería que para una buena calidad de audio necesitarías ser muy preciso en tu generación PWM. Esto es bastante difícil, ya que su frecuencia de reloj maestra (la frecuencia que la lógica usó para generar el PWM desde) tendría que ser de alrededor de 100 MHz solo para obtener el equivalente de un DAC de 11 bits. Hay formas de generar PWM tan bien sin eso, pero entonces comenzarías con una señal analógica y por lo tanto no tendrías este problema.

  2. como se indicó, necesitaría una reducción súper pronunciada de un filtro. Solo para que coincida con su equivalente de DAC de 11 bits, necesitará algo como 60 dB / octava, lo que no es razonable incluso para los profesionales. Este tipo de filtro tiene muchas dificultades, por lo que todos acudieron a DAC de Delta-Sigma para obtener su audio, que requiere aproximadamente un filtro de 6 db / octava.

  3. Si su filtro no es de 60 db / octava, entonces necesitará que la frecuencia PWM sea super alta. Si tiene 60 db / octava, entonces podría tener una frecuencia PWM de 40 KHz. A 54 db / octava entonces tal vez 80 KHz funcionen. 48 db / octava = 160 kHz. Etc. Entra rápidamente en el rango de MHz alto, y luego su frecuencia de reloj maestra tendría que estar en GHz.

Sin embargo, no todo está perdido. ¿Realmente necesitas filtrar las cosas de alta frecuencia? En muchas aplicaciones (no todas) puede no filtrarlo o usar un filtro RC simple a 1-5 MHz. Sin embargo, seguirá habiendo problemas de alta frecuencia, pero el altavoz o la oreja lo filtrarán todo. Pero el audio seguirá sonando mal. Radio AM en una mala calidad del día. Así es como es.

Actualizar: Mis números para el # 3, arriba, están algo equivocados. Pero antes de llegar a eso, déjame explicarte de dónde obtuve todos los números.

  1. Digamos que está generando el PWM usando lógica digital (FPGA, Microcontrolador, etc.). Y luego digamos que su frecuencia de muestreo de audio y, por lo tanto, su frecuencia PWM es de 48 KHz. Y quieres resolución de 8 bits. Eso significa que su frecuencia de reloj principal debe ser 12.288 MHz. Lo calculé de esta manera: Master_Clk_Freq = Sample_Rate * 2 ^ n_bits. Hacer eso de nuevo para una resolución de 11 bits es 98.304 MHz.

  2. El mejor nivel de ruido teórico de un DAC ideal es aproximadamente -6dB / Bit. Así que un DAC de 24 bits no tiene mejor ruido de -144 db. (Nota: estoy jugando un poco al margen con los términos aquí, agrupando SNR, THD + N y rango dinámico todos juntos.) Por supuesto, ningún DAC de 24 bits real puede hacer esto, pero estamos hablando de teoría aquí. Lo que esto significa es que un DAC de 11 bits tiene un nivel de ruido de -66 db, por lo que no tiene mucho sentido hacer un filtro que funcione mejor que esto. AM Radio tiene una relación señal / ruido de aproximadamente 60 dB para comparación.

  3. Ok, aquí es donde ensucié los números. Suponga que la frecuencia de PWM = 48 KHz y el corte de filtro = 24 KHz (para facilitar las matemáticas). Con un filtro de -60dB / Oct estaremos en -63dB a 48KHz. Si nuestro filtro se cambiara a -54dB / Oct, entonces seríamos -57dB a 48 KHz y -62.4dB a 50.4KHz. Lo que esto significa es que al cambiar nuestro filtro de -60db / oct -54db / oct tendríamos que cambiar la tasa de PWM de 48 KHz a 50.4KHz para lograr el mismo rendimiento de bloqueo de filtro. No es una duplicación de la frecuencia PWM como mencioné antes. De la misma manera, si el filtro se cambiara a -18dB / Oct (que es un diseño manejable), la frecuencia PWM tendría que ser de 104 KHz para tener una atenuación del filtro de -63dB en la frecuencia PWM. Calculé esto haciendo una pequeña hoja de cálculo y jugando con los números.

respondido por el user3624
3

El filtro de paso bajo RC sería la solución natural, pero también puede usar un microcontrolador para medir el ciclo de trabajo y usar ese valor para controlar un DAC. Para medir el ciclo de trabajo, necesita un temporizador con capacidad de captura de entrada. Cuanto mayor sea el reloj de su temporizador, más precisa será su medición. Si el microcontrolador no tiene un DAC en el chip, puede usar uno externo.

    
respondido por el stevenvh
1

Estoy integrando la rampa de PWM, capturando el voltaje con un circuito de muestreo y retención y luego reiniciando la rampa. Esto parece obtener una representación relativamente fiel de la señal, pero todavía tiene algunos problemas, como el ruido de PWM en los picos, y es ligeramente no lineal. Pero, funciona bastante bien y me permite usar una señal PWM de 100 kHz.

Simularlo aquí .

    
respondido por el Thomas O
1

Un problema que aún no se ha mencionado es saber cómo se generó la señal PWM, en particular si el borde anterior, el centro o el borde posterior se produce a una velocidad uniforme, y si la señal PWM representa muestras espaciadas uniformemente, o si el PWM la señal representa las muestras tomadas a intervalos uniformes, o si representan el valor de la señal de entrada en el momento del flanco ascendente, el flanco descendente o ambos. Sabiendo cómo se genera un PWM, debería ser posible hacer un buen trabajo de recuperación de la señal original (así como podría recuperarse de una señal muestreada a la velocidad de PWM). El intento de reconstruir una señal que fue muestreada por otros medios distintos de los esperados es probable que cause distorsión de fase.

    
respondido por el supercat

Lea otras preguntas en las etiquetas