Jak zrobić czysty wzmacniany mikrofon z konwersją analogowo-cyfrową?


12

Zadałem kilka pytań związanych z tym projektem w ciągu ostatnich kilku dni, ale wydaje mi się, że nie mogę tego wszystkiego połączyć.

Podłączyłem mikrofon elektretowy do opampa i przekazałem sygnał wyjściowy do mojego mikrokontrolera arduino. ADC mikrokontrolera przekształca zakres od 0 do 5 vV w liczbę 10-bitową (od 0 do 1023).

Próbowałem 3 różne układy wzmacniacza:

  • LM386 - Otrzymałem informację zwrotną, że ten układ nie był dobry do tego celu, ponieważ nie jest opampem i nie działał poprawnie zgodnie z oczekiwaniami.
  • LM358 - działa
  • UA741 - działa, wzmacnia więcej niż LM358

Postępowałem dokładnie według tego schematu (oprócz tego, że pomieszałem wartości rezystorów, aby uzyskać dobre wzmocnienie): użyłem 50 kiloomów dla R5 i 10 omów dla R2. wprowadź opis zdjęcia tutaj

Problem polega na tym, że sygnał wyjściowy z dwóch ostatnich układów nie jest „czysty”. AnalogRead () na Arduino zawsze odczytuje niezerową wartość, nawet gdy nie robię hałasu w mikrofonie. Odczyt reaguje prawidłowo, kiedy robię hałas, ale wartość „zero” jest różna od zera. Czasami wartość „zero” nawet migocze, cały czas wyrzucając odczyt. Mam nadzieję, że to miało sens.

Czy możesz mi pomóc to rozwiązać?

Równie mało ważne, dodatkowe informacje: w końcu próbuję zrobić coś takiego .


Jesteś pewien, że masz C2 na swoim miejscu? Jakie jest ciche napięcie DC po C2?
Majenko,

Tak, mam C2 na swoim miejscu. To około 2 woltów. Nie wiem, czy to ma jakiś sens: czy może być tak, że w pętli między pinami 2 i 6 jest prąd uwięziony (?), Wyjście i wejście odwracające?
Shubham,

Co powiesz na ciche napięcie DC po C2, gdy jest ono odłączone od styku wejściowego Arduino?
Majenko,

Obecność C2 oznacza, że ​​moc wyjściowa przedwzmacniacza będzie wahać się wokół 0 V - nie 2,5 V, przy której pracuje wewnętrznie.
Majenko,

Jeszcze jedna rzecz - możesz wsunąć małą świecącą diodę między przedwzmacniacz C2 i wejście Arduino - wyrzuć te ujemne napięcia, na których tak naprawdę nie zależy. Jeszcze jedną rzeczą, którą zrobiłem, było dodanie kolejnego kondensatora między wejściem analogowym a uziemieniem, aby nieco wygładzić sygnał. Sprawia, że ​​miernik VU jest nieco mniej migotliwy.
Majenko,

Odpowiedzi:


17

Pozbądź się kondensatora wyjściowego. Ten obwód prawdopodobnie miał wytwarzać sygnał wokół zera, więc kondensator blokuje przesunięcie 1/2 Vdd. Jednak mikrokontroler chce widzieć sygnał wyśrodkowany wokół 1/2 Vdd, więc po prostu pozbądź się kondensatora.

Mikrofony wymagają dużego wzmocnienia. Elektret może być wrażliwy, ale nadal możesz potrzebować wzmocnienia napięcia o wartości 1000. Wzmocnienie w twoim obwodzie to stosunek R5 do R2, ale działa to tylko w granicach tego, co może zrobić opamp.

Wartości, o których wspomniałeś powyżej, przyniosą Ci zysk 5000. To o wiele więcej, niż powinieneś próbować uzyskać z pojedynczego etapu opampa. Napięcie przesunięte zostanie nie tylko zwielokrotnione przez to wzmocnienie, ale opamp nie będzie w stanie tego zapewnić w pełnym zakresie częstotliwości. Przy paśmie wzmocnienia 1 MHz uzyskasz ten zysk tylko nieco poniżej 200 Hz. Nawet przesunięcie wejściowe 1 mV staje się 5 V po wzmocnieniu przez 5000.

