直接来自数据表:这真的是一个合理的滤波器电路吗?

电器工程 运算放大器 声音的 ADC 模拟 解码器
2022-01-04 15:51:56

Cirrus Logic CS42426-CQZ是我想在自定义 USB 声卡中使用的音频编解码器。您可以从那里下载数据表。

在第 61 页,数据表为每个 A/D 和 D/A 通道推荐了一个电路,但我看不出这种复杂性的目的。当然,它们正在差分和单端之间进行转换,但也有更简单的方法可以做到这一点。

我将他们的原理图复制到了一些开源仿真软件(http://qucs.sourceforge.net/)中,但频率响应甚至与所述目的不符。但至少听得见的反应有点平淡:

ADC In:( 在 好吧,他们依赖 ADC 本身的 CMRR 作为抗混叠滤波器的一部分。不喜欢这个想法。)

DAC输出: 出去

我认为他们实际上是认真地在实际应用中使用这些电路,但似乎有些不对劲。就像我说的,声音响应相当平坦,所以如果没有手机或其他 RF 可能听起来还不错,但我认为我可以使用 OpAmps 101 的旧经典做得更好。你们同意吗?

真的有充分的理由让音频 ADC 从 20kHz 的标称增益上升到 300kHz 的峰值吗?还是让 DAC 从 20Hz 到 0.5Hz 左右做同样的事情?


为了完整起见,这里是模拟文件。将它们复制到纯文本文件中,如果您的系统需要,将扩展名更改为 .sch,然后在 Qucs 中打开它们:

ADC 输入:

<Qucs Schematic 0.0.18>
<Properties>
  <View=785,329,2079,1333,0.883466,0,0>
  <Grid=10,10,1>
  <DataSet=DiffAmpIn.dat>
  <DataDisplay=DiffAmpIn.dpl>
  <OpenDisplay=1>
  <Script=DiffAmpIn.m>
  <RunScript=0>
  <showFrame=0>
  <FrameText0=Title>
  <FrameText1=Drawn By:>
  <FrameText2=Date:>
  <FrameText3=Revision:>
</Properties>
<Symbol>
</Symbol>
<Components>
  <GND * 1 1120 480 0 0 0 0>
  <VProbe In 1 1110 460 28 -31 0 0>
  <GND * 1 940 640 0 0 0 0>
  <C C4 5 1010 520 -26 17 0 0 "100 uF" 1 "" 0 "neutral" 0>
  <GND * 1 1080 640 0 0 0 0>
  <R R18 5 1080 590 16 -10 0 3 "10 kOhm" 1 "26.85" 0 "0.0" 0 "0.0" 0 "26.85" 0 "US" 0>
  <.DC DC1 5 930 700 0 41 0 0 "26.85" 0 "0.001" 0 "1 pA" 0 "1 uV" 0 "no" 0 "150" 0 "no" 0 "none" 0 "CroutLU" 0>
  <C C6 5 1230 420 -26 17 0 0 "470 pF" 1 "" 0 "neutral" 0>
  <R R23 5 1310 380 -9 10 0 2 "634 Ohm" 1 "26.85" 0 "0.0" 0 "0.0" 0 "26.85" 0 "US" 0>
  <R R22 5 1350 500 -9 10 0 2 "91 Ohm" 1 "26.85" 0 "0.0" 0 "0.0" 0 "26.85" 0 "US" 0>
  <OpAmp OP3 5 1230 500 -26 -42 1 0 "1e6" 0 "15 V" 0>
  <R R27 5 1300 570 16 -10 0 3 "634 Ohm" 1 "26.85" 0 "0.0" 0 "0.0" 0 "26.85" 0 "US" 0>
  <C C8 5 1600 610 17 -26 0 1 "2700 pF" 1 "" 0 "neutral" 0>
  <Vac V1 5 940 590 18 -26 0 1 "1 V" 1 "1 kHz" 1 "0" 0 "0" 0>
  <C C7 5 1390 660 -26 17 0 0 "470 pF" 1 "" 0 "neutral" 0>
  <R R24 5 1470 620 -9 10 0 2 "634 Ohm" 1 "26.85" 0 "0.0" 0 "0.0" 0 "26.85" 0 "US" 0>
  <R R25 5 1510 740 -9 10 0 2 "91 Ohm" 1 "26.85" 0 "0.0" 0 "0.0" 0 "26.85" 0 "US" 0>
  <OpAmp OP4 5 1390 740 -26 -42 1 0 "1e6" 0 "15 V" 0>
  <GND * 1 1260 780 0 0 0 0>
  <R R26 5 1310 760 -9 10 0 2 "332 Ohm" 1 "26.85" 0 "0.0" 0 "0.0" 0 "26.85" 0 "US" 0>
  <.AC AC1 5 930 750 0 41 0 0 "log" 1 "0.1 Hz" 1 "100 MHz" 1 "901" 1 "no" 0>
  <VProbe Diff 1 1820 610 -16 28 0 3>
  <GND * 1 1760 740 0 0 0 0>
  <VProbe Neg 1 1750 720 28 -31 0 0>
  <GND * 1 1760 500 0 0 0 0>
  <VProbe Pos 1 1750 480 28 -31 0 0>
</Components>
<Wires>
  <1080 480 1100 480 "" 0 0 0 "">
  <1080 480 1080 520 "" 0 0 0 "">
  <1040 520 1080 520 "" 0 0 0 "">
  <940 520 980 520 "" 0 0 0 "">
  <940 520 940 560 "" 0 0 0 "">
  <940 620 940 640 "" 0 0 0 "">
  <1080 620 1080 640 "" 0 0 0 "">
  <1080 520 1080 560 "" 0 0 0 "">
  <1080 520 1200 520 "" 0 0 0 "">
  <1300 420 1300 500 "" 0 0 0 "">
  <1260 420 1300 420 "" 0 0 0 "">
  <1180 420 1200 420 "" 0 0 0 "">
  <1300 500 1320 500 "" 0 0 0 "">
  <1380 500 1400 500 "" 0 0 0 "">
  <1180 380 1180 420 "" 0 0 0 "">
  <1180 380 1280 380 "" 0 0 0 "">
  <1400 380 1400 500 "" 0 0 0 "">
  <1340 380 1400 380 "" 0 0 0 "">
  <1270 500 1300 500 "" 0 0 0 "">
  <1180 420 1180 480 "" 0 0 0 "">
  <1180 480 1200 480 "" 0 0 0 "">
  <1300 500 1300 540 "" 0 0 0 "">
  <1400 500 1600 500 "" 0 0 0 "">
  <1600 500 1600 580 "" 0 0 0 "">
  <1600 640 1600 740 "" 0 0 0 "">
  <1300 600 1300 720 "" 0 0 0 "">
  <1460 660 1460 740 "" 0 0 0 "">
  <1420 660 1460 660 "" 0 0 0 "">
  <1340 660 1360 660 "" 0 0 0 "">
  <1460 740 1480 740 "" 0 0 0 "">
  <1340 620 1340 660 "" 0 0 0 "">
  <1340 620 1440 620 "" 0 0 0 "">
  <1500 620 1560 620 "" 0 0 0 "">
  <1540 740 1560 740 "" 0 0 0 "">
  <1560 740 1600 740 "" 0 0 0 "">
  <1560 620 1560 740 "" 0 0 0 "">
  <1430 740 1460 740 "" 0 0 0 "">
  <1340 660 1340 720 "" 0 0 0 "">
  <1340 720 1360 720 "" 0 0 0 "">
  <1260 760 1260 780 "" 0 0 0 "">
  <1260 760 1280 760 "" 0 0 0 "">
  <1340 760 1360 760 "" 0 0 0 "">
  <1300 720 1340 720 "" 0 0 0 "">
  <1600 740 1710 740 "" 0 0 0 "">
  <1710 740 1740 740 "" 0 0 0 "">
  <1710 620 1710 740 "" 0 0 0 "">
  <1710 620 1800 620 "" 0 0 0 "">
  <1600 500 1710 500 "" 0 0 0 "">
  <1710 500 1740 500 "" 0 0 0 "">
  <1710 500 1710 600 "" 0 0 0 "">
  <1710 600 1800 600 "" 0 0 0 "">
</Wires>
<Diagrams>
  <Rect 880 1239 498 359 3 #c0c0c0 1 10 1 0.1 1 1e+08 1 -0.540919 1 6 1 -1 0.5 1 315 0 225 "" "" "">
    <"In.v" #0000ff 0 3 0 0 0>
    <"Diff.v" #ff0000 0 3 0 0 0>
  </Rect>
  <Rect 1480 1239 498 359 3 #c0c0c0 1 10 1 0.1 1 1e+08 1 -1 0.5 1 1 -0.100118 1 4.34333 315 0 225 "" "" "">
    <"Pos.v" #0000ff 0 3 0 0 0>
    <"Neg.v" #ff0000 0 3 0 0 0>
  </Rect>
</Diagrams>
<Paintings>
</Paintings>

DAC输出:

<Qucs Schematic 0.0.18>
<Properties>
  <View=-56,169,1878,1394,0.909091,0,88>
  <Grid=10,10,1>
  <DataSet=DiffAmpOut.dat>
  <DataDisplay=DiffAmpOut.dpl>
  <OpenDisplay=1>
  <Script=DiffAmpOut.m>
  <RunScript=0>
  <showFrame=0>
  <FrameText0=Title>
  <FrameText1=Drawn By:>
  <FrameText2=Date:>
  <FrameText3=Revision:>
</Properties>
<Symbol>
</Symbol>
<Components>
  <GND * 1 40 660 0 0 0 0>
  <IProbe Neg 1 370 500 -26 16 0 0>
  <IProbe Pos 1 370 620 -26 16 0 0>
  <R R16 5 250 620 -9 10 0 2 "0 Ohm" 1 "26.85" 0 "0.0" 0 "0.0" 0 "26.85" 0 "US" 0>
  <R R17 5 250 500 -9 10 0 2 "0 Ohm" 1 "26.85" 0 "0.0" 0 "0.0" 0 "26.85" 0 "US" 0>
  <GND * 1 460 560 0 0 0 0>
  <R R19 5 550 680 -9 10 0 2 "1.65 kOhm" 1 "26.85" 0 "0.0" 0 "0.0" 0 "26.85" 0 "US" 0>
  <C C2 5 550 620 -26 17 0 0 "5800 pF" 1 "" 0 "neutral" 0>
  <R R21 5 730 680 -9 10 0 2 "1.87 kOhm" 1 "26.85" 0 "0.0" 0 "0.0" 0 "26.85" 0 "US" 0>
  <R R23 5 730 620 -9 10 0 2 "887 Ohm" 1 "26.85" 0 "0.0" 0 "0.0" 0 "26.85" 0 "US" 0>
  <R R18 5 550 440 -9 10 0 2 "5.49 kOhm" 1 "26.85" 0 "0.0" 0 "0.0" 0 "26.85" 0 "US" 0>
  <C C1 5 550 500 -26 17 0 0 "1800 pF" 1 "" 0 "neutral" 0>
  <R R20 5 730 440 -9 10 0 2 "6.19 kOhm" 1 "26.85" 0 "0.0" 0 "0.0" 0 "26.85" 0 "US" 0>
  <R R22 5 730 500 -9 10 0 2 "2.94 kOhm" 1 "26.85" 0 "0.0" 0 "0.0" 0 "26.85" 0 "US" 0>
  <C C5 5 890 680 -26 17 0 0 "22 uF" 1 "" 0 "neutral" 0>
  <OpAmp OP1 5 870 560 -26 -42 1 0 "1e6" 0 "15 V" 0>
  <C C3 5 890 620 -26 17 0 0 "1200 pF" 1 "" 0 "neutral" 0>
  <C C4 5 890 500 -26 17 0 0 "390 pF" 1 "" 0 "neutral" 0>
  <GND * 1 960 700 0 0 0 0>
  <GND * 1 1320 560 0 0 0 0>
  <VProbe Out 1 1310 540 28 -31 0 0>
  <C C6 5 1090 560 -26 17 0 0 "22 uF" 1 "" 0 "neutral" 0>
  <R R24 5 1170 560 -9 10 0 2 "1 kOhm" 1 "26.85" 0 "0.0" 0 "0.0" 0 "26.85" 0 "US" 0>
  <R R25 5 1260 630 19 -8 0 3 "47.5 kOhm" 1 "26.85" 0 "0.0" 0 "0.0" 0 "26.85" 0 "US" 0>
  <GND * 1 1260 680 0 0 0 0>
  <GND * 1 1040 520 0 0 0 0>
  <VProbe Amp 1 1030 500 28 -31 0 0>
  <.DC DC1 5 30 730 0 39 0 0 "26.85" 0 "0.001" 0 "1 pA" 0 "1 uV" 0 "no" 0 "150" 0 "no" 0 "none" 0 "CroutLU" 0>
  <.AC AC1 5 30 780 0 39 0 0 "log" 1 "0.1 Hz" 1 "10 MHz" 1 "801" 1 "no" 0>
  <Vac V1 5 40 610 18 -26 0 1 "0 V" 1 "1 kHz" 1 "0" 0 "0" 0>
  <Vac V3 5 190 620 -26 18 0 0 "1 V" 1 "1 kHz" 1 "0" 0 "0" 0>
  <Vac V2 5 190 500 -26 -50 0 2 "1 V" 1 "1 kHz" 1 "0" 0 "0" 0>
</Components>
<Wires>
  <280 620 340 620 "" 0 0 0 "">
  <40 640 40 660 "" 0 0 0 "">
  <40 560 40 580 "" 0 0 0 "">
  <40 560 140 560 "" 0 0 0 "">
  <140 500 160 500 "" 0 0 0 "">
  <140 620 160 620 "" 0 0 0 "">
  <140 500 140 560 "" 0 0 0 "">
  <140 560 140 620 "" 0 0 0 "">
  <280 500 340 500 "" 0 0 0 "">
  <400 500 420 500 "" 0 0 0 "">
  <400 620 420 620 "" 0 0 0 "">
  <420 440 420 500 "" 0 0 0 "">
  <420 440 520 440 "" 0 0 0 "">
  <420 620 420 680 "" 0 0 0 "">
  <420 680 520 680 "" 0 0 0 "">
  <460 560 500 560 "" 0 0 0 "">
  <500 560 500 620 "" 0 0 0 "">
  <500 620 520 620 "" 0 0 0 "">
  <580 620 660 620 "" 0 0 0 "">
  <580 680 660 680 "" 0 0 0 "">
  <660 680 700 680 "" 0 0 0 "">
  <660 620 660 680 "" 0 0 0 "">
  <660 620 700 620 "" 0 0 0 "">
  <500 500 500 560 "" 0 0 0 "">
  <500 500 520 500 "" 0 0 0 "">
  <580 500 660 500 "" 0 0 0 "">
  <580 440 660 440 "" 0 0 0 "">
  <660 440 700 440 "" 0 0 0 "">
  <660 440 660 500 "" 0 0 0 "">
  <660 500 700 500 "" 0 0 0 "">
  <760 680 860 680 "" 0 0 0 "">
  <920 680 960 680 "" 0 0 0 "">
  <760 440 960 440 "" 0 0 0 "">
  <760 500 840 500 "" 0 0 0 "">
  <760 620 840 620 "" 0 0 0 "">
  <840 580 840 620 "" 0 0 0 "">
  <840 500 840 540 "" 0 0 0 "">
  <840 620 860 620 "" 0 0 0 "">
  <840 500 860 500 "" 0 0 0 "">
  <910 560 960 560 "" 0 0 0 "">
  <960 500 960 560 "" 0 0 0 "">
  <920 500 960 500 "" 0 0 0 "">
  <960 440 960 500 "" 0 0 0 "">
  <920 620 960 620 "" 0 0 0 "">
  <960 620 960 680 "" 0 0 0 "">
  <960 680 960 700 "" 0 0 0 "">
  <1120 560 1140 560 "" 0 0 0 "">
  <1200 560 1260 560 "" 0 0 0 "">
  <1260 560 1300 560 "" 0 0 0 "">
  <1260 560 1260 600 "" 0 0 0 "">
  <1260 660 1260 680 "" 0 0 0 "">
  <1000 520 1020 520 "" 0 0 0 "">
  <960 560 1000 560 "" 0 0 0 "">
  <1000 560 1060 560 "" 0 0 0 "">
  <1000 520 1000 560 "" 0 0 0 "">
</Wires>
<Diagrams>
  <Rect 300 1119 498 359 3 #c0c0c0 1 10 1 0.1 1 3e+06 1 -0.422698 1 4.66459 1 -1 0.5 1 315 0 225 "" "" "">
    <"Pos.i" #0000ff 0 3 0 0 0>
    <"Neg.i" #ff0000 0 3 0 0 0>
  </Rect>
  <Rect 880 1119 498 359 3 #c0c0c0 1 10 1 0.1 1 3e+06 1 -0.00012118 0.0002 0.00133304 1 -1 0.5 1 315 0 225 "" "" "">
    <"Amp.v" #0000ff 0 3 0 0 0>
    <"Out.v" #ff0000 0 3 0 0 0>
  </Rect>
</Diagrams>
<Paintings>
</Paintings>
2个回答

我喜欢这个问题。这是一个很好的例子,说明数据表原理图非常适合展示概念,但不能按原样使用。

查看滤波器的描述,主要概念似乎是:音频通带中的平坦响应、ADC 输入的低源阻抗、以 2.7V 的 VQ 为中心的操作以及 20dB 的衰减足以抗混叠.

2700pF 电容意味着 ADC 是开关电容输入,没有任何缓冲器。在 6MHz 时,滤波器输出阻抗约为 10 欧姆。虽然使用有损积分器之类的东西很容易获得衰减并以 VQ 为中心,但输出阻抗会更高。

放大器布置(有时称为“环路负载补偿”)是为了应对运算放大器上的容性负载。像这样的补偿具有可调节的 Q,因此向滚降的过渡可以比简单的 RC 更清晰。通常需要进行一些调整才能获得所需的平坦度。在这种情况下,虽然看起来原理图中存在错误,导致零件值出现峰值。

这是带有参考指示符的示意图:

在此处输入图像描述

你可以看到我认为原理图出错的地方,R4的连接。但是,在讨论之前,让我们先来看看电路应该如何工作。

在容性负载下,运算放大器会失去相位裕度。一个好的运算放大器通常具有大约 60 度的相位裕度。但即使是 100pF 的负载也会导致相位裕度下降到 40 或 45 度,从而导致峰值响应。添加 R2、C2 和 R3 允许放大器保持负载的相位裕度。C2 回滚带宽,增加相位裕度。通过添加 C4,R3 有助于最大限度地减少相位裕度损失。R2 提供低频反馈以纠正由 R3 引起的任何通带误差。

可以通过调整 C2 的值来调整电路响应。增大 C2 会降低滤波器的 Q。在低频时,R2 的环路占主导地位,但在 C2 阻抗低于 R2+R3 的较高频率下,C2 环路占主导地位。然后 R3 上的压降未被补偿,信号被 R3 C4 衰减,最终放大器滚降。

只考虑具有理想放大器的同相部分。传递函数,忽略 C1 R1 的零将是:

\$\frac{\text{Vo}}{\text{Vin}}\$ = \$\frac{\text{C2} s (\text{R2}+\text{R3})+1}{\ text{C2} \text{C4} \text{R2} \text{R3} s^2+s (\text{C2} \text{R2}+\text{C2} \text{R3})+1} \$

分母看起来很像包含 Q 和 \$\omega _o\$ 的经典二次形式,所以推导出它们。

Q = \$\frac{\text{R2} \text{R3} \sqrt{\text{C4} \left(\frac{1}{\text{R2}}+\frac{1}{\text{ R3}}\right)}}{\sqrt{\text{C2}} (\text{R2}+\text{R3})^{3/2}}\$

\$\omega _o\$ = \$\frac{\sqrt{\frac{1}{\text{R2}}+\frac{1}{\text{R3}}}}{\sqrt{\text{ C2} \text{C4} (\text{R2}+\text{R3})}}\$

由于使用理想放大器使事情变得易于管理,因此当 C2 变为零时,Q 趋于无穷大。这不会是一个问题,因为我们只关心低于放大器带宽的频率。对于真正的放大器,Q 会随着放大器增益而下降。插入 R2、R3 和 C4 的值,我们可以将 Q 绘制为​​ C2 的函数。

在此处输入图像描述

Q 随着 C2 值的增加而减小。如果放大器太尖,只需增加 C2 即可使响应变平。

现在,查看曲线,看起来 470pF 的 C2 的 Q 值约为 0.8。那将是相当平淡的回应。发生了什么?

在数据表中,原理图显示 R4 连接到 U1 输出。这有两件坏事。首先,在费力补偿 R3 和 R6 的低频效应之后,将 R4 连接到 U1 输出会增加 R3 的回落。如果您查看滤波器的输出阻抗,您会发现这是真的。其次,它会导致在 C2 和 C3 为 470pF 时出现峰值(Q 的峰值在 300pF 左右,多于或少于 Q 的降低)。如果 R4 连接到具有 R2 R3 和 C4 的节点,Q 将按预期运行。此外,滤波器输出阻抗将通过音频通带保持非常低,直到滚降,然后跟随 C4 阻抗。

Cirrus 实际上有一个描述电路意图的应用说明: http ://www.cirrus.com/en/pubs/appNote/an241-1.pdf

从该文档中的描述来看,您认为峰不应该存在是对的。

一般来说,模型可能在两个地方出错:

  1. 没有对 ADC 输入和 DAC 输出特性进行建模。电路可能需要特定的源/负载。

  2. 使用的运算放大器模型可能不足以用于该电路。我发现一些超过 1 MHz 的电路需要比典型通用模型提供的更高的增益带宽积。该 ADC 的评估板文档显示他们使用该电路和 2068 运算放大器,该运算放大器具有 27 MHz 增益-BW 乘积。

编辑:在深入研究之后,他们的评估板上使用了这部分的确切值。所以我的建议是首先使用他们正在使用的相同部件 2068 对其进行建模。这应该有望显示正确的操作。

EDIT2:我通过 QUCS 运行 ADC 电路,但他们没有适合真正运算放大器的香料模型。凌力尔特的 LT spice 是一款非常出色的免费 spice 模拟器。正如预期的那样,通过那里运行电路会产生很好的平坦响应。(如果您在新选项卡中打开此图片,它会爆炸,因此您可以查看详细信息)。

ADC电路交流扫描结果