Cómo contrarrestar el acoplamiento de CA de la tarjeta de sonido para leer datos digitales

7

Descargo de responsabilidad: soy nuevo en EE. Todo lo que he aprendido hasta ahora lo he aprendido de leer en línea y publicar preguntas como esta mientras trabajaba en este proyecto. Pido disculpas si hago un mal trabajo explicando mi problema, ya que probablemente carezco del conocimiento técnico para hacerlo correctamente.

Estoy intentando leer dos medidores de flujo a través del puerto de micrófono de un teléfono / tableta. Las clavijas de pulso de los medidores de flujo alternan entre + 0V y + 5V a medida que giran sus molinetes.

Estoy utilizando el siguiente esquema para mezclar las señales de los dos medidores de flujo y enviarlos a través de un puerto de micrófono:

simular este circuito : esquema creado usando CircuitLab

Mezclo los dos pines de pulso juntos con un R-2R. Esto me permite observar los cambios de voltaje y saber cuál de los dos medidores de flujo cambió de estado en función de la magnitud del cambio de voltaje. Por ejemplo, si veo un cambio de voltaje de 2,5 V, sé que el medidor de flujo 1 se ha encendido. Si veo un cambio de voltaje de -1.25 V, sé que el medidor de flujo 2 se ha apagado. Luego uso un divisor de voltaje para eliminar el voltaje dentro del rango de voltaje de la tarjeta de sonido.

La tarjeta de sonido está acoplada en CA y convierte los cambios de voltaje en un cambio de amplitud con una fórmula similar a amplitude change = (voltage change)/(voltage range) . El acoplamiento de CA desplaza lentamente la amplitud a 0 también. Entonces, si la tarjeta de sonido de mi PC tiene un rango de voltaje de 2V, y los medidores de flujo causan un cambio de voltaje de -1.5V, leo a través del puerto del micrófono un cambio de amplitud de -1.5V/2V = -0.75 . Mi algoritmo ve este cambio de amplitud y, en función de algunos umbrales, determina si fue causado por el medidor de flujo 1 o 2. Esto se puede ver en estas capturas de pantalla de mi programa Java que se ejecuta en mi PC:

Lectura de señal sin procesar desde el puerto de micrófono de la PC: señal del medidor de flujo de PC http://s3.awesomebox.net/Flow%20Meter%20Reader/FlowMeterReaderRaw.png

El programa resalta los cambios en el estado del medidor de flujo: Detección de cambio de estado de señal del medidor de flujo de PC http://s3.awesomebox.net/Flow%20Meter%20Reader/FlowMeterReaderDetected .png

Como puede ver, el programa está identificando con éxito los cambios en el estado del medidor de flujo; los cambios de amplitud más pequeños son causados por el medidor de flujo 1 y los cambios de amplitud más grandes son causados por el medidor de flujo 2.

Los problemas comienzan cuando se envía la misma señal a mi tableta Android Galaxy Note 8. Aquí es cómo se ve la señal cuando se lee a través del puerto de micrófono de la tableta: señal del medidor de flujo de tabletas http://www.awesomebox.net/share/androidReadingReal.png

Tenga en cuenta que todos los cambios de amplitud vistos anteriormente son causados por el mismo cambio de voltaje (todos los cambios de estado son del mismo medidor de flujo). Los cambios de voltaje solos o poco frecuentes aparecen como cambios de amplitud muy pequeños, mientras que los cambios de voltaje agrupados estrechamente (de la misma magnitud) aparecen como cambios de amplitud más grandes y más cercanos a lo que yo esperaría. Parece que cuanto más se acerca un cambio de voltaje a otros cambios de voltaje, mayor es el cambio de amplitud que crea.

Esto es lo que leo del puerto de micrófono de mi PC y lo que espero. Observe que todos los cambios de amplitud son aproximadamente de la misma magnitud: señal esperada del medidor de flujo de PC http://www.awesomebox.net/share/androidReadingExpected.png

Se esperaba: Un cambio de voltaje de 1.5V o -1.5V siempre debería causar un cambio de amplitud de 0.75 o -0.75.
Actual: Un solo cambio de voltaje de 1.5V o -1.5V causa un cambio de amplitud de 0.1 o -0.1. Una serie de 10 cambios de voltaje de 1.5V y -1.5V en corta secesión causa cambios de amplitud de 0.75 y -0.75.