R2 jest również impedancją widzianą przez mikrofon za kondensatorem wejściowym. Musi to być nieco większa niż impedancja mikrofonu z jego podciągnięciem i kondensatorem wejściowym przy najniższej interesującej częstotliwości. 10 Ω jest na to zdecydowanie za małe. Lepsza wartość to 10 kΩ.

Wypróbuj dwa etapy z zyskiem około 30 na początek i sprawdź, gdzie cię to zaprowadzi. Jest to zysk, który może poradzić sobie z rozsądnymi częstotliwościami z wystarczającą ilością miejsca, aby sprzężenie zwrotne działało. Musisz również połączyć pojemnościowo dwa stopnie, aby napięcie przesunięcia wejściowego nie kumulowało się we wszystkich stopniach.

Edycja: Dodano obwód

Nie miałem czasu na narysowanie obwodu ostatniej nocy, kiedy napisałem odpowiedź powyżej. Oto obwód, który powinien to zrobić:

Ma to wzrost napięcia o wartości około 1000, co powinno wystarczyć dla rozsądnego mikrofonu elektretowego. Mogę być trochę za dużo, ale łatwo jest dodać nieco tłumienia.

Topologia różni się raczej od obwodu. Najważniejszą rzeczą, na którą należy zwrócić uwagę, jest to, że nie próbuje osiągnąć całego zysku w jednym etapie. Każdy stopień ma wzmocnienie około 31. To pozostawia dużo miejsca na zysk przy maksymalnej częstotliwości audio 20 kHz dla sprzężenia zwrotnego, więc wzmocnienie będzie dobrze przewidywalne i płaskie w całym zakresie częstotliwości audio, ponieważ MCP6022 ma typową szerokość pasma wzmocnienia iloczyn 10 MHz. Czynnikiem ograniczającym będzie najprawdopodobniej mikrofon.

W przeciwieństwie do tego, co powiedziałem wcześniej, dwa stopnie nie muszą być sprzężone pojemnościowo, aby zapobiec gromadzeniu się napięcia przesunięcia wraz ze wzmocnieniem. Jest tak, ponieważ w tym obwodzie każdy stopień ma tylko wzmocnienie DC 1, więc końcowe przesunięcie jest tylko dwa razy większe niż przesunięcie opampa. Te opampy mają tylko przesunięcie 500 µV, więc końcowe przesunięcie wynosi tylko 1 mV z powodu opampów. Będzie ich więcej z powodu niedopasowania R3 i R4. W każdym razie wyjściowy prąd stały będzie wystarczająco blisko, aby 1/2 źródła zasilania nie zjadł w znaczny sposób zakresu A / D.

Zysk 1 prądu stałego na stopień jest osiągany przez pojemnościowe połączenie ścieżki dzielnika sprzężenia zwrotnego z ziemią. Kondensator blokuje prąd stały, więc każdy stopień jest tylko naśladowcą jedności dla prądu stałego. Pełne wzmocnienie prądu przemiennego jest realizowane, gdy impedancja kondensatora (C3 w pierwszym stopniu) maleje w porównaniu do dolnego rezystora dzielącego (R7 w pierwszym stopniu). Zaczyna się to przy około 16 Hz. Wadą tego podejścia jest to, że stała czasowa do ustalenia wynosi C3 razy R7 + R5, a nie tylko R7. Obwód ustabilizuje się po kilku sekundach od włączenia.


Kiedy zdejmuję czapkę z wyjścia, arduino widzi moc około 3 woltów. Przepraszam, ale czy możesz wyjaśnić, co rozumiesz przez napięcie przesunięte? Aby uzyskać zysk 1000, przy R2 jako 10k Ohm, potrzebuję 10M omów dla R5? Jesteś tego pewien? Wzmocnienie to stosunek R5 do R2, prawda?
Shubham,

