Wie erstelle ich ein sauberes verstärktes Mikrofon für eine Analog-Digital-Umwandlung?

12

Ich habe in den letzten Tagen ein paar Fragen zu diesem Projekt gestellt, aber ich kann nicht alles zusammenfassen.

Ich habe ein Elektretmikrofon an einen Operationsverstärker angeschlossen und die Ausgabe an meinen Arduino-Mikrocontroller gesendet. Der ADC im Mikrocontroller wandelt einen Bereich von 0 bis 5 vV in eine 10-Bit-Zahl (0 bis 1023) um.

Ich habe 3 verschiedene Amp Chips ausprobiert:

  • LM386 - Ich habe das Feedback bekommen, dass dieser Chip für diesen Zweck nicht gut war, da er nicht opamp ist und nicht wie erwartet richtig funktioniert.
  • LM358 - funktioniert
  • UA741 - funktioniert, verstärkt mehr als LM358

Ich habe dieses Schema genau befolgt (außer dass ich mit Widerstandswerten rumgespielt habe, um eine gute Verstärkung zu erzielen): Ich habe 50 kOhm für R5 und 10 Ohm für R2 verwendet. Bildbeschreibung hier eingeben

Das Problem ist, dass die Ausgabe der beiden letzteren Chips nicht "sauber" ist. Das analogRead () auf dem Arduino liest immer einen Wert ungleich Null, auch wenn ich im Mikrofon kein Rauschen mache. Der Messwert reagiert richtig, wenn ich Geräusche mache, aber der Wert "Null" ist ungleich Null. Manchmal flackert der "Null" -Wert sogar, wodurch der Messwert die ganze Zeit unterbrochen wird. Hoffentlich ergab das Sinn.

Können Sie mir helfen, das zu klären?

Genauso unwichtig, zusätzliche Informationen: Ich versuche, irgendwann so etwas zu machen .

Shubham
quelle
Sind Sie sicher, dass Sie C2 installiert haben? Was ist die stille Gleichspannung nach C2?
Majenko
Ja, ich habe C2 installiert. Es geht um 2 Volt. Ich weiß nicht, ob dies Sinn macht: Kann es sein, dass in der Schleife zwischen Pin 2 und 6, dem Ausgang und dem invertierenden Eingang, ein Strom eingeschlossen ist (?)?
Shubham
Wie wäre es mit der stillen Gleichspannung nach C2, wenn diese vom Arduino-Eingangspin getrennt wäre?
Majenko
Das Vorhandensein von C2 bedeutet, dass der Ausgang des Vorverstärkers um 0 V und nicht um 2,5 V schwankt, mit denen er intern arbeitet.
Majenko
Eine andere Sache - Sie möchten vielleicht eine kleine Diode zwischen den Vorverstärker C2 und den Arduino-Eingang schieben - werfen Sie die negativen Spannungen weg, die Sie wirklich nicht interessieren. Ich habe noch einen weiteren Kondensator zwischen den Analogeingang und Masse geschaltet, um das Signal ein wenig zu glätten. Reduziert das Flimmern des VU-Meters.
Majenko

Antworten:

17

Den Ausgangskondensator loswerden. Diese Schaltung sollte wahrscheinlich ein Signal um Null herum erzeugen, daher ist der Kondensator dazu da, den 1/2 Vdd-Offset zu blockieren. Der Mikrocontroller möchte jedoch, dass das Signal um 1/2 Vdd zentriert ist. Entfernen Sie also einfach den Kondensator.

Mikrofone brauchen viel Gewinn. Elektrete können empfindlich sein, aber Sie benötigen möglicherweise immer noch eine Spannungsverstärkung von 1000. Die Verstärkung in Ihrer Schaltung ist das Verhältnis von R5 zu R2, dies funktioniert jedoch nur innerhalb der Grenzen dessen, was der Operationsverstärker kann.

Die Werte, die Sie oben erwähnt haben, ergeben einen Gewinn von 5000. Das ist viel mehr, als Sie von einer einzelnen Opamp-Stufe erwarten sollten. Die Offset-Spannung wird nicht nur mit dieser Verstärkung multipliziert, sondern der Operationsverstärker kann dies auch nicht über den gesamten Frequenzbereich liefern. Bei einer Verstärkungsbandbreite von 1 MHz erhalten Sie diese Verstärkung nur etwas unter 200 Hz. Sogar ein Eingangsversatz von 1 mV wird nach einer Verstärkung von 5000 zu 5 V.

