Temiz bir amplifikatör mikrofonu analogdan dijitale dönüştürme nasıl yapılır?


12

Son birkaç gün içinde bu proje ile ilgili birkaç soru sordum, ama hepsini bir araya getiremiyorum.

Bir elektret mikrofonunu bir opampa bağladım ve arduino mikro denetleyicime çıktı verdim. Mikrodenetleyicideki ADC, 0 ila 5 vV aralığını 10 bit sayıya (0 ila 1023) dönüştürür.

3 farklı amp çip denedim:

  • LM386 - Bu çipin bu amaç için iyi olmadığı hakkında geri bildirim aldım, çünkü opamp değil ve beklendiği gibi doğru çalışmadı.
  • LM358 - çalışır
  • UA741 - çalışıyor, LM358'den daha fazla güçlendiriyor

Bu şemayı tam olarak takip ettim (iyi kazanç elde etmek için direnç değerleri ile uğraştım hariç): R5 için 50k ohm ve R2 için 10 ohm kullandım. resim açıklamasını buraya girin

Sorun, son iki çip çıktısının "temiz" olmamasıdır. Arduino'daki analogRead () mikrofonda gürültü yapmasam bile her zaman sıfırdan farklı bir değer okuyor. Gürültü yaptığımda okuma düzgün tepki veriyor, ancak "sıfır" değeri sıfır değil. Bazen "sıfır" değeri her zaman okuma atmak bile titriyor. Umarım bu mantıklıdır.

Bunu çözmeme yardım edebilir misin?

Önemsiz, ekstra bilgi gibi: Sonunda böyle bir şey yapmaya çalışıyorum .


C2'nin yerinde olduğundan emin misiniz? C2'den sonraki sessiz DC gerilimi nedir?
Majenko

Evet, yerinde C2 var. Yaklaşık 2 volt. Bunun herhangi bir anlam ifade edip etmediğini bilmiyorum: pim 2 ve 6, çıkış ve eviren giriş arasındaki döngüde bazı akım sıkışmış (?) Olabilir mi?
Shubham

Arduino giriş piminden bağlantısı kesildiğinde C2'den sonra sessiz DC voltajına ne dersiniz?
Majenko

C2'nin varlığı, ön amplifikatörün çıkışının dahili olarak çalıştığı 2.5V değil, 0V etrafında sallanacağı anlamına gelir.
Majenko

Başka bir şey - ön amplifikatör C2 ve Arduino girişi arasında biraz shottky diyot kaymak isteyebilirsiniz - gerçekten umursamadığınız negatif voltajları atın. Yaptığım bir şey daha, sinyali biraz yumuşatmak için analog giriş ve toprak arasına başka bir kapasitör eklemekti. VU ölçeri biraz daha az titrek yapar.
Majenko

Yanıtlar:


17

Çıkış kapasitöründen kurtulun. Bu devrenin muhtemelen sıfır civarında bir sinyal üretmesi amaçlanmıştır, bu nedenle kapasitör 1/2 Vdd ofsetini bloke etmek için oradadır. Ancak, mikrodenetleyici sinyali 1/2 Vdd civarında ortalamak istiyor, bu yüzden kapasitörden kurtulun.

Mikro telefonlar çok fazla kazanç gerektirir. Elektretler hassas olabilir, ancak yine de 1000'lik bir voltaj kazancı gerekebilir. Devrenizdeki kazanç R5'in R2'ye oranıdır, ancak bu sadece opamp'in yapabileceği sınırlar dahilinde çalışır.

Yukarıda bahsettiğiniz değerler size 5000 kazanç sağlayacaktır. Bu, tek bir opamp aşamasından elde etmeye çalışmanız gerekenden çok daha fazladır. Ofset voltajı bu kazanımla çarpılmakla kalmayacak, aynı zamanda opamp bunu tam frekans aralığında sağlayamayacaktır. 1 MHz kazanç-bant genişliğinde, bu kazancı yalnızca 200 Hz'nin biraz altında alırsınız. 5000 m amplifikasyondan sonra 1 mV giriş ofseti bile 5 V olur.

