随着我们对音频无反应项目的日益复杂,我们可能决定用提供自动增益控制的麦克风代替简单的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
全部0条评论
快来发表一下你的评论吧 !