R2 ist auch die Impedanz, die das Mikrofon nach dem Eingangskondensator sieht. Sie müssen etwas größer sein als die Impedanz des Mikrofons mit dem Pullup und dem Eingangskondensator bei der niedrigsten interessierenden Frequenz. 10 Ω sind dafür viel zu klein. 10 kΩ wären ein besserer Wert.

Probieren Sie zunächst zwei Stufen mit einem Gewinn von etwa 30 aus und finden Sie heraus, wohin das führt. Dies ist ein Gewinn, den es über vernünftige Frequenzen hinweg bewältigen kann, wobei genügend Headroom verbleibt, damit das Feedback funktioniert. Sie müssen die beiden Stufen auch kapazitiv koppeln, damit sich die Eingangsoffsetspannung nicht in allen Stufen ansammelt.

Bearbeiten: Schaltung hinzugefügt

Ich hatte letzte Nacht keine Zeit, eine Schaltung zu zeichnen, als ich die Antwort oben schrieb. Hier ist eine Schaltung, die es tun sollte:

Dies hat eine Spannungsverstärkung von ungefähr 1000, was für ein vernünftiges Elektretmikrofon ausreichend sein sollte. Ich mag ein bisschen zu viel sein, aber es ist einfach, eine gewisse Dämpfung hinzuzufügen.

Die Topologie unterscheidet sich eher von Ihrer Schaltung. Das Wichtigste ist, dass nicht versucht wird, den gesamten Gewinn in einer Stufe zu erzielen. Jede Stufe hat eine Verstärkung von ungefähr 31. Das lässt genügend Gain Headroom bei der maximalen Audiofrequenz von 20 kHz für die Rückkopplung, so dass die Verstärkung über den Audiofrequenzbereich hinweg gut vorhersehbar und flach ist, da der MCP6022 eine typische Gain-Bandbreite hat Produkt von 10 MHz. Der begrenzende Faktor wird höchstwahrscheinlich das Mikrofon sein.

Im Gegensatz zu dem, was ich zuvor gesagt habe, müssen die beiden Stufen nicht kapazitiv gekoppelt werden, um zu verhindern, dass sich die Offset-Spannung zusammen mit der Verstärkung ansammelt. Das liegt daran, dass in dieser Schaltung jede Stufe nur eine Gleichstromverstärkung von 1 hat, so dass der endgültige Versatz nur das Doppelte des Opamp-Versatzes beträgt. Diese Operationsverstärker haben nur einen Versatz von 500 µV, so dass der endgültige Versatz aufgrund der Operationsverstärker nur 1 mV beträgt. Aufgrund der Nichtübereinstimmung von R3 und R4 wird es mehr geben. In jedem Fall ist der Ausgangsgleichstrom nahe genug, um die Versorgung zu halbieren, damit er nicht auf sinnvolle Weise in den A / D-Bereich gelangt.

Die Gleichstromverstärkung von 1 pro Stufe wird erreicht, indem der Rückkopplungsteilerpfad kapazitiv mit Masse gekoppelt wird. Der Kondensator sperrt Gleichstrom, sodass jede Stufe nur ein Gleichstromfolger ist. Die volle AC-Verstärkung wird realisiert, wenn die Impedanz des Kondensators (C3 in der ersten Stufe) im Vergleich zum unteren Teilerwiderstand (R7 in der ersten Stufe) klein wird. Dies beginnt bei ungefähr 16 Hz. Ein Nachteil dieses Ansatzes ist, dass die Zeitkonstante zum Einschwingen C3 mal R7 + R5 ist, nicht nur R7. Dieser Schaltkreis benötigt nach dem Einschalten einige Sekunden, um sich zu stabilisieren.

