ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Sallen-Key低通滤波器仿真与手算不符?LTspice实战排查指南

Sallen-Key低通滤波器仿真与手算不符?LTspice实战排查指南 做模拟电路的人谁还没在Sallen-Key二阶低通滤波器上翻过车我见过最多的场景是明明是按照教科书算出截止频率电阻电容也对着原理图焊好结果LTspice一跑AC分析发现-3dB点跟手算完全对不上有时候甚至差出35%以上。更让人崩溃的是你反复检查网表、检查元件值电路看着一点毛病都没有可曲线就是不对。这篇文章就把这个“算不对”的问题彻底讲清楚。我会从Sallen-Key的公式边界、LTspice的仿真设置、还有运放真实模型这几个角度拆开来看最后用两个完整的LTspice实验电路分别验证单位增益等值RC和单位增益巴特沃斯设计你跟着搭一遍就能明白问题出在哪。无论你是做信号链的硬件工程师、电赛备赛的学生还是刚入门模拟滤波的自学者这篇文章都能帮你少走至少两三天弯路。1. 先弄明白Sallen-Key二阶低通到底在算什么1.1 电路拓扑与设计目标Sallen-Key大概是模拟滤波器里最常见的有源二阶拓扑了它其实是两级RC低通后面跟一个运放缓冲再加上一个电容从RC中间节点反馈到输出。标准的单位增益接法是输入Vin经过R1到节点A再从节点A经过R2到运放同相输入端节点B节点A接C1到运放输出端节点B接C2到地运放反相输入端直接接输出构成单位增益缓冲器。这个拓扑能火这么多年原因很简单元件少、Q值容易控制、对运放要求相对不高。跟多反馈MFB滤波器比Sallen-Key是同相结构输入阻抗高输出阻抗低后级负载基本不影响滤波曲线而且它对运放的增益带宽积GBW要求比MFB宽松不少。很多音频设备、ADC抗混叠滤波、PLL环路滤波、传感器信号调理用的都是这个结构。设计一个Sallen-Key低通你真正需要定的参数其实只有两个特征频率f0也就是极点频率有人叫自然频率和Q值品质因数或者等价地用阻尼比。f0决定滤波器在频域的“位置”Q决定在f0附近是平坦、过阻尼还是欠阻尼。常见的巴特沃斯响应要求Q0.707贝塞尔响应要求Q0.577切比雪夫或者某些补偿电路可能会用到Q0.707。新手入门默认都按巴特沃斯来做频率响应最平坦也不会引入峰化。1.2 截止频率的手算公式怎么写才严谨很多教程直接给你一个公式f0 1 / (2π√(R1·R2·C1·C2))然后让你带进去算。这个公式本身没错但它算的是特征频率不是“-3dB截止频率”。这俩概念在滤波器设计里完全是两回事很多人就是栽在这个地方。先看特征频率。对于R1R2R、C1C2C的对称设计公式简化成f0 1 / (2πRC)。这个公式好记但它隐含了一个条件这种对称设计下的Q值是固定的0.5对应的是过阻尼响应根本不是你想要的巴特沃斯。再看Q值。单位增益Sallen-Key在R1R2R时Q和电容比的关系是 Q 0.5 × √(C1 / C2)如果你想得到Q0.707巴特沃斯那就要求C1 : C2 2 : 1。这是单位增益Sallen-Key最经典的设计套路两个电阻取一样的值反馈电容C1是接地电容C2的2倍。在LTspice里最常用的取值组合是R1R21kΩC1200nFC2100nF算出来f0大概是1125Hz。如果你不想用2:1的电容比也可以等R等C但这时候要让运放变成有增益配置增益K要满足Q 1 / (3 - K)。巴特沃斯需要K≈1.586也就是运放反相端的两个电阻比值要配到0.586左右。这种接法在工程上也很常见但是新手容易在算增益电阻时出错从而直接带偏Q值。写清楚这一点之后你再看手算结果和仿真对不上很多情况其实是“你手算的f0不是仿真读的-3dB频率”而不是电路错了。具体的坑下面展开讲。2. 为什么手算和LTspice仿真对不上四大元凶2.1 元凶一把特征频率f0当成了-3dB截止频率这是所有“对不上”里面最常见、也最容易误导人的一个原因。很多人用等R等C的Sallen-Key手算f01/(2πRC)然后在LTspice里找到幅度降到-3dB的频率点一对比发现仿真结果比手算低了大概35%于是开始怀疑自己电路画错、模型有问题甚至怀疑LTspice这个软件不准。实际上LTspice没错你的电路也没错错的是你把“特征频率”和“-3dB截止频率”当成了一回事。以等R等C单位增益电路为例R1kΩC100nFf01591.5HzQ0.5。这个电路的幅频响应是 |H(f)|² 1 / [(1 - x²)² (2x)²]其中x f / f0令|H(f)|² 1/2也就是-3dB解方程得到x≈0.6436也就是说真正的-3dB点在0.6436 × 1591.5 ≈ 1024Hz比1591.5Hz低了三分之一还多。更直观一点在f01591.5Hz这个点去读幅度会发现衰减正好是6dB不是3dB。为什么因为单位增益Sallen-Key在特征频率处的增益恰好等于Q值Q0.5就是-6dB。这个规律其实可以当做一个很有用的“电路诊断工具”你在LTspice里把光标放到f0位置如果读到的幅度不是Q值对应的dB数那基本可以断定电路接错了或者元件值不对如果幅度正好等于Q值那说明电路本身没毛病只是你对比的基准选错了。2.2 元凶二单位写错、器件放反、后缀“M”翻车如果说上面那个是“定义不对”这个就是纯粹的“手滑”。LTspice里元件值后缀的规则跟很多人的直觉不一样最典型的就是“M”这个后缀。在LTspice里M代表毫milli不是兆mega。你以为自己写了个1MΩ的电阻实际LTspice把它当成了1毫欧这个误差直接让仿真曲线飞到天上去。正确的写法是1Meg或者1megLTspice才能识别成10^6欧姆。这种单位坑影响有多大呢如果电阻写错一个量级f0就会差出10倍如果电容写错一个量级f0又会差出好几倍。很多人最后发现仿真频率整体偏了10倍甚至100倍回头一查往往就是“1M”和“1Meg”的区别。还有一种情况是C1和C2的位置装反了把反馈电容和接地电容对调了。Sallen-Key拓扑里C1是连接RC中间节点到运放输出的反馈电容C2是同相输入端到地的电容这两个角色不能互换。如果你在单位增益巴特沃斯设计里原本打算C1200nF、C2100nF结果画反了变成C1100nF、C2200nF那Q值会从0.707变成0.354整条低频段曲线都拖泥带水-3dB点也会明显偏低。LTspice不会提醒你因为电路从原理上能跑通只是性能跟你预期完全不同。2.3 元凶三运放不是理想器件LTspice自带的运放模型哪怕是最普通的OP07、LT1001这些型号都是带着实实在在的带宽限制的。Sallen-Key虽然有运放缓冲但运放的实际开环增益、GBW、摆率、输出电流限制都会在特定条件下影响滤波曲线。如果你的设计截止频率很低比如1kHz左右用一个GBW几兆赫兹的运放影响可以忽略不计手算和仿真基本能对上。但如果你把f0推到50kHz、100kHz甚至更高还用GBW只有几百kHz的老运放那你就会发现仿真曲线上Q值变大了、通带出现峰化、-3dB点明显右移。原因在于反馈环路在极点频率附近的环路增益不足等效变成了一个Q值畸变的滤波器。我的经验法则是用Sallen-Key时运放GBW至少要比f0高100倍才能保证特征频率和Q值偏差小于几个百分点。如果GBW只比f0高10倍那曲线形状就已经明显不对了。LTspice里做这种验证很方便你完全可以先放一个理想的电压控制电压源E源当缓冲器跑一遍再换成真实运放模型跑一遍两个结果一对比立刻就能看出运放带宽到底拖了多少后腿。2.4 元凶四仿真设置和读数方式不对这个问题在LTspice新手里出现频率超高明明是AC分析信号源却没给AC属性。你在电压源里写了DC偏置、写了SINE参数但忘了写AC 1LTspice的小信号AC分析就会认为输入是0扫出来的幅频曲线是一条接近-无穷dB的水平线。正确的做法是在电压源的参数里同时写DC 0 AC 1SINE参数只是给瞬态分析用的AC分析读的是“AC 1”这个幅度。另外AC扫描的步进设置也会影响读数精度。如果你用Total Points20这种粗糙设置在-3dB附近曲线是折线光标读数很容易差出几十赫兹甚至上百赫兹。我习惯用Decade扫描200点起步然后局部放大再读数误差就会小很多。还有一个新手常踩的坑用瞬态分析去“测”截止频率也就是跑好几组不同频率的.SINE输入再用FFT或者幅度测量去还原频响。这种做法不是说不行但过程繁琐而且带负载、偏置、削波等因素很容易混进来最后得出的“截止频率”经常带着额外误差。测幅频响应的标准做法就是AC扫描干净利落。3. LTspice实战搭一个能复现计算的Sallen-Key仿真3.1 两个实验电路Q0.5和Q0.707为了直观看到“特征频率”和“-3dB截止频率”的区别我在LTspice里搭了两个电路。第一个是等R等C单位增益电路R1R21kΩC1C2100nF理论f01591.5HzQ0.5。第二个是单位增益巴特沃斯电路R1R21kΩC1200nFC2100nF理论f01125.4HzQ0.707。搭建步骤很简单LTspice里放两个电阻、两个电容、一个电压源、一个理想缓冲器。理想缓冲器我建议用E源来实现放置一个电压控制电压源快捷键E正相输入端接节点B负相输入端接地输出端接输出节点增益设为1。这样做出来的运放是真正理想化的没有任何带宽限制方便我们验证“纯电路”层面的计算结果。如果你想用一个更像真实运放模型的方式也可以放一个LTspice自带的opamp符号或者专门的运放型号比如OP07。用真实模型跑一遍再用E源跑一遍两个结果叠在一起看就能清楚看到模型差异带来的影响。下面是实验一的网表可以直接复制到LTspice的文本编辑器中新建仿真。不过更推荐图形界面操作放好元件后添加一个SPICE指令.ac dec 200 10 100k即可。V1 in 0 DC 0 AC 1 R1 in A 1k R2 A B 1k C1 A out 100n C2 B 0 100n E1 out 0 B 0 1 .ac dec 200 10 100k .end实验二只需要把C1改成200n其余完全不变。3.2 AC分析设置与截止频率读取方法运行完AC分析后默认弹出的波形是你点选的节点电压单位是伏特。要读-3dB点最直观的方法是把它换成dB显示在波形窗口里右键Add Trace输入db(V(out))横轴用对数刻度曲线出来之后直接看-3dB对应的横轴位置。更精确的读法是用光标。在波形窗口左键点击曲线会出现十字光标然后用键盘方向键微调把光标定在-3dB那条线上就能读到一个很精确的频率值。如果你嫌手动光标麻烦也可以用.MEAS语句让LTspice自动去找。在原理图里加上下面这行指令.meas AC f3db WHEN db(V(out)) -3运行后按CtrlL打开SPICE Error Log里面会输出f3db的计算结果。这个方法在批量扫描参数的时候尤其好用比一只鼠标点来点去快多了。我还想分享一个小技巧在实验一的电路里你可以再加一条.meas AC f6db WHEN db(V(out)) -6这个测量点理论上应该落在1591.5Hz附近。这样等于用两个不同的数学定义去交叉验证同一个电路看到两个测量点一个在1024Hz、一个在1591Hz你就能彻底理解前面讲的“特征频率”和“-3dB点”到底差在哪。另外做参数扫描的时候可以用.step param C1 list 100n 150n 200n 270n这样的指令一次跑出好几条曲线观察Q值变化导致-3dB点偏移的趋势。这对理解Sallen-Key的电容配比非常有帮助。3.3 验证结果对照与批量扫描用理想E源跑完两个电路我得到的实测结果如下电路配置理论f0理论-3dB频率LTspice实测-3dBR1k, C1C2100nF1591.5Hz1024Hz约1024HzR1k, C1200nF, C2100nF1125.4Hz1125.4Hz约1125Hz可以看到只要用对了“-3dB截止频率”这个定义手算和仿真几乎完全一致误差在1%以内。实验一的实测值之所以接近1024Hz而不是1591Hz不是仿真出bug而是等R等C电路的Q0.5-3dB点本来就比f0低35%左右。实验二的巴特沃斯设计Q0.707-3dB点刚好就等于f0这个“看起来正常”的对应关系反而是特例。我还做了个批量扫描保持R1R21kΩ、C2100nF不变把C1从100nF逐步增大到270nF。C1100nF时Q0.5C1200nF时Q0.707C1270nF时Q≈0.82。扫描结果能看到两条明显变化一是f0随√(C1)往下降二是-3dB点从“比f0低”慢慢变成“约等于f0”再到“比f0高”。这个趋势很形象它告诉你Q值才是决定曲线围绕f0怎么转弯的关键。4. 常见问题排查与避坑记录4.1 快速排查表曲线不对先看是哪种“不对”仿真结果和手算对不上先别急着改电路按现象分类排查效率最高。我把这些年实操中最常见的问题整理成了一张表你可以对照着查。现象可能原因处理办法整条曲线幅度偏低通带不是0dB信号源没有AC 1属性或AC幅度设置错误检查电压源参数把AC幅度设为1-3dB点比手算f0低35%左右把特征频率当成了截止频率实际Q0.5重新确认设计目标按巴特沃斯配电容比频率整体偏了10倍或100倍元件单位写错比如1M被当成1毫欧检查电阻电容后缀兆欧要写1Meg-3dB点略微右移通带出现峰化运放GBW不够或负载电容太大换更高GBW的运放降低输出容性负载曲线是水平线或者没有响应没加AC指令或AC分析激励源没有AC值添加.ac指令源参数写AC 1曲线形状对但幅度整体低6dB运放反馈电容和接地电容接反检查C1/C2位置单位增益下C1是反馈电容波形出现振铃、瞬态振荡相位裕度不足Q值异常偏高检查增益电阻比值检查负载电容这张表覆盖了我在论坛和实际项目中见过的绝大多数“对不上”案例。如果你的问题不在表里那大概率是模型导入或者工作点设置的问题可以往下看。4.2 LTspice里几个隐蔽的翻车点第一个必须再说一遍的坑就是单位后缀。LTspice的元件值后缀规则是T1e12G1e9Meg1e6k1e3m1e-3u1e-6n1e-9p1e-12。这里的m是小写的“毫”不是“兆”跟很多人平时写工程文档的习惯完全不同。你写10k没问题写1M就有大麻烦。建议所有兆欧级电阻统一写成Meg比如1Meg、2.2Meg这样永远不会翻车。第二个隐蔽问题是“保存文件时多出来好几个文件”。LTspice仿真完成后目录里除了.asc原理图还会出现.raw仿真数据、.log日志、.plt波形配置有时候还有.net网表、.op初始状态等文件。这些都不是病毒也不是工程损坏它们各有各的用途.raw是AC/瞬态扫描的原始数据.log里记录仿真日志和.MEAS结果.plt保存波形窗口的显示设置。你只要记住.asc才是原理图源文件其他都是可再生成的中间产物就行。如果嫌乱可以在Control Panel里把自动保存.raw关掉但我个人建议留着后面复用数据很方便。第三个坑是外部Spice模型导入。很多人从芯片厂商官网下载了运放模型放到LTspice里却不知道要写.include指令或者版本模型路径不对导致仿真直接报错或者用了默认的低精度模型。导入模型后一定要确认元件symbol上关联的Prefix和Value指向正确的子电路名字否则LTspice会静默地用一些很粗糙的宏模型代替仿真结果自然对不上。4.3 我调这类电路养成的几个习惯做Sallen-Key这类有源滤波器我现在基本遵循一个固定流程先手算定参数再用理想源验证电路拓扑最后换真实运放模型做边界评估。第一步算错了后面仿真再漂亮也是误导第二步用E源跑能排除运放带宽干扰确认纯RC网络本身的行为第三步再上真实模型看运放GBW会不会把Q值拉偏。另一个习惯是尽量用.param参数化设计。在原理图里先定义.param R1k C100n再把电阻电容的Value填成{r}、{c}后面做批量扫描、温度扫描或者容差分析就特别方便。很多人直接写死1k、100n每改一次都要手动改两三个器件效率低还容易漏改。最后想特别提一句做滤波器不要把注意力全放在截止频率这一个点上。Sallen-Key设计里Q值对元件容差更敏感尤其是单位增益巴特沃斯这个结构C1/C2的匹配度直接影响曲线形状。我建议电容尽量选C0G或NP0材质电阻不低于1%精度如果项目允许先按公式算出标称值再用最接近的E24系列标称值去仿真确认一遍别拿着一个非标阻值焊到板上再抱怨频响不对。我个人在实际操作中的体会是Sallen-Key这个电路最迷人的地方就是它把“元件值”和“频率响应”之间的关系压缩到了几个简洁的公式里。只要你先把“特征频率”和“-3dB截止频率”这两个概念分清楚再检查LTspice的AC激励和单位后缀最后留足运放GBW余量手算和仿真几乎不可能对不上。最后再分享一个小技巧仿真跑完以后记得把.step扫描里最差的那组参数拿去搭实板因为电路真正量产或者进系统之后最怕的不是“典型值正常”而是“容差边缘出问题”。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进