R2 aynı zamanda giriş kondansatörünün ardından mikrofon tarafından görülen empedanstır. Çekme ve giriş kapasitörü en düşük frekansta mikrofonun empedansından biraz daha büyük olması gerekir. 10 that bunun için çok küçük. 10 kΩ daha iyi bir değer olacaktır.

Yeni başlayanlar için 30 ya da daha fazla kazanç ile iki aşamayı deneyin ve sizi nereye götürdüğüne bakın. Bu, geri bildirimin çalışması için yeterli boşluk bırakarak makul frekansları ele alabileceği bir kazançtır. Ayrıca, giriş ofset voltajının tüm aşamalarda birikmemesi için iki aşamayı kapasitif olarak birleştirmeniz gerekir.

Düzenleme: Eklenen devre

Yukarıdaki cevabı yazarken dün gece bir devre çizecek vaktim yoktu. İşte yapması gereken bir devre:

Bu, makul bir elektret mikrofonu için yeterli olması gereken yaklaşık 1000'lik bir voltaj kazanımına sahiptir. Biraz fazla olabilirim, ama biraz zayıflama eklemek kolaydır.

Topoloji devrenizden oldukça farklıdır. Unutulmaması gereken en önemli şey, tüm kazancı tek bir aşamada üretmeye çalışmadığıdır. Her aşamada yaklaşık 31 kazanç vardır. Bu, geri bildirim için maksimum 20 kHz ses frekansında bol kazanç alanı bırakır, bu nedenle kazanç, MCP6022 tipik bir kazanç bant genişliğine sahip olduğundan, ses frekansı aralığı boyunca güzel bir şekilde öngörülebilir ve düz olacaktır. 10 MHz'lik bir ürün. Sınırlayıcı faktör büyük olasılıkla mikrofon olacaktır.

Daha önce söylediğimden farklı olarak, kazanım ile birlikte ofset voltajının birikmesini önlemek için iki aşamanın kapasitif olarak bağlanması gerekmez. Çünkü bu devrede, her aşamada 1 DC kazancı vardır, bu nedenle son ofset opamp ofsetinin sadece iki katıdır. Bu opamplar sadece 500 µV ofsete sahiptir, bu nedenle opsamperler nedeniyle nihai ofset sadece 1 mV'dir. R3 ve R4'ün uyumsuzluğu nedeniyle daha fazlası olacaktır. Her halükarda, DC çıkışı, A / D aralığında anlamlı bir şekilde yemek yememek için kaynağın 1 / 2'sine yeterince yakın olacaktır.

Kademe başına 1 DC kazanım, geri besleme bölücü yolunun toprağa kapasitif olarak bağlanmasıyla elde edilir. Kapasitör DC'yi engeller, bu nedenle her aşama DC için bir birlik takipçisidir. Tam AC kazancı, kapasitör (ilk aşamada C3) empedansı, alt bölücü direncine (ilk aşamada R7) kıyasla daha küçük hale geldiğinde gerçekleşir. Bu yaklaşık 16 Hz'de olmaya başlar. Bu yaklaşımın bir dezavantajı, yerleşmek için zaman sabitinin sadece R7'nin değil C3 katı R7 + R5 olmasıdır. Bu devre açıldıktan sonra dengelenmesi birkaç saniye sürecektir.


Kapağı çıkıştan çıkardığımda, arduino yaklaşık 3 voltluk bir giriş görür. Üzgünüm, ama ne demek istediğini ofset voltajıyla açıklayabilir misin? 1000 kazanç elde etmek için, R2 10k Ohm olduğunda, R5 için 10M ohm'a ihtiyacım var mı? Bundan emin misin? Kazanç R5 ve R2 arasındaki oran değil mi?
Shubham

