¿Cómo hacer una conversión analógica a digital de micrófono amplificado limpio?

12

He hecho un par de preguntas relacionadas con este proyecto en los últimos días, pero parece que no puedo resumirlo todo.

Conecté un micrófono electret a un opamp y le di salida a mi microcontrolador arduino. El ADC en el microcontrolador convierte un rango de 0 a 5 vV a un número de 10 bits (0 a 1023).

Probé 3 chips de amplificador diferentes:

  • LM386 - Recibí comentarios de que este chip no era bueno para este propósito, ya que no es opamp, y no funcionó correctamente como se esperaba.
  • LM358 - funciona
  • UA741: funciona, amplifica más que LM358

Seguí este esquema Exactamente (a excepción de que jugué con valores de resistencia para obtener una buena ganancia): utilicé 50k ohm para R5 y 10 ohm para R2.

Elproblemaesquelasalidadelosdosúltimoschipsnoestá"limpia". El AnalógicoRead () en el Arduino siempre está leyendo un valor distinto de cero, incluso cuando no hago ruido en el micrófono. La lectura reacciona correctamente cuando hago ruido, pero el valor "cero" es distinto de cero. A veces, el valor "cero" incluso parpadea, desechando la lectura todo el tiempo. Esperemos que tenga sentido.

¿Puedes ayudarme a resolver esto?

Como información adicional sin importancia: estoy tratando de hacer algo como esto , eventualmente.

    
pregunta Shubham

3 respuestas

17

Deshazte del condensador de salida. Ese circuito probablemente estaba destinado a producir una señal alrededor de cero, por lo que el capacitor está allí para bloquear el desplazamiento de 1/2 Vdd. Sin embargo, el microcontrolador quiere ver la señal centrada alrededor de 1/2 Vdd, así que simplemente deshágase del condensador.

Los micrófonos necesitan mucha ganancia. Los electretos pueden ser sensibles, pero es posible que aún necesites una ganancia de voltaje de 1000. La ganancia en tu circuito es la proporción de R5 a R2, pero esto solo funciona dentro de los límites de lo que puede hacer el operador.

Los valores que mencionaste anteriormente te darían una ganancia de 5000. Eso es mucho más de lo que deberías tratar de obtener de una sola etapa. No solo el voltaje de compensación se multiplicará por esta ganancia, sino que el opamp no podrá proporcionar eso en todo el rango de frecuencia. Con un ancho de banda de ganancia de 1 MHz, solo obtendrá esa ganancia algo por debajo de 200 Hz. Incluso un desplazamiento de entrada de 1 mV se convierte en 5 V después de la amplificación en 5000.

R2 es también la impedancia vista por el micrófono después del capacitor de entrada. Necesita que esto sea algo mayor que la impedancia del micrófono con su pullup y el capacitor de entrada en la frecuencia de interés más baja. 10 Ω es demasiado pequeño para eso. 10 kΩ sería un mejor valor.

Prueba dos etapas con una ganancia de 30 o más para empezar y ve a dónde te lleva. Esa es una ganancia que puede manejar sobre frecuencias razonables con suficiente espacio libre para que funcione la retroalimentación. También debe acoplar capacitivamente las dos etapas para que el voltaje de compensación de entrada no se acumule en todas las etapas.

Editar: Circuito añadido

No tuve tiempo de dibujar un circuito anoche cuando escribí la respuesta anterior. Aquí hay un circuito que debería hacerlo:

Esto tiene una ganancia de voltaje de aproximadamente 1000, que debería ser suficiente para un micrófono electret razonable. Puede que sea demasiado, pero es fácil agregar algo de atenuación.

La topología es bastante diferente de su circuito. Lo más importante que se debe tener en cuenta es que no intenta producir toda la ganancia en una etapa. Cada etapa tiene una ganancia de aproximadamente 31. Eso deja mucho margen de ganancia en la frecuencia de audio máxima de 20 kHz para la retroalimentación, por lo que la ganancia será bastante predecible y plana en todo el rango de frecuencias de audio ya que el MCP6022 tiene un ancho de banda de ganancia típico Producto de 10 MHz. El factor limitante probablemente será el micrófono.

A diferencia de lo que dije antes, las dos etapas no necesitan estar acopladas capacitivamente para evitar que la tensión de compensación se acumule junto con la ganancia. Esto se debe a que en este circuito, cada etapa tiene solo una ganancia de CC de 1, por lo que el desplazamiento final es solo el doble del desplazamiento opamp. Estos opamps tienen solo un desplazamiento de 500 µV, por lo que el offset final es de solo 1 mV debido a los opamps. Habrá más debido a la falta de coincidencia de R3 y R4. En cualquier caso, la salida de CC será lo suficientemente cercana a la mitad del suministro para no comer en el rango A / D de manera significativa.

La ganancia de CC de 1 por etapa se logra mediante el acoplamiento capacitivo del camino del divisor de retroalimentación a tierra. El condensador bloquea DC, por lo que cada etapa es solo un seguidor de unidad para DC. La ganancia total de CA se realiza a medida que la impedancia del condensador (C3 en la primera etapa) se reduce en comparación con la resistencia divisora inferior (R7 en la primera etapa). Esto comienza a suceder a unos 16 Hz. Un inconveniente de este enfoque es que la constante de tiempo para liquidar es C3 veces R7 + R5, no solo R7. Este circuito tardará un par de segundos más o menos en estabilizarse después de ser encendido.

    
respondido por el Olin Lathrop
5