Esta inconsistencia hace que sea imposible para mi algoritmo identificar en qué medidor de flujo fue causado un cambio de amplitud. ¿Por qué estos cambios de voltaje único causan cambios de amplitud tan pequeños? ¿Hay alguna forma de hacer que los cambios de amplitud sean siempre consistentes con los cambios de voltaje?

Además, en lugar de que la señal caiga lentamente a 0 como lo esperaría del acoplamiento de CA (y se ve en la señal que se lee a través del puerto de audio de mi PC), parece que vuelve a 0 inmediatamente y oscila unas cuantas veces antes de que finalmente establecerse de nuevo en 0. La oscilación agrega mucho ruido a la señal y dificulta la determinación de si un cambio de amplitud fue causado por un cambio de voltaje o es simplemente una oscilación de restablecerse a 0. ¿Hay una manera de ¿Eliminar estas oscilaciones?

Lo siento por la novela corta y gracias por cualquier consejo,
 - Mike

    
pregunta Mike

4 respuestas

5

La forma más fácil de superar el acoplamiento de CA es convertir sus señales de CC a CA. Parece lógico, ¿no?

Un método simple es simplemente cortar su señal de entrada a una frecuencia nominal. En algún lugar entre 500 Hz y 1 KHz parece razonable.

Lo que terminas es una señal de CA (onda cuadrada) de cualquier amplitud que fuera tu señal de CC original.

Hay varias formas simples de hacer esto.

1) El método más simple es usar un temporizador CMOS 555 como el TLC555. No estoy en mi computadora ahora mismo, pero entraré en un esquema cuando llegue a casa. Pero una descripción verbal sigue:

Conecta los pines 2 & 6 juntos y a su condensador de tiempo. La resistencia de sincronización se conecta entre los pines 2/6 y el pin 3. Los pines 4 y 8 van a su fuente de alimentación (5-15 Vcc). Pin 1 va a la tierra.

Conecte su señal de entrada de CC a través de una resistencia de 4.7k a 555 pin 7. Este pin también alimenta la entrada analógica en su computadora.

Elija la red RC de temporización para la frecuencia deseada.

Hecho. . .

Hay otros métodos de helicóptero, pero este es realmente simple y barato.

[Editar]

Al volver a leer la pregunta original y los comentarios y respuestas posteriores, cambiaré mi respuesta ligeramente.

Debido a que está enviando pulsos (no niveles de CC) de amplitud variable al teléfono inteligente / PC, sugeriré que desee tratar la señal de corte como un operador. Por lo tanto, debe establecer que la frecuencia de corte sea bastante alta, por encima de 10 KHz pero por debajo de 20 KHz. No sé qué tan nítidos son los filtros anti-aliasing en las entradas analógicas modernas de computadoras / teléfonos inteligentes, pero creo que quieres estar bien al margen de ellos. Tal vez pueda obtener la frecuencia de corte de hasta 16 o 18 KHz, sinceramente, no lo sé.

Luego simplemente haga un esquema de detección de envolvente en el software para recuperar las amplitudes de señal de CC originales.

Aquí está el esquema que prometí anteriormente. Tenga en cuenta que esto funciona bien con un temporizador CMOS 555, no con una de las piezas bipolares originales. TLC555 es mi temporizador estándar 555.

El pin 7 funciona para cortar la señal de entrada porque es una salida de drenaje abierto. Tomamos nuestra retroalimentación de tiempo del pin de salida (Pin 3); esto funciona bien porque el Pin 3 es una salida CMOS simétrica con un nivel de Vout-HI aproximadamente igual a Vdd y un nivel de Vout-LO aproximadamente igual a Vss.

Ninguna de estas características es posible si se utiliza un bipolar 555 original.

simular este circuito : esquema creado usando CircuitLab

    
respondido por el Dwayne Reid
0

La respuesta rápida es no. Estás viendo dos efectos diferentes.

La entrada de micrófono de Android está, de hecho, acoplada a CA, pero la frecuencia de corte es mucho mayor que la frecuencia de su sensor. Dado que no proporciona ninguna información sobre las bases de tiempo para las diferentes trazas, es imposible proporcionarle números concretos sobre cómo es la respuesta de frecuencia de la entrada de Android.

La PC también tiene un corte de baja frecuencia que es demasiado alto, pero está un poco más cerca de los datos del sensor que el de Android. Además, tiene una impedancia de entrada de aproximadamente 1 kilohm, que está cargando su red de resistencias y causando una baja amplitud.