@Shubham: Devreniz opamp'ın ofset voltajını 5000 ile çarpmaya çalışıyor, bu nedenle çıkışın bir raya sabitlenmesi şaşırtıcı değil. Hiçbir opamp mükemmel değildir. Giriş ofset gerilimi, çıkış orta aralıktayken iki giriş arasındaki gerilimdir. Teoride iki girdi o zaman eşit olacaktır. Giriş ofset voltajı spesifikasyonu, bu idealden ne kadar uzakta olduğunu gösterir.
Olin Lathrop

@Shubham: Tüm kazancı bir aşamada üretmeye çalışırsanız, geri bildirim direnci için 10 MOhm'a ihtiyacınız olacak. Dediğim gibi, bu kötü bir fikir.
Olin Lathrop

Tüm yardım için teşekkürler, burada çok şey öğreniyorum. Yani her biri 30 kazanımın iki aşamasına sahip olmak bana toplam 900 kazanç sağlıyor, değil mi? Bunu bir LM358 kullanarak deneyeceğim (etrafta ne var bu) ve rapor
Shubham

Sonunda işe yaradı! Bana bu şemayı verdiğin için teşekkürler! Ama sadece yaklaşık 200 ADC aralığı alıyorum. Sessiz ADC değeri orta noktanın (512) biraz üstünde olacak, ancak mikrofonda ne kadar gürültü yaptığım önemli değil, ADC değeri 200'den fazla olmayacak sessiz değer. Muhtemelen bunu sınırlayan kapaklar ve dirençlerim.
Shubham

5

Söylediğiniz gibi, dijital değer 0 ila 1023 arasında olacaktır. Bu aralığın ortası 0 değildir, 512'dir (bu, yaklaşık 2.5'lik bir voltaja karşılık gelir). Sessizlik için, aralığın ortasında böyle bir şey görmelisiniz. Tam olarak 512 olmak zorunda değil, ama yakın olmalı. Buna "DC ofseti" denir. Sinyal yukarı doğru kaydırılır ve 2,5 V civarında ortalanır.

2 V ölçüyorsanız ve 400 civarında ADC değerlerini görüyorsanız, temel olarak iyi çalışır.

Ses dalgaları negatiften pozitif basınca gider. Merkez noktası 0 olsaydı ve sinyal sadece 0 ile 1023 arasında ölçülebilseydi, negatif basınç değerleri (-1023) kesilirdi.

Ayrıca, ADC'nin gürültü tabanı nedeniyle her zaman biraz dalgalanacaktır. (Ne kadar sessiz olursanız olun, odada her zaman biraz ses gürültüsü olacaktır.)


Ohhh "DC ofset" i açıklıyor Diğer cevaplarda görmeye devam ettim. DC ofsetini çıkarmanın, ancak bir yere bir kapak koymanın bir yolu var mı?
Shubham

@Shubham: DC ofseti İSTİYORUM . ADC işlemi biri olmadan çalışmaz. C2 kapağı, bir tane olmasını sağlar. Bu durumda, muhtemelen çok fazla fark yoktur, çünkü U1'in çıkışı zaten dengelenmiştir. C2'nin her iki tarafındaki DC değerini ölçebilir misiniz?
endolith

@Shubham: Dijital ölçümlerinizin 512 yerine 0 çevresinde olmasını istediğinizi kastediyorsanız, yazılımdaki ofseti çıkarabilir veya daha iyisi yazılımda bir dijital yüksek geçirgen filtre uygulayabilirsiniz.
endolith

3

Spesifikasyon sayfasını bu mikrofona gönderebilir misiniz? Dahili FET içermeyen çıplak bir üniteniz yoksa, bir elektret mikrofon ile 5000 kazancınıza ihtiyaç duymanız için hiçbir neden yoktur. Bu durumda, preampın çok farklı görünmesi gerekir.

