前阵子处理一路 1kHz 以内的信号采集,前端噪声大得离谱。我第一个想到的不是换更高规格的 ADC,而是先用运放搭一个二阶 Butterworth 低通滤波器,把带外干扰压下去。这个项目从理论计算、CircuitJS 仿真验证,到 PCB 布局、实测调试完整走了一遍,踩了几个不算深但很典型的坑。这篇文章就把“运放 + Butterworth + PCB 设计”这条链路从头捋到尾,适合正在做信号调理、音频前端或者仪器仪表的工程师参考。
1. 为什么是“二阶”又为什么是“Butterworth”:选型逻辑先想清楚
1.1 滤波器响应的“数学性格”:最大平坦与可预测的过冲
先别急着拿公式算电阻电容,选型这一步如果错了,后面全白搭。Butterworth 滤波器最核心的特点是通带内最大平坦,没有纹波,代价是过渡带衰减速度不算最快。它的二阶传递函数可以写成标准形式:
[ H(s)=\frac{\omega_0^2}{s^2+\frac{\omega_0}{Q}s+\omega_0^2} ]
对于 Butterworth 响应,品质因数 (Q) 固定等于 (1/\sqrt{2}\approx0.707)。这个值决定了什么?它决定了系统在截止频率附近的“性格”:没有增益峰,阶跃响应有一点过冲但不大,相位响应也比较平滑。Q 大于 0.707,你就开始能看到频响凸起;Q 越大,过冲越严重,接近振荡;Q 小于 0.707,响应则偏向过阻尼,截止区变得更钝。
放在实际项目里,这个特性的意义是:信号在通带内的增益一致性非常好,不会因为滤波器本身引入幅度失真。这在做传感器信号调理、音频电子分频、ADC 前端抗混叠时都特别重要。你输入一个 800Hz 的正弦波,截止频率设计在 1kHz,那么 800Hz 处几乎不掉点;如果换用切比雪夫,可能就要忍受通带内的规律性起伏。
1.2 和切比雪夫、贝塞尔比,Butterworth 处在什么位置
很多初学运放电路的朋友会问:既然切比雪夫衰减更快,为什么不直接用?我用一个简单的对照表来说明:
| 响应类型 | 通带纹波 | 过渡带衰减 | 相位线性度 | 阶跃响应过冲 | 典型用途 |
|---|---|---|---|---|---|
| Butterworth | 无 | 中等 | 中等 | 约 4.3% | 通用信号调理、抗混叠 |
| Chebyshev | 有 | 更陡 | 较差 | 较大 | 窄带信号、高衰减需求 |
| Bessel | 无 | 较缓 | 极好 | 很小 | 脉冲信号、时域保真 |
我的经验是:如果是处理正弦波、噪声抑制、传感器输出,Butterworth 是“最不容易出错”的选择。它不会给你惊喜,也不会给你惊吓。如果后期发现过渡带衰减不够,直接级联一个一模一样的二阶节,变成四阶 Butterworth,就能从 40dB/dec 提升到 80dB/dec,远比一开始就选切比雪夫来得可控。
1.3 二阶“够用”的判断标准
二阶低通滤波器的滚降速度是 40dB/dec,也就是频率每升高 10 倍,衰减增加 40dB。如果你的干扰噪声主要集中在信号带宽的 3 到 5 倍位置,二阶已经能把它们压掉 20 到 28dB;如果干扰源是几百 kHz 的开关管振荡,二阶能直接削弱 60dB 以上。
所以“二阶够不够”这个问题,本质上取决于干扰频率离你的截止频率有多远。我个人的经验是:只要带外噪声不是紧挨着截止频率出现,二阶永远是最先考虑的方案。它元件少、失调路径短、调试成本低。升到四阶意味着多一组运放、多一组电阻电容,也意味着 PCB 上的敏感节点翻倍,噪声引入点更多。
2. 运放选型不是拍脑袋:GBW、压摆率、噪声三个关键指标
2.1 GBW 决定“运放跟不跟得上滤波器”
运放经典电路里都有一个理想化假设:开环增益无穷大,带宽无穷大。但实际运放受限于增益带宽积(GBW),随着频率升高,开环增益按 20dB/dec 滚降。反映到滤波器电路上就是:在截止频率附近,如果运放可用的环路增益不够,滤波器实际 Q 值会被抬高,幅频特性出现凸起,甚至变成振荡器。
这里给一个非常实用的工程经验:Sallen-Key 拓扑中运放的 GBW 至少要有截止频率的 50 到 100 倍。比如你的 Butterworth 低通截止频率设计在 10kHz,那运放 GBW 至少需要 1MHz,最好 10MHz 以上。要是一开始就想着“反正截止频率很低,随便用一个 LM358 就行”,那大概率会看到频响曲线在 8kHz 附近抬起来一个诡异的峰。
以 NE5532 为例,它的典型 GBW 在 10MHz 左右,做 20kHz 以内的音频低通非常宽裕。如果做 100kHz 以上的滤波器,就要考虑 OPA2134、OPA2277 这类更高带宽的运放。4558 的 GBW 大概 5.5MHz 到 8MHz,做 50kHz 以内也能接受,但必须留足余量。
2.2 压摆率不是低频电路就可以忽略
很多朋友设计低频滤波器时完全不看压摆率(SR),觉得信号频率低就没事。但压摆率约束的是输出信号跟随输入信号变化的最大速率,它同时取决于幅度和频率。
压摆率的最低要求可以这样估算:
[ SR_{required} = 2\pi \times f_{signal} \times V_{peak} ]
举个例子,你过滤器后面要输出 5V 峰值的 20kHz 正弦波,那么需要的最小压摆率大约是:
[ 2\pi \times 20k \times 5 = 6.28 \times 10^5 ,\text{V/s} = 0.63 ,\text{V/}\mu\text{s} ]
NE5532 的典型压摆率是 9V/μs,余量很足。但如果你用的是某些低功耗运放,压摆率只有 0.2V/μs,那在高幅值高频信号下就会看到波形变成三角波,失真非常明显。做滤波器设计时,我习惯把信号最高频率按截止频率的 2 到 3 倍来估算,留出足够的压摆率余量。
2.3 噪声和失调电压:直流耦合路径的隐形敌人
滤波器本身只处理频率,但运放的电压噪声和失调电压会直接叠加在输出信号上。电阻热噪声也要算进去。一个 10kΩ 电阻在常温下就有约 12.7nV/√Hz 的热噪声密度,两个电阻就是 18nV/√Hz 左右。
对于二阶低通滤波器,有效噪声带宽约等于截止频率的 1.11 倍?准确来说是 (BW_{effective}=\frac{\pi}{2}f_0)。如果截止频率是 10kHz,那么等效噪声带宽大约是 15.7kHz。以 NE5532 约 5nV/√Hz 的电压噪声密度计算:
[ V_{noise} = 5 \times \sqrt{15700} \approx 5 \times 125 = 626 ,\text{nV RMS} ]
注意这是没算电阻噪声的理想值。如果信号本身只有几毫伏,那这个噪声水平还能接受;如果信号是微伏级传感器输出,就必须用更低噪声的运放,同时把电阻阻值降下来。高阻值电阻在这个电路里是噪声第一大来源,能不用 100kΩ 以上就不用,这是很多设计翻车的真正原因。
3. Sallen-Key 电路的手算全过程:从传递函数到具体元件值
3.1 拓扑对比:为什么优先选 Sallen-Key
二阶低通滤波器有几种常见运放实现方式,Sallen-Key 和多重反馈(MFB)是最经典的两种。Sallen-Key 的优势在于增益配置灵活、元件敏感性相对较低、输出同相,并且单位增益版本只需要一个运放接成缓冲器,适合做抗混叠和信号调理。
MFB 的优势是反相结构,在一些需要极性反转的场合有用,而且对运放带宽的要求在极高 Q 值时表现得更好。但 Butterworth 的 Q 只有 0.707,并不是一个苛刻的 Q 值,所以 Sallen-Key 完全够用。我后文都围绕 Sallen-Key 单位增益版本展开。
3.2 单位增益 Sallen-Key 的推导与核心结论
Sallen-Key 单位增益低通滤波器的结构是这样:
Vin --- R1 --- A --- R2 --- B --- (+) 运放 --- Vout | | +--- C1 --------+ | (反馈) | | | | C2 | | | GND |其中 R1、R2 串联分压,C1 从 A 点反馈到运放输出端,C2 从 B 点(运放同相输入端)对地。注意千万别把 C1 也接到地,那样就退化为二阶 RC 滤波,Q 永远达不到 0.707。
通过节点电流方程可以推导出传递函数:
[ H(s)=\frac{1}{1+s,C2,(R1+R2)+s^2,R1R2,C1C2} ]
对比标准二阶传递函数,可以解出:
[ \omega_0=\frac{1}{\sqrt{R1R2C1C2}} ]
[ Q=\frac{\sqrt{R1R2C1C2}}{C2(R1+R2)} ]
为了得到 Butterworth 响应,令 (Q=1/\sqrt{2})。然后令 R1=R2=R,可以推出:
[ Q = \frac{1}{2}\sqrt{\frac{C1}{C2}} ]
带入 (Q=0.707):
[ \sqrt{\frac{C1}{C2}} = \sqrt{2} \quad\Rightarrow\quad C1 = 2C2 ]
这就是 Sallen-Key 单位增益 Butterworth 最常用的设计口诀:等值电阻,C1 取 C2 的两倍。此时截止频率公式简化为:
[ f_0 = \frac{1}{2\pi R \sqrt{C1C2}} = \frac{1}{2\pi R \sqrt{2},C2} ]
3.3 设计一个 1kHz 截止频率的实例
假设我需要一个截止频率 (f_0=1\text{kHz}) 的二阶 Butterworth 低通,现在开始选元件。
第一步,选 C2。取值不能太小,否则电阻会很大,噪声上涨;也不能太大,否则电容体积大且高频特性变差。我习惯选 10nF 到 100nF 之间,这里用 C2=10nF(选 C0G 材质)。
第二步,算 C1。C1=2×10nF=20nF。为了凑容值,我直接用两个 10nF 并联,这样电容误差趋势一致,容值更准,实际高频特性也比单个 20nF 电容更可控。
第三步,算 R:
[ R = \frac{1}{2\pi \times 1000 \times \sqrt{2} \times 10\times 10^{-9}} = 11254\Omega ]
E96 电阻系列里有 11.3kΩ,很接近。代入后的实际截止频率:
[ f_0 = \frac{1}{2\pi \times 11.3k \times \sqrt{2} \times 10n} \approx 996\text{Hz} ]
偏差不到 0.5%,完全够用。如果你的系统对截止频率极其敏感,可以把 R 换成 11.25kΩ 或者用 11.5kΩ 并联大阻值电阻微调,但大多数场景没必要。
最终元件清单:
| 元件 | 取值 | 备注 |
|---|---|---|
| R1 | 11.3kΩ | E96 系列 1% 精度 |
| R2 | 11.3kΩ | 与 R1 同批次 |
| C1 | 20nF | 两个 10nF C0G 并联 |
| C2 | 10nF | C0G 材质 |
| 运放 | NE5532 | GBW 10MHz,SR 9V/μs |
3.4 元件容差:为什么电容材质比电阻精度更值得操心
很多人在这一步忽略了电容材质。X5R、X7R 这类高介电常数陶瓷电容有很强的直流偏压特性——在几伏直流偏置下,实际电容量可能掉到标称值的 50% 到 70%。如果一个滤波器设计工作在单电源下,电容两端本来就存在直流偏压,这会让截止频率数值和你算的差很多。
所以我坚持:滤波器里的 C1、C2 一定要用 C0G/NP0 材质,或者聚丙烯薄膜电容。C0G 的容值随温度和偏压变化都很小,虽然体积稍大,但对滤波器这种精度敏感的电路非常值得。电阻常用金属膜 1% 精度的 E96 系列就够了,想要更高一致性可以用 0.1% 精密电阻,但对多数应用没必要。
4. CircuitJS 仿真:验证理论设计,理解“理想运放”的边界
4.1 先用仿真器把理论快速验证一遍
在画 PCB 之前,我习惯先把电路丢进 CircuitJS 跑一遍。这个在线仿真器上手快,不需要安装,适合做单元电路验证。还是有朋友在菜单里找不到正确操作,这里说明一下:
- 第一步,从左侧元件库里拖出运放、电阻、电容和电源。
- 第二步,把电路按照上一节的拓扑搭好,给运放接上正负电源。我用 ±5V 电源来模拟常见模拟前端。
- 第三步,在输入端放一个交流信号源。CircuitJS 的“正弦波”源配合“频率响应”分析模式,可以直接看频响曲线。
4.2 CircuitJS 中“运放增益设置无穷大”到底怎么操作
很多朋友在网上搜“circuitjs 中运放增益如何设置无穷大”,其实在 CircuitJS 里没有真正的“无穷大”选项。这很合理,运算放大器模型内部必须有有限的开环增益才能收敛计算。默认运放增益一般已经设得比较高,但为了更接近理想运放,你可以:
- 双击运放元件,打开属性面板。
- 找到 “gain” 参数,把默认值改成 1e9 或更大。
- 把 “slew rate” 设为 0,表示不限制压摆率。
这样设置之后,运放行为已经非常接近教科书里的理想运放。你就能看到纯理论 Butterworth 响应:在 1kHz 处衰减 3dB,之后以 40dB/dec 下降。这个仿真结果能帮你验证手算的 R、C 值是否正确,也方便对比后面实际运放带来的偏差。
如果你故意把 gain 改成 100000 之类较小的值,会发现截止频率附近开始出现轻微隆起。这就是运放开环增益不足导致 Q 异常的最直观演示。仿真器做得好的地方就在这里:它把抽象概念变成了可视化现象。
4.3 频率响应读数技巧:别把 -3dB 点找错
用 CircuitJS 看幅频特性时,注意纵轴单位。默认可能显示的是线性幅度或者 dB,建议切到 dB 显示。找到从低频平直段下降 3dB 的那个点,看它是否在 1kHz 附近,同时看高频段斜率是否为约 -40dB/dec。
还有一个容易被忽略的检查项:相位。二阶 Butterworth 在截止频率处的相移应当是 -90 度。如果你的仿真里看到在 1kHz 附近的相位变化明显偏离这个值,大概率是 C1/C2 接错,或者是 R/C 值算错。我每次仿真都习惯同时看幅频和相频,能少走很多弯路。
仿真的局限也要心里有数:它不含 PCB 走线寄生电容,不含电源噪声,也不含运放实际输出阻抗和负载效应。所以仿真通过只代表“理论设计正确”,离“上板能工作”还有一段距离。
5. PCB 设计:在物理世界还原仿真结果
5.1 布局第一原则:让走线不成为隐藏的 RC
PCB 设计是很多滤波器项目“见真章”的地方。原理图再漂亮,布局一乱,高频噪声和寄生参数就会把 Butterworth 变成“不伦不类”。
首先是信号路径要短。滤波器属于高输入阻抗电路,特别是节点 B(运放同相输入端),阻抗可能到几十千欧,旁边只要有一条平行走线穿过,就会通过寄生电容引入干扰。我的习惯是把 R1、R2、C1、C2 围成一个紧凑的小区域,运放放在这个区域旁边,输入从板边连接器直接进 R1,输出从运放第 1 脚引出,中间不打过孔。
其次是C1 反馈走线。C1 是接到输出端的关键反馈元件,如果这段走线过长,会把输出信号耦合回滤波节点,造成 Q 值改变。两点之间走线尽量短而粗,不要绕圈。
5.2 接地与电源去耦:防止自激的核心手段
运放电路的自激振荡,十有八九和电源相关。NE5532 这种双极型运放对电源去耦尤其敏感,电源走线一长,电感效应就会把高频噪声带进放大器。我的做法是:
- 每一个运放电源引脚旁边放一颗 100nF 的 C0G 陶瓷电容,位置尽可能贴近引脚,中间不要有过孔。
- 如果电源输入距离很远,再在总入口放一颗 10μF 钽电容或陶瓷电容,形成低频储能。
- 模拟地和数字地分开布局,但最终在电源输入端单点汇合。
地平面方面,低速运放滤波器其实不要求完整地平面,但如果你使用的是多层板,底层铺一块完整地平面会显著降低信号回流的寄生电感。如果只能做双层板,也要保证 R1/R2 的参考地连续,不要被信号线切断。
接地环路也是常见问题。如果滤波器的输入和输出分别接入两个不同设备,地电位差可能在地环路中产生 50Hz 或更高频干扰。这时候要考虑在输入级使用差分布线,或者在信号源端单点接地。总之,星形接地是孤立模拟电路最可靠的接地策略。
5.3 从罗氏线圈类低电平信号走线谈布线细节
很多做电流测量的朋友会搜“PCB 罗氏线圈设计”,这类线圈输出信号非常微弱,经常要先经过运放低通滤波器。处理这类低电平信号,PCB 布线要求更高。
我总结的经验是:在滤波器的输入端周围不铺铜,或者说,与输入节点相邻的地铜要留出足够间距。否则地铜会与大阻值电阻形成寄生电容,等效于在滤波器前面额外加了一个低通,截止频率偏低。更要命的是,输入端的回路面积如果太大,空间中的磁场干扰会在环路里感应出噪声电压。
另一个细节是走线宽度。不要因为信号弱就把线画得极细,细走线意味着更高电感和更高的不确定性。模拟信号线建议 10mil 到 20mil,且尽量短。连接滤波器的反馈路径要避免走过多的过孔,因为每个过孔都有寄生电容和电感。
5.4 板级抗 RFI 与屏蔽
运放电路的输入端如果有意外的高频能量灌入,比如附近有无线电发射源或者开关电源,会因为运放输入级的非线性整流产生直流偏置误差,也就是常说的 RFI 整流效应。经典的解决办法是在滤波器输入端串联一个几百欧姆的电阻,并在电阻前端对地并联一个小几百皮法的电容,构成一个极高频低通,这个措施对付 10MHz 以上的干扰非常管用。
外置金属屏蔽罩谨慎使用。如果你把滤波器整个包在金属罩里,接地不良时反而会形成谐振腔。我只在确认外部干扰特别强的场合加屏蔽罩,而且会保证屏蔽罩与地平面多点接触。常规项目里,紧凑布局 + 正确去耦已经能解决大多数噪声问题。
6. 实测调试:验证滤波器是否“配得上”理论值
6.1 自激和振铃的排查链路
上电后用示波器看运放输出,如果发现几百 kHz 以上的正弦振荡,或者是叠加在信号上的高频振铃,按照下面顺序排查:
- 先看电源去耦电容是否真的贴近了运放引脚。很多时候原理图上有电容、板上也有电容,但被过孔和走线拉远了,等于没有去耦,这是自激头号原因。
- 再看运放输出端是否直接接了过长或过宽的走线,形成容性负载。如果输出必须走长线,可以在运放输出串联一个几十欧姆的电阻,把负载电容和运放输出隔离开。
- 如果用的是高 GBW 运放且增益较高,检查反馈电容是否过大。反馈电容虽然能限制带宽、抑制振荡,但会改变滤波器的极点,得权衡。
顺便回答一个经常被问的问题:4558 运放做 70 倍增益会自激吗?答案取决于条件。4558 的 GBW 大约 5.5MHz,70 倍增益意味着闭环带宽只有 5.5M/70≈78kHz。只要信号频率远低于这个值,理论上是稳定的。但实际板子上如果电源去耦差、输出负载电容过大、走线形成正反馈,照样自激。不是芯片的锅,是布局和环路稳定性设计的问题。
6.2 幅频特性实测:扫描比单点可靠得多
焊接完成后,我的验证流程是这样的:
- 用函数发生器给滤波器输入端扫 100Hz 到 20kHz 的正弦信号,幅度固定在 1Vpp。
- 示波器同时接输入和输出通道,用双通道直接比较幅度。把幅度换算成 dB:(20\log_{10}(V_{out}/V_{in}))。
- 重点测三个点:10Hz(低频基准)、1kHz(截止频率)、10kHz(过渡带)。理论上 10kHz 应该比 10Hz 低约 40dB。
实测时可能会看到截止频率偏了 10% 左右。这很正常,电容容差和电阻容差叠加的结果。如果想要精确,用镊子替换 R1、R2 微调,或者接受这个误差。在大多数信号调理系统里,截止频率 5% 以内的偏差完全可接受。
6.3 两级放大的增益分配:先放大还是先滤波?
网上有人问“两级运放可以先同相放大再反相放大吗”,当然可以,但增益分配要有讲究。我见过不少设计在滤波前把信号放大 70 倍,结果滤波器输入端的噪声也被放大了 70 倍,再经滤波器虽然削弱了高频,但通带内的噪声已经足够大。
更好的策略是:低噪声放大 → 滤波 → 按需再放大,或者 滤波 → 单级放大。总之尽量避免在前级把增益做太大。滤波器放在放大之后、进一步放大之前,能在保证信噪比的同时压低宽带噪声,这是实际系统里最划算的做法。
6.4 仪器测量的连接顺序
还有一个小细节:示波器探头本身有电容,通常在 10pF 到 20pF 左右。如果你直接测运放输出高阻节点,探头电容会和那个节点上的电阻形成额外极点,导致实测截止频率比理论值低。测量时尽量用 10× 探头,并在接受范围内,把探头电容当作“地对地小电容存在”就行。如果要更精准,可以在运放输出后再加一级缓冲输出,隔离探头负载。
实操经验小结
最后分享一个我自己的设计习惯:拿到一个滤波任务,先定截止频率和阶数,再选 C2 容值,按 (C1=2C2) 反推电阻阻值,然后立刻查运放 GBW 是否满足“截止频率的 100 倍”这个底线。仿真里把运放增益设成 1e9,验证理想响应;PCB 布局时把 C1、C2、运放三者画成一个小三角,保证反馈路径最短;上电后先看静态输出有没有自激,再扫频。这套流程我用在很多项目里,稳定且有效。
做滤波器设计,最忌讳的是只会套公式、忽略元件寄生和运放非理想特性。公式给出的只是“理论值”,而理论值和实际值之间的差距,往往就藏在 GBW、电容材质、PCB 走线和电源去耦这些细节里。把这几个细节抠住,你搭出来的 Butterworth 低通滤波器,才能真的做到从仿真到实测一致。