ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

运放自激振荡的根源:相位裕度与LTspice环路增益测量

2026/10/6 10:22:23 拓冰建站 浏览量
运放自激振荡的根源:相位裕度与LTspice环路增益测量 第一次遇到运放振荡的时候我盯着示波器上那条“自己长出来”的正弦波看了很久。明明是按照手册里的典型电路搭的电压跟随器输入悬空输出却有一路几十kHz的正弦波在飘用手靠近PCB频率还会变。后来才知道这是运放自激振荡根源就是环路增益的相位裕度不够。从那以后我做任何运放电路都会先在LTspice里把波特图和相位裕度跑一遍确认稳定再上板。这篇内容就围绕这件事展开怎么理解自激振荡、怎么用LTspice测环路增益、怎么读相位裕度以及实测中容易掉进去的坑。1. 运放自己“叫”起来问题出在环路增益1.1 一个很容易复现的“振铃现场”先说一个我后来经常拿来教学的复现场景用一个通用运放接成单位增益跟随器输出端直接挂一只100nF的电容负载。很多人觉得输出并个电容天经地义实际上一上电就给你表演自激振荡。振荡频率通常在几十kHz到几MHz之间幅度可能只有几百毫伏也可能直接顶到电源轨。输出波形看起来像正弦波实际上是非线性限幅后的稳态振荡。这个现象的本质不是运放芯片“坏了”也不是电源纹波而是反馈环路在某个频率上满足了自己维持振荡的条件。让我用一个麦克风对着音箱的类比话筒拾音、功放放大、音箱放声、声音又被话筒拾取。如果这一圈“信号绕行”的增益足够大而且声波回到话筒时相位刚好“配合”上次的信号就会啸叫。运放电路的自激振荡就是在电路环路里发生了同样的啸叫。1.2 简单说清巴克豪森判据任何负反馈放大电路都可以抽象成一个环路输入信号经过运放放大经过反馈网络衰减重新回到输入端。要维持振荡需要同时满足两个条件环路增益的幅度等于10dB以及环路总相移达到360°等价于负反馈变成了正反馈。先说幅度条件。环路增益TAβA是运放开环增益β是反馈系数。如果|T|1信号绕一圈变小振荡会逐渐衰减如果|T|≥1信号绕一圈不缩小就可能维持住。幅度条件相对好满足最难控制的其实是相位条件。负反馈本来提供-180°的相位输出返回到反相输入端如果环路里还有其他相移源——比如运放内部的极点、输出级的寄生电容、负载电容产生的极点——叠加起来把这个-180°继续往-360°推负反馈就变成了正反馈。一旦幅度条件也满足运放就开始自己振荡。所以“相位裕度”就是衡量负反馈在变成正反馈之前还剩下多少安全余量。1.3 为什么不靠手算而是靠扫频如果运放是理想的单极点模型手算相位裕度很简单一个公式就能解决。但实际运放有第二极点、第三极点输出级有非线性的输出阻抗外围还有负载电容、反馈电容、PCB寄生参数手算极点位置会非常痛苦而且还容易漏算。所以工程上更实用的做法是直接做扫频仿真在反馈环路里注入一个幅度为1的小信号扫过一个很宽的频率范围把环路增益随频率变化画出来。这个扫频结果就是波特图。从波特图上找到增益0dB对应的频率再看这个频率上的相位离-180°还有多少度这个差值就是相位裕度。LTspice做这件事非常方便而且免费、跨平台这也是我推荐它的原因。2. 相位裕度不是玄学从波特图上到底要读什么2.1 相位裕度的定义和读图口径相位裕度PMPhase Margin的标准定义是在环路增益|T|1的频率处环路增益的相位距离-180°还有多少度。如果相位已经到-180°那负反馈变成正反馈系统临界振荡如果连-180°都越过了那系统就是负相位裕度必然自激。在LTspice里跑环路增益仿真时你得到的相位曲线和教材里的经典曲线有一个容易混淆的细节。教材里通常画的是Aβ的相位不含反相输入端的符号所以相位从0°附近开始而我们在LTspice里直接从注入点到输出测V(out)/V(fb)这条路径包含反相输入端的-180°所以相位曲线低频时会从±180°附近出发然后随着频率升高往下降。这导致一个很有意思的结果用这种方式测出来的环路增益曲线在0dB交越处的相位读数本身就是相位裕度。比如你在0dB处看到的相位是60°那相位裕度就是60°如果看到的是-20°那相位裕度就是-20°系统已经不稳定了。很多初学者在这个环节被绕晕是因为拿教材上的“180°减去相位绝对值”去套结果越套越糊涂。我的建议是先把低频相位是不是从±180°出发确认一下如果是就直接读交越点的相位值作为PM简单又不容易错。2.2 相位裕度与阶跃响应对照相位裕度不是一个抽象的稳定判据它直接反映在电路的实际响应上。为了直观我把不同PM值下的阶跃响应特征整理成一张表方便对比参考相位裕度阶跃响应表现工程判断PM 0°自激振荡输出持续震荡不可用PM ≈ 0°临界振荡理论上等幅震荡不可用PM ≈ 20°严重振铃过冲可达50%以上勉强可用但风险极高PM ≈ 45°过冲约20%~25%阻尼感不足可接受但不是最优PM ≈ 60°过冲约8%~10%振铃很小大多数线性电路的设计目标PM ≈ 70°~90°过冲很小但响应变慢适合低带宽高稳定场景注意这张表是工程经验值具体数值会随电路拓扑略有变化但总体趋势是固定的。PM小于30°的电路温度一变化或者IC批次一变就可能从“凑合用”变成“自激”。PM在60°左右是比较通用的安全线很多运放数据手册也把60°作为推荐值。2.3 数据手册里的“单位增益稳定”是什么意思芯片手册里写“unity-gain stable”的运放意味着它在增益为1的跟随器接法下在标准测试条件下是稳定的。这个“标准测试条件”通常包括纯电阻负载或很小电容负载、合适的电源去耦、一定的输出电流范围。它并不等于“你随便怎么接电容负载都不会振”。实际工程里最常见的翻车场景就是在跟随器输出端直接接了一个较大的容性负载。这个电容和运放开环输出电阻会形成一个额外的极点把这个极点的频率压到环路增益0dB交越点附近相位裕度就被吃掉了。所以哪怕你用的是“单位增益稳定”的型号只要输出接了长线、接了压电陶瓷、接了MOS管栅极就有自激风险。这也是为什么我认为“相位裕度”必须自己实测不能只看手册结论。3. LTspice环路增益测量别直接测“输出/输入”3.1 直接AC仿真只能看到闭环响应很多新手在LTspice里做AC分析直接把输入接一个AC源测输出/输入然后拿这个曲线跟数据手册里的开环增益曲线对比发现对不上就以为仿真出错了。其实测的是闭环传输函数不是环路增益。要判断稳定性必须测反馈环路的环路增益TAβ而不是闭环增益。AC分析本身没问题问题是你测的位置不对。正确的做法是在反馈环路里“开一个口”在断口处注入测试信号测量信号沿环路转一圈之后回来放大了多少倍。这个“转一圈”的增益才是判断稳定性的依据。3.2 断环注入法一个大电感、一个大电容、一个AC源下面这个方法我在LTspice里用了很多年简单可靠。我先用同相放大电路举例再说明跟随器怎么处理。第一步在反馈环路中选择一个断口。原则上要选低阻抗点我一般选在运放输出端和反馈电阻Rf之间。比如原来运放输出out直接连Rf现在把这段连线删掉。第二步在断口处插入一个大电感L11e6一端接out另一端接反馈侧的节点b。这个大电感在交流下阻抗极高相当于交流断路但直流下电阻几乎为零所以直流工作点还能保持原来的负反馈状态运放不会因为开环而饱和。第三步在节点b和地之间串联一个AC电压源和一个大电容C11e6。AC电压源设AC Amplitude1相位0。最后运行AC分析测量表达式写V(out)/V(fb)对于跟随器fb就是反馈网络侧节点对于同相放大电路需要测V(out)/V(b)即运放输出除以注入点电压。这样测到的就是环路增益T。为什么电感选1e6H、电容选1e6F因为我们的目标是“理想开关”。假设AC扫频范围是10Hz到100MHz1e6H的电感在10Hz时的感抗就已经是6.28e7Ω在100MHz时更是高达6.28e14Ω相对电路里的kΩ级电阻可以忽略它的存在。1e6F的电容在10Hz时容抗约1.6e-8Ω完全可以看成短路。这两个“天文数字”不是随便拍的而是在测量频段内把它们当成理想元件用。3.3 仿真设置和波形判读步骤我把完整操作列出来你照着做就行在LTspice里放置运放symbol接好电源、输入、反馈网络。在输出节点和反馈网络之间断开连线插入L11e6。在反馈侧节点比如叫b与地之间放置一个AC电压源Vinj串联C11e6。在AC Analysis对话框设置Type of Sweep选DecadeNumber of points per decade填100或更多Start Frequency填10Stop Frequency填100Meg。运行仿真后在波形窗口添加表达式V(out)/V(b)看到的是环路增益的幅频曲线。按住Ctrl键鼠标左键点击波形窗口顶部的V(out)/V(b)标签会自动在另一条Y轴上添加相位曲线。在幅频曲线上找0dB增益等于1对应的频率再横过来看该频率处相位曲线的读数。这个读数就是相位裕度。比如你看到幅频曲线在100kHz处穿过0dB对应相位曲线读数是58°那PM就是58°。如果相位曲线在交越处已经降到0°以下说明这一版电路不稳需要补偿。3.4 把负载电容写成变量一次扫出多种情况手动改元件值再反复仿真也能出结果但效率太低。LTspice的.step指令可以让我们一次跑完多组参数。比如负载电容CL我们想分别看1nF、10nF、100nF、1uF下的相位裕度可以这样写.step param CL list 1n 10n 100n 1u电容CL的Value写{CL}注意大括号必须有。运行AC仿真后波形图会同时显示四条曲线颜色不同。这时你就能很直观地看到随着CL增大0dB交越频率在往左移相位曲线在交越点的读数也在一点点往下降直到最后变成负数。如果嫌手动看图不够精确还可以加两条.meas指令让LTspice自动算出每个CL对应的PM.meas AC fc WHEN mag(V(out)/V(b))1 .meas AC PM FIND ph(V(out)/V(b)) ATfc仿真结束后按CtrlL打开SPICE Error Log里面会有每个step对应的fc和PM。这个技巧在做参数扫描时特别省事不需要一条曲线一条曲线去数格子。4. 完整跑一遍从“跟随器振铃”到“补偿生效”4.1 用UniversalOpamp2搭建跟随器电路接下来我们用LTspice自带的UniversalOpamp2模型完整走一遍。这个模型不是某一颗具体芯片但是行为级模型能模拟有限开环增益、有限带宽、输出电阻等关键参数非常适合学习环路稳定性。在原理图编辑界面按快捷键F2打开元件库在[Opamps]目录下找到UniversalOpamp2。放置后右键设置参数我用的是这组Avol100k GBW10Meg Rin1Meg Rout100意思就是开环增益100dB、单位增益带宽10MHz、输入电阻1MΩ、输出电阻100Ω。这个量级很接近常用通用运放。电源我用±15V输入接1V直流电压源输出节点标成out。跟随器的接法是反相输入端直接和输出相连。注意在做环路测量时out到反相输入端之间要先断开插入L11e6然后在反相输入端这里命名为fb和地之间接入Vinj串联C1。输入端的V1虽然作为直流工作点源但它不参与环路测量时的小信号注入。4.2 不同电容负载下的环路增益曲线变化搭好电路后先不接负载电容运行AC仿真你会看到环路增益低频大约在100dB量级0dB交越点大概在10MHz附近交越处相位读数在70°到90°之间系统很稳。现在在out节点对地接一个CL1nF的电容再跑一遍0dB交越会稍微往左移一点相位读数掉到60°左右依然稳定。换成10nF交越频率继续下降相位读数可能只有40°上下输出已经开始有明显的振铃趋势。换成100nF很多通用模型在交越处的相位读数会变成负值系统自激阶跃响应会看到一个持续振荡的波形。这就是容性负载吃掉相位裕度的全过程。运放的输出电阻Rout是100Ω当负载电容足够大时Rout和CL形成的极点进入环路带宽以内每十年频程给环路增加约-90°的相移相位裕度自然被压缩。4.3 瞬态仿真交叉验证振铃AC分析告诉我们“相位裕度不够”但很多人更愿意看一个直观的波形。那就在LTspice里加一个瞬态仿真验证一下。把电路恢复成正常跟随器连接移除L1和注入源给输入端一个阶跃信号。比如输入源V1用PULSE(0 1 0 1n 1n 1m 2m)上升沿1ns。瞬态仿真设置.tran 0 2m 0 0.2u跑完后看out节点的波形。PM约60°时输出会快速跟上输入有过冲但很小很快收敛。PM约20°到30°时过冲明显波形上下抖好几下才稳定。PM为负时输出就是一条正弦波套在直流电平上反复震荡怎么等都等不到稳定。瞬态仿真和AC分析互相印证能让判断更可信。我习惯先跑AC看PM再跑瞬态看振铃两步都通过才认为这个电路稳了。4.4 输出串联电阻把PM救回来接大电容负载时最直接有效的补偿手段是在运放输出端串联一只小电阻Riso再接负载电容。Riso的作用是把负载电容和运放输出端隔开让运放输出端在高频段看到一个近似电阻性的负载而不是一个大电容直接接地从而减轻电容极点对环路相位的影响。回到我们的模型Rout100ΩCL100nF我在out和CL之间串一只Riso50Ω重新跑AC分析和瞬态仿真。0dB交越处的相位读数会从负值回升到50°以上阶跃响应的振铃也明显消退。Riso不是越大越好。它带来两个副作用一是负载上的直流精度下降因为负载电流会在Riso上产生压降输出端电压和负载端电压不再一致二是驱动能力变弱。所以我一般从33Ω到100Ω之间试能用小值就不用大值够把PM抬回55°以上就行。5. 实战中容易踩的坑与补偿对策5.1 示波器探头会“藏”振荡仿真做完之后去板子上验证还会遇到一个现实问题示波器探头本身可能骗你。很多振荡是高频的如果探头用1×档探头前端电容可能达到100pF量级这个电容并联到被测节点上可能直接把振荡“压灭”于是你看到的是一个看似正常的波形误以为电路没问题。反过来也有假振荡的情况探头地线夹子太长地线电感和谐振峰叠加示波器上显示一个几十MHz的噪声波形但实际电路并没有自激。所以测量运放输出波形时我习惯用10×探头并且用最短的地线弹簧针尽量减小探头对被测节点的影响。如果条件允许可以用差分探头测反馈节点避免共地干扰。5.2 断环位置选错仿真结果直接失真环路增益测量看似简单断口位置不对会得到错误结果。关键是不要在高阻抗节点断开。比如在运放反相输入端断开那里阻抗很高你插入的电感、电容、理想电压源的微小寄生都会显著改变节点阻抗测出来的环路增益和真实工作状态对不上。我推荐的断口位置是运放输出端到反馈电阻Rf之间。运放输出端是低阻抗点注入源并联上去造成的负载效应可以忽略测量结果更接近真实闭环时的环路增益。如果是纯跟随器没有Rf就在输出端和反相输入端之间断开注入到反相输入端一侧。有一种更严谨的做法叫Middlebrook方法通过电压注入和电流注入各测一次再取几何平均能得到更精确的环路增益。但LTspice里手搭比较麻烦对绝大多数通用运放电路直接用低阻抗断口处的电压注入法精度已经足够工程判断。5.3 几种常用补偿手段的取舍遇到振荡除了串联Riso还有几种常见处理方式。我整理了一个对比方便按实际场景选择补偿手段原理代价适用场景输出串联Riso隔离容性负载直流精度下降、带载变弱输出带长线或大电容反馈电容Cf并联在Rf上在反馈系数里引入零点带宽降低、可能引入噪声带反馈电阻的反相/同相放大电路提高噪声增益减小β降低环路增益让0dB交越频率前移信号增益变大或需要额外电阻非单位增益需求且有裕度换用输出电阻更低的运放减轻负载电容极点影响成本、选型受限预算允许且对精度要求高反馈电容Cf是反相输入端和输出之间并联的小电容它的作用是给反馈网络添加一个相位超前抵消运放内部极点的相位滞后。取值通常从1pF到几十pF我一般用.step扫描不同Cf下的PM选一个PM刚好在60°左右的最小值避免白白牺牲带宽。提高噪声增益这个办法本质是让运放闭环增益变小环路增益在更高频段才降到0dB从而把第二极点的影响推出交越范围。如果你做的是跟随器可以在反相端到地之间加一只电阻人为提高噪声增益但代价是输出偏置和增益精度都要重新算。5.4 注意温度、批次和PCB寄生带来的PM余量变化可能有人会觉得仿真里PM调到50°就差不多了。实际量产时运放的开环增益、带宽、输出电阻都会随温度漂移同一型号不同批次也有离散性PCB上走线、过孔、插座、线缆都会引入额外的电感和电容。这些因素在仿真里看不到但会实打实地吃掉一小截相位裕度。所以我给自己定的设计准则是常规电路PM目标60°如果工作环境温度变化大、或负载是长线缆这种不可控场景目标直接放到70°以上。不要卡在45°这种“看起来能用”的位置那等于给自己埋雷。PM低到30°左右的电路在实验室25℃环境下可能很安静一到夏天车间里温度上来就莫名其妙地振荡查了半天发现是相位裕度余量不够。6. 把“相位裕度余量”带进设计流程坦白说把相位裕度养成设计习惯之后我画完一块运放板第一件事是先在LTspice里跑一遍环路增益仿真而不是先去纠结去耦电容该放0.1uF还是1uF。去耦电容当然重要但一个振荡的运放去耦做得再好也白搭。我的流程基本固定了先用断环注入法跑AC分析看0dB交越点相位读数再跑一个阶跃瞬态确认振铃幅度可控如果PM偏小优先试输出串联Riso其次试反馈电容Cf选定补偿参数后用.step把温度和负载电容的极端情况也扫一遍确保最坏情况下PM仍然为正。这个习惯帮我在好几块板子上避免了“回头重画”的麻烦。有一次多级运放级联带着全局反馈单级看都正常级联之后相位裕度掉得厉害我用同样的环路测量方法一级一级往里排查最后确认是第二级输出电容负载过重给后级加了一颗33Ω隔离电阻解决。运放自激振荡这个问题看起来吓人本质上就是环路增益和相位裕度的事。只要分清楚“闭环响应”和“环路增益”不是一回事会用LTspice把环路拆开注入信号再读懂交越频率和相位读数你就掌握了排查振荡的核心方法。剩下的就是多跑几次仿真、多存几组参数把补偿电容电阻焊上去之前先在软件里验证一遍。毕竟让问题停留在仿真阶段永远比在示波器上去抓一条不知道从哪冒出来的正弦波要轻松得多。