Ek olarak, kullandığınız devre, bir elektret mikrofonu için ön amplifikatör olarak kullanılmaya son derece elverişli değildir.

Ben tavsiye ederim:

resim açıklamasını buraya girin

R5 / R4 kazancı ayarlar ve devrenin giriş empedansı ile vidalamadan ayarlanabilir. R3, 2k -> 10k ish arasında olabilir. 10k bozulma performansını artırma eğilimindedir, eğer bunu çok düşük ayarlarsanız giriş empedansını sabitlemek için R1 ve R2 değerlerini yeniden düşünmelisiniz.

Mikrofona herhangi bir gürültü geleceğinden güç kaynağının yeterince ayrıştırılması da çok önemlidir.

Diğer cevaplarda belirtildiği gibi, ADC'yi okuduğunuzda "sıfır" noktanız ~ 512 olacaktır ve ne yaparsanız yapın biraz dalgalanır.

Amacınız seviyeye yanıt olarak yanıp sönüyorsa, iyi tepki verebilecek kadar hızlı örnekleme yapabileceğinizden şüphelendiğiniz için zaten bir arduino ile anlık okumalar almamalısınız. Bunun yerine analog alanda tepe veya ortalama seviye tespiti yapın ve ortalama süreyi örnekleme oranınız ne olursa olsun orantılı olarak ayarlayın.

EDIT: Bir tepe dedektörü ile bu konuda daha fazla bilgi

Burada sahip olacağınız sorun, arduino'nun nispeten sınırlı bir örnekleme oranına sahip olması, maksimum değerinizin yaklaşık 10khz olacağını düşünüyorum, bu da sadece 5khz ses sinyali maks. Bu, arduino'nun ADC'yi çalıştırmak dışında çok az şey yapmasıdır, eğer herhangi bir gerçek iş yapmanız gerekiyorsa (ve seviye almak için bazılarını yaparsanız) örnekleme oranı daha düşük olacaktır.

Ham sinyalin ayrı örneklerini almayı unutmayın, çünkü ADC'ye tam kapsamlı bir sinüs dalgası beslemeniz, ADC'den 0 okuma almayacağınız anlamına gelmez, dalganın çeşitli noktalarında örnekler alırsınız. . Gerçek müzik ile ortaya çıkan sinyal oldukça karmaşık olacak ve her yerde örnek olacak.

Şimdi, ölçmeye çalıştığınız tek şey giriş sinyalinin seviyesiyse ve aslında sinyalin dijital gösterimini umursamıyorsanız, bu ön amplifikatörden sonra basit bir tepe dedektörü kullanabilirsiniz.

Bu, ses sinyalinizi tepe seviyesini temsil eden bir voltaja dönüştürür. Bu voltajı ADC ile ölçtüğünüzde, okumanın yapıldığı sırada sinyal seviyesini temsil eden bir anlık değere sahip olursunuz. Ses karmaşık, her zaman değişen bir dalga biçimi olduğu için hala biraz sallanmaya sahip olacaksınız, ancak bu yazılımda ele alınması kolay olmalıdır.

Tutulmayan bir tepe dedektörü, sadece çıkışta bir filtreye sahip bir doğrultucu. Bu durumda, düşük seviyeli sinyallerle başa çıkmamız ve doğruluğu korumamız gerekir, böylece ortalama doğrultucu devreniz için yapılacaklardan biraz daha fazlasını yapmamız gerekir. Bu devre ailesine "hassas doğrultucular" denir.

resim açıklamasını buraya girin

Bunu yapmak için yaklaşık bir milyar farklı yol var ama bu devre ile devam edeceğim, tek bir tedarik kullanırken en iyi şekilde çalışıyor gibi görünüyor. Bu, ön amplifikatör devresi zaten tartışıldıktan sonra girer ve giriş AC eşleşmeli olabilir veya olmayabilir, tek bir kaynaktan çalışmasına rağmen, mevcut tepe noktasını aşmadığınız sürece negatif giriş gerilimleri ile gerçekten iyi çalışır. op amperlerden pik gerilime.

