J'ai posé quelques questions concernant ce projet ces derniers jours, mais je n'arrive pas à tout mettre ensemble.
J'ai branché un micro à électret dans un ampli-op et donné la sortie à mon microcontrôleur Arduino. L'ADC sur le microcontrôleur convertit une plage de 0 à 5 vV en un nombre de 10 bits (0 à 1023).
J'ai essayé 3 puces d'amplis différentes:
- LM386 - J'ai reçu des commentaires, cette puce n'était pas bonne à cet effet, car ce n'est pas un ampli op, et cela ne fonctionnait pas correctement comme prévu.
- LM358 - travaux
- UA741 - fonctionne, amplifie plus que LM358
J'ai suivi ce schéma exactement (sauf que j'ai dérangé avec les valeurs de résistance pour obtenir un bon gain): j'ai utilisé 50k ohms pour R5 et 10 ohms pour R2.
Le problème est que la sortie des deux dernières puces n'est pas "propre". L'analogueRead () sur l'Arduino lit toujours une valeur non nulle même lorsque je ne fais aucun bruit dans le micro. La lecture réagit correctement lorsque je fais du bruit, mais la valeur "zéro" est non nulle. Parfois, la valeur "zéro" scintille même en rejetant constamment la lecture. J'espère que cela avait du sens.
Pouvez-vous m'aider à résoudre ce problème?
Tout aussi peu important, des informations supplémentaires: j'essaie de faire quelque chose comme ça , finalement.
Réponses:
Débarrassez-vous du condensateur de sortie. Ce circuit était probablement destiné à produire un signal autour de zéro, donc le condensateur est là pour bloquer le décalage 1/2 Vdd. Cependant, le microcontrôleur veut voir le signal centré autour de 1/2 Vdd, alors débarrassez-vous simplement du condensateur.
Les micros ont besoin de beaucoup de gain. Les électrets peuvent être sensibles, mais vous pourriez toujours avoir besoin d'un gain de tension de 1000. Le gain dans votre circuit est le rapport de R5 à R2, mais cela ne fonctionne que dans les limites de ce que l'ampli-op peut faire.
Les valeurs que vous avez mentionnées ci-dessus vous donneraient un gain de 5000. C'est beaucoup plus que ce que vous devriez essayer d'obtenir à partir d'un seul étage d'opamp. Non seulement la tension de décalage sera multipliée par ce gain, mais l'ampli-op ne pourra pas fournir cela sur toute la plage de fréquences. À 1 MHz de gain de bande passante, vous n'obtiendrez que ce gain légèrement inférieur à 200 Hz. Même un décalage d'entrée de 1 mV devient 5 V après une amplification de 5000.
R2 est également l'impédance vue par le microphone après le condensateur d'entrée. Vous avez besoin que cela soit un peu plus grand que l'impédance du microphone avec son pullup et le condensateur d'entrée à la fréquence d'intérêt la plus basse. 10 Ω est bien trop petit pour ça. 10 kΩ serait une meilleure valeur.
Essayez deux étapes avec un gain d'environ 30 pour commencer et voyez où cela vous mène. C'est un gain qu'il peut gérer sur des fréquences raisonnables avec suffisamment de marge pour que la rétroaction fonctionne. Vous devez également coupler capacitivement les deux étages afin que la tension de décalage d'entrée ne s'accumule pas à travers tous les étages.
Edit: Circuit ajouté
Je n'ai pas eu le temps de dessiner un circuit hier soir quand j'ai écrit la réponse ci-dessus. Voici un circuit qui devrait le faire:
Cela a un gain de tension d'environ 1000, ce qui devrait être suffisant pour un microphone à électret raisonnable. Je suis peut-être un peu trop, mais il est facile d'ajouter une certaine atténuation.
La topologie est assez différente de votre circuit. La chose la plus importante à noter est qu'il n'essaie pas de produire le gain entier en une seule étape. Chaque étage a un gain d'environ 31. Cela laisse beaucoup de marge de gain à la fréquence audio maximale de 20 kHz pour le retour, donc le gain sera bien prévisible et plat sur toute la plage de fréquences audio puisque le MCP6022 a une bande passante de gain typique produit de 10 MHz. Le facteur limitant sera très probablement le microphone.
Contrairement à ce que j'ai dit précédemment, les deux étages n'ont pas besoin d'être couplés capacitivement pour empêcher la tension de décalage de s'accumuler avec le gain. En effet, dans ce circuit, chaque étage n'a qu'un gain CC de 1, donc le décalage final n'est que le double du décalage opamp. Ces opamps ont seulement un décalage de 500 µV, donc le décalage final n'est que de 1 mV en raison des opamps. Il y aura plus en raison de l'inadéquation de R3 et R4. Dans tous les cas, la sortie DC sera suffisamment proche de la moitié de l'alimentation pour ne pas manger de manière significative dans la plage A / D.
Le gain CC de 1 par étage est obtenu en couplant capacitivement le chemin du diviseur de rétroaction à la terre. Le condensateur bloque DC, donc chaque étage n'est qu'un suiveur d'unité pour DC. Le gain CA total est réalisé lorsque l'impédance du condensateur (C3 dans le premier étage) devient petite par rapport à la résistance de diviseur inférieure (R7 dans le premier étage). Cela commence à se produire à environ 16 Hz. Un inconvénient de cette approche est que la constante de temps à régler est C3 fois R7 + R5, pas seulement R7. Ce circuit prendra quelques secondes environ pour se stabiliser après avoir été allumé.
la source
Comme vous le dites, la valeur numérique sera de 0 à 1023. Le milieu de cette plage n'est pas 0, c'est 512 (ce qui correspond à une tension d'environ 2,5). Pour le silence, vous devriez voir quelque chose au milieu de la plage comme ceci. Ne doit pas être exactement 512, mais il doit être proche. C'est ce qu'on appelle le "décalage CC". Le signal est décalé vers le haut et centré autour de 2,5 V.
Si vous mesurez 2 V et que vous voyez des valeurs ADC autour de 400, cela fonctionne très bien.
Les ondes sonores passent de la pression négative à la pression positive. Si le point central était 0 et que le signal ne pouvait être mesuré qu'entre 0 et 1023, les valeurs de pression négative (-1023) seraient coupées.
De plus, il fluctuera toujours un peu en raison du bruit de fond de l'ADC. (Et il y aura toujours du bruit audio dans la pièce, peu importe à quel point vous êtes silencieux.)
la source
Pouvez-vous publier la fiche technique sur ce microphone? Il n'y a aucune raison pour laquelle vous devriez avoir besoin d'un gain de 5000 avec un micro à électret, sauf si vous avez une unité nue sans FET interne. Si tel est le cas, le préampli doit être très différent.
De plus, le circuit que vous avez utilisé n'est pas très propice à être utilisé comme préampli pour un micro à électret.
Je recommanderais:
R5 / R4 règle le gain et peut être ajusté sans vissage avec l'impédance d'entrée du circuit. R3 peut être de 2k -> 10k ish. 10k aura tendance à améliorer les performances de distorsion, si vous ajustez cette valeur trop bas, vous devriez repenser les valeurs de R1 et R2 pour fixer l'impédance d'entrée.
Il est également très important que l'alimentation soit correctement découplée car tout bruit alimentera le microphone.
Comme les autres réponses l'ont mentionné, votre point "zéro" sera de ~ 512 lorsque vous lirez l'ADC et fluctuera un peu, quoi que vous fassiez.
Si votre objectif est de faire clignoter des lumières en réponse au niveau, vous ne devriez pas prendre de mesures instantanées avec un arduino de toute façon, car je doute que vous puissiez échantillonner assez rapidement pour qu'il réagisse bien. À la place, effectuez une détection de niveau de crête ou de moyenne dans le domaine analogique et réglez la période de moyenne proportionnellement à votre taux d'échantillonnage.
EDIT: Plus d'informations sur cette opération avec un détecteur de crête
Le problème que vous aurez ici est que l'arduino a un taux d'échantillonnage relativement limité, je pense que votre maximum va être d'environ 10 kHz, ce qui signifie que vous ne pouvez résoudre qu'un signal audio de 5 kHz maximum. C'est-à-dire que l'arduino fait très peu, sauf en exécutant l'ADC, si vous avez besoin de faire un vrai travail (et vous en faites pour obtenir le niveau), le taux d'échantillonnage sera plus faible.
Rappelez-vous que vous prenez des échantillons discrets du signal brut, ce n'est pas parce que vous avez une onde sinusoïdale à pleine gamme alimentant l'ADC que vous n'obtiendrez pas de lectures de 0 à partir de l'ADC, vous obtiendrez des échantillons à différents points de l'onde . Avec de la vraie musique, le signal résultant sera assez complexe et vous aurez des échantillons partout.
Maintenant, si tout ce que vous essayez de mesurer est le niveau du signal d'entrée, et que vous ne vous souciez pas d'obtenir une représentation numérique du signal, vous pouvez utiliser un simple détecteur de crête après ce préampli pour le faire.
Qu'est-ce que cela transforme votre signal audio en une tension qui représente son niveau de crête. Lorsque vous mesurez cette tension avec l'ADC, vous aurez une valeur immédiate représentant le niveau du signal au moment où la lecture a été prise. Vous aurez encore un peu d'oscillation car le son est une forme d'onde complexe, toujours variable, mais cela devrait être facile à gérer dans le logiciel.
Un détecteur de crête sans maintien n'est vraiment qu'un redresseur avec un filtre sur la sortie. Dans ce cas, nous devons traiter les signaux de bas niveau et maintenir la précision, nous devons donc faire un peu plus que ce qui serait fait pour votre circuit redresseur moyen. Cette famille de circuits est appelée "redresseurs de précision".
Il y a environ un milliard de façons différentes de le faire, mais j'irais avec ce circuit, il semble fonctionner mieux lorsque vous utilisez une seule alimentation. Cela irait après le circuit de préampli déjà discuté et l'entrée pourrait être couplée en CA ou non, bien qu'elle fonctionne à partir d'une seule alimentation, cela fonctionnera très bien avec des tensions d'entrée négatives tant que vous ne dépassez pas le pic disponible. tension crête des amplis opérationnels.
OP1 agit comme une diode (presque) idéale qui contourne le problème habituel de chute de tension à travers la diode lors du redressement. Presque n'importe quelle petite diode de signal fonctionnera pour D1, quelque chose avec une baisse de tension directe inférieure augmenterait la précision, mais je doute que cela importera pour votre utilisation.
C1 et R4 agissent comme un filtre passe-bas pour lisser la sortie, vous pouvez jouer avec leurs valeurs pour adapter les performances à ce que vous essayez de faire (et votre taux d'échantillonnage).
Vous pouvez probablement utiliser le même modèle d'ampli op que vous utilisez dans le préampli, mais Rail-to-Rail et un taux de balayage élevé sont idéaux pour ce circuit. Si vous avez un problème de stabilité, augmentez R1, R2 et R3 à 100k ohms.
la source