3、分析类型详解(上):DC分析、AC分析、瞬态分析

各位同学,今天咱们来聊聊SPICE里最核心的三种分析类型。说实话,我见过不少工程师,仿真跑不通就怀疑电路有问题,其实很多时候是分析类型没选对,或者参数设置不合理。这一章,我把DC、AC、瞬态这三种分析掰开揉碎了讲清楚。

核心观点:选对分析类型,仿真就成功了一半。DC看静态工作点,AC看小信号频率响应,瞬态看时域波形。三者各有各的用处,谁也替代不了谁。

SPICE 三大分析类型 DC 分析 .op / .dc • 静态工作点 • 直流传输特性 • 功耗分析 AC 分析 .ac • 小信号频率响应 • 增益/相位 • 带宽/稳定性 瞬态分析 .tran • 时域波形 • 开关特性 • 建立时间/过冲 选择原则 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 语法

.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看小信号,瞬态看大信号。下次仿真跑不通的时候,先问问自己——我选对分析类型了吗?