¿Circuito analógico para verificar si hay una señal de audio presente?

En el proyecto en el que estoy trabajando, tengo 3 señales de audio de nivel de línea y necesito determinar en un arduino si existe una señal no silenciosa en cada línea y actuar adecuadamente (en mi caso, "desconectar" un dispositivo de la red eléctrica Voltaje). Mi primera idea de ingeniería excesiva es amplificar cada señal, agregar un sesgo de CC y luego realizar algunas operaciones costosas en el arduino para determinar si existe una señal de audio.

Cada señal de audio es una señal mono que consta de un cable a tierra y un cable de audio de CA de bajo voltaje.

Ahora no recuerdo mucho de mi clase analógica de la universidad, pero mi instinto me dice que esto se puede hacer simplemente usando componentes analógicos donde puedo alimentar el resultado (una señal pseudo digital donde el alto estaría por encima del voltaje x y el bajo estaría por debajo voltaje y) y hacer cálculos mucho más fáciles en el microcontrolador para determinar si existe una señal.

La frecuencia de la señal de audio está entre 10 y 22 000 Hz. El voltaje de pico a pico (del nivel de línea del consumidor) es de 894 mV, pero el circuito debería poder manejar un valor tan bajo como 10 mV de pico a pico.

¿Algunas ideas?

Suena como un detector de picos de amplificador operacional con un decaimiento apropiado y tal vez algo de ganancia seguido de un comparador haría el truco.

Respuestas (2)

Esto sería más fácil si estuviera detectando señales en su nivel máximo de -10 dBV. Pero como desea que esto detecte niveles tan bajos como 10 mV, debe usar comparadores. Obtiene 4 comparadores en un paquete de 14 pines (LM339).

Un par de cosas a tener en cuenta:

1) debe asegurarse de que el diferencial de voltaje que desea medir sea mayor que el voltaje de compensación de entrada en el peor de los casos de su comparador elegido. Una verificación rápida con mi antigua hoja de datos de National Semiconductor dice que el voltaje de compensación en el peor de los casos para el LM339 es de 2 mV.

2) estos comparadores son de colector abierto. Necesitan resistencias pullup para cualquier voltaje de suministro que necesite (+5V o lo que sea). En realidad, esto es una ventaja porque facilita la adición de un detector de retención de picos.

3) necesita sesgar la entrada a los comparadores MÁS ALTO que su señal de pico negativa máxima esperada y MENOS que su señal de pico positiva máxima esperada. Por lo general, configuro el sesgo en el punto medio de la fuente de alimentación.

4) esto va a ser muy caro (sonrisa). El costo total de la lista de materiales debe ser de aproximadamente un dólar por 4 canales.

Haré un esquema rápido aquí. Tenga en cuenta que necesitará usar resistencias del 1 % en la sección de referencia del comparador y polarización de entrada para obtener una sensibilidad cercana a los 10 mV.

esquemático

simular este circuito : esquema creado con CircuitLab

Resulta que la mejor sensibilidad que hará es de aproximadamente 11 mV de pico (22 mV PP) y tolerará señales de entrada de hasta aproximadamente 2,5 V de pico. Puede mejorar la sensibilidad cambiando la resistencia inferior en el divisor de voltaje de referencia a la misma resistencia de 22.1K que se usa en cualquier otro lugar y agregando un potenciómetro de bajo valor en serie con esa resistencia. Ajuste la olla para la sensibilidad deseada.

Tenga en cuenta que este detector incluye retención de picos. La salida pasa a LO cada vez que el audio detectado excede el voltaje de referencia y decae hacia +5V cuando el audio desaparece. La constante de tiempo actualmente es cercana a 1 segundo, pero se puede cambiar fácilmente modificando los valores de la red RC en los pines de salida.

El Arduino Leonardo podría funcionar, dentro de unos límites, sin circuitos externos complejos, ya que tiene un ADC diferencial con ganancia adicional.

Solución:

1) DC polariza cada señal de entrada con dos resistencias (divisor de voltaje entre GND y 5V) y un capacitor, otro divisor de voltaje a un pin de referencia común ADC. El voltaje de referencia del ADC debe establecerse en aproximadamente 100 mv (divisor de voltaje + capacitor). El ADC se saturará en señales superiores a ± 100 mV, pero no le interesa cuánto se supera el umbral.

2) El ADC permite 15k muestras por segundo, a bajo en caso de que tenga señales con frecuencias muy altas. Es posible overclockear el ADC, al precio de una precisión reducida. ±10mv a 100mv de escala completa son aproximadamente 5 bits. De acuerdo con Overclocking AVR ADC, la velocidad de reloj ADC de 2 MHz aún brinda una precisión de 8.5 bits. Una conversión necesita 14 ciclos de reloj ADC, por lo que alrededor de 142k muestras por segundo o 47kHz por canal.

3) El algoritmo sería algo así como "N muestras consecutivas por encima del umbral".

Asuntos:

Nada de esto es compatible con las bibliotecas Arduino, tiene que hacer todo el acceso de registro AVR de bajo nivel usted mismo. Dependiendo de su conocimiento y experiencia, es posible que tenga una curva de aprendizaje empinada por delante.

Hoja de datos AVR 32U4 Asignación de pines Arduino a 32U4