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


12

在过去的几天里,我已经问了几个与此项目有关的问题,但我似乎无法将所有内容放在一起。

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

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

  • LM386-我得到的反馈是,此芯片不适用于此目的,因为它没有运算放大器,并且无法按预期正常工作。
  • LM358-工程
  • UA741-比LM358更好地工作,放大

我完全按照该原理图进行操作(除了我为了获得良好的增益而弄乱了电阻值):R5使用50k欧姆,R2使用10欧姆。 在此处输入图片说明

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

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

同样重要的是,额外的信息:最终,我正在尝试制作类似这样的东西


您确定您已安装C2吗?C2之后的静音直流电压是多少?
Majenko

是的,我有C2。大约2伏特。我不知道这是否有意义:是否可能是在引脚2和6之间的环路,输出和反相输入中存在一些电流?
Shubham

C2与Arduino输入引脚断开连接后的静音直流电压如何?
Majenko

C2的存在意味着前置放大器的输出将在0V-而不是内部工作的2.5V左右摆动。
Majenko

另一件事-您可能想在前置放大器C2和Arduino输入之间插入一个小结点二极管-丢弃那些您实际上并不关心的负电压。我要做的另一件事是在模拟输入和地之间添加另一个电容器,以使信号平滑一点。使VU表的闪烁少一些。
Majenko

Answers:


17

摆脱输出电容器。该电路可能是为了产生一个大约为零的信号,因此该电容器可以阻止1/2 Vdd偏移。但是,微控制器希望看到以1/2 Vdd为中心的信号,因此只需去除电容器即可。

麦克风确实需要大量增益。驻极体可能很敏感,但您仍可能需要1000的电压增益。电路中的增益为R5与R2之比,但这仅在运算放大器能做的范围内起作用。

您上面提到的值将使您获得5000的收益。这比您应该从单个运算放大器阶段获得的收益要多得多。偏移电压不仅会乘以该增益,而且运算放大器将无法在整个频率范围内提供该电压。在1 MHz的增益带宽下,您只会在200 Hz以下获得该增益。在经过5000次放大后,即使是1 mV的输入失调也变成5V。

R2也是麦克风在输入电容器之后看到的阻抗。您需要使其比麦克风的阻抗稍大一些,该麦克风的上拉电阻和输入电容器的关注频率最低。10Ω太小了。10kΩ是一个更好的值。

尝试两个阶段,使初学者获得30倍左右的收益,看看能从何处获得收益。它可以在合理的频率下处理,并留有足够的净空,以使反馈正常工作,这是一项收益。您还需要将两级电容耦合,以使输入失调电压不会在所有级中累积。

编辑:添加电路

昨晚我在上面写答复时没有时间画电路。这是应该执行的电路:

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

拓扑与电路完全不同。需要注意的最重要的一件事是,它不会尝试在一个阶段中产生全部收益。每个级的增益约为31。在20 kHz的最大音频频率上,有足够的增益余量用于反馈,因此,由于MCP6022具有典型的增益带宽,因此增益可以很好地预测并且在整个音频频率范围内保持平坦10 MHz的乘积 限制因素很可能是麦克风。

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

每级1的DC增益是通过将反馈分压器路径电容耦合到地来实现的。电容器阻隔了直流电,因此每个级都只是直流的统一跟随器。与较低的分压电阻器(第一级中的R7)相比,电容器(第一级中的C3)的阻抗变小,从而实现了完整的交流增益。这开始发生在大约16 Hz。这种方法的一个缺点是稳定时间常数是C3乘以R7 + R5,而不仅仅是R7。接通电源后,此电路将花费几秒钟左右的时间来恢复稳定。


当我从输出中取出电容时,arduino会看到大约3伏的输入。抱歉,您能解释一下偏移电压的含义吗?要获得1000的增益(R2为10k欧姆),我需要10M欧姆作为R5吗?你确定吗?增益是R5和R2之比吗?
Shubham

@Shubham:您的电路试图将运算放大器的失调电压乘以5000,因此将输出固定到一个电源轨也就不足为奇了。没有运算放大器是完美的。输入失调电压是输出处于中间范围时两个输入之间的电压。理论上,这两个输入将相等。输入失调电压规格会告诉您距理想电压有多远。
奥林·拉斯洛普

@Shubham:如果试图让一级产生所有增益,则反馈电阻需要10 MOhm。如我所说,这是一个坏主意。
奥林·拉斯洛普

感谢您提供的所有帮助,在这里可以学到很多。那么,如果有两个阶段,每个阶段都有30个增益,那么我的总增益为900,对吧?我将使用LM358进行尝试(这就是我周围的情况),并向我报告
-Shubham