Como usted dice, el valor digital será de 0 a 1023. La mitad de este rango no es 0, es 512 (lo que corresponde a un voltaje de alrededor de 2.5). Para el silencio, deberías ver algo alrededor de la mitad del rango como este. No tiene que ser 512 exactamente, pero debe estar cerca. Esto se llama "DC offset". La señal se desplaza hacia arriba y se centra alrededor de 2,5 V.

Si está midiendo 2 V y está viendo valores de ADC de alrededor de 400, entonces básicamente está funcionando bien.

Las ondas de sonido pasan de presión negativa a positiva. Si el punto central fuera 0 y la señal solo pudiera medirse entre 0 y 1023, los valores de presión negativa (-1023) se cortarían.

Además, siempre fluctuará un poco debido al nivel de ruido del ADC. (Y siempre habrá un poco de ruido de audio en la habitación, sin importar lo silencioso que esté).

    
respondido por el endolith
3

¿Puedes publicar la hoja de especificaciones en ese micrófono? No hay razón para que necesite una ganancia de 5000 con un micrófono electret a menos que tenga una unidad desnuda sin FET interno. Si ese es el caso, el preamplificador debe tener un aspecto muy diferente.

Además, el circuito que usaste no es muy propicio para ser usado como un preamplificador para un micrófono electret.

Lo recomendaría:

R5/R4establecelagananciaysepuedeajustarsinatornillarconlaimpedanciadeentradadelcircuito.R3puedeserde2k->10kish.10ktenderáamejorarelrendimientodedistorsión,siloajustademasiadobajo,deberíareconsiderarlosvaloresdeR1yR2paracorregirlaimpedanciadeentrada.

Tambiénesmuyimportantequelafuentedealimentaciónestédesacopladaadecuadamente,yaquecualquierruidoseintroduciráenelmicrófono.

Comolasotrasrespuestasmencionaron,tupunto"cero" será ~ 512 cuando leas el ADC y fluctuará un poco sin importar lo que hagas.

Si tu objetivo es parpadear luces en respuesta a un nivel, no deberías estar tomando lecturas instantáneas con un arduino de todas formas, ya que dudo que puedas muestrear lo suficientemente rápido para que responda bien. En su lugar, realice una detección de nivel máximo o promedio en el dominio analógico y establezca el período de promediación proporcionalmente a la tasa de muestreo.

EDITAR: Más sobre cómo hacer esto con un detector de picos

El problema que tendrá aquí es que el arduino tiene una frecuencia de muestreo relativamente limitada. Creo que su máximo será de 10 kHz, lo que significa que solo puede resolver una señal de audio de 5 kHz. Eso es con el arduino haciendo muy poco, excepto ejecutar el ADC, si necesita hacer un trabajo real (y hacer algo para obtener el nivel), la tasa de muestreo será menor.

Recuerda que estás tomando muestras discretas de la señal en bruto, solo porque tienes una onda sinusoidal de rango completo alimentar el ADC no significa que no obtendrá lecturas de 0 del ADC, sino que obtendrá muestras en varios puntos de la ola. Con la música real, la señal resultante será bastante compleja y tendrás muestras por todas partes.

Ahora, si todo lo que está intentando medir es el nivel de la señal de entrada, y no le importa realmente obtener una representación digital de la señal, puede usar un detector de picos simple después de este preamplificador. asi que.

Lo que esto hace es convertir tu señal de audio en un voltaje que representa su nivel máximo. Cuando mida este voltaje con el ADC, tendrá un valor inmediato que representa el nivel de la señal en el momento en que se tomó la lectura. Seguirá teniendo un poco de bamboleo ya que el sonido es una forma de onda compleja y siempre variable, pero esto debería ser fácil de manejar en el software.

Un detector de picos sin retención es en realidad solo un rectificador con un filtro en la salida. En este caso, debemos lidiar con señales de bajo nivel y mantener la precisión, por lo que necesitamos hacer un poco más de lo que se haría para su circuito rectificador promedio. Esta familia de circuitos se llama "rectificadores de precisión".

Hay aproximadamente mil millones de formas diferentes de hacer esto, pero me gustaría ir con este circuito, parece que funciona mejor cuando se usa una sola fuente. Esto iría después del circuito de preamplificación ya discutido y la entrada podría estar acoplada a CA o no, a pesar de que se ejecuta desde una sola fuente, en realidad funcionará bien con voltajes de entrada negativos siempre que no exceda el pico disponible. Voltaje máximo de los amplificadores operacionales.

OP1 actúa como un diodo (casi) ideal que soluciona el problema habitual de caída de voltaje en el diodo al rectificar. Casi cualquier diodo de señal pequeña funcionará para D1, algo con una caída de tensión directa menor aumentaría la precisión, pero dudo que sea importante para su uso.

C1 y R4 actúan como un filtro de paso bajo para suavizar la salida, puedes jugar con sus valores para hacer coincidir el rendimiento con lo que intentas hacer (y tu frecuencia de muestreo).

Probablemente pueda usar el mismo modelo de amplificador operacional que usa en el preamplificador, pero Rail-to-Rail y la alta velocidad de giro son ideales para este circuito. Si tiene un problema de estabilidad, aumente R1, R2 y R3 a 100k ohm.

    
respondido por el Mark

Lea otras preguntas en las etiquetas