隨著我們對音頻無反應項目的日益復雜,我們可能決定用提供自動增益控制的麥克風代替簡單的MEMS麥克風加放大器。
這是我以前與MSGEQ7相關的文章的后續文章:“使用MSGEQ7頻譜分析儀的技巧和竅門”和“使用MSGEQ7音頻頻譜分析儀時的噪聲處理”。
您可能還記得,MSGEQ7是一款便宜的八針設備,可以接收音頻信號并將其分成與以63 Hz,160 Hz,400 Hz,1,000 Hz,2,500 Hz為中心的七個頻段相關的振幅,6,250 Hz和16,000 Hz。然后,我們可以使用此頻率信息來執行諸如控制閃光燈的操作。
實際上,我最近的Awesome Audio-Reactive Artifact項目具有一個Arduino微控制器,一個MSGEQ7和一個MEMs麥克風以及放大器分接板(BOB)。
我現在正在努力解決的問題是確定最佳的麥克風BOB,以用于將來的任何音頻響應項目。
悲傷,就涉及的MSGEQ7數據表是不是很有益,因為人們可能希望,但它意味著該裝置預計有0.3-VPP(即300 mV峰峰值)擺動的音頻輸入。這意味著您必須相應地選擇麥克風。
INMP401 MEMS麥克風BOB
在我的Awesome Audio-Reactive Artifact案例中,我目前正在使用基于ADMP401的INMP401 MEMS麥克風BOB,其價格為10.95美元,來自SparkFun的人員。當麥克風保持手臂伸直并以正常的對話音量通話時,此BOB被描述為具有約200 mV的峰峰值輸出。在播放響亮的音樂時,我實際上并沒有測量輸出(我確實需要在有空余時間時執行此操作),但是一切似乎都可以很好地播放。
INMP401 MEMS麥克風BOB:麥克風是右側圖像中的小黑點。(來源:SparkFun)
該BOB的主要優勢之一是底部端口輸入。這意味著麥克風的微小的1毫米直徑輸入可以與項目外殼齊平安裝。BOB的輸出具有VCC / 2的DC偏置,這意味著當沒有聲音拾取時,信號將以2.5 V的電壓浮動。
MSGEQ7數據手冊建議使用由22kΩ電阻和0.1μF電容器與音頻輸入串聯形成的濾波器。已選擇這些值以通過音頻信號,同時消除直流偏置。
MSGEQ7的標準輸入(來源:Max Maxfield)
請注意,使用R2和C2注釋(與R1和C1相反)的原因是使此原理圖與我之前的專欄中的電路相匹配。將此麥克風BOB與MSGEQ7一起使用非常容易。您要做的就是連接電源(VCC)和接地(GND)線(在我的情況下為5 V和0 V),并將音頻(AUD)輸出連接到22kΩ電阻器(示例Arduino代碼在我的電腦中提供)。上述文章)。
我必須說,我對INMP401 MEMS麥克風BOB感到非常滿意,我會推薦給任何人。就我的超凡音頻響應作品而言,當音樂以合理的音量播放時,此BOB確實能很好地工作,但是-理想情況下,如果可以推的話,可以選擇-我希望動態范圍更大一點。
假設我坐在一個非常安靜的房間中,離該工件有一段距離。如果我發出低級的聲音(例如,單擊手指或說“你好”),我會希望該工件能夠以明亮的顯示效果閃耀到生活中,但是我很幸運地看到的不僅僅是閃爍。我想我可以通過在某種程度上保持安靜的情況下,通過執行某種滾動平均值并增強任何低電平信號的方式來糾正此問題,但是我現在有點懶。
另外,假設音樂真的很響。在這種情況下,我當前的系統趨于飽和,導致所有LED長時間處于完全點亮狀態。我仍然可以聽到音樂中潛在的節奏以及頻譜各個部分的活動,因此我希望我的音頻反應性項目能夠以某種方式調整其靈敏度以反映當前的音頻音量。
駐極體麥克風放大器—具有自動增益控制功能的MAX9814
因此,我們來到了基于Maxim基于MAX9814的具有自動增益控制BOB的駐極體麥克風放大器,Adafruit的價格僅為7.95美元。
基于MAX9814的帶AGC的駐極體麥克風BOB:在右上方的圖像中看到了直徑為1厘米的麥克風。(來源:Adafruit)
根據其數據表,這種小巧的外觀可以在2.7 V至5.5 V的電源電壓下工作。除了電源(VDD)和接地(GND)端子(在我的情況下為5 V和0 V)之外,我們還有一個音頻輸出(OUT),增益控制輸入(GAIN)和起音/釋放比率控制輸入(AR)。
對于AR引腳,保持未連接狀態意味著我們使用默認的起音/釋放比率1:4,000。將該引腳拉至VDD或GND可使我們將起跳/釋放比分別更改為1:2,000或1:500。但是,由于我實際上不知道攻擊/釋放比率是什么或它的作用(我是行業的數字硬件設計工程師),所以我認為我們將其保留為默認/未連接設置。
我們將很快再考慮GAIN輸入,但是首先,我們需要考慮“房間里的大象”,這就是這個BOB發出2Vpp(即2,000mVpp)信號與1.25信號的事實。 -VDC偏置。這將完全淹沒MSGEQ7,因此我們需要以某種方式將此2,000 mVpp信號轉換為MSGEQ7所需的相應300 mVpp信號。
再次,我是一名數字專家,這意味著模擬領域的動搖不定會使我頭痛,所以我打電話給EEWeb模擬專家Peter“ Traneus Rex” Anderson尋求建議,他為我提供了以下指導。
Peter首先指出,通常有很多模擬方法,但是最簡單的方法之一就是使用分壓器,如下所示:
修改MSGEQ7的輸入(來源:Max Maxfield)
在這種情況下,我們僅根據分壓器使用信號名稱Vin和Vout。解決這個問題的一種方法是用無單位的術語和/或比率來思考事物。我們知道,如果我們的BOB輸出的最大值Vin = 2,000 mVpp,那么我們希望電容器(并通過電容器到達MSGEQ7)看到的Vout信號為300 mVpp。甚至我的數學差也告訴我2,000 / 300 = 6.66。這意味著如果我們說R2b = 1R(無論“ 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。而且,當然,如果Vout = Vin / 6.66,則Vin / Vout = 6.66,這使我們回到了起點。
請注意,我們只是考慮以不同的方式看待同一件事,因為有些人發現一種方式比另一種方式更有意義。
下一部分是使事情變得有趣的地方,因為我們希望電容器“看到” 22kΩ的值。問題是,由于彼得在討論它們時似乎很合理,但我在這里很難說清楚這一原因,電容器實際上“認為” R2a和R2b是并聯的。反過來,這意味著電容器所見的電阻將為(R2a * R2b)/(R2a + R2b)。
彼得還指出,(a)并聯的兩個電阻的總值低于每個單獨的電阻,并且(b)R2a的值明顯大于R2b的值。基于此,他建議我們首先考慮如果將R2b的值設置為比我們要尋找的22kΩ的值(例如25kΩ)大一點,然后從那里開始,會發生什么情況。
我使用標準的1%(E96)電阻作為基礎,最后使用各種電阻值運行了計算。最終,我最終將R2b設置為26.1kΩ。反過來,這意味著我們理想情況下希望R2a為5.66 * 26.1kΩ= 147.72kΩ,但是最接近該值的實際值是147kΩ。如果將這些值插入“兩個并聯電阻”方程式,則電容器的電阻將為(26.1 * 147)/(26.1 + 147)= 22.16kΩ,這“足夠接近政府工作”,因為它們說。
因此,假設我們使用Arduino Uno微控制器開發板作為主要處理器,那么我們的首過實施可能類似于以下內容:
MAX9814 BOB和MSGEQ7的首過實施(資料來源:Max Maxfield)
現在,請記住MAX9814具有自動增益控制(AGC)。這是指一種閉環反饋系統,其目的是盡管輸入端信號幅度發生變化,但仍要在其輸出端保持合適的信號幅度。平均或峰值輸出信號電平用于動態調節放大器的增益,從而使電路能夠在更大范圍的輸入信號電平下令人滿意地工作。
這意味著上面的電路可以很好地完成我們的音頻響應項目所需的一切(一旦我嘗試了一下,我將在以后的專欄中進行報告)。但是,除了具有內部AGC功能外,BOB還具有GAIN輸入。如果我們不連接此引腳,則默認增益為60 dB(1,000);否則,默認增益為60 dB(1,000)。如果我們將此引腳連接到GND(0 V),則增益將為50 dB(?316);如果我們使用Arduino將此引腳拉至VDD(5 V),則增益將為40 dB(100)。
如果我們希望永久使用50 dB或40 dB設置,則可以將GAIN輸入分別硬接線至0 V或5V。或者,我們可以將GAIN輸入連接到Arduino的數字輸入/輸出(I / O)引腳之一。在這種情況下,如果我們告訴Arduino使該引腳像輸入一樣工作,則BOB上的GAIN輸入將看到高阻抗Z狀態,因此將默認為其60 dB增益值。另外,如果我們告訴Arduino使該引腳充當輸出,則可以將其驅動為LOW或HIGH,以使BOB分別使用其50 dB或40 dB增益設置。
因此,除了BOB的內部AGC外,我們現在還可以應用更高級別的增益控制。我們可以從50 dB的增益設置開始,然后可以使用Arduino監視從BOB發出的音頻信號。如果我們意識到該信號在一段較長的時間里一直處于全強度狀態(尚未定義“持續”的含義),那么我們可以將增益降低到40 dB。或者,如果我們意識到信號在一定時間內確實很低(尚未定義“真正”和“某些”的含義),則可以將增益提高到60 dB。此外,我們可以根據需要繼續在40 dB,50 dB和60 dB之間切換主增益。這意味著我們的第二遍實現可能類似于以下內容:
MAX9814 BOB和MSGEQ7的第二遍實現(資料來源:Max Maxfield)
唯一棘手的是標記為“?Circuit?”的塊。請記住,BOB的輸出范圍可以是0 mVpp至2,000 mVpp,都以1.25-VDC偏置為中心。我想我們可以將該信號直接輸入到Arduino的一個模擬輸入中,并在Arduino內部進行所有處理,但是我希望保持生活簡單。
什么是“電路”的理想選擇?從BOB取0-mVpp至2,000-mVpp信號,執行滾動平均值,并輸出0 V至2 V(或0 V至5 V)之間的DC電壓以反映滾動值。也許這很簡單,例如緩沖音頻信號(以免影響電路的其余部分),對其進行整流并將其饋入電阻電容電路以平滑所有信號并產生平均值。
最后一個想法是,我想到了用數字控制等效物替換電阻器R2a和R2b的想法,這些等效值可以由Arduino通過其I2C總線設置,但是也許我們應該再討論一天。
編輯:hfy
-
微控制器
+關注
關注
48文章
7596瀏覽量
151743 -
放大器
+關注
關注
143文章
13619瀏覽量
213851 -
mems
+關注
關注
129文章
3950瀏覽量
190857 -
麥克風
+關注
關注
15文章
644瀏覽量
54877 -
音頻信號
+關注
關注
9文章
263瀏覽量
33535
發布評論請先 登錄
相關推薦
評論