终于成功了!谢谢您给我那个示意图!但是我只能得到大约200的ADC范围。无声ADC值将略高于中点(512),但无论我在麦克风中发出多少噪声,ADC值都不会超过200以上。沉默的价值。可能是我的电容和电阻设置限制了这一点。
Shubham

5

如您所说,数字值将在0到1023之间。此范围的中间值不是0,而是512(对应于大约2.5的电压)。为了保持沉默,您应该在范围的中间看到这样的内容。不必完全是512,但是应该接近。这称为“ DC偏移”。信号向上移动并以2.5 V为中心。

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

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

而且,由于ADC的本底噪声,它总是会稍微波动。(无论您有多安静,房间中总会有一些音频噪音。)


我一直在其他答案中看到的解释“直流偏移”的信息。有没有一种方法可以消除直流偏移,但要在某个地方盖上盖子?
Shubham

@Shubham:您想要一个直流偏移。没有一个,ADC流程将无法正常工作。盖子C2可以确保您拥有一个。但是,在这种情况下,可能没有太大差异,因为U1的输出已经偏移。您可以测量C2两端的DC值吗?
endlith 2011年

@Shubham:如果您想让数字测量值以0而不是512为中心,则可以简单地减去软件中的偏移量,或者更好地在软件中实现数字高通滤波器。
endlith 2011年

3

您可以在该麦克风上张贴规格表吗?除非您有一个没有内部FET的裸机,否则没有理由需要驻极体麦克风的增益为5000。如果是这种情况,前置放大器的外观就应该大不相同。

此外,您所使用的电路不利于用作驻极体麦克风的前置放大器。

我建议:

在此处输入图片说明

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

同样重要的是电源要充分去耦,因为任何噪声都会进入麦克风。

正如其他答案所述,当您读取ADC时,您的“零”点约为512,无论您做什么都将有所波动。

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

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

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

记住要对原始信号进行离散采样,只是因为您将全范围的正弦波馈入ADC并不意味着您不会从ADC获得读数为0,而是会在波形的各个点获得采样。有了真实的音乐,结果信号将变得非常复杂,并且您到处都会有样本。

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

这将使您的音频信号变成代表其峰值电平的电压。当您使用ADC测量该电压时,您将获得一个立即值,代表读取读数时信号的电平。由于声音是一个复杂且总是变化的波形,因此您仍然会有些摇摆,但这在软件中应该很容易处理。

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

在此处输入图片说明

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

OP1用作(几乎)理想的二极管,可消除整流时二极管两端压降的常见问题。几乎所有小信号二极管都可用于D1,正向压降较低的二极管会提高精度,但我怀疑这对您的使用是否重要。

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

您可能可以使用与前置放大器相同的运算放大器型号,但是轨到轨和高压摆率是该电路的理想选择。如果存在稳定性问题,请将R1,R2和R3增大到100k欧姆。


麦克风是标准的驻极体电容麦克风。我将R3设为10K,我的Vcc为5.9V,所以如果R1和R2也为10K也可以吗?您会推荐什么运算放大器:LM358或741?有没有办法将“零”点降低到0或接近0?“取而代之的是在模拟域中进行峰值或平均电平检测,并将平均周期按比例设置为任意采样率。” -您能给我更多细节吗?听起来很有趣,我真的很想研究它。抱歉,我有很多问题……我是一个还在读大学的EE学生。
Shubham

我尝试了您推荐的电路(它比我使用的电路干净得多,输出的随机性更低)。我对R5使用1M欧姆,对R4使用1k欧姆,放大倍数为1000。当我用DMM进行一些测量时,运算放大器给出的无声输出约为3伏,而C3则将其降低至约1.5伏。另外,当我删除R5时,它对输出没有任何影响...您确定增益为R4 / R5吗?
Shubham

1
R3设置麦克风内部FET的偏置点,(R1 || R2)|| R3设置麦克风看到的交流输入阻抗。模拟域中的任何内容都无法解决将“零”点设置为0的问题,这是arduino中具有单个电源的ADC的功能。如果您不希望声音为零,您要做的就是从每个样本中减去〜512(确保使用带符号的数据类型,因为这意味着可能出现负值)
标记

R4 / R5是增益,但是在您测试的频率下,增益1000可能会超出运算放大器的限制。电路中的C2可以帮助减轻输出中的任何DC偏置反馈,并且不会影响增益。
标记

R1 // R2上的Mark C1具有1.3 kHz高通滤波器的滚降频率。这远高于语音频率的一部分,并且比“ HiFi”下限高出6个八度。如果他只想做一个声音触发,这可能很好,但是如果他想要普通的数字化声音,那就不好了。
奥林·拉斯洛普
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.