¿Cómo puedo convertir una señal PWM irregular con un ciclo de trabajo del 95 al 99 % en una señal analógica?

Con el propósito de medir partículas (PM) en el aire, estoy tratando de configurar un sistema DAC para el sensor PM Shinyei PPD42NJ ( información aquí y hoja de datos aquí ).

He estado tratando de usar un filtro de paso bajo para obtener un voltaje analógico, pero no estoy seguro de cómo calcular la capacitancia y la resistencia adecuadas. Preocupación: si uso el filtro de paso bajo, ¿las mediciones anteriores afectarán las mediciones actuales (a menos que el capacitor pueda restablecerse cada vez que se muestrea el voltaje)? ¿Con qué frecuencia probaría el voltaje si la frecuencia de los pulsos BAJOS es a veces tan baja como 0,5 Hz?

Los parámetros del PWM son Lógica negativa, Salida digital, Hola: más de 4,0 V (Rev.2) Lo: menos de 0,7 V. Aquí hay una imagen con el Canal 1 que muestra el comportamiento habitual de la señal en función del tiempo.

ver también esta respuesta
Me pregunto si Benjamin realmente quiere una salida analógica o no. Si lo hace, el mejor filtro es un integrador conmutado usando el método que describí. El voltaje aumenta y nunca cae hasta que se lee el resultado y se restablece a 0. Un filtro RC hundido es como un balde con fugas que cuenta la lluvia. (solo una metáfora) Si necesita un esquema para una simple integración y volcado conmutados, solo pregunte. Alguien puede encontrar, o por favor indique que prefiere la solución PIC.
@Benjamin Weia << Me pregunto si Benjamin todavía está pensando en esta pregunta.
Desea muestrear al menos el doble de la frecuencia más alta de la señal para evitar el aliasing: Consulte el Teorema de Nyquist-Shannon .

Respuestas (4)

Aunque uno podría usar un filtro RC simple, creo que sería mejor usar algún tipo de filtrado digital. Las escalas de tiempo que está viendo se ven bien dentro del rango de lo que podría manejar un procesador. Sugeriría que su mejor apuesta probablemente sea hacer algo como probar el pin de entrada una vez por milisegundo y realizar un seguimiento de cuántas veces la entrada ha sido baja durante cada intervalo de tiempo algo más largo (tal vez un segundo o cinco segundos), y luego usar un filtro FIR digital para sumar esas lecturas. Una forma simple de realizar el filtro FIR es escalar cada lectura para estar un poco por debajo del rango completo de un entero de 16 o 32 bits, y luego hacer algo como (pseudo-código):

temp = nueva_lectura
para cada elemento en una matriz
  new_temp = (temp + array_item)/2
  elemento_array = temporal
  temperatura = nueva_temp
bucle  

El valor final de new_temp representará un valor filtrado de paso bajo de la entrada; se puede variar el número de segundos por lectura y la longitud de la matriz para ajustar las características del filtro. Tenga en cuenta que si se usa, por ejemplo, un intervalo de muestreo de dos segundos y una matriz de 16 elementos de largo, solo se considerarán los últimos 32 segundos de entrada para producir la salida (lo que significa que la salida responderá completamente a cualquier cambio en las condiciones de entrada dentro de los 32 segundos). segundos), pero las condiciones de entrada relativamente "estables" producirán una salida relativamente estable (mucho más estable que con un filtro RC que converge razonablemente rápido).

Si los pulsos cuentan, pero la amplitud y la duración no, entonces puede activar un multivibrador monoestable con ellos. Luego, puede cambiar a medir el tiempo, lo cual es razonablemente fácil de lograr con un contador (en un microcontrolador) en contraste con medir picos muy cortos a través de un filtro de paso bajo.

cada pulso tiene un ancho y una velocidad variables para integrar (contar) las partículas totales, según el gráfico.

Mirando la hoja de datos, la "unidad de tiempo" es de 30 segundos.

No estoy seguro de por qué , sin más detalles, desea convertir esto en una señal analógica solo para luego muestrearlo nuevamente.

Sin embargo, si está comprometido a convertir esto en una señal analógica, necesitará un filtro con una constante de tiempo muy larga del orden de la "unidad de tiempo".

Otra opción sería integrar la señal con un circuito integrador de amplificador operacional que se muestrea y se reinicia cada 30 segundos. Esto suena como lo que tiene en mente cuando pregunta sobre la memoria de "medidas" anteriores.

Si proporciona más contexto, puedo ser más específico con mi respuesta.

Por cierto, ¿has mirado esto ? El autor conecta este sensor a un Arduino.

Parece una buena solución con coeficientes cúbicos (3) para compensar curva + compensación. Solución barata y sucia (sin juego de palabras)

Para saber qué valor de condensador y resistencia desea, deberá pensar en la velocidad de respuesta que necesita alcanzar. Mirando la forma de onda, parece que obtienes un pulso cada pocos segundos, y los pulsos duran decenas de milisegundos. Esto es bastante lento, así que:

  • La señal analógica será mucho más lenta que su pulso. Debería esperar que la señal analógica tarde alrededor de un minuto en establecerse cuando cambia la frecuencia del pulso.
  • Deberá elegir valores bastante grandes de resistencia y condensador. La constante de tiempo de un filtro RC en segundos es el producto de la resistencia en ohmios y la capacitancia en faradios.

Como está buscando algo del orden de un minuto, comenzaría con 12k ohmios y 4700uF. Mira cómo funciona. Si necesita una respuesta más lenta, use una resistencia más grande.

Así es como se ve con 12k y 4700uF:

Filtro PWM RC

Hay pulsos de 0,1 s cada 2 segundos en el transcurso de 2 minutos. Como puede ver, no se ha asentado realmente, incluso después de dos minutos, y la variación en la señal analógica sigue siendo de alrededor del 5 %.

Con una resistencia más pequeña, puede tener un tiempo de asentamiento más rápido, pero más variación.

Con una resistencia más grande, puede tener un tiempo de establecimiento más lento, pero menos variación.


No sé si esta es una opción, pero ¿ha considerado usar un microcontrolador para leer estas señales? ¿Cuál será la lectura del voltaje analógico? Si fuera a ser un ADC y un microcontrolador, me olvidaría del ADC y dejaría que la MCU se encargara de eso. Estos pulsos son tan lentos que incluso una computadora hecha con ruedas dentadas podría muestrearlos de manera confiable.

Convertidor digital > analógico = DAC, viceversa = ADC
Oh sí. Día de cerebro lento por alguna razón.