Saya telah mengajukan beberapa pertanyaan yang berkaitan dengan proyek ini selama beberapa hari terakhir, tetapi sepertinya saya tidak bisa menggabungkan semuanya.
Saya menghubungkan mic electret ke dalam opamp dan memberikan output ke mikrokontroler Arduino saya. ADC pada mikrokontroler mengubah kisaran 0 hingga 5 vV ke angka 10-bit (0 hingga 1023).
Saya mencoba 3 chip amp yang berbeda:
- LM386 - Saya mendapat umpan balik chip ini tidak baik untuk tujuan ini, karena tidak opamp, dan tidak bekerja dengan benar seperti yang diharapkan.
- LM358 - bekerja
- UA741 - berfungsi, menguatkan lebih dari LM358
Saya mengikuti skema ini persis (kecuali untuk saya main-main dengan nilai-nilai resistor untuk mendapatkan keuntungan yang baik): Saya menggunakan 50k ohm untuk R5 dan 10 ohm untuk R2.
Masalahnya adalah bahwa output dari dua chip terakhir tidak "bersih". AnalogRead () pada Arduino selalu membaca nilai non-nol bahkan ketika saya tidak membuat suara di mic. Pembacaan bereaksi dengan benar ketika saya membuat suara, tetapi nilai "nol" adalah bukan nol. Terkadang nilai "nol" bahkan berkedip-kedip melempar pembacaan sepanjang waktu. Semoga itu masuk akal.
Bisakah Anda membantu saya menyelesaikan masalah ini?
Sama seperti informasi tambahan yang tidak penting: Saya mencoba membuat sesuatu seperti ini , pada akhirnya.
sumber
Jawaban:
Singkirkan kapasitor output. Rangkaian itu mungkin dimaksudkan untuk menghasilkan sinyal sekitar nol, sehingga kapasitor ada di sana untuk memblokir offset 1/2 Vdd. Namun, mikrokontroler ingin melihat sinyal terpusat sekitar 1/2 Vdd, jadi singkirkan kapasitor.
Mikrofon memang membutuhkan banyak keuntungan. Electrets bisa sensitif, tetapi Anda mungkin masih membutuhkan penguatan tegangan 1000. Gain di rangkaian Anda adalah rasio R5 ke R2, tetapi ini hanya bekerja dalam batas dari apa yang dapat dilakukan opamp.
Nilai-nilai yang Anda sebutkan di atas akan memberi Anda keuntungan 5000. Itu jauh lebih banyak daripada yang seharusnya Anda dapatkan dari satu tahap opamp. Tegangan offset tidak hanya akan dikalikan dengan penguatan ini, tetapi opamp tidak akan mampu menyediakannya pada rentang frekuensi penuh. Pada gain bandwidth 1 MHz, Anda hanya akan mendapatkan gain yang di bawah 200 Hz. Bahkan offset input 1 mV menjadi 5 V setelah amplifikasi sebesar 5000.
R2 juga merupakan impedansi yang terlihat oleh mikrofon setelah kapasitor input. Anda perlu ini agak lebih besar dari impedansi mikrofon dengan pullup dan kapasitor input pada frekuensi terendah. 10 Ω terlalu kecil untuk itu. 10 kΩ akan menjadi nilai yang lebih baik.
Coba dua tahap dengan keuntungan 30 atau lebih untuk pemula dan lihat di mana itu membuat Anda. Itu adalah keuntungan yang bisa diatasi dengan frekuensi yang masuk akal dengan ruang kepala yang cukup tersisa agar umpan balik bekerja. Anda juga perlu memasangkan dua tahap secara kapasitif agar tegangan offset input tidak menumpuk melalui semua tahap.
Edit: Menambahkan sirkuit
Saya tidak punya waktu untuk menggambar sirkuit tadi malam ketika saya menulis jawaban di atas. Berikut ini adalah rangkaian yang harus melakukannya:
Ini memiliki penguatan tegangan sekitar 1000, yang seharusnya cukup untuk mikrofon electret yang wajar. Saya mungkin sedikit terlalu banyak, tetapi mudah untuk menambahkan beberapa pelemahan.
Topologi agak berbeda dari sirkuit Anda. Satu hal yang paling penting untuk dicatat adalah bahwa ia tidak mencoba untuk menghasilkan seluruh keuntungan dalam satu tahap. Setiap tahap memiliki gain sekitar 31. Itu menyisakan banyak ruang utama gain pada frekuensi audio maksimum 20 kHz untuk umpan balik, sehingga gain akan dapat diprediksi dengan baik dan rata dalam rentang frekuensi audio karena MCP6022 memiliki gain-bandwidth khas produk 10 MHz. Faktor pembatas kemungkinan besar adalah mikrofon.
Tidak seperti apa yang saya katakan sebelumnya, dua tahap tidak perlu digabungkan secara kapasitif untuk mencegah akumulasi tegangan offset bersama dengan gain. Itu karena di sirkuit ini, setiap tahap hanya memiliki gain DC sebesar 1, sehingga offset akhir hanya dua kali offset opamp. Opamps ini hanya memiliki offset 500 µV, sehingga offset akhir hanya 1 mV karena opamps. Akan ada lebih banyak karena ketidakcocokan R3 dan R4. Bagaimanapun, output DC akan cukup dekat dengan 1/2 pasokan untuk tidak makan ke kisaran A / D dengan cara yang bermakna.
Gain DC dari 1 per tahap dicapai dengan menggabungkan jalur pembagi umpan balik kapasitif ke ground. Kapasitor memblokir DC, jadi setiap tahap hanyalah satu kesatuan pengikut DC. Gain penuh AC direalisasikan karena impedansi kapasitor (C3 pada tahap pertama) menjadi kecil dibandingkan dengan resistor pembagi yang lebih rendah (R7 pada tahap pertama). Ini mulai terjadi pada sekitar 16 Hz. Salah satu kelemahan dari pendekatan ini adalah bahwa konstanta waktu untuk menyelesaikan adalah C3 kali R7 + R5, bukan hanya R7. Sirkuit ini akan membutuhkan beberapa detik untuk menstabilkan setelah dinyalakan.
sumber
Seperti yang Anda katakan, nilai digital akan dari 0 hingga 1023. Bagian tengah kisaran ini bukan 0, itu adalah 512 (yang sesuai dengan tegangan sekitar 2,5). Untuk keheningan, Anda harus melihat sesuatu di tengah kisaran seperti ini. Tidak harus 512 persis, tetapi harus dekat. Ini disebut "offset DC". Sinyal digeser ke atas dan berpusat di sekitar 2,5 V.
Jika Anda mengukur 2 V dan melihat nilai ADC sekitar 400, maka pada dasarnya itu berfungsi dengan baik.
Gelombang suara berubah dari tekanan negatif ke tekanan positif. Jika titik pusat adalah 0, dan sinyal hanya dapat diukur antara 0 dan 1023, maka nilai tekanan negatif (-1023) akan terputus.
Juga, itu akan selalu berfluktuasi sedikit karena lantai kebisingan ADC. (Dan akan selalu ada suara audio di ruangan tidak peduli seberapa tenangnya kamu.)
sumber
Bisakah Anda memposting lembar spesifikasi di mikrofon itu? Tidak ada alasan Anda perlu mendapatkan 5.000 dengan mikrofon electret kecuali Anda memiliki unit telanjang tanpa FET internal. Jika itu masalahnya, preamp perlu terlihat jauh berbeda.
Selain itu sirkuit yang Anda gunakan tidak terlalu kondusif untuk digunakan sebagai pre-amp untuk mikrofon electret.
Saya akan merekomendasikan:
R5 / R4 mengatur penguatan dan dapat disesuaikan tanpa mengacaukan impedansi input rangkaian. R3 dapat berasal dari 2k -> 10k ish. 10k akan cenderung meningkatkan kinerja distorsi, jika Anda menyesuaikan ini terlalu rendah, Anda harus memikirkan kembali nilai-nilai untuk R1 dan R2 untuk memperbaiki impedansi input.
Ini juga sangat penting bahwa catu daya cukup dipisahkan karena kebisingan akan masuk ke mikrofon.
Seperti jawaban lain yang disebutkan poin "nol" Anda akan ~ 512 ketika Anda membaca ADC dan akan sedikit berfluktuasi tidak peduli apa yang Anda lakukan.
Jika tujuan Anda adalah lampu berkedip sebagai respons terhadap level, Anda tidak seharusnya mengambil bacaan instan dengan arduino karena saya ragu Anda akan dapat mengambil sampel dengan cukup cepat untuk membuatnya merespons dengan baik. Alih-alih lakukan deteksi tingkat puncak atau rata-rata di domain analog dan setel periode rata-rata secara proporsional ke tingkat pengambilan sampel Anda.
EDIT: Lebih lanjut tentang melakukan ini dengan detektor puncak
Masalah yang Anda miliki di sini adalah bahwa Arduino memiliki tingkat pengambilan sampel yang relatif terbatas, saya pikir maksimum Anda akan menjadi sekitar 10khz yang berarti Anda hanya dapat menyelesaikan maks sinyal audio 5khz. Itu adalah dengan Arduino melakukan sangat sedikit kecuali menjalankan ADC, jika Anda perlu melakukan pekerjaan nyata (dan Anda melakukan beberapa untuk mendapatkan level) tingkat sampling akan lebih rendah.
Ingat Anda mengambil sampel diskrit dari sinyal mentah, hanya karena Anda memiliki gelombang sinus jangkauan penuh ke dalam ADC tidak berarti Anda tidak akan mendapatkan pembacaan 0 dari ADC, Anda akan mendapatkan sampel di berbagai titik gelombang. . Dengan musik asli, sinyal yang dihasilkan akan sangat kompleks dan Anda akan memiliki sampel di semua tempat.
Sekarang, jika semua yang Anda coba ukur adalah level sinyal input, dan tidak peduli untuk benar-benar mendapatkan representasi digital dari sinyal, maka Anda dapat menggunakan detektor puncak sederhana setelah pre-amp ini untuk melakukannya.
Apa ini artinya mengubah sinyal audio Anda menjadi tegangan yang mewakili tingkat puncaknya. Ketika Anda mengukur tegangan ini dengan ADC Anda akan memiliki nilai langsung yang mewakili tingkat sinyal pada saat pembacaan dilakukan. Anda masih akan memiliki sedikit goyangan karena suara adalah bentuk gelombang yang kompleks dan selalu bervariasi, tetapi ini harus mudah ditangani dalam perangkat lunak.
Detektor puncak tanpa penahan sebenarnya hanya penyearah dengan filter pada output. Dalam hal ini kita perlu menangani sinyal level rendah dan menjaga akurasi sehingga kita perlu melakukan sedikit lebih banyak dari apa yang akan dilakukan untuk rangkaian penyearah rata-rata Anda. Rangkaian rangkaian ini disebut "penyearah presisi".
Ada sekitar satu miliar cara berbeda untuk melakukan ini, tetapi saya akan menggunakan sirkuit ini, sepertinya bekerja paling baik saat menggunakan satu pasokan. Ini akan pergi setelah rangkaian pre-amp sudah dibahas dan inputnya bisa AC atau tidak, meskipun itu berjalan dari satu pasokan, itu benar-benar akan bekerja dengan baik dengan voltase input negatif selama Anda tidak melebihi puncak yang tersedia- to-peak voltage dari op amp.
OP1 bertindak sebagai (hampir) dioda ideal yang mengatasi masalah penurunan tegangan yang biasa terjadi pada dioda saat meluruskan. Hampir semua dioda sinyal kecil akan bekerja untuk D1, sesuatu dengan penurunan tegangan maju yang lebih rendah akan meningkatkan akurasi tetapi saya ragu itu akan menjadi masalah bagi penggunaan Anda.
C1 dan R4 bertindak sebagai filter low pass untuk memuluskan output, Anda dapat bermain dengan nilainya untuk menyesuaikan kinerja dengan apa yang Anda coba lakukan (dan laju sampling Anda).
Anda mungkin dapat menggunakan model op amp yang sama dengan yang Anda gunakan pada pre-amp tetapi Rail-to-Rail dan laju perubahan tegangan tinggi ideal untuk rangkaian ini. Jika Anda memiliki masalah stabilitas, tambah R1, R2, dan R3 hingga 100k ohm.
sumber