如何使干净的放大麦克风模数转换?

电器工程 Arduino 运算放大器 ADC 麦克风
2022-01-20 09:43:05

在过去的几天里,我问了几个与这个项目有关的问题,但我似乎无法把它们放在一起。

我将驻极体麦克风连接到运算放大器,然后将输出提供给我的 arduino 微控制器。微控制器上的 ADC 将 0 到 5 vV 的范围转换为 10 位数(0 到 1023)。

我尝试了 3 种不同的放大器芯片:

  • LM386 - 我得到反馈,这个芯片不适合这个目的,因为它不是运算放大器,它没有按预期正常工作。
  • LM358 - 工作
  • UA741 - 工作,比 LM358 放大更多

我完全按照这个原理图(除了我弄乱了电阻值以获得良好的增益):我为 R5 使用了 50k 欧姆,为 R2 使用了 10 欧姆。 在此处输入图像描述

问题是后两个芯片的输出不是“干净”的。即使我在麦克风中没有发出噪音,Arduino 上的模拟读取()总是读取非零值。当我发出噪音时,读数反应正常,但“零”值非零。有时,“零”值甚至会一直闪烁,从而使读数消失。希望这是有道理的。

你能帮我解决这个问题吗?

就像不重要的额外信息一样:我最终正在尝试制作这样的东西

3个回答

去掉输出电容。该电路可能是为了产生零附近的信号,因此电容器在那里阻止 1/2 Vdd 偏移。然而,微控制器希望看到以 1/2 Vdd 为中心的信号,所以只需去掉电容器。

麦克风确实需要很多增益。驻极体可能很敏感,但您仍可能需要 1000 的电压增益。电路中的增益是 R5 与 R2 的比值,但这仅在运算放大器的功能范围内有效。

您上面提到的值会给您带来 5000 的增益。这比您应该尝试从单个运算放大器级获得的收益要多得多。失调电压不仅会乘以该增益,而且运算放大器也无法在整个频率范围内提供该增益。在 1 MHz 增益带宽下,您只能获得略低于 200 Hz 的增益。即使是 1 mV 的输入失调,在放大 5000 倍后也会变成 5 V。

R2 也是麦克风在输入电容之后看到的阻抗。你需要它比麦克风的阻抗稍大一些,它的上拉电阻和输入电容在感兴趣的最低频率。10 Ω 太小了。10 kΩ 将是一个更好的值。

对于初学者,尝试两个增益为 30 左右的阶段,然后看看你会得到什么。这是一个增益,它可以在合理的频率上处理,并留有足够的余量让反馈起作用。您还需要对两个阶段进行电容耦合,以使输入失调电压不会在所有阶段中累积。

编辑:添加电路

昨晚写上面回复的时候没来得及画电路。这是一个应该这样做的电路:

这具有大约 1000 的电压增益,对于一个合理的驻极体麦克风来说应该足够了。我可能有点过分,但很容易添加一些衰减。

拓扑与您的电路完全不同。需要注意的最重要的一点是它不会尝试在一个阶段产生全部增益。每个阶段的增益约为 31。这为反馈在 20 kHz 的最大音频频率下留下了充足的增益余量,因此增益将可以很好地预测并且在整个音频频率范围内都是平坦的,因为 MCP6022 具有典型的增益带宽10 MHz 的产品。限制因素很可能是麦克风。

与我之前所说的不同,这两个阶段不需要电容耦合以防止偏移电压与增益一起累积。那是因为在这个电路中,每一级的直流增益只有1,所以最终的失调只有运算放大器失调的两倍。这些运算放大器只有 500 µV 偏移,因此由于运算放大器的原因,最终偏移仅为 1 mV。由于 R3 和 R4 的不匹配,还会有更多。无论如何,输出 DC 将足够接近电源的 1/2,不会以有意义的方式进入 A/D 范围。

每级 1 的直流增益是通过将反馈分压器路径电容耦合到地来实现的。电容器阻止直流,因此每个阶段只是直流的一个单位跟随器。与较低的分压电阻器(第一级中的 R7)相比,电容器(第一级中的 C3)阻抗变小,从而实现全交流增益。这开始发生在大约 16 赫兹。这种方法的一个缺点是稳定时间常数是 C3 乘以 R7+R5,而不仅仅是 R7。该电路在打开后需要几秒钟左右才能稳定下来。