Olin Lathrop
quelle
Wenn ich die Kappe vom Ausgang nehme, sieht der Arduino einen Eingang von etwa 3 Volt. Es tut mir leid, aber können Sie erklären, was Sie mit Offset-Spannung meinen? Um einen Gewinn von 1000 zu erzielen, wenn R2 10 kOhm ist, brauche ich 10 M Ohm für R5? Bist du dir da sicher? Der Gewinn ist das Verhältnis zwischen R5 und R2 richtig?
Shubham
@Shubham: Ihre Schaltung versucht, die Offset-Spannung des Operationsverstärkers mit 5000 zu multiplizieren, daher ist es nicht verwunderlich, dass der Ausgang an eine Schiene gekoppelt ist. Kein Opamp ist perfekt. Die Eingangsoffsetspannung ist die Spannung zwischen den beiden Eingängen, wenn der Ausgang im mittleren Bereich liegt. Theoretisch wären die beiden Eingänge dann gleich. Die Eingangsoffset-Spannung gibt an, wie weit sie von diesem Ideal entfernt ist.
Olin Lathrop
@Shubham: Sie würden 10 MOhm für den Rückkopplungswiderstand benötigen, wenn Sie versuchen würden, dass eine Stufe die gesamte Verstärkung erzeugt. Wie gesagt, das ist eine schlechte Idee.
Olin Lathrop
Vielen Dank für all die Hilfe, hier viel zu lernen. Wenn ich also zwei Stufen mit jeweils 30 Gains habe, bekomme ich einen Gesamtgewinn von 900, oder? Ich werde es mit einem LM358 versuchen (das ist es, was ich herumliegen habe) und melde
mich
Endlich hat es geklappt! Vielen Dank, dass Sie mir diesen Schaltplan gegeben haben! Aber ich bekomme nur einen ADC-Bereich von ungefähr 200. Der stille ADC-Wert wird ein wenig über dem Mittelpunkt (512) liegen, aber egal wie viel Rauschen ich im Mikrofon mache, der ADC-Wert wird nicht mehr als 200 übersteigen der stille Wert. Es ist wahrscheinlich mein Aufbau von Kappen und Widerständen, der dies einschränkt.
Shubham
5

Wie Sie sagen, liegt der digitale Wert zwischen 0 und 1023. Die Mitte dieses Bereichs ist nicht 0, sondern 512 (was einer Spannung von etwa 2,5 entspricht). Für die Stille sollten Sie so etwas in der Mitte des Bereichs sehen. Muss nicht genau 512 sein, aber es sollte nah sein. Dies wird als "DC-Offset" bezeichnet. Das Signal wird nach oben verschoben und um 2,5 V zentriert.

Wenn Sie 2 V messen und ADC-Werte um 400 sehen, funktioniert es im Grunde gut.

Die Schallwellen gehen von negativem zu positivem Druck über. Wenn der Mittelpunkt 0 wäre und das Signal nur zwischen 0 und 1023 gemessen werden könnte, würden die Unterdruckwerte (-1023) abgeschnitten.

Außerdem wird es aufgrund des Grundrauschens des ADC immer ein wenig schwanken. (Und es wird immer ein Geräusch im Raum geben, egal wie leise Sie sind.)

Endolith
quelle
Ohhh, das erklärt "DC-Offset", das habe ich in anderen Antworten gesehen. Gibt es eine Möglichkeit, den DC-Offset zu entfernen, aber irgendwo eine Kappe anzubringen?
Shubham
@Shubham: Sie WOLLEN einen DC-Offset. Der ADC-Prozess wird ohne einen nicht funktionieren. Die Kappe C2 stellt sicher, dass Sie eine haben. In diesem Fall gibt es jedoch wahrscheinlich keinen großen Unterschied, da der Ausgang von U1 bereits versetzt ist. Können Sie den DC-Wert auf jeder Seite von C2 messen?
Endolith
@Shubham: Wenn Sie möchten, dass Ihre digitalen Messungen um 0 statt um 512 zentriert werden, können Sie einfach den Versatz in Ihrer Software subtrahieren oder besser einen digitalen Hochpassfilter in der Software implementieren.
Endolith
3

Können Sie das Datenblatt auf diesem Mikrofon veröffentlichen? Es gibt keinen Grund, warum Sie mit einem Elektretmikrofon eine Verstärkung von 5000 benötigen sollten, es sei denn, Sie haben ein nacktes Gerät ohne internen FET. In diesem Fall muss der Vorverstärker anders aussehen.

