带有自动增益控制的 MAX9814

出处:维库电子市场网时间:2023-08-08
    INMP401 MEMS 麦克风 BOB    就我的 Awesome Audio-Reactive Artifact 而言,我目前使用的是基于 ADMP401 的INMP401 MEMS 麦克风 BOB,它在 SparkFun 上售价 10.95 美元。据描述,当麦克风保持在一臂远的距离并以正常的对话音量水平进行通话时,该 BOB 的峰峰值输出约为 200 mV。我实际上并没有测量大声播放音乐时的输出(当我有空闲时间时我确实需要这样做),但一切似乎都配合得相当好。

    与 MSGEQ7 配合使用的 MEMS 麦克风
    INMP401 MEMS 麦克风 BOB:麦克风是右图中的小黑点。(SparkFun)
    该 BOB 的主要优点之一是底部端口输入。这意味着麦克风的微小 1 毫米直径输入可以与您的项目外壳齐平。BOB 的输出具有 VCC/2 的直流偏置,这意味着当没有拾取声音时,信号将浮动在 2.5 V。    MSGEQ7 数据表建议使用由 22kΩ 电阻器和 0.1μF 电容器与音频输入串联形成的滤波器。选择这些值是为了传递音频信号,同时消除直流偏置。

    与 MSGEQ7 配合使用的 MEMS 麦克风
    MSGEQ7 的标准输入(Max Maxfield)
    请注意,R2 和 C2 注释(而不是 R1 和 C1)的原因是为了使该原理图与我之前专栏中的电路相匹配。使用这款麦克风 BOB 与 MSGEQ7 非常简单。您所要做的就是连接电源 (VCC) 和接地 (GND) 线(在我的例子中为 5 V 和 0 V),并将音频 (AUD) 输出连接到 22 kΩ 电阻(示例 Arduino 代码在我的示例中提供)。上述文章)。
    我不得不说,我对 INMP401 MEMS 麦克风 BOB 非常满意,我会向任何人推荐它。就我的 Awesome Audio-Reactive Artifact 而言,当音乐以合理的音量播放时,这个 BOB 的效果非常好,但是——理想情况下,如果有选择,如果迫不得已的话——我想要更大的动态范围。
    假设我坐在一个非常安静的房间里,距离文物有一段距离。如果我发出轻柔的声音,比如敲击手指或说“你好”,我希望这件文物能以明亮的显示屏焕发活力,但我很幸运看到的不仅仅是闪烁。我想如果事情已经安静了一段时间,我可以通过执行某种滚动平均值并增强任何低电平信号来在软件中纠正这个问题,但我现在感觉有点懒。
    或者,假设音乐变得非常响亮。在这种情况下,我当前的系统趋于饱和,导致所有 LED 长时间完全亮起。我仍然可以听到音乐中的潜在节奏以及频谱各个部分的活动,因此我希望我的音频反应工件能够以某种方式调整其灵敏度以反映当前的音频音量。
    驻极体麦克风放大器 — 具有自动增益控制功能的 MAX9814    因此,我们推出了基于 Maxim MAX9814且具有自动增益控制 BOB 的驻极体麦克风放大器,Adafruit 的售价仅为 7.95 美元。

    基于 MAX9814 的驻极体麦克风 BOB,带 AGC:直径为 1 cm 的麦克风如右上图所示。(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 输出 2-Vpp(即 2,000-mVpp)信号,其增益为 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,那么我们希望电容器看到的 Vout 信号(并通过电容器传递到 MSGEQ7)为 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,这让我们回到了开始的地方。
    请注意,我们只是考虑看待同一事物的不同方式,因为有些人发现一种方式比另一种方式更有意义。
    下一部分是事情变得有趣的地方,因为我们希望电容器“看到”22 kΩ 的值。问题是,电容器实际上“认为”R2a 和 R2b 是并联的,原因在 Peter 讨论它们时似乎有意义,但我发现在这里很难阐明。反过来,这意味着电容器的电阻将为 (R2a * R2b) / (R2a + R2b)。
    Peter 还指出,(a) 两个并联电阻器的总阻值低于每个单独电阻器的阻值,(b) R2a 的值明显大于 R2b 的值。基于此,他建议我们首先考虑如果我们首先将 R2b 的值设置为比我们正在寻找的 22kΩ 值(例如 25kΩ)稍大一点,然后从那里开始,会发生什么。
    使用标准 1% (E96) 电阻器作为基础,我终使用各种电阻器值进行了计算。终,我将 R2b 设置为 26.1 kΩ。反过来,这意味着我们理想情况下希望 R2a 为 5.66 * 26.1 kΩ = 147.72 kΩ,但接近的实际值是 147 kΩ。如果我们将这些值代入“两个并联电阻”方程,那么电容器的电阻将为 (26.1 * 147) / (26.1 + 147) = 22.16 kΩ,这“对于政府工作来说足够接近”,因为它们说。
    因此,假设我们使用 Arduino Uno 微控制器开发板作为主处理器,我们的次实现可能如下所示:
    与 MSGEQ7 配合使用的 MEMS 麦克风
    首次通过 MAX9814 BOB 和 MSGEQ7 实现(Max Maxfield)
    现在,请记住 MAX9814 具有自动增益控制 (AGC)。这是指闭环反馈系统,其目的是在其输出端保持合适的信号幅度,尽管输入端的信号幅度发生变化。平均或峰值输出信号电平用于动态调整放大器的增益,从而使电路能够在更大范围的输入信号电平下令人满意地工作。
    这意味着上述电路很可能满足我们音频反应项目所需的一切(一旦我开始尝试它,我将在以后的专栏中进行)。然而,除了其内部 AGC 功能外,BOB 还具有 GAIN 输入。如果我们将此引脚悬空,则默认增益将为 60 dB (1,000);如果我们将此引脚连接到 GND (0 V),增益将为 50 dB (~316);如果我们使用 Arduino 将此引脚拉至 VDD (5 V),则增益将为 40 dB (100)。
    如果我们希望使用 50 dB 或 40 dB 设置,我们可以将 GAIN 输入分别硬连线至 0 V 或 5 V。或者,我们可以将 GAIN 输入连接到 Arduino 的数字输入/输出 (I/O) 引脚之一。在这种情况下,如果我们告诉 Arduino 使该引脚充当输入,则 BOB 上的 GAIN 输入将处于高阻抗 Z 状态,因此将默认为其 60 dB 增益值。或者,如果我们告诉 Arduino 使该引脚充当输出,我们可以将其驱动为低电平或高电平,以使 BOB 分别使用其 50 dB 或 40 dB 增益设置。
    因此,除了 BOB 的内部 AGC 之外,我们现在还能够应用更别的增益控制。我们可以从 50 dB 增益设置开始,然后使用 Arduino 来监控来自 BOB 的音频信号。如果我们意识到该信号在很长一段时间内一直保持全强度(“延长”的含义尚未定义),那么我们可以将增益降低至 40 dB。或者,如果我们意识到信号在一段时间内确实很低(其中“真正”和“某些”的含义尚未定义),那么我们可以将增益提高到 60 dB。此外,我们还可以根据需要继续在40 dB、50 dB和60 dB之间切换主增益。
    这里棘手的是标记为“?电路?”的块。请记住,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)之间的直流电压以反映滚动值。也许这就像缓冲音频信号(以免影响电路的其余部分)、对其进行整流并将其馈入电阻电容电路以平滑所有内容并生成平均值一样简单。
    作为一个想法,我曾考虑过用数字控制的等效电阻替换电阻器 R2a 和 R2b,其值可以由 Arduino 通过其 I2C 总线来设置,但也许我们应该把这个讨论留到另一天再讨论。
    与此同时,当谈到“电路”时,我担心这就是摇摆不定的模拟考虑因素再次发挥作用的地方。我必须承认,我的知识有点超出了我的能力范围,所以我将把它交给 EEWeb 和任何其他想要插话的人。

上一篇:可调模拟正弦波/方波振荡器
下一篇:MSGEQ7 电路图和分线板

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关电路图