上周调一块给主控供电的板卡,LDO输出2.8V,空载纹波干干净净,一旦负载从50mA跳到400mA,输出就不老实了——示波器上能看到上百千赫兹的阻尼振荡,一连好几个周期才恢复。我下意识先加电容,又在输出端并了两颗10μF陶瓷电容,结果振得更凶。最后把输出电容换成100μF钽电容,波形才安分下来。折腾半天,罪魁祸首不是容值,而是电容的ESR。后来我用LTspice把整个LDO环路仿真了一遍,彻底看懂了这颗“捣乱电阻”的工作机制。
这篇文章把整个排查和仿真流程完整写出来,包括怎么搭电路、怎么测Bode图、怎么读相位裕度、怎么用.step一键扫ESR,给正在跟LDO稳定性较劲的朋友做个参考。无论你是偶尔摸一下电源的硬件工程师,还是刚接触LTspice的在校学生,照着操作一遍,基本就能建立对稳压器环路稳定的直观感觉。
1. 为什么LDO输出会自己振荡?先看懂环路三大核心参数
1.1 LDO不是一个“三端元件”,而是一个负反馈系统
很多人用LDO的时候,习惯把它当成一个带输入、输出、地的三端稳压块,觉得只要电容按数据手册焊上就能工作。但LDO本质上是一个负反馈环路:内部误差放大器比较参考电压和输出反馈电压,根据误差去控制一个串联调整管的导通程度,最终让输出电压稳定。
这个环路里有两个关键量:
- 前向增益A(s):从误差放大器的输入端,到调整管栅极、再到输出节点的总增益。
- 反馈系数β:输出节点经过反馈分压电阻网络后,回到误差放大器反相输入端的比例。
环路的总开环增益就是 T(s) = A(s) × β(s)。LDO能不能稳定,核心就围绕这个T(s)的幅频和相频特性。只要环路增益在某个频率上幅度大于等于1,同时该处的相位滞后又足够恶,负反馈就会变成正反馈,电路自己给自己“加油”,振荡油然而生。
用一个空调来比喻:你设定了26℃,传感器探测室温,控制器调节压缩机。如果传感器、压缩机和空气流动之间的响应速度不匹配,室内温度就会反复过冲,忽冷忽热。LDO的环路一旦相位裕度不够,输出电压就会在目标值附近来回折腾。
1.2 两个极点是怎么凑成振荡的
LDO环路里有两个最典型的极点:
- 主极点P1:一般在误差放大器的输出级,也就是调整管的栅极或基极位置。这里阻抗很高,寄生电容很大,主极点频率往往很低,可能落在几百Hz到几kHz。
- 输出极点P2:由输出电容Cout和负载电阻Rload共同决定,频率为 fp2 = 1 / (2π × Cout × Rload)。
注意P2是跟着负载走的。轻载时Rload很大,P2被压得很低;重载时Rload变小,P2往高频推。这样一来,本来低频只有主极点P1的时候,增益以-20dB/dec斜率下降,相位滞后最多-90°,环路想振荡都难。可一旦P2也落进带宽内,两个极点同时作用,增益下降斜率就变成-40dB/dec,相位滞后朝-180°逼近,相位裕度迅速恶化,自激振荡的条件就具备了。
这就是为什么LDO的稳定性问题多出现在“轻载大电容”或“重载高带宽”这两类场景——它们都能把输出极点拖进一个尴尬的频率位置。
1.3 ESR电阻的关键身份:一个可移动的零点提供者
大家说的ESR,是输出电容的等效串联电阻,英文Equivalent Series Resistance。它不是一个外接的普通电阻,而是电容内部电极材料、电解液或介质损耗的综合表现。在频域里,ESR和电容本身会共同产生一个零点,频率为:
fz = 1 / (2π × ESR × Cout)
这个零点很关键。当环路增益以-40dB/dec下滑时,如果零点的位置刚好落在增益交越频率附近,它就能把斜率从-40dB/dec“掰回”-20dB/dec,同时把相位往回拉,救相位裕度于水火。
但零点不是固定不动的,它会随着ESR的增大而往低频方向移动。ESR太小,零点频率太高,远远落在带宽之外,等于没有这个零点;ESR太大,零点频率过低,又可能让输出阻抗高频段抬高,带来其他问题。
下表是三类常见电容在不同容值下的ESR零点大致范围(假设Cout=10μF):
| 电容类型 | 典型ESR范围 | 零点频率估算 | 对LDO稳定性的作用 |
|---|---|---|---|
| 陶瓷电容MLCC | 5~20mΩ | 800kHz~3MHz | 零点太远,对环路帮助有限 |
| 钽电容 | 0.1~1Ω | 16kHz~160kHz | 零点容易落在目标带宽附近,补偿效果理想 |
| 铝电解电容 | 1~10Ω | 1.6kHz~16kHz | 零点偏低,可能过补偿,同时瞬态压降变大 |
看到这儿,你应该就明白为什么有些老款LDO的数据手册里会明确写“输出电容ESR必须大于0.5Ω且小于10Ω”了。这不是玄学,而是它的内部补偿只依赖ESR零点来维持稳定。
2. 从零搭建LDO仿真电路:LTspice元件选型与.step扫ESR
2.1 选一个能方便断环的LDO宏模型
LTspice元件库里有很多LDO宏模型,比如LT1117、LT1963、LT3060等等。我建议用可调输出(ADJ)版本,比如LT1117-ADJ,因为后面测环路增益时需要在反馈分压点和误差放大器输入端之间插入测试信号源,固定输出版本内部反馈网络完全封闭,根本找不到落脚点。
在LTspice里按F2,搜索“LT1117A”,或者直接在元件库里翻到“voltage regulators”分类,能找到LT1117-ADJ。它的输出电流能力为1A,引脚包括IN、OUT、ADJ、GND,VREF约1.25V,正好适合当教学案例。如果手上有其他厂家的SPICE模型,也可以导入,具体方法后面第5章会说。
2.2 搭建电路与关键参数设置
仿真原理图不需要复杂,核心就是把LDO的外部功率部分和反馈分压网络搭完整。我给的参数如下:
| 器件 | 设置 |
|---|---|
| VIN | DC 5V,可保留0.1Ω寄生电阻 |
| CIN | 10μF,用于输入退耦 |
| U1 | LT1117-ADJ |
| R1 | 10kΩ,从输出端到反馈分压交点 |
| R2 | 5.6kΩ,从反馈分压交点到GND |
| COUT | 10μF,ESR设为参数{esr} |
| Rload | 10Ω,静态负载约0.33A |
用R1=10kΩ、R2=5.6kΩ算一下输出电压:
Vout = VREF × (1 + R1/R2) + IADJ × R1 ≈ 1.25 × (1 + 10/5.6) ≈ 3.48V
IADJ典型值只有几十微安,乘以10kΩ也就是几十毫伏级,仿真里可以先忽略。
在LTspice里放置电容后,双击电容,在“Value”那一栏填容值,然后在“SpiceLine”里填Rser={esr}。此时esr还没有定义,直接跑仿真会报错,所以还需要加一条.param esr=1指令作为默认值,或者直接用.step扫描。
负载方面,除了放一个10Ω电阻,还可以并联一个脉冲电流源,专门用来做负载阶跃瞬态仿真。电流源的设置是:
PULSE(0 0.5 100u 1u 1u 200u 500u)表示负载电流在100μs时从0跳变到0.5A,上升沿1μs,维持200μs后再回落到0。
2.3 用.step指令一键扫ESR
稳定性的对比实验,最忌讳一个一个改参数反复仿真。LTspice提供了.step指令,可以一次跑多组参数。这里我们这样写:
.step param esr list 0.01 0.1 1 5 10这时电容的ESR会依次取10mΩ、100mΩ、1Ω、5Ω、10Ω。配合AC扫描,一次就能出来五组Bode图;配合瞬态扫描,一次也能出来五组输出波形。
如果你只想快速观察趋势,也可以写成:
.step dec param esr 0.01 10 5不过list方式更直观,因为跑完之后你清楚每一组曲线对应哪个ESR值。
3. Bode图怎么读:相位裕度与增益交越频率判断流程
3.1 先给稳定性定一个量化标准
判断LDO稳定性,工程师最常看两个指标:
- 相位裕度(PM,Phase Margin):在环路增益幅度降到0dB的那个频率点,也就是增益交越频率处,环路相位距离-180°还差多少度。一般要求≥45°,工程上做到60°比较理想。
- 增益裕度(GM,Gain Margin):在环路相位到达-180°的那个频率点,增益幅度比0dB低多少。一般要求≥6dB。
相位裕度不足,瞬态响应会振铃,裕度越小振铃越厉害;增益裕度不足,可能在高频段出现自激,两种都要看。
只要在LTspice里把环路增益T的幅频和相频曲线拉出来,这两个指标都能直接量出来。
3.2 LTspice断环测量怎么操作
测LDO环路增益,不能简单地在输出节点上加一个交流小信号源,因为那样会把输出负载阻抗改变,测出来的不是真实的环路响应。我们需要把环路真正断开,在断开点注入测试信号,再测返回信号。
推荐在LT1117-ADJ的ADJ引脚处断环。操作方法是:
- 把R1和R2的公共节点起一个网络标签,比如叫
adj。 - 把LT1117-ADJ的ADJ引脚单独引出一段线,起一个网络标签,比如叫
inj。 - 在
adj和inj之间串入一个理想电压源Vtest,DC值设为0,AC幅度设为1。 - 添加AC仿真指令。
注意Vtest要保证分压节点和ADJ引脚之间直流电平是通的,所以它的DC值必须为0,这样直流工作点不会被破坏。
加入AC仿真指令:
.ac dec 100 1 10Meg .step param esr list 0.01 0.1 1 5 10仿真完成后,在波形窗口添加一个表达式,将环路增益T定义为:
T = -V(adj)/V(inj)然后分别plot这个表达式的db()和ph(),就得到了Bode图。
3.3 从Bode图上直接读相位裕度
在LTspice的波形窗口里:
- 增益曲线看
db(-V(adj)/V(inj))。 - 相位曲线看
ph(-V(adj)/V(inj))。
使用游标找到增益曲线穿过0dB的那个频率点,然后看同一频率下相位曲线的数值。假设交越频率处的相位为-120°,那么相位裕度就是180 - 120 = 60°。如果相位曲线在某些状态下显示为正角,比如+240°,你就把它等价成-120°来看,本质一样。
增益裕度也一样:找到相位达到-180°的频率,看该频率下增益比0dB低多少。如果显示为-18dB,说明增益裕度有18dB,比较安全。
这里要说明一个容易迷惑的点:负反馈环路的低频相位天然就接近-180°,这不是不稳定。真正的不稳定信号,要看增益交越处的相位余量。很多新手第一次看到低频相位在-180°附近,容易误判,以为系统已经振荡了——其实那是负反馈接线的正常状态。
4. ESR从10mΩ扫到10Ω:三种典型仿真结果对比分析
4.1 ESR=10mΩ:陶瓷电容的稳定边缘
在.step里跑第一组ESR=10mΩ时,输出电容相当于一颗低ESR的陶瓷电容。Bode图上,增益交越频率通常落在几十千赫兹到几百千赫兹之间,但因为ESR零点跑到1.6MHz以上,远在带宽之外,环路相位得不到有效补偿,交越点处的相位裕度可能只有20°~30°,甚至更低。
瞬态仿真结果也印证了这一点:负载电流突加后,输出电压出现明显的衰减振荡,过冲可达几十毫伏,要振荡好几个周期才稳定。
这就是开头我遇到的现场:在输出端并联更多低ESR陶瓷电容,看起来像是增强了滤波,实际上只是把输出极点继续往低频拉,让相位裕度进一步恶化,振得更厉害。
4.2 ESR=1Ω:钽电容的经典表现
把ESR设成1Ω,保持Cout=10μF,ESR零点频率大约为16kHz。这个位置如果刚好在增益交越频率附近,相位就会得到及时拉升,相位裕度往往能到50°以上。
瞬态仿真里,输出过冲明显变小,振铃几乎消失,恢复时间也缩短。这是钽电容常见的稳定表现。老式LDO数据手册里推荐的输出电容范围,很多就是基于这类ESR区间设计出来的。
需要注意,钽电容的ESR会随温度变化,低温下ESR可能翻倍,所以仿真时不要只取一个常温值。用.step多扫几个温度或ESR,看最坏情况下的裕度是否还能接受。
4.3 ESR=10Ω:铝电解电容的过补偿风险
ESR涨到10Ω,零点频率降到1.6kHz。这个零点已经落在主极点附近,相位拉升作用很强,理论上相位裕度挺好看。但副作用也明显:零点频率太低,增益曲线在低频段过早展平,当调整管输出阻抗和负载电容在更高频段形成附加极点时,高频段可能出现新的增益过零,带来隐性振荡风险。
瞬态仿真还能看到另一个问题:ESR太大时,负载阶跃瞬间,输出电容上的压降跳变大部分落在ESR上,输出电压会出现一个很大的台阶式跌落,随后才缓慢恢复。这个“台阶”不是振荡,但会让负载端的电源跌落超过预期。
所以在实际电路里,铝电解电容虽然ESR容易满足老式LDO的稳定性要求,但瞬态响应和纹波表现并不算好,更适合对瞬态要求不高的低频退耦场景。
4.4 瞬态仿真补充:三种ESR的时域表现
在LTspice里,可以把仿真指令切换成瞬态:
.tran 600u .step param esr list 0.01 1 10负载电流源用前面说的:
PULSE(0 0.5 100u 1u 1u 200u 500u)跑完之后,对比V(out)的波形,你会非常直观地看到三种ESR下的行为差异:
| ESR值 | 过冲幅度 | 振铃情况 | 恢复时间 |
|---|---|---|---|
| 10mΩ | 大 | 明显,多周期振荡 | 长 |
| 1Ω | 小 | 基本无振铃 | 短 |
| 10Ω | 台阶式跌落明显 | 无振铃,但恢复缓慢 | 较长 |
这种“AC看裕度,瞬态看手感”的组合,比单纯看DC输出准确得多。
5. LTspice稳定性仿真翻车实录:5个高频报错点排查
5.1 断环后直流工作点不对,相位曲线全乱
如果插入Vtest后发现输出电压偏离了正常值,最常见的原因是Vtest的DC值没有设成0。有些人在AC源参数里习惯填“AC 1”,却忘记把DC设成0,导致串联进去一个直流电压,直接把误差放大器输入偏置抬偏了,环路工作点全乱,测出来的Bode图自然没有参考价值。
解决方法是双击Vtest,确认DC offset里填的是0,AC amplitude里填的才是1。如果电路在断环后不容易收敛,可以在LTspice的仿真指令里加:
.options gmin=1e-10 abstol=1e-12 reltol=1e-6或者直接在输出电容上设定初始条件IC=3.3V,能帮工作点快速起振。
5.2 相位曲线在低频从0°开始,符号反了
如果你画出的T表达式是V(adj)/V(inj),没有加负号,相位曲线在低频段会从0°附近开始,而不是从-180°附近开始。这会让不少新手误判。
这不是仿真错误,而是测量方向的问题。负反馈环路的低频相位本就该落在-180°附近。为了让曲线显示习惯一些,可以修改表达式为-V(adj)/V(inj)。加了一个负号之后,低频相位就会回到-180°一侧,后续读相位裕度也更顺手。
但如果加了负号之后,曲线反而变成了从0°开始,那说明你的测量方向定义反了,把adj和inj两个标签互换一下即可。
5.3 提示“Unknown schematic syntax”是哪里写错了
LTspice对Spice指令的语法很挑剔,经常出现的报错有这几种:
.step param esr list 0.01 1 10写到了原理图图纸上,而不是放到Spice Directive里。放错位置,LTspice会把文本当成一个无效元件,报一大堆看不懂的错。- 电容的SpiceLine写了
Rser={esr},但.param esr指令没写,变量未定义,仿真开始前就会报“Unknown parameter esr”。 .step语句里用了中文标点,比如全角空格、逗号,也会导致解析失败。
检查方法很简单:把所有指令都通过菜单“Edit -> SPICE Directive”添加。字符统一用英文半角,参数名不要带下划线以外的特殊符号。
5.4 外部SPICE模型导入后提示引脚未知
如果不用库里的LT1117,而是从官网下载其他LDO的SPICE模型,最常见的导入坑是引脚顺序不对。外部模型一般是一个.subckt,开头几行是:
.subckt LT1234 IN OUT GND但图形符号默认引脚顺序可能是输出、输入、地。两者不匹配时,需要右键元件,重新编辑引脚顺序,或者在原理图符号上把节点标签和.subckt声明逐一对应。更省事的办法是直接为这个模型画一个匹配的图形符号,文件名保存为同名的.asy,LTspice会自动关联。
另外,模型文件必须放在当前工程目录下,用.include xxx.lib引入。如果放在LTspice安装目录的lib\sub目录里,记得用绝对路径或相对路径,路径写错也会报文件找不到。
5.5 保存后多出一堆文件,仿真数据怎么管理
LTspice仿真完之后,工程目录下会多出.raw、.log等文件。.raw文件是波形数据,.log是错误日志和简化运算记录。很多新手以为文件损坏,删掉之后发现再打开原理图没有波形了。
我的习惯是给每个仿真项目单独建一个文件夹,原理图、模型文件、波形数据都放在一起。尤其当你用.step跑多组参数时,.raw文件会很大,但这是正常现象。想看哪组结果,直接在.raw的波形窗口里右键,选择“Select Steps”就能切换不同ESR值,不用每次都重新仿真。
6. 从仿真到实物:ESR选型建议与实测细节
6.1 不同ESR对应的电容选型方向
仿真看明白之后,落到实物选型上,思路就清晰了。针对传统需要外部ESR补偿的LDO,我一般按这个表来选输出电容:
| 电容类型 | 典型ESR范围 | 适用场景 | 注意 |
|---|---|---|---|
| 陶瓷电容MLCC | 5~20mΩ | 内部补偿完善的现代LDO | 传统LDO慎用,易振荡 |
| 钽电容 | 0.1~1Ω | 传统LDO的标准伴侣 | 注意耐压,过压会短路失效 |
| 铝电解电容 | 1~10Ω | 大容值低频滤波 | 高频特性差,并联陶瓷后需重新测裕度 |
| MLCC+外串电阻 | 可控 | 需要精细调整ESR零点的场合 | 串阻功率要够,瞬态台阶增大 |
如果你用的是内部补偿良好的现代LDO,比如LT3045、LT1963这类专门为低ESR陶瓷电容优化的型号,那输出电容直接用低ESR的陶瓷电容反而更好,不要为了追求“老经验”刻意串大电阻。所以仿真前先确认你手头LDO的内核是哪一类设计,这直接影响ESR的要求。
我自己的习惯是:先用仿真把“ESR允许的上下限”找出来,再去规格书里挑ESR落在这个区间内的电容。避免“别人说陶瓷电容好就全用陶瓷,别人说钽电容稳就全用钽”的盲目跟风。
6.2 LTspice中的几个提效小技巧
说几个平时用LTspice做电源仿真常用的技巧:
第一,用.step配合.meas可以自动筛出相位裕度到达目标的ESR区间。虽然LTspice的.meas语法对新手不太友好,但一旦写顺手,一堆ESR扫描数据就能自动汇总。简单示意:
.meas AC f0 find freq when mag(V(adj)/V(inj))=0db .meas AC lf find ph(V(adj)/V(inj)) at=f0注意这里mag表达式的写法在不同版本略有差异,如果看不懂就老老实实用游标读,不必花太多时间纠结自动化。
第二,瞬态仿真里负载阶跃的上升沿一定要设得比较陡,比如1μs。如果你把上升沿拉长得跟斜坡发生器一样,ESR造成的电压台阶会被时间积分抹平,看不出真实过冲。
第三,仿真时把输入电容CIN也带上,不要省。输入端的电感或寄生参数往往和LDO的负输入阻抗形成局部谐振,导致高频振荡,省掉输入电容会让整个环路仿真结果失真。
6.3 实测时容易忽略的测量细节
仿真通过只是第一步,实物的PCB布局、走线寄生、探头接法都会影响稳定性判断。
用示波器测输出瞬态时,探头一定要接在输出电容两端,而且要用短地弹簧或同轴线短地方式,不要用鳄鱼夹地线拉一根长线去接地,那等于在探头上接了一个大电感,测出来的振铃未必是LDO自激,反而是地环路噪声。
如果实物振荡、仿真稳定,优先检查输出电容的ESR是否和仿真假定偏差太大。可以用LCR表在100kHz频率下测一下实物电容的ESR值,再对照仿真区间。很多次“仿真稳、实物振”的锅,都出在电容批次差异上。
我还遇到过一种情况:仿真里ESR设是1Ω,相位裕度很好,实物却用的是“号称钽电容但实际是贴片高分子电容”,ESR只有几十毫欧,直接掉出稳定区间。所以选型时不要只看电容类型,要看规格书里的ESR指标,条件允许就用LCR表抽测。
最后再分享一个偷懒技巧:仿真ESR边界时,别一个个改参数,用.step打list多跑一遍,然后把相位裕度随ESR的对应关系拉出来看,挑裕度大于45°的那段ESR范围,再对照规格书选电容。做过一次之后,你基本就能摆脱“加电容靠玄学”的状态了。