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.
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 .
źródło
Odpowiedzi:
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.
źródło
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ś.)
źródło
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:
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”.
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.
źródło