He hecho un par de preguntas relacionadas con este proyecto en los últimos días, pero parece que no puedo ponerlo todo junto.
Conecté un micrófono electret en un opamp y le di salida a mi microcontrolador arduino. El ADC del 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:
Seguí este esquema exactamente (excepto que jugué con los valores de resistencia para obtener una buena ganancia): usé 50k ohm para R5 y 10 ohm para R2.
El problema es que la salida de los dos últimos chips no está "limpia". El analogRead() en 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 y arroja la lectura todo el tiempo. Ojalá eso tuviera sentido.
¿Puedes ayudarme a resolver esto?
Igual de importante, información adicional: estoy tratando de hacer algo como esto , eventualmente.
Deshazte del capacitor de salida. Ese circuito probablemente estaba destinado a producir una señal alrededor de cero, por lo que el capacitor está ahí 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 deshágase del capacitor.
Los micrófonos necesitan mucha ganancia. Los electretos pueden ser sensibles, pero es posible que aún necesite 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 de opamp. No solo el voltaje de compensación se multiplicará por esta ganancia, sino que el amplificador operacional no podrá proporcionar eso 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 los 200 Hz. Incluso un desplazamiento de entrada de 1 mV se convierte en 5 V después de una amplificación de 5000.
R2 es también la impedancia vista por el micrófono después del condensador de entrada. Necesita que sea algo mayor que la impedancia del micrófono con su pullup y el condensador de entrada en la frecuencia más baja de interés. 10 Ω es demasiado pequeño para eso. 10 kΩ sería un mejor valor.
Pruebe dos etapas con una ganancia de 30 o más para empezar y vea a dónde lo lleva. Esa es una ganancia que puede manejar en frecuencias razonables con suficiente espacio libre para que funcione la retroalimentación. También necesita acoplar capacitivamente las dos etapas para que el voltaje de compensación de entrada no se acumule en todas las etapas.
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, lo 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 trata de producir toda la ganancia en una sola 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á muy predecible y uniforme 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. Lo más probable es que el factor limitante sea el micrófono.
A diferencia de lo que dije antes, las dos etapas no necesitan acoplarse 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 tiene solo una ganancia de CC de 1, por lo que la compensación final es solo el doble de la compensación del opamp. Estos amplificadores operacionales solo tienen una compensación de 500 µV, por lo que la compensación final es de solo 1 mV debido a los amplificadores operacionales. Habrá más debido a la falta de coincidencia de R3 y R4. En cualquier caso, la CC de salida estará lo suficientemente cerca de la mitad del suministro como para no consumir el rango A/D de manera significativa.
La ganancia de CC de 1 por etapa se logra acoplando capacitivamente la ruta del divisor de retroalimentación a tierra. El capacitor bloquea la CC, por lo que cada etapa es solo un seguidor de unidad para la CC. La ganancia total de CA se realiza cuando la impedancia del condensador (C3 en la primera etapa) se vuelve pequeña en comparación con la resistencia divisora inferior (R7 en la primera etapa). Esto comienza a suceder alrededor de los 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á un par de segundos en estabilizarse después de encenderse.
Como dices, 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 en la mitad del rango como este. No tiene que ser 512 exactamente, pero debería estar cerca. Esto se denomina "compensación de CC". 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 funciona bien.
Las ondas sonoras van 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 ruido de fondo del ADC. (Y siempre habrá algo de ruido de audio en la habitación sin importar qué tan silencioso esté).
¿Puedes publicar la hoja de especificaciones de ese micrófono? No hay ninguna razón por la que necesite una ganancia de 5000 con un micrófono electret a menos que tenga una unidad sin FET interno. Si ese es el caso, el preamplificador debe tener un aspecto muy diferente.
Además, el circuito que usó no es muy propicio para usarse 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 lo ajusta demasiado bajo, debería reconsiderar los valores de R1 y R2 para corregir la impedancia de entrada.
También es muy importante que la fuente de alimentación esté adecuadamente desacoplada, ya que cualquier ruido se transmitirá al micrófono.
Como mencionaron las otras respuestas, su punto "cero" será ~ 512 cuando lea el ADC y fluctuará un poco sin importar lo que haga.
Si su objetivo es parpadear las luces en respuesta al nivel, no debería tomar lecturas instantáneas con un arduino de todos modos, ya que dudo que pueda muestrear lo suficientemente rápido como para que responda bien. En su lugar, realice una detección de nivel pico o promedio en el dominio analógico y establezca el período promedio proporcionalmente a la tasa de muestreo que sea.
EDITAR: Más información 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 aproximadamente 10 khz, lo que significa que solo puede resolver una señal de audio de 5 khz como máximo. Es decir, con el arduino haciendo muy poco, excepto ejecutar el ADC, si necesita hacer algún trabajo real (y hace algo para obtener el nivel), 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 alimentando el 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 esto hace es convertir 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 tambaleo 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 debemos hacer un poco más de lo que se haría con un circuito rectificador promedio. Esta familia de circuitos se denomina "rectificadores de precisión".
Hay alrededor de mil millones de formas diferentes de hacer esto, pero yo elegiría 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 se ejecuta desde un solo suministro, en realidad funcionará bien con voltajes de entrada negativos siempre que no exceda el pico disponible. a la tensión de pico de los amplificadores operacionales.
OP1 actúa como un diodo (casi) ideal que evita el problema habitual de la caída de voltaje en el diodo cuando se rectifica. Casi cualquier diodo de señal pequeña 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 giro son ideales para este circuito. Si tiene un problema de estabilidad, aumente R1, R2 y R3 a 100k ohm.
Majenko
Shubham
Majenko
Majenko
Majenko
Majenko
usuario13893
akohlsmith