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

2

Con el fin de medir partículas en suspensión (PM) en el aire, estoy intentando configurar un sistema DAC para el sensor de PM Shinyei PPD42NJ ( info here 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 pasadas afectarán las mediciones de corriente (a menos que el condensador pueda restablecerse cada vez que se muestrea el voltaje)? ¿Con qué frecuencia muestrearé el voltaje si la frecuencia de los pulsos BAJOS a veces es tan baja como .5 Hz?

Los parámetros de la PWM son lógica negativa, salida digital, Hola: sobre 4.0V (Rev.2) Lo: bajo 0.7V. Aquí hay una imagen con el Canal 1 que muestra el comportamiento habitual de la señal en función del tiempo.

    
pregunta Benjamin Weia

4 respuestas

2

Aunque uno podría usar un filtro RC simple, creo que sería mejor usar algún tipo de filtro digital. Las escalas de tiempo que está mirando se ven bien dentro del rango de lo que un procesador podría manejar. Yo sugeriría que su mejor apuesta es probablemente hacer algo como muestrear el pin de entrada una vez por milisegundo y hacer un seguimiento de cuántas veces ha sido baja la entrada 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 sencilla de realizar el filtro FIR filtro 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 = new_reading
for each item in an array
  new_temp = (temp + array_item)/2
  array_item = temp
  temp = new_temp
loop  

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

    
respondido por el supercat
1

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

    
respondido por el jippie
1

En cuanto a 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 muestrearla nuevamente.

Sin embargo, si está comprometido a convertir esto en una señal analógica, necesitará un filtro con una constante de tiempo muy muy 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 reinicie cada 30 segundos. Esto suena como lo que tiene en mente cuando pregunta sobre la memoria de las "mediciones" anteriores.

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

Por cierto, ¿has visto esto ? El autor interconecta este sensor a un Arduino.

    
respondido por el Alfred Centauri
1

Para saber qué valor de capacitor y resistencia desea, deberá pensar en la velocidad de respuesta que debe alcanzar. Mirando la forma de onda, parece que recibes 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 frecuencia de pulso. Debería esperar que la señal analógica demore aproximadamente un minuto cuando la frecuencia del pulso cambia.
  • Deberá elegir valores bastante grandes de resistencia y capacitor. La constante de tiempo de un filtro RC en segundos es el producto de la resistencia en ohmios y la capacitancia en Farads.

Ya que estás buscando algo en el orden de un minuto, comenzaría con 12k ohms y 4700uF. Mira cómo funciona eso. Si necesita una respuesta más lenta, use una resistencia más grande.

Esto es lo que parece con 12k y 4700uF:

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

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

Con una resistencia más grande, puede tener un tiempo de asentamiento 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? ¿Qué será la lectura del voltaje analógico? Si iba a ser un ADC y un microcontrolador, me olvidaría del ADC y dejaría que la MCU se encargara de ello. Estos pulsos son tan lentos que incluso una computadora hecha de ruedas dentadas podría muestrearlos de manera confiable.

    
respondido por el Rocketmagnet

Lea otras preguntas en las etiquetas