如您所说,数字值将从0到1023。该范围的中间不是0,而是512(对应于2.5左右的电压)。对于静音,您应该在范围的中间看到类似这样的东西。不一定是 512,但应该很接近。这称为“直流偏移”。信号向上移动并以 2.5 V 为中心。

如果您测量 2 V 并看到 400 左右的 ADC 值,那么它基本上可以正常工作。

声波从负压变为正压。如果中心点为 0,信号只能在 0 到 1023 之间测量,那么负压值(-1023)将被切断。

此外,由于 ADC 的本底噪声,它总是会略有波动。(不管你有多安静,房间里总会有一些音频噪音。)

你能把规格表贴在那个麦克风上吗?没有理由你需要使用驻极体麦克风获得 5000 的增益,除非你有一个没有内部 FET 的裸机。如果是这种情况,前置放大器需要看起来大不相同。

此外,您使用的电路不太适合用作驻极体麦克风的前置放大器。

我建议:

在此处输入图像描述

R5/R4 设置增益并且可以在不拧紧电路输入阻抗的情况下进行调整。R3 可以从 2k -> 10k ish。10k 往往会改善失真性能,如果将其调整得太低,则应重新考虑 R1 和 R2 的值以固定输入阻抗。

电源充分去耦也非常重要,因为任何噪音都会进入麦克风。

正如其他答案提到的那样,当您读取 ADC 时,您的“零”点将是 ~512,并且无论您做什么都会有一点波动。

如果您的目标是闪烁灯光以响应级别,那么无论如何您都不应该使用 arduino 进行瞬时读数,因为我怀疑您是否能够足够快地采样以使其响应良好。而是在模拟域中进行峰值或平均电平检测,并根据您的采样率按比例设置平均周期。

编辑:有关使用峰值检测器执行此操作的更多信息

您在这里遇到的问题是 arduino 的采样率相对有限,我认为您的最大值约为 10khz,这意味着您最多只能解析 5khz 的音频信号。也就是说,除了运行 ADC 之外,arduino 几乎没有做任何事情,如果你需要做任何实际工作(并且你做一些工作来获得电平),那么采样率会更低。

请记住,您对原始信号进行离散采样,仅仅因为您将全范围正弦波馈入 ADC 并不意味着您不会从 ADC 获得读数为 0,您将在波形的各个点获得样本. 对于真实的音乐,产生的信号将非常复杂,并且您将在所有地方都有样本。

现在,如果您要测量的只是输入信号的电平,而不关心实际获得信号的数字表示,那么您可以在这个前置放大器之后使用一个简单的峰值检测器来做到这一点。

这是做什么的,它将您的音频信号转换为代表其峰值电平的电压。当您使用 ADC 测量此电压时,您将获得一个立即值,该值表示读取读数时的信号电平。由于声音是一个复杂的、总是变化的波形,你仍然会有一点摇晃,但这应该很容易在软件中处理。

没有保持的峰值检测器实际上只是一个在输出端带有滤波器的整流器。在这种情况下,我们需要处理低电平信号并保持准确性,因此我们需要做的比一般整流器电路要做的多一点。这一系列电路被称为“精密整流器”。

在此处输入图像描述

有大约十亿种不同的方法可以做到这一点,但我会选择这个电路,它似乎在使用单电源时效果最好。这将在已经讨论过的前置放大器电路之后进行,并且输入可以是交流耦合或不耦合,尽管它由单电源运行,只要您不超过可用峰值,它实际上可以在负输入电压下正常工作 -来自运算放大器的峰值电压。

OP1 充当(几乎)理想的二极管,它解决了整流时二极管两端电压降的常见问题。几乎任何小信号二极管都适用于 D1,具有较低正向电压降的东西会提高精度,但我怀疑它对您的使用是否重要。

C1 和 R4 充当低通滤波器以平滑输出,您可以使用它们的值来匹配性能与您尝试执行的操作(以及您的采样率)。

您可能可以使用与前置放大器中使用的相同的运算放大器模型,但轨到轨和高转换速率是该电路的理想选择。如果您有稳定性问题,请将 R1、R2 和 R3 增加到 100k 欧姆。