3. 瞬态分析
各位同学,今天咱们来聊聊SPICE里最核心的三种分析类型。说实话,我见过不少工程师,仿真跑不通就怀疑电路有问题,其实很多时候是分析类型没选对,或者参数设置不合理。这一章,我把DC、AC、瞬态这三种分析掰开揉碎了讲清楚。
核心观点:选对分析类型,仿真就成功了一半。DC看静态工作点,AC看小信号频率响应,瞬态看时域波形。三者各有各的用处,谁也替代不了谁。
3.1 DC分析:.op 与 .dc
DC分析是所有仿真的基础。我个人的习惯是,不管跑什么仿真,先跑一遍DC看看工作点对不对。工作点不对,后面的AC和瞬态全是白费功夫。
3.1.1 .op — 静态工作点分析
.op 是最简单的分析语句,它计算电路中所有节点的直流电压、支路电流、器件功耗。语法就一行:
.op
没错,就这么简单。但你别小看它,它背后做的事情可不少:
- 把所有电容开路、电感短路
- 迭代求解非线性方程组(牛顿-拉夫逊法)
- 输出每个节点的电压、每个器件的电流和功耗
我的经验:在跑 .tran 或 .ac 之前,先跑一次 .op 看看结果。如果某个节点电压异常(比如运放输出轨到轨了),那肯定是偏置电路有问题。我曾经花了两天调试一个振荡器,最后发现是电流镜的宽长比写反了,.op 一眼就看出来了。
3.1.2 .dc — 直流扫描分析
.dc 用来扫描某个(或某两个)独立源或参数,观察电路响应随扫描变量的变化。语法如下:
.dc 源名称 起始值 终止值 步长
.dc 源名称1 起始1 终止1 步长1 源名称2 起始2 终止2 步长2 ; 嵌套扫描
举个例子,扫描一个共源放大器的传输特性:
Vgs 1 0 DC 0
Rd 1 2 10k
M1 2 1 0 0 NMOS W=10u L=1u
.dc Vgs 0 5 0.01
.probe V(2)
.end
这里扫描 Vgs 从 0V 到 5V,步长 10mV,观察漏极电压 V(2) 的变化。
| 参数 | 说明 | 注意事项 |
|---|---|---|
| 源名称 | 独立电压源或电流源的名字 | 也可以是温度 TEMP、模型参数 |
| 起始值 | 扫描起点 | 单位与源一致 |
| 终止值 | 扫描终点 | 必须大于起始值(正向扫描) |
| 步长 | 每次扫描的增量 | 步长越小精度越高,但仿真时间越长 |
注意:嵌套扫描时,内层扫描的步数不要太多,否则仿真时间会爆炸。我见过有人用嵌套扫描跑了三天三夜没跑完,就是因为步长设得太细了。
3.2 AC分析:.ac
AC分析是频域分析,它计算电路的小信号频率响应。说白了,就是给电路加一个小正弦信号,看输出幅度和相位随频率怎么变。
AC分析的前提是:电路必须先有一个正确的DC工作点。SPICE会在AC分析之前自动做一次DC分析,然后在这个工作点附近线性化所有非线性器件。
3.2.1 .ac 语法
<code>.ac DEC 点数 起始频率 终止频率 ; 十倍频程扫描
.ac OCT 点数 起始频率 终止频率 ; 八倍频程扫描
.ac LIN 点数 起始频率 终止频率 ; 线性扫描
三种扫描方式,我分别说说:
- DEC(十倍频程):最常用。每十倍频程取固定点数,适合宽频带分析。比如
.ac DEC 100 1 1G表示从1Hz到1GHz,每十倍频取100个点。 - OCT(八倍频程):每八倍频取固定点数,适合窄带分析。
- LIN(线性):频率均匀分布,适合观察特定频段的细节。
举个例子,分析一个运算放大器的开环增益:
.ac DEC 50 10 10MEG
.probe VDB(OUT) VP(OUT) ; 输出幅度(dB)和相位
我的习惯:做运放稳定性分析时,我一般用 DEC 扫描,每十倍频取100个点。点数太少,相位裕度算不准;点数太多,仿真慢得让人抓狂。100个点是个不错的折中。
3.2.2 AC分析的输入信号设置
AC分析需要信号源提供小信号激励。在独立源后面加 AC 幅度 相位:
Vin 1 0 AC 1 0 ; 幅度1V,相位0°
注意,这里的幅度是小信号幅度,不是DC偏置。DC偏置由 DC 参数单独设置:
Vin 1 0 DC 1.5 AC 1 0 ; DC=1.5V, AC幅度=1V
3.3 瞬态分析:.tran
瞬态分析是时域分析,它计算电路随时间变化的响应。这是最直观的分析方式——你给电路一个输入信号,看输出波形长什么样。
3.3.1 .tran 语法
.tran 步长 终止时间
.tran 步长 终止时间 起始时间
.tran 步长 终止时间 起始时间 最大步长
参数说明:
| 参数 | 说明 | 典型值 |
|---|---|---|
| 步长 | 输出数据的时间间隔 | 信号周期的1/100 ~ 1/1000 |
| 终止时间 | 仿真结束时间 | 根据电路稳定时间确定 |
| 起始时间 | 从哪个时间点开始保存数据 | 通常为0,跳过初始暂态时设置 |
| 最大步长 | SPICE内部计算的最大时间步长 | 信号周期的1/10 ~ 1/50 |
举个例子,仿真一个反相器的瞬态响应:
Vdd 1 0 DC 5
Vin 2 0 PULSE(0 5 0 1n 1n 50n 100n)
M1 3 2 0 0 NMOS W=10u L=1u
M2 3 2 1 1 PMOS W=20u L=1u
.tran 0.1n 200n
.probe V(3)
.end
避坑指南:我曾经犯过一个错误——瞬态仿真跑出来波形全是毛刺,查了半天发现是步长设得太大了。步长决定了输出数据的密度,但SPICE内部计算步长是自适应的。如果你发现波形不够平滑,可以加一个最大步长限制:.tran 0.1n 200n 0 1n,这样SPICE内部步长不会超过1ns。
3.3.2 瞬态分析的收敛问题
瞬态分析最容易出收敛问题。我总结了几种常见情况:
- 初始条件冲突:电路中有电容或电感,初始状态和DC工作点不一致。可以用
.IC语句设置初始条件。 - 时间步长太小:SPICE为了收敛把步长缩到飞秒级,仿真跑不动。可以设置
.options ITL4=500增加迭代次数限制。 - 电路振荡:正反馈电路或环路不稳定,导致仿真发散。先检查DC工作点是否正确。
我的经验:遇到瞬态不收敛,我一般先做三件事:第一,检查DC工作点;第二,加 .options RELTOL=1e-3 放松精度;第三,设置合理的初始条件。这三招能解决90%的收敛问题。
3.4 三种分析的对比与选择
最后,我用一张表总结一下三种分析的适用场景:
| 分析类型 | 看什么 | 典型应用 | 注意事项 |
|---|---|---|---|
| .op | 静态工作点 | 偏置检查、功耗计算 | 所有电容开路、电感短路 |
| .dc | 直流传输特性 | 电压传输曲线、噪声容限 | 嵌套扫描注意步数 |
| .ac | 小信号频率响应 | 增益带宽、相位裕度 | 必须先有正确DC工作点 |
| .tran | 时域波形 | 开关特性、建立时间 | 注意步长和收敛问题 |
嗯,这一章的内容就到这里。三种分析类型,每一种都有它的脾气。你只要记住:DC是基础,AC看小信号,瞬态看大信号。下次仿真跑不通的时候,先问问自己——我选对分析类型了吗?