@Shubham: Twój obwód próbuje pomnożyć napięcie przesunięcia opampa przez 5000, więc nic dziwnego, że wyjście jest przymocowane do jednej szyny. Żaden opamp nie jest idealny. Napięcie przesunięcia wejściowego to napięcie między dwoma wejściami, gdy wyjście znajduje się w średnim zakresie. Teoretycznie dwa wejścia byłyby wtedy równe. Napięcie wejściowe przesunięcia określa, jak daleko jest od tego ideału.
Olin Lathrop,

@Shubham: Potrzebowałbyś 10 MOhm na rezystor sprzężenia zwrotnego, gdybyś próbował, aby jeden stopień generował cały zysk. Jak powiedziałem, to zły pomysł.
Olin Lathrop,

Dzięki za wszelką pomoc, dużo się tutaj uczę. Zatem posiadanie dwóch etapów po 30 wzmocnień daje mi całkowity zysk 900, prawda? Spróbuję tego przy użyciu LM358 (to jest to, co mam wokół) i
zdam

Wreszcie się udało! Dziękujemy za przekazanie mi tego schematu! Ale dostaję tylko zakres ADC wynoszący około 200. Cicha wartość ADC będzie nieco powyżej punktu środkowego (512), ale bez względu na to, ile szumów robię w mikrofonie, wartość ADC nie wzrośnie więcej niż 200 powyżej cicha wartość. Ogranicza to prawdopodobnie moja konfiguracja czapek i rezystorów.
Shubham,

5

Jak mówisz, wartość cyfrowa będzie wynosić od 0 do 1023. Środek tego zakresu to nie 0, to 512 (co odpowiada napięciu około 2,5). Aby zachować ciszę, powinieneś zobaczyć coś w połowie tego zakresu. Nie musi to być dokładnie 512, ale powinno być blisko. Nazywa się to „przesunięciem DC”. Sygnał jest przesunięty w górę i wyśrodkowany wokół 2,5 V.

Jeśli mierzysz 2 V i widzisz wartości ADC około 400, to w zasadzie działa dobrze.

Fale dźwiękowe przechodzą od ciśnienia ujemnego do dodatniego. Gdyby punktem środkowym było 0, a sygnał można zmierzyć tylko między 0 a 1023, wówczas wartości podciśnienia (-1023) zostałyby odcięte.

Ponadto zawsze będzie się nieco wahać ze względu na poziom hałasu ADC. (I zawsze będzie trochę hałasu w pomieszczeniu, bez względu na to, jak cicho jesteś.)


Och, to wyjaśnia „przesunięcie DC”. Widziałem w innych odpowiedziach. Czy istnieje sposób na usunięcie przesunięcia DC, ale gdzieś nałożenie ograniczenia?
Shubham,

@Shubham: CHCESZ przesunięcie DC. Proces ADC nie działałby bez niego. Czapka C2 jest tym, co zapewnia, że ​​masz. W tym przypadku prawdopodobnie nie ma dużej różnicy, ponieważ wyjście U1 jest już przesunięte. Czy potrafisz zmierzyć wartość prądu stałego po każdej stronie C2?
endolith,

@Shubham: Jeśli masz na myśli, że chcesz, aby twoje pomiary cyfrowe były wyśrodkowane wokół 0 zamiast 512, możesz po prostu odjąć przesunięcie w swoim oprogramowaniu lub, lepiej, zaimplementować w oprogramowaniu cyfrowy filtr górnoprzepustowy.
endolith,

3

Czy możesz zamieścić arkusz specyfikacji na tym mikrofonie? Nie ma powodu, dla którego powinieneś potrzebować wzmocnienia 5000 z mikrofonem elektretowym, chyba że masz nagą jednostkę bez wewnętrznego FET. W takim przypadku przedwzmacniacz musi wyglądać zupełnie inaczej.

