隨著我們的音頻反應(yīng)項(xiàng)目越來(lái)越復(fù)雜,我們可能決定用一個(gè)提供自動(dòng)增益控制的簡(jiǎn)單的 MEMS 麥克風(fēng)和放大器來(lái)代替。
這是我之前與 MSGEQ7 相關(guān)的專(zhuān)欄的后續(xù)文章:“使用 MSGEQ7 頻譜分析儀的提示和技巧”和“使用 MSGEQ7 音頻頻譜分析儀時(shí)處理噪音”。
您可能還記得,MSGEQ7 是一款便宜且令人愉悅的八針設(shè)備,它接受音頻信號(hào)并將其分成與以 63 Hz、160 Hz、400 Hz、1,000 Hz、2,500 Hz 為中心的七個(gè)頻段相關(guān)的幅度、6,250 赫茲和 16,000 赫茲。然后我們可以使用這個(gè)頻率信息來(lái)做一些事情,比如控制閃光燈。
事實(shí)上,我最近的Awesome Audio-Reactive Artifact項(xiàng)目包含一個(gè) Arduino 微控制器、一個(gè) MSGEQ7 和一個(gè) MEMS 麥克風(fēng)和放大器分線板 (BOB)。
我現(xiàn)在正在努力解決的問(wèn)題是確定用于任何未來(lái)音頻反應(yīng)項(xiàng)目的最佳麥克風(fēng) BOB。
遺憾的是,MSGEQ7 數(shù)據(jù)表并沒(méi)有人們希望的那么有用,但這意味著該設(shè)備需要一個(gè)具有 0.3-Vpp(即 300-mV 峰峰值)擺幅的音頻輸入。這意味著您必須相應(yīng)地選擇您的麥克風(fēng)。
INMP401 MEMS 麥克風(fēng) BOB
在我的 Awesome Audio-Reactive Artifact 的情況下,我目前正在使用基于 ADMP401 的INMP401 MEMS 麥克風(fēng) BOB,售價(jià) 10.95 美元,來(lái)自 SparkFun 的男士和女士。該 BOB 被描述為當(dāng)麥克風(fēng)保持一臂距離并以正常的會(huì)話音量水平被交談時(shí),其峰峰值輸出約為 200 mV。當(dāng)播放響亮的音樂(lè)時(shí),我實(shí)際上并沒(méi)有測(cè)量輸出(當(dāng)我有空的時(shí)候我真的需要這樣做),但一切似乎都很好地結(jié)合在一起。
INMP401 MEMS 麥克風(fēng) BOB:麥克風(fēng)是右側(cè)圖像中的小黑點(diǎn)。(來(lái)源:SparkFun)
此 BOB 的主要優(yōu)勢(shì)之一是底部端口輸入。這意味著麥克風(fēng)的 1 毫米直徑輸入可以與項(xiàng)目的外殼齊平。BOB 的輸出具有 VCC/2 的 DC 偏置,這意味著當(dāng)沒(méi)有聲音被拾取時(shí),信號(hào)將浮動(dòng)在 2.5 V。
MSGEQ7 數(shù)據(jù)表建議使用由 22kΩ 電阻器和 0.1μF 電容器與音頻輸入串聯(lián)形成的濾波器。已選擇這些值來(lái)傳遞音頻信號(hào),同時(shí)消除直流偏置。
請(qǐng)注意,使用 R2 和 C2 注釋?zhuān)ㄅc R1 和 C1 相對(duì))的原因是為了使此原理圖與我之前的專(zhuān)欄中的電路匹配。將這款麥克風(fēng) BOB 與 MSGEQ7 一起使用非常簡(jiǎn)單。您所要做的就是連接電源 (VCC) 和接地 (GND) 線(在我的情況下為 5 V 和 0 V)并將音頻 (AUD) 輸出連接到 22-kΩ 電阻器(示例 Arduino 代碼在我的上述文章)。
我不得不說(shuō)我對(duì) INMP401 MEMS 麥克風(fēng) BOB 非常滿意,我會(huì)向任何人推薦它。在我的 Awesome Audio-Reactive Artifact 的情況下,當(dāng)音樂(lè)以合理的音量播放時(shí),這個(gè) BOB 工作得非常好,但是 - 理想情況下,如果有選擇的話,如果推來(lái)推去 - 我想要更多的動(dòng)態(tài)范圍。
假設(shè)我坐在離工件有一段距離的一個(gè)非常安靜的房間里。如果我發(fā)出像點(diǎn)擊手指或說(shuō)“你好”這樣的低級(jí)聲音,我希望這個(gè)神器能以明亮的顯示閃爍起來(lái),但我很幸運(yùn)看到的不僅僅是閃爍。如果事情已經(jīng)安靜了一段時(shí)間,我想我可以通過(guò)執(zhí)行某種滾動(dòng)平均并增強(qiáng)任何低電平信號(hào)來(lái)在軟件中糾正這個(gè)問(wèn)題,但我現(xiàn)在感覺(jué)有點(diǎn)懶惰。
或者,假設(shè)音樂(lè)變得非常響亮。在這種情況下,我當(dāng)前的系統(tǒng)趨于飽和,導(dǎo)致所有 LED 長(zhǎng)時(shí)間完全打開(kāi)。我仍然可以聽(tīng)到音樂(lè)中的基本節(jié)奏以及頻譜各個(gè)部分的活動(dòng),因此我希望我的音頻反應(yīng)神器以某種方式調(diào)整其靈敏度以反映當(dāng)前的音量。
駐極體麥克風(fēng)放大器 — 具有自動(dòng)增益控制功能的 MAX9814
因此,我們來(lái)到了基于 Maxim MAX9814 的具有自動(dòng)增益控制功能的駐極體麥克風(fēng)放大器BOB,Adafruit 的男士和女士?jī)H售 7.95 美元。
根據(jù)它的數(shù)據(jù)表,這個(gè)小美女可以在 2.7 V 到 5.5 V 的電源電壓下工作。除了電源 (VDD) 和接地 (GND) 端子(在我的情況下為 5 V 和 0 V)外,我們還有一個(gè)音頻輸出 (OUT)、增益控制輸入 (GAIN) 和啟動(dòng)/釋放比控制輸入 (AR)。
對(duì)于 AR 引腳,不連接意味著我們使用默認(rèn)的攻擊/釋放比率 1:4,000。將此引腳拉至 VDD 或 GND 允許我們將啟動(dòng)/釋放比率分別更改為 1:2,000 或 1:500。但是,因?yàn)槲覍?shí)際上不知道攻擊/釋放比率是什么或它的作用(我是一名數(shù)字硬件設(shè)計(jì)工程師),我認(rèn)為我們將其保留為默認(rèn)/未連接設(shè)置。
稍后我們將返回考慮 GAIN 輸入,但首先,我們需要考慮“房間里的大象”,即這個(gè) BOB 輸出 2-Vpp(即 2,000-mVpp)信號(hào)和 1.25 -VDC 偏置。這將完全淹沒(méi) MSGEQ7,因此我們需要以某種方式將此 2,000-mVpp 信號(hào)轉(zhuǎn)換為 MSGEQ7 所需的相應(yīng) 300-mVpp 信號(hào)。
再一次,我是一個(gè)數(shù)字人,這意味著模擬領(lǐng)域搖擺不定的方面往往會(huì)讓我頭疼,所以我打電話給 EEWeb 模擬專(zhuān)家Peter “Traneus Rex” Anderson尋求建議,他指導(dǎo)我如下.
Peter 首先指出,通常有無(wú)數(shù)種模擬方式可以做事,但最簡(jiǎn)單的一種是使用分壓器。
在這種情況下,我們純粹根據(jù)分壓器使用信號(hào)名稱(chēng) Vin 和 Vout。解決這個(gè)問(wèn)題的一種方法是用無(wú)單位的術(shù)語(yǔ)和/或比率來(lái)思考事物。我們知道,如果我們的 BOB 輸出其最大值 Vin = 2,000 mVpp,那么我們希望電容器看到的 Vout 信號(hào)(并通過(guò)電容器到 MSGEQ7)為 300 mVpp。即使是我糟糕的數(shù)學(xué)也告訴我 2,000/300 = 6.66。這意味著如果我們說(shuō) R2b = 1R(無(wú)論“R”是什么),那么我們知道 R2a 必須等于 6.66R - 1R = 5.66R。
另一種方法是注意我們的分壓器的等式是 Vout = Vin * (R2b / (R2a + R2b))。如果我們將 R2b = 1R 和 R2a = 5.66R 的值代入,我們得到 Vout = Vin * (1R / (5.66R + 1R)) = Vin * (1R / 6.66R) = Vin/6.66。當(dāng)然,如果 Vout = Vin/6.66,則 Vin/Vout = 6.66,這使我們回到了開(kāi)始的地方。
請(qǐng)注意,我們只是在考慮看待同一事物的不同方式,因?yàn)橛行┤税l(fā)現(xiàn)一種方式比另一種更有意義。
下一部分是有趣的地方,因?yàn)槲覀兿M娙萜鳌翱吹健?22 kΩ 的值。問(wèn)題在于——由于彼得討論它們時(shí)似乎有道理但我發(fā)現(xiàn)在這里難以表達(dá)的原因——電容器實(shí)際上“看到” R2a 和 R2b 是并聯(lián)的。反過(guò)來(lái),這意味著電容器看到的電阻將為 (R2a * R2b) / (R2a + R2b)。
Peter 還指出 (a) 兩個(gè)并聯(lián)電阻的總值低于每個(gè)單獨(dú)的電阻,并且 (b) R2a 的值明顯大于 R2b 的值?;诖?,他建議我們首先考慮如果我們首先將 R2b 的值設(shè)置為比我們正在尋找的 22-kΩ 值(例如 25kΩ)大一點(diǎn)會(huì)發(fā)生什么,然后從那里開(kāi)始。
使用標(biāo)準(zhǔn) 1% (E96) 電阻器作為基礎(chǔ),我最終使用各種電阻器值運(yùn)行計(jì)算。最終,我最終將 R2b 設(shè)置為 26.1 kΩ。反過(guò)來(lái),這意味著我們理想情況下希望 R2a 為 5.66 * 26.1 kΩ = 147.72 kΩ,但最接近此值的實(shí)際值為 147 kΩ。如果我們將這些值代入我們的“兩個(gè)并聯(lián)電阻”方程,那么電容器將看到 (26.1 * 147) / (26.1 + 147) = 22.16 kΩ 的電阻,這“對(duì)于政府工作來(lái)說(shuō)足夠接近”,因?yàn)樗鼈冋f(shuō)。
因此,假設(shè)我們使用 Arduino Uno 微控制器開(kāi)發(fā)板作為我們的主處理器。
現(xiàn)在,請(qǐng)記住 MAX9814 具有自動(dòng)增益控制 (AGC)。這是指閉環(huán)反饋系統(tǒng),其目的是在其輸出端保持合適的信號(hào)幅度,盡管輸入端的信號(hào)幅度發(fā)生變化。平均或峰值輸出信號(hào)電平用于動(dòng)態(tài)調(diào)整放大器的增益,從而使電路能夠在更大范圍的輸入信號(hào)電平下令人滿意地工作。
這意味著上述電路可以很好地完成我們的音頻反應(yīng)項(xiàng)目所需的一切(一旦我開(kāi)始嘗試它,我將在以后的專(zhuān)欄中報(bào)告)。然而,除了其內(nèi)部 AGC 功能外,BOB 還具有 GAIN 輸入。如果我們不連接此引腳,則默認(rèn)增益將為 60 dB (1,000);如果我們將此引腳連接到 GND (0 V),增益將為 50 dB (~316);如果我們使用 Arduino 將此引腳拉至 VDD (5 V),增益將為 40 dB (100)。
如果我們希望永久使用 50-dB 或 40-dB 設(shè)置,我們可以將 GAIN 輸入分別硬接線至 0 V 或 5 V?;蛘撸覀兛梢詫?GAIN 輸入連接到 Arduino 的數(shù)字輸入/輸出 (I/O) 引腳之一。在這種情況下,如果我們告訴 Arduino 將此引腳用作輸入,則 BOB 上的 GAIN 輸入將看到高阻抗 Z 狀態(tài),因此默認(rèn)為 60-dB 增益值?;蛘?,如果我們告訴 Arduino 將此引腳用作輸出,我們可以將其驅(qū)動(dòng)為低電平或高電平,以使 BOB 分別使用其 50-dB 或 40-dB 增益設(shè)置。
因此,除了 BOB 的內(nèi)部 AGC 之外,我們現(xiàn)在還能夠應(yīng)用更高級(jí)別的增益控制。我們可以從 50-dB 增益設(shè)置開(kāi)始,我們可以使用 Arduino 來(lái)監(jiān)控來(lái)自 BOB 的音頻信號(hào)。如果我們意識(shí)到這個(gè)信號(hào)在很長(zhǎng)一段時(shí)間內(nèi)一直處于全強(qiáng)度狀態(tài)(其中“持續(xù)”的含義尚未定義),那么我們可以將增益降低到 40 dB?;蛘撸绻覀円庾R(shí)到信號(hào)在一段時(shí)間內(nèi)一直很低(其中“真的”和“一些”的含義尚未定義),那么我們可以將增益提高到 60 dB。此外,我們可以根據(jù)需要繼續(xù)在 40 dB、50 dB 和 60 dB 之間切換主增益。
這里唯一棘手的是標(biāo)有“?電路?”的塊。請(qǐng)記住,BOB 的輸出可以是 0 mVpp 到 2,000 mVpp 之間的任何值,均以 1.25-VDC 偏壓為中心。我想我們可以將此信號(hào)直接輸入到 Arduino 的模擬輸入之一,并在 Arduino 內(nèi)部進(jìn)行所有處理,但我更喜歡讓我的生活保持簡(jiǎn)單。
什么是理想的?電路?取 BOB 的 0-mVpp 到 2,000-mVpp 信號(hào),進(jìn)行滾動(dòng)平均,輸出 0V 到 2V(或 0V 到 5V)之間的直流電壓來(lái)反映滾動(dòng)值。也許這就像緩沖音頻信號(hào)一樣簡(jiǎn)單(以免影響電路的其余部分),對(duì)其進(jìn)行整流,并將其饋入電阻電容電路以平滑所有內(nèi)容并生成平均值。
最后一個(gè)想法是,我已經(jīng)考慮用數(shù)字控制的等效電阻替換電阻 R2a 和 R2b,其值可以由 Arduino 通過(guò)其 I2C 總線設(shè)置,但也許我們應(yīng)該再討論一天。
同時(shí),當(dāng)談到“電路”時(shí),我擔(dān)心這就是搖擺不定的模擬考慮再次發(fā)揮作用的地方。我必須承認(rèn)我在這里有點(diǎn)超出我的深度,所以我將把它交給 EEWeb 專(zhuān)家和其他任何想插話的人。
審核編輯 黃昊宇
評(píng)論
查看更多