OP1, düzeltme yaparken diyot boyunca olağan voltaj düşüşü sorununu çözen (neredeyse) ideal bir diyot görevi görür. Hemen hemen her küçük sinyal diyotu D1 için çalışacaktır, düşük voltaj düşüşü olan bir şey doğruluğu artıracaktır, ancak kullanımınız için önemli olacağından şüpheliyim.

C1 ve R4, çıkışı pürüzsüzleştirmek için bir düşük geçiş filtresi olarak işlev görür, performansı yapmaya çalıştığınız şeye (ve örnekleme oranınıza) uydurmak için değerleriyle oynayabilirsiniz.

Pre-amp'de kullandığınız muhtemelen aynı op amp modelini kullanabilirsiniz, ancak Rail-to-Rail ve yüksek dönüş hızı bu devre için idealdir. Bir kararlılık sorununuz varsa R1, R2 ve R3'ü 100k ohm'a yükseltin.


Mikrofon standart bir elektret kondansatörlü mikrofondur. R3 10K yapacağım, Vcc'm 5.9V, bu yüzden R1 ve R2 de 10K ise iyi olacak mı? Hangi opamp'ı önerirsiniz: LM358 veya 741? "Sıfır" noktasını 0'a veya 0'ın yakınına getirebilmemin bir yolu var mı? "Bunun yerine analog alanda tepe veya ortalama seviye tespiti yapın ve ortalama süreyi örnekleme oranınız ne olursa olsun orantılı olarak ayarlayın." - Bana bu konuda biraz daha ayrıntı verebilir misiniz? kulağa ilginç geliyor ve gerçekten içine bakmak istiyorum. Maalesef birçok sorum var ... Üniversitede bir EE öğrencisiyim hala öğreniyorum.
Shubham

Önerilen devrenizi denedim (kullandığımdan çok daha temiz, çıktıda daha az rasgele). 1000 amplifikasyon vererek R5 için 1M Ohm ve R4 için 1k Ohm kullandım. Bir DMM ile bazı ölçümler yaptığımda, opamp yaklaşık 3 volt sessiz bir çıkış veriyor ve C3 yaklaşık 1,5 volta düşürüyor. Ayrıca R5'i çıkardığımda çıktıda herhangi bir fark yaratmıyor ... kazancın R4 / R5 olduğundan emin misiniz?
Shubham

1
R3, mikrofonun içindeki FET'in sapma noktasını ayarlar, (R1 || R2) || R3, mikrofon tarafından görülen AC giriş empedansını ayarlar. "Sıfır" noktasını 0 olarak ayarlamak, analog alandaki herhangi bir şey tarafından çözülemez, bu, tek bir güç kaynağına sahip arduinodaki ADC'nin bir işlevidir. Eğer hiçbir ses sıfır (negatif değerler mümkündür bu aracı olarak imzalı veri türünü seçmeye dikkat edin) olmak istiyorsanız yapmanız gereken tek şey, her örnekten çıkarma ~ 512 olduğunu
Mark

R4 / R5 kazançtır, ancak 1000 kazanç, test ettiğiniz frekansta opamp sınırlarını aşabilir. Devredeki C2, çıkıştaki herhangi bir DC ofsetini geri beslemeden azaltmaya yardımcı olmak için vardır ve kazancı etkilemez.
Mark

Mark, C1, R1 // R2'ye karşı 1.3 kHz yüksek geçişli filtre devreden çıkarma frekansına sahiptir. Bu, ses frekanslarının iyi bir kısmının ve "HiFi" alt sınırının üzerinde 6 oktavın çok üzerindedir. Bu, yalnızca sesle etkinleştirilen bir tetikleyici yapmak istiyorsa iyi olabilir, ancak normal sayısallaştırılmış ses istiyorsa iyi olmayabilir.
Olin Lathrop
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.