Außerdem ist die Schaltung, die Sie verwendet haben, nicht besonders geeignet, um als Vorverstärker für ein Elektretmikrofon verwendet zu werden.

Ich würde empfehlen:

Bildbeschreibung hier eingeben

R5 / R4 stellen die Verstärkung ein und können eingestellt werden, ohne mit der Eingangsimpedanz der Schaltung zu verschrauben. R3 kann von 2k -> 10k ish sein. 10k kann die Verzerrungsleistung verbessern. Wenn Sie dies zu niedrig einstellen, sollten Sie die Werte für R1 und R2 überdenken, um die Eingangsimpedanz festzulegen.

Es ist auch sehr wichtig, dass die Stromversorgung ausreichend entkoppelt ist, da alle Geräusche in das Mikrofon gelangen.

Wie in den anderen Antworten erwähnt, beträgt Ihr "Null" -Punkt ~ 512, wenn Sie den ADC lesen, und schwankt ein wenig, egal was Sie tun.

Wenn Ihr Ziel das Blinken von Lichtern als Reaktion auf den Pegel ist, sollten Sie mit einem Arduino ohnehin keine sofortigen Messwerte erfassen, da ich bezweifle, dass Sie in der Lage sind, schnell genug zu sampeln, damit es gut reagiert. Führen Sie stattdessen eine Spitzen- oder Durchschnittspegelerkennung im analogen Bereich durch und stellen Sie die Mittelungsperiode proportional zu Ihrer Abtastrate ein.

EDIT: Mehr dazu mit einem Peakdetektor

Das Problem, das Sie hier haben werden, ist, dass das Arduino eine relativ begrenzte Abtastrate hat. Ich denke, Ihr Maximum wird bei etwa 10 kHz liegen, was bedeutet, dass Sie nur ein maximales 5-kHz-Audiosignal auflösen können. Das bedeutet, dass der Arduino nur sehr wenig tut, außer den ADC auszuführen. Wenn Sie echte Arbeit erledigen müssen (und etwas tun müssen, um den Pegel zu erreichen), ist die Abtastrate niedriger.

Denken Sie daran, dass Sie diskrete Samples des Rohsignals nehmen. Nur weil Sie eine Sinuswelle mit vollem Bereich in den ADC einspeisen, bedeutet dies nicht, dass Sie keine Werte von 0 vom ADC erhalten. Sie erhalten Samples an verschiedenen Punkten der Welle . Bei echter Musik ist das resultierende Signal recht komplex und Sie haben überall Samples.

Wenn Sie nur den Pegel des Eingangssignals messen möchten und keine digitale Darstellung des Signals benötigen, können Sie nach diesem Vorverstärker einen einfachen Spitzendetektor verwenden.

Dadurch wird Ihr Audiosignal in eine Spannung umgewandelt, die den Spitzenpegel darstellt. Wenn Sie diese Spannung mit dem ADC messen, erhalten Sie sofort einen Wert, der den Signalpegel zum Zeitpunkt der Messung darstellt. Sie werden immer noch ein bisschen wackeln müssen, da der Sound eine komplexe, immer variierende Wellenform ist, aber dies sollte in der Software einfach zu handhaben sein.

Ein Peakdetektor ohne Hold ist eigentlich nur ein Gleichrichter mit einem Filter am Ausgang. In diesem Fall müssen wir mit Signalen mit niedrigem Pegel umgehen und die Genauigkeit aufrechterhalten, damit wir ein wenig mehr tun müssen als für Ihre durchschnittliche Gleichrichterschaltung. Diese Schaltkreisfamilie wird als "Präzisionsgleichrichter" bezeichnet.

Bildbeschreibung hier eingeben

Es gibt ungefähr eine Milliarde verschiedene Möglichkeiten, dies zu tun, aber ich würde mich für diese Schaltung entscheiden. Sie scheint am besten zu funktionieren, wenn Sie eine einzige Versorgung verwenden. Dies würde nach der bereits besprochenen Vorverstärkerschaltung gehen und der Eingang könnte wechselstromgekoppelt sein oder nicht, obwohl er mit einer einzigen Versorgung betrieben wird, funktioniert er auch mit negativen Eingangsspannungen einwandfrei, solange Sie die verfügbaren Spitzenwerte nicht überschreiten. Spannungsspitze von den Operationsverstärkern.