Dodatkowo zastosowany obwód nie sprzyja strasznemu wykorzystaniu przedwzmacniacza do mikrofonu elektretowego.

Poleciłbym:

wprowadź opis zdjęcia tutaj

R5 / R4 ustawia wzmocnienie i może być regulowane bez wkręcania z impedancją wejściową obwodu. R3 może wynosić od 2k -> 10k ish. 10k poprawi jakość zniekształceń, jeśli ustawisz to zbyt nisko, powinieneś przemyśleć wartości R1 i R2, aby naprawić impedancję wejściową.

Bardzo ważne jest również, aby zasilacz był odpowiednio odsprzęgany, ponieważ do mikrofonu dociera każdy szum.

Jak wspomniano w innych odpowiedziach, twój punkt zerowy wyniesie ~ 512 podczas czytania ADC i będzie się nieco wahał bez względu na to, co robisz.

Jeśli twoim celem jest miganie lampek w odpowiedzi na poziom, nie powinieneś i tak robić natychmiastowych odczytów z arduino, ponieważ wątpię, czy będziesz w stanie próbkować wystarczająco szybko, aby dobrze zareagować. Zamiast tego wykonaj wykrywanie maksymalnego lub średniego poziomu w domenie analogowej i ustaw okres uśredniania proporcjonalnie do tego, jaka będzie częstotliwość próbkowania.

EDYCJA: Więcej o robieniu tego z detektorem pików

Problemem będzie tutaj to, że arduino ma stosunkowo ograniczoną częstotliwość próbkowania, myślę, że twoje maksimum wyniesie około 10 kHz, co oznacza, że ​​możesz rozwiązać tylko 5 kHz sygnału audio. Oznacza to, że arduino robi niewiele, poza uruchomieniem ADC, jeśli musisz wykonać jakąkolwiek prawdziwą pracę (i robisz coś, aby uzyskać poziom), częstotliwość próbkowania będzie niższa.

Pamiętaj, że pobierałeś dyskretne próbki surowego sygnału, tylko dlatego, że masz falę sinusoidalną pełnego zakresu zasilającą ADC, nie oznacza, że ​​nie otrzymasz odczytów 0 z ADC, otrzymasz próbki w różnych punktach fali . W przypadku prawdziwej muzyki wynikowy sygnał będzie dość złożony i będziesz mieć próbki w dowolnym miejscu.

Teraz, jeśli wszystko, co próbujesz zmierzyć, to poziom sygnału wejściowego i nie przejmujesz się faktycznym uzyskaniem cyfrowej reprezentacji sygnału, możesz użyć prostego detektora pików po tym przedwzmacniaczu, aby to zrobić.

To, co to robi, zamienia twój sygnał audio w napięcie, które reprezentuje jego szczytowy poziom. Kiedy mierzysz to napięcie za pomocą ADC, uzyskasz natychmiastową wartość reprezentującą poziom sygnału w momencie dokonywania odczytu. Nadal będziesz miał trochę chwiejności, ponieważ dźwięk jest złożonym, zawsze zmiennym przebiegiem, ale powinno to być łatwe do rozwiązania w oprogramowaniu.

Detektor szczytowy bez blokady jest tak naprawdę prostownikiem z filtrem na wyjściu. W tym przypadku musimy poradzić sobie z sygnałami niskiego poziomu i zachować dokładność, więc musimy zrobić trochę więcej niż to, co można zrobić dla przeciętnego obwodu prostownika. Ta rodzina obwodów nosi nazwę „precyzyjnych prostowników”.

wprowadź opis zdjęcia tutaj

Istnieje około miliarda różnych sposobów, aby to zrobić, ale chciałbym skorzystać z tego obwodu, wydaje się, że działa najlepiej, gdy używa się jednego źródła zasilania. Działo się to po omówieniu obwodu przedwzmacniacza, a wejście może być sprzężone prądem przemiennym lub nie, pomimo tego, że działa z jednego źródła, w rzeczywistości będzie działać dobrze przy ujemnych napięciach wejściowych, o ile nie przekroczysz dostępnego szczytowego napięcie szczytowe ze wzmacniaczy operacyjnych.

