与 MSGEQ7 配合使用的音频包络生成电路

出处:维库电子市场网 发布于:2023-12-19 17:14:54 | 273 次阅读

  带有自动增益控制的 MAX9814  我们最终选择的麦克风是基于 Maxim MAX9814 的驻极体麦克风放大器,带有自动增益控制(AGC) 分线板 (BOB),Adafruit 的售价仅为 7.95 美元。该 BOB 的一个小问题是,它输出具有 1.25-VDC 偏置的 2 伏峰峰值 (Vpp) 信号,如下图所示。

  与 MSGEQ7 配合使用的音频包络生成电路
  典型的 MAX9814 输出(Max Maxfield,波形来自 pixabay.com)
  之所以出现这个问题,是因为我们使用的 MSGEQ7 音频频谱分析仪芯片更喜欢 300 mVpp 信号。我们解决这个问题的方法是向 MSGEQ7 的输入添加一个分压器。  我们接下来要考虑的是,除了MAX9814的AGC功能外,MAX9814 BOB还具有主GAIN输入。使用此输入,我们的 Arduino(或您选择的微控制器)可以指示 BOB 将其主增益设置为 60 dB (1,000)、50 dB (~316) 或 40 dB (100)。为了知道如何以及何时执行此操作,Arduino 必须了解正在发生的情况。因此,除了将 MAX9814 BOB 的输出馈送到分压器的输入之外,我们还建议通过一个未定义的“黑匣子”(我们称之为“电路”)馈送它。正在前往 Arduino 的模拟输入之一(下图中的输入 A2)。

  与 MSGEQ7 配合使用的音频包络生成电路
  提议的 MAX9814 BOB 和 MSGEQ7 实现(Max Maxfield)
  这里的想法是,我们需要某种方式让 Arduino 计算出来自麦克风 BOB 的信号有多大。如果 BOB 设置为 40 dB,并且其输出在一段时间内处于较低水平(实际持续时间待确定),则 Arduino 可以决定将增益提高到 50 dB 或 60 dB。相比之下,如果 BOB 设置为 60 dB 并且其输出在一段时间内全开,则 Arduino 可以决定将增益降至 50 dB 或 40 dB。
  那么Arduino是如何判断发生了什么事情的呢?好吧,我们可以替换我们的“?电路?” 用一根简单的电线进行阻挡,并在软件中完成所有这些。如果我们假设在代码中将模拟引脚 A2 称为“PinMicBob”,那么我们可以执行以下操作:
  aSig = analogRead(PinMicBob);
  aSig = abs(aSig - DC_OFFSET);  在这种情况下,DC_OFFSET 先前被定义为 256,相当于 Arduino 模拟输入上的 1.25 V,其中 0V 到 5V 模拟值映射到 0 到 1023 的数字等效值。取决于读取的时间执行后,这将导致 Arduino 从下面所示的波形中的某个位置“看到”样本:

  与 MSGEQ7 配合使用的音频包络生成电路
  处理后的 MAX9814 输出(Max Maxfield,波形来自 pixabay.com)
  这里的问题是单个样本是不够的。Arduino 可以随机地击中响亮序列中间的狭窄下沉,或者可以击中安静音乐片段中出现的狭窄尖峰中间的高值。
  这里的一个解决方案是在一段时间内采集一系列样本。根据我们想要做什么(即我们试图产生什么效果),我们可以寻找样本期间出现的最小值和最大值,或者我们可以计算平均值,或者......有很多事情我们可以在这里做。
  一方面,我确实喜欢在软件中执行操作的想法,因为它消除了对额外组件的需求,并且使事情可以在您进行过程中轻松更改。另一方面,我喜欢使用 Arduino Nano、Uno 和 Mega 板,但它们的 8 位处理器仅以 16 MHz 运行,如果我们给它们加载太多任务,它们很快就会失去动力。因此,另一种基于硬件的解决方案是取代我们的“?电路?” 具有“包络”生成电路的块,如下所述。
  包络生成电路  在物理学和工程学中,振荡信号的“包络”是一条描绘其极值的平滑曲线。因此,包络概括了恒定幅度的概念。因此,我们想要做的是创建一个电路,接受来自麦克风 BOB 的音频信号作为输入,然后输出与上包络相对应的电压,如下图所示:

  与 MSGEQ7 配合使用的音频包络生成电路
  带有上下包络的原始波形(上)和仅上包络(下)(Max Maxfield,波形来自 pixabay.com)
  请记住,上面的插图只是我在 Visio 中拼凑而成的内容 - 现实世界的版本可能看起来略有不同。我们想要的是选择用于创建电路的元件值,使其响应足够慢,以平滑任何狭窄的正向或负向尖峰,同时仍然设法足够快地响应,为我们提供如下的“感觉”:发生的事情。
  我以前说过,现在我再说一遍:我是一名数字硬件设计工程师,因此不稳定的模拟信号和电路往往会让我感到混乱。因为我不喜欢混乱(我不像以前那么年轻了),所以我打电话给我的EEWeb 专家好友Peter “Traneus Rex”Anderson来帮助讨论一些想法。  彼得开始胡言乱语地尝试“使用电容器和两个二极管的半波倍频器”,但我开始感到头晕,所以我们决定最简单的选择是使用单个二极管作为半波整流器,然后RC 滤波器,如下图所示(已选择组件标识符 R3a、R3b、R3c 和 C3 的名称,以便它们不会与我们之前的任何电路发生冲突):



  与 MSGEQ7 配合使用的音频包络生成电路
  音频包络生成器的拟议实现(Max Maxfield)
  现在,请记住,MAX9814 BOB输出上的直流偏置为1.25 V。1N4001二极管上的压降为1.1 V,因此即使没有音频信号,二极管的输出也将为1.25 V ? 1.1 V = 0.15 V,因此,这是电容器充电的基值。
  任何高于直流偏置的音频信号都会通过电阻器 R3a 和电容器 C3 形成的 RC 滤波器对电容器充电。同时,电阻器R3c用于在音频信号强度下降时对电容器进行放电。最后但并非最不重要的一点是,我们添加了电阻器 R3b 来保护 Arduino 的输入。  将 MAX9814 BOB 与包络生成电路结合使用,我们期望看到的 Arduino 模拟输入信号应如下所示:

  与 MSGEQ7 配合使用的音频包络生成电路
  包络发生器的输出,以 MAX9814 BOB 作为信号源(Max Maxfield)
  当然,如果我们愿意,我们可以在软件中消除残留的 0.15-VDC 偏置。另外,如果我们愿意的话,我们可以在软件中重新调整信号的大小(尽管这样做确实没有任何意义)。
  当然,我们仍然会在信封中看到“峰”和“谷”,因此我们可能希望通过每毫秒左右采样来保持“滚动平均值”,但至少所有“尖峰东西”都有已被删除。
  所以我打赌您想问我们如何得出包络生成器中显示的组件值。事实上,这出奇地简单,而且一点也不让我感到疲倦。我对彼得说,“我们应该使用什么组件值?” 他回答说:“让我们从 R3a 和 R3b 为 1 kΩ、R3C 为 100 kΩ、C3 为 0.47 μF 开始,看看我们如何从那里开始 - 我们可以随时调整它们。” 我不了解你的情况,但我发现很难反驳这样一个合理的论点。
  那么接下来会发生什么呢?
  显而易见的下一步是实际将这个电路组合在一起 - 完整的 enchilada,包括分压器和包络发生器 - 看看会发生什么(不要忘记 MSGEQ7 需要更多的电阻器和电容器,正如我的“ MSGEQ7 提示和技巧》专栏):  与 MSGEQ7 配合使用的音频包络生成电路


  与以往一样,问题是我的时间非常紧迫。令人高兴的是,来自孟加拉国达卡的EEWeb 社区成员Nazmul Hasan也在玩这类事情(我们不断地通过电子邮件交换想法和建议)。
0次

版权与免责声明

凡本网注明“出处:维库电子市场网”的所有作品,版权均属于维库电子市场网,转载请必须注明维库电子市场网,https://www.dzsc.com,违反者本网将追究相关法律责任。

本网转载并注明自其它出处的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品出处,并自负版权等法律责任。

如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。

上传BOM文件: BOM文件
*公司名:
*联系人:
*手机号码:
QQ:
应用领域:

有效期:
OEM清单文件: OEM清单文件
*公司名:
*联系人:
*手机号码:
QQ:
有效期:

扫码下载APP,
一键连接广大的电子世界。

在线人工客服

买家服务:
卖家服务:

0571-85317607

客服在线时间周一至周五
9:00-17:30

关注官方微信号,
第一时间获取资讯。

建议反馈

联系人:

联系方式:

按住滑块,拖拽到最右边
>>
感谢您向阿库提出的宝贵意见,您的参与是维库提升服务的动力!意见一经采纳,将有感恩红包奉上哦!