Eu fiz algumas perguntas relacionadas a este projeto nos últimos dias, mas não consigo reunir tudo.
Liguei um microfone de eletreto em um opamp e dei saída ao meu microcontrolador arduino. O ADC no microcontrolador converte um intervalo de 0 a 5 vV em um número de 10 bits (0 a 1023).
Eu tentei 3 chips amp diferentes:
- LM386 - Recebi feedback de que este chip não era bom para esse fim, pois não é opamp, e não funcionou corretamente como esperado.
- LM358 - obras
- UA741 - funciona, amplifica mais que LM358
Eu segui esse esquema exatamente (exceto por mexer nos valores dos resistores para obter um bom ganho): usei 50k ohm para R5 e 10 ohm para R2.
O problema é que a saída dos dois últimos chips não está "limpa". O analogRead () no Arduino está sempre lendo um valor diferente de zero, mesmo quando não faço barulho no microfone. A leitura reage corretamente quando produzo ruído, mas o valor "zero" é diferente de zero. Às vezes, o valor "zero" até pisca jogando a leitura o tempo todo. Espero que isso faça sentido.
Você pode me ajudar a resolver isso?
Da mesma forma, sem informações importantes e extras: estou tentando fazer algo assim , eventualmente.
fonte
Respostas:
Livre-se do capacitor de saída. Esse circuito provavelmente deveria produzir um sinal em torno de zero, então o capacitor está lá para bloquear o deslocamento de 1/2 Vdd. No entanto, o microcontrolador deseja ver o sinal centrado em torno de 1/2 Vdd, portanto, basta se livrar do capacitor.
Microfones precisam de muito ganho. Os eletretos podem ser sensíveis, mas você ainda pode precisar de um ganho de tensão de 1000. O ganho no seu circuito é a proporção de R5 para R2, mas isso só funciona dentro dos limites do que o opamp pode fazer.
Os valores que você mencionou acima dariam um ganho de 5000. Isso é muito mais do que você deveria tentar obter de um único estágio de opamp. Não apenas a tensão de offset será multiplicada por esse ganho, mas o opamp não poderá fornecer isso em toda a faixa de frequência. Com largura de banda de ganho de 1 MHz, você só obterá esse ganho abaixo de 200 Hz. Mesmo um deslocamento de entrada de 1 mV se torna 5 V após a amplificação em 5000.
R2 também é a impedância vista pelo microfone após o capacitor de entrada. Você precisa que isso seja um pouco maior que a impedância do microfone, com o pullup e o capacitor de entrada na menor frequência de interesse. 10 Ω é muito pequeno para isso. 10 kΩ seria um valor melhor.
Tente duas etapas com um ganho de 30 ou mais para iniciantes e veja onde isso o leva. É um ganho que ele pode suportar em frequências razoáveis, com espaço suficiente para que o feedback funcione. Você também precisa acoplar capacitivamente os dois estágios para que a tensão de compensação de entrada não se acumule em todos os estágios.
Edit: Adicionado circuito
Não tive tempo de desenhar um circuito ontem à noite quando escrevi a resposta acima. Aqui está um circuito que deve fazer isso:
Isso tem um ganho de tensão de aproximadamente 1000, o que deve ser suficiente para um microfone de eletreto razoável. Eu posso ser um pouco demais, mas é fácil adicionar alguma atenuação.
A topologia é bastante diferente do seu circuito. A coisa mais importante a se notar é que ele não tenta produzir todo o ganho em um estágio. Cada estágio tem um ganho de cerca de 31. Isso deixa bastante ganho na freqüência máxima de áudio de 20 kHz para o feedback, de modo que o ganho será bem previsível e plano na faixa de freqüência de áudio, pois o MCP6022 possui uma largura de banda de ganho típica produto de 10 MHz. O fator limitante provavelmente será o microfone.
Diferentemente do que eu disse antes, os dois estágios não precisam ser acoplados capacitivamente para impedir que a tensão de compensação se acumule junto com o ganho. Isso ocorre porque neste circuito, cada estágio tem apenas um ganho DC de 1, portanto o deslocamento final é apenas o dobro do deslocamento do opamp. Esses opamps possuem apenas um desvio de 500 µV, portanto o deslocamento final é de apenas 1 mV devido aos opamps. Haverá mais devido à incompatibilidade de R3 e R4. De qualquer forma, o DC de saída estará suficientemente próximo de 1/2 da fonte para não consumir a faixa A / D de maneira significativa.
O ganho DC de 1 por estágio é obtido acoplando capacitivamente o caminho do divisor de realimentação ao terra. O capacitor bloqueia CC, então cada estágio é apenas um seguidor de unidade para DC. O ganho total da CA é realizado à medida que a impedância do capacitor (C3 no primeiro estágio) diminui quando comparada ao resistor do divisor inferior (R7 no primeiro estágio). Isso começa a acontecer em cerca de 16 Hz. Uma desvantagem dessa abordagem é que a constante de tempo para liquidação é C3 vezes R7 + R5, não apenas R7. Esse circuito levará alguns segundos para estabilizar após ser ligado.
fonte
Como você diz, o valor digital será de 0 a 1023. O meio desse intervalo não é 0, é 512 (o que corresponde a uma tensão em torno de 2,5). Para o silêncio, você deve ver algo assim no meio do intervalo. Não precisa ser exatamente 512, mas deve estar perto. Isso é chamado de "deslocamento CC". O sinal é deslocado para cima e centrado em torno de 2,5 V.
Se você está medindo 2 V e vendo valores ADC em torno de 400, basicamente está funcionando bem.
As ondas sonoras passam de pressão negativa para positiva. Se o ponto central fosse 0 e o sinal pudesse ser medido apenas entre 0 e 1023, os valores de pressão negativa (-1023) seriam cortados.
Além disso, ele sempre oscilará um pouco devido ao ruído do ADC. (E sempre haverá algum ruído de áudio na sala, não importa o quanto você esteja quieto.)
fonte
Você pode postar a folha de especificações nesse microfone? Não há motivo para você precisar de um ganho de 5000 com um microfone de eletreto, a menos que tenha uma unidade vazia sem FET interno. Se for esse o caso, o pré-amplificador precisa ter uma aparência muito diferente.
Além disso, o circuito usado não é muito propício para ser usado como um pré-amplificador para um microfone de eletreto.
Eu recomendo:
R5 / R4 define o ganho e pode ser ajustado sem estragar a impedância de entrada do circuito. R3 pode ser de 2k -> 10k ish. 10k tenderá a melhorar o desempenho da distorção; se você ajustar muito baixo, deverá repensar os valores de R1 e R2 para corrigir a impedância de entrada.
Também é muito importante que a fonte de alimentação seja desacoplada adequadamente, pois qualquer ruído será alimentado no microfone.
Como as outras respostas mencionaram, seu ponto "zero" será ~ 512 quando você ler o ADC e flutuará um pouco, não importa o que você faça.
Se seu objetivo é piscar as luzes em resposta ao nível, você não deve fazer leituras instantâneas com um arduino de qualquer maneira, pois duvido que você seja capaz de amostrar rápido o suficiente para fazê-lo responder bem. Em vez disso, faça a detecção de pico ou nível médio no domínio analógico e defina o período médio proporcionalmente à sua taxa de amostragem.
EDIT: Mais sobre como fazer isso com um detector de pico
O problema que você terá aqui é que o arduino tem uma taxa de amostragem relativamente limitada, acho que seu máximo será de cerca de 10khz, o que significa que você só pode resolver um sinal de áudio de 5khz no máximo. Isso ocorre com o arduino fazendo muito pouco, exceto executando o ADC, se você precisar fazer algum trabalho real (e fizer algum para obter o nível), a taxa de amostragem será menor.
Lembre-se de coletar amostras discretas do sinal bruto, apenas porque você tem uma onda senoidal de faixa completa alimentando o ADC não significa que você não receberá leituras de 0 no ADC, você obterá amostras em vários pontos da onda . Com música real, o sinal resultante será bastante complexo e você terá amostras em todo o lugar.
Agora, se tudo o que você está tentando medir é o nível do sinal de entrada e não se importa em obter uma representação digital do sinal, é possível usar um simples detector de pico após esse pré-amplificador.
Com isso, o sinal de áudio é transformado em uma voltagem que representa seu nível de pico. Ao medir essa tensão com o ADC, você terá um valor imediato que representa o nível do sinal no momento em que a leitura foi realizada. Você ainda terá um pouco de oscilação, pois o som é uma forma de onda complexa e sempre variável, mas isso deve ser fácil de lidar no software.
Um detector de pico sem retenção é realmente apenas um retificador com um filtro na saída. Nesse caso, precisamos lidar com sinais de baixo nível e manter a precisão, por isso precisamos fazer um pouco mais do que o que seria feito em um circuito retificador médio. Essa família de circuitos é chamada de "retificadores de precisão".
Existem cerca de um bilhão de maneiras diferentes de fazer isso, mas eu usaria esse circuito, ele parece funcionar melhor ao usar um único suprimento. Isso ocorreria após o circuito de pré-amplificador já discutido e a entrada poder ser acoplada ou não a CA, apesar de funcionar a partir de uma única fonte, na verdade funcionará bem com tensões de entrada negativas, desde que você não exceda o pico disponível. tensão de pico dos amplificadores operacionais.
O OP1 atua como um diodo (quase) ideal que contorna o problema usual de queda de tensão no diodo durante a retificação. Quase qualquer pequeno diodo de sinal funcionará para D1, algo com uma queda de tensão direta menor aumentaria a precisão, mas duvido que isso importe para o seu uso.
C1 e R4 agem como um filtro passa-baixo para suavizar a saída. Você pode brincar com seus valores para combinar o desempenho com o que você está tentando fazer (e com a taxa de amostragem).
Você provavelmente pode usar o mesmo modelo de amplificador operacional que está usando no pré-amplificador, mas o Rail-to-Rail e a alta taxa de rotação são ideais para este circuito. Se você tiver um problema de estabilidade, aumente R1, R2 e R3 para 100k ohm.
fonte