He hecho un par de preguntas relacionadas con este proyecto en los últimos días, pero parece que no puedo armarlo 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 en 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 opaco y no funcionó correctamente como se esperaba.
- LM358 - funciona
- UA741: funciona, amplifica más que LM358
Seguí este esquema exactamente (excepto que jugué con los valores de resistencia para obtener una buena ganancia): usé 50k ohmios para R5 y 10 ohmios para R2.
El problema es que la salida de los dos últimos chips no está "limpia". El analogRead () en el Arduino siempre lee 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" no es cero. A veces, el valor "cero" incluso parpadea arrojando la lectura todo el tiempo. Espero que eso tenga sentido.
¿Me pueden ayudar a resolver esto?
Igual de importante, información adicional: eventualmente estoy tratando de hacer algo como esto .
fuente
Respuestas:
Deshágase del condensador de salida. Ese circuito probablemente estaba destinado a producir una señal alrededor de cero, por lo que el condensador 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 elimine el condensador.
Los micrófonos necesitan mucha ganancia. Los electrets pueden ser sensibles, pero aún puede necesitar una ganancia de voltaje de 1000. La ganancia en su circuito es la relación de R5 a R2, pero esto solo funciona dentro de los límites de lo que puede hacer el opamp.
Los valores que mencionó anteriormente le darían una ganancia de 5000. Eso es mucho más de lo que debería tratar de obtener de una sola etapa opamp. No solo se multiplicará el voltaje de compensación por esta ganancia, sino que el opamp no podrá proporcionarlo en todo el rango de frecuencia. Con un ancho de banda de ganancia de 1 MHz, solo obtendrá esa ganancia un poco 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 también es la impedancia vista por el micrófono después del condensador de entrada. Necesita que esto sea algo mayor que la impedancia del micrófono con su pullup y el capacitor de entrada a la frecuencia de interés más baja. 10 Ω es demasiado pequeño para eso. 10 kΩ sería un mejor valor.
Pruebe dos etapas con una ganancia de aproximadamente 30 para empezar y vea a dónde lo 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 agregado
Anoche no tuve tiempo de dibujar un circuito 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 un poco demasiado, pero es fácil agregar algo de atenuación.
La topología es bastante diferente de su circuito. Lo más importante a tener en cuenta es que no intenta producir la ganancia completa en una etapa. Cada etapa tiene una ganancia de aproximadamente 31. Eso deja bastante margen de ganancia a la frecuencia de audio máxima de 20 kHz para la retroalimentación, por lo que la ganancia será muy predecible y plana en todo el rango de frecuencia de audio ya que el MCP6022 tiene un ancho de banda de ganancia típico producto de 10 MHz. El factor limitante probablemente sea el micrófono.
A diferencia de lo que dije antes, las dos etapas no necesitan estar acopladas capacitivamente para evitar que el voltaje de compensación se acumule junto con la ganancia. Esto se debe a que en este circuito, cada etapa solo tiene una ganancia de CC de 1, por lo que el desplazamiento final es solo el doble del desplazamiento de amplificador operacional. Estos opamps tienen un desplazamiento de solo 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 DC estará lo suficientemente cerca de la mitad del suministro como 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 de la ruta del divisor de retroalimentación a tierra. El condensador bloquea CC, por lo que cada etapa es solo un seguidor de unidad para CC. La ganancia de CA completa se realiza cuando la impedancia del condensador (C3 en la primera etapa) se reduce en comparación con la resistencia del divisor 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 establecerse es C3 por R7 + R5, no solo R7. Este circuito tardará unos segundos en estabilizarse después de encenderse.
fuente
Como usted dice, el valor digital será de 0 a 1023. La mitad de este rango no es 0, es 512 (que corresponde a un voltaje de alrededor de 2.5). Para el silencio, debería ver algo alrededor del medio 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 ve valores de ADC alrededor de 400, entonces básicamente está funcionando bien.
Las ondas sonoras van de presión negativa a positiva. Si el punto central fuera 0, y la señal solo se pudiera medir entre 0 y 1023, los valores de presión negativa (-1023) se cortarían.
Además, siempre fluctuará un poco debido al ruido de fondo del ADC. (Y siempre habrá algo de ruido de audio en la habitación, no importa cuán callado esté).
fuente
¿Puedes publicar la hoja de especificaciones en ese micrófono? No hay ninguna razón por la que deba necesitar 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 verse de manera muy diferente.
Además, el circuito que usó no es muy propicio para ser utilizado como preamplificador para un micrófono electret.
Yo lo recomiendo:
R5 / R4 establece la ganancia y se puede ajustar sin atornillar con la impedancia de entrada del circuito. R3 puede ser de 2k -> 10k ish. 10k tenderá a mejorar el rendimiento de la distorsión, si ajusta esto demasiado bajo, debería repensar los valores de R1 y R2 para fijar la impedancia de entrada.
También es muy importante que la fuente de alimentación esté desacoplada adecuadamente, ya que cualquier ruido se introducirá en el micrófono.
Como las otras respuestas mencionaron, su punto "cero" será ~ 512 cuando lea el ADC y fluctuará un poco sin importar lo que haga.
Si su objetivo es parpadear en respuesta al nivel, no debería tomar lecturas instantáneas con un arduino de todos modos, ya que dudo que pueda tomar muestras lo suficientemente rápido como para que responda bien. En su lugar, realice la detección de nivel máximo o promedio en el dominio analógico y establezca el período promedio proporcionalmente a la tasa de muestreo que sea.
EDITAR: más sobre hacer esto con un detector de pico
El problema que tendrá aquí es que el arduino tiene una frecuencia de muestreo relativamente limitada, creo que su máximo será de aproximadamente 10 kHz, lo que significa que solo puede resolver una señal de audio de 5 kHz como máximo. Eso es con el arduino haciendo muy poco, excepto ejecutar el ADC, si necesita hacer un trabajo real (y hace algo para nivelarlo), la frecuencia de muestreo será menor.
Recuerde que está tomando muestras discretas de la señal sin procesar, solo porque tiene una onda sinusoidal de rango completo que alimenta al ADC no significa que no obtendrá lecturas de 0 del ADC, obtendrá muestras en varios puntos de la onda . Con música real, la señal resultante será bastante compleja y tendrás muestras por todas partes.
Ahora, si todo lo que está tratando de medir es el nivel de la señal de entrada, y no le importa obtener una representación digital de la señal, entonces puede usar un detector de pico simple después de este preamplificador para hacerlo.
Lo que hace esto convierte su 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. Todavía tendrá 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 pico sin retención es realmente solo un rectificador con un filtro en la salida. En este caso, debemos tratar con señales de bajo nivel y mantener la precisión, por lo que debemos 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 alrededor de mil millones de formas diferentes de hacer esto, pero yo seguiría con este circuito, parece funcionar mejor cuando se usa un solo suministro. Esto iría después del circuito de preamplificador ya discutido y la entrada podría estar acoplada a CA o no, a pesar de que funciona desde una sola fuente, en realidad funcionará bien con voltajes de entrada negativos siempre que no exceda el pico disponible. tensión máxima de los amplificadores operacionales.
OP1 actúa como un diodo (casi) ideal que evita el problema habitual de la caída de voltaje a través del diodo al rectificar. Casi cualquier diodo de señal pequeño funcionará para D1, algo con una caída de voltaje directa más baja 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, puede jugar con sus valores para hacer coincidir el rendimiento con lo que intenta hacer (y su 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 rotación son ideales para este circuito. Si tiene un problema de estabilidad, aumente R1, R2 y R3 a 100k ohm.
fuente