No hay una forma práctica de evitar los efectos del acoplamiento de CA (tenga en cuenta que dije que es práctico: puede crear un filtro de énfasis, pero no creo que quiera ir allí). La impedancia de entrada de la PC se puede compensar construyendo un amplificador de búfer con un amplificador operacional.

    
respondido por el WhatRoughBeast
0

Una excelente pregunta, en presentación & contenido. Y su análisis de cómo obtener lo que desea de un solo canal de entrada (mono) es admirable.

Sospecho que el problema es que el tiempo de filtrado del teléfono es más corto que el de la PC (es decir, el corte de baja frecuencia del teléfono es mayor que el de las PC), y probablemente se deba a que las tapas de acoplamiento de CA para un espectro completo de 20-20 kHz, el audio tiende a ser relativamente grande, más grande de lo que probablemente cabría cómodamente en un teléfono. Apuesto a que el teléfono tendrá una menor sensibilidad a la baja frecuencia (una especificación que probablemente nunca verá publicada para un teléfono), & podrían estar haciendo un poco de impulso de baja calidad para tratar de compensar esta realidad.

Creo que volverías a la pista para procesar primero los datos de tu sensor en un esquema de modulación compatible con AC, como sugirió Dwayne.

    
respondido por el Techydude
0

Si todo lo que se le hace a la señal es un filtro de bloqueo de CC (es decir, un filtro de paso alto), en principio puede recuperar la señal original por integración. Este método es susceptible de amplificar el ruido y puede divergir fácilmente si sus constantes no se seleccionan cuidadosamente, pero es teóricamente posible.

La buena noticia es que no es necesario reconstruir la señal original. Si bien los impulsos pueden ocurrir con muy poca frecuencia, en principio solo está interesado en el flanco ascendente o descendente, que en sí mismo es un componente de alta frecuencia, y se registra muy bien, incluso si la tensión vuelve a cero.

La mala noticia es que parece que aquí están en juego otros efectos además de un simple filtro de bloqueo de CC. Puede haber AGC (control automático de ganancia) o intentos de cancelación de ruido presentes, especialmente en la señal de Android, lo que podría explicar la rampa lenta de la amplitud. Una respuesta de StackOverflow sugiere que estas cosas no se pueden desactivar, mientras que un comentario a esa respuesta sugiere que la constante VOICE_RECOGNITION es se supone que te da el flujo de audio en bruto, pero puede que no siempre lo haga. Quizás haya un circuito analógico en la tableta que simplemente no se puede apagar.

Es posible que desee repensar el esquema de modulación por completo. De manera similar a la respuesta de Dwayne, podría considerar configurar un 555 u otro circuito para producir un breve chirrido, o tren de pulsos, en cada pulso, a frecuencias variables para los dos sensores. Los pulsos se pueden detectar analizando la señal en el software utilizando filtros de paso de banda en las dos frecuencias seleccionadas. Luego, el detector busca un pulso a la frecuencia especificada más larga que un cierto umbral, y lo cuenta como un pulso del sensor respectivo. Este debe ser un esquema muy robusto, que no depende de las amplitudes absolutas de la señal.

Las frecuencias deberían elegirse idealmente de modo que la frecuencia superior no sea un sobretono de la inferior, por lo que puede producir lecturas falsas. Un temporizador 555 creará por defecto salidas de pulso, pero las salidas se pueden pasar individualmente para eliminar algunos de sus armónicos si es necesario. DTMF , por ejemplo, utiliza frecuencias separadas por un factor de 1.1.

La frecuencia y la duración deben elegirse adicionalmente para ser tal vez un orden de magnitud mayor y más corta, respectivamente, que la salida más rápida del sensor, para evitar que un nuevo tren de pulsos comience antes, o demasiado cerca de cuando el anterior uno fue terminado

Alternativamente, podría usar un esquema de modulación de frecuencia, de nuevo similar a DTMF, donde el estado del sensor modula la frecuencia de un oscilador, que puede detectarse utilizando un filtro de paso de banda como se sugirió anteriormente. Esto tiene la ventaja adicional de proporcionar una onda portadora que siempre está encendida, lo que le permite detectar si un sensor está conectado en absoluto.

Si va por un esquema de activación por flanco, solo podría disparar un chirrido en los impulsos positivos, lo que debería proporcionarle un circuito de activación ligeramente más simple y una mayor indulgencia en la elección de frecuencia, ya que los impulsos ahora están más alejados.

    
respondido por el nitro2k01

Lea otras preguntas en las etiquetas