OP1 wirkt als (nahezu) ideale Diode, die beim Gleichrichten den üblichen Spannungsabfall an der Diode umgeht. Fast jede kleine Signaldiode funktioniert für D1, etwas mit einem geringeren Spannungsabfall in Durchlassrichtung würde die Genauigkeit erhöhen, aber ich bezweifle, dass dies für Ihre Verwendung von Bedeutung ist.

C1 und R4 fungieren als Tiefpassfilter, um die Ausgabe zu glätten. Sie können mit ihren Werten spielen, um die Leistung an das anzupassen, was Sie versuchen (und Ihre Abtastrate).

Sie können wahrscheinlich das gleiche Operationsverstärkermodell verwenden, das Sie im Vorverstärker verwenden, aber Rail-to-Rail und hohe Anstiegsrate sind ideal für diese Schaltung. Wenn Sie ein Stabilitätsproblem haben, erhöhen Sie R1, R2 und R3 auf 100 kOhm.

Kennzeichen
quelle
Das Mikrofon ist ein Standard-Elektret-Kondensatormikrofon. Ich werde R3 10K machen, meine Vcc ist 5.9V, also wird es in Ordnung sein, wenn R1 und R2 auch 10K sind? Welchen Opamp würdest du empfehlen: LM358 oder 741? Gibt es eine Möglichkeit, den "Null" -Punkt auf 0 oder in die Nähe von 0 zu bringen? "Ermitteln Sie stattdessen Spitzen- oder Durchschnittspegel im analogen Bereich und stellen Sie die Mittelungsperiode proportional zu Ihrer Abtastrate ein." - Können Sie mir das etwas näher erläutern? es klingt interessant und ich möchte es wirklich untersuchen. Tut mir leid, ich habe zu viele Fragen ... Ich bin ein EE-Student am College, der noch lernt.
Shubham
Ich habe Ihre empfohlene Schaltung ausprobiert (sie ist viel sauberer als die von mir verwendete, weniger zufällige Ausgabe). Ich habe 1 M Ohm für R5 und 1 k Ohm für R4 verwendet, was eine Verstärkung von 1000 ergibt. Wenn ich einige Messungen mit einem DMM durchgeführt habe, gibt der Opamp eine stille Leistung von ungefähr 3 Volt aus, und C3 reduziert sie auf ungefähr 1,5 Volt. Auch wenn ich R5 entferne, macht es keinen Unterschied für die Ausgabe ... Sind Sie sicher, dass die Verstärkung R4 / R5 ist?
Shubham
1
R3 legt den Bias-Punkt des FET im Mikrofon fest (R1 || R2) || Mit R3 wird die vom Mikrofon wahrgenommene AC-Eingangsimpedanz eingestellt. Das Setzen des "Null" -Punkts auf 0 kann von nichts im analogen Bereich gelöst werden, das ist eine Funktion des ADC im Arduino mit einer einzelnen Stromversorgung. Alles , was Sie tun müssen , ist subtrahieren ~ 512 von jeder Probe , wenn Sie kein Ton zu Null (machen verwenden Sie sicher , dass eine wie diese Mittel signierten Datentyp negative Werte sind möglich) wollen
Mark
R4 / R5 ist die Verstärkung, jedoch kann eine Verstärkung von 1000 bei der von Ihnen getesteten Frequenz die Grenzen des Operationsverstärkers überschreiten. C2 in der Schaltung ist nur dazu da, den Gleichstromversatz im Ausgang durch Rückkopplung zu verringern, und hat keinen Einfluss auf die Verstärkung.
Mark
Mark, C1 gegen R1 // R2 hat eine Rolloff-Frequenz des 1,3-kHz-Hochpassfilters. Das ist weit über einem guten Bruchteil der Sprachfrequenzen und 6 Oktaven über der "HiFi" -Untergrenze. Dies mag in Ordnung sein, wenn er nur einen soundaktivierten Trigger ausführen möchte, aber nicht gut, wenn er einen normalen digitalisierten Sound haben möchte.
Olin Lathrop