OP1 działa jak (prawie) idealna dioda, która omija zwykły problem spadku napięcia na diodzie podczas prostowania. Prawie każda mała dioda sygnałowa będzie działać dla D1, coś z niższym spadkiem napięcia do przodu zwiększyłoby dokładność, ale wątpię, że będzie to miało znaczenie dla twojego zastosowania.

C1 i R4 działają jak filtr dolnoprzepustowy, aby wygładzić sygnał wyjściowy, możesz grać z ich wartościami, aby dopasować wydajność do tego, co próbujesz zrobić (i częstotliwość próbkowania).

Prawdopodobnie możesz użyć tego samego modelu wzmacniacza operacyjnego, którego używasz w przedwzmacniaczu, ale Rail-to-Rail i wysoka prędkość narastania są idealne dla tego obwodu. Jeśli masz problem ze stabilnością, zwiększ R1, R2 i R3 do 100k omów.


Mikrofon jest standardowym elektretowym mikrofonem pojemnościowym. Zrobię R3 10K, moje Vcc wynosi 5,9V, więc czy będzie dobrze, jeśli R1 i R2 również będą 10K? Jaki opamp poleciłbyś: LM358 lub 741? Czy istnieje sposób na sprowadzenie punktu „zero” do 0 lub blisko 0? „Zamiast tego wykonaj wykrywanie maksymalnego lub średniego poziomu w domenie analogowej i ustaw okres uśredniania proporcjonalnie do tego, jaka będzie częstotliwość próbkowania.” - Czy możesz podać mi trochę więcej szczegółów na ten temat? brzmi interesująco i naprawdę chcę się temu przyjrzeć. Przepraszam, mam wiele pytań ... Jestem studentem EE na studiach, wciąż się uczę.
Shubham,

Wypróbowałem twój zalecany obwód (jest znacznie czystszy niż to, którego używałem, mniej losowości na wyjściu). Użyłem 1M Ohm dla R5 i 1k Ohm dla R4, dając wzmocnienie 1000. Kiedy zrobiłem kilka pomiarów z DMM, opamp daje cichą moc około 3 woltów, a C3 redukuje ją do około 1,5 wolta. Również po usunięciu R5 nie ma to żadnego znaczenia dla wyjścia ... czy jesteś pewien, że zysk to R4 / R5?
Shubham,

1
R3 ustawia punkt odchylenia FET wewnątrz mikrofonu, (R1 || R2) || R3 ustawia impedancję wejściową AC widzianą przez mikrofon. Ustawienie punktu zerowego na 0 nie może być rozwiązane przez nic w domenie analogowej, jest to funkcja ADC w arduino posiadającym pojedynczy zasilacz. Wszystko, co musisz zrobić, to odjąć ~ 512 od każdej próbki, jeśli nie chcesz, aby dźwięk był zerowy (upewnij się, że używasz podpisanego typu danych, ponieważ oznacza to, że wartości ujemne są możliwe)
Mark

R4 / R5 to wzmocnienie, jednak wzmocnienie 1000 może przekroczyć granice opampa na testowanej częstotliwości. C2 w obwodzie jest tylko po to, aby złagodzić jakiekolwiek przesunięcie DC na wyjściu z sprzężenia zwrotnego i nie wpływa na wzmocnienie.
Mark

Mark, C1 w stosunku do R1 // R2 ma częstotliwość wycofywania filtra górnoprzepustowego 1,3 kHz. To znacznie powyżej dobrego ułamka częstotliwości głosu i 6 oktaw powyżej dolnej granicy „HiFi”. Może to być w porządku, jeśli chce po prostu uruchomić aktywowany dźwiękiem spust, ale nie dobrze, jeśli chce normalnego dźwięku cyfrowego.
Olin Lathrop,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.