第2章:仿真基础回顾——SPICE仿真器原理、网表结构、直流/交流/瞬态分析设置要点

各位同学,咱们今天聊聊仿真基础。我知道很多人觉得这玩意儿太理论,恨不得直接上手跑电路。但我跟你说,基础不牢,地动山摇。我见过太多工程师,仿真结果不对劲,折腾半天发现是分析类型选错了,或者网表里一个逗号点错了位置。嗯,咱们今天就把这些坑填上。

2.1 SPICE仿真器到底在干什么?

说白了,SPICE就是个解方程的工具。它把电路看成一组节点和支路,然后用基尔霍夫定律建立方程组。你给它一个网表,它给你算出各个节点的电压和电流。

我个人习惯把SPICE理解成「电路翻译官」。你画个原理图,它翻译成数学问题。然后它用牛顿-拉夫逊迭代法去解这些非线性方程。为什么需要迭代?因为晶体管、二极管这些东西,电压电流关系不是线性的。你想想看,一个MOS管的Ids和Vgs的关系,那是平方律关系,不是一条直线。

我在项目中遇到过一件事:一个同事仿真运放,结果总是不收敛。他以为是模型问题,折腾了两天。我过去一看,发现是初始条件设得太离谱,牛顿迭代直接发散。所以记住一句话:SPICE不是万能的,它只是个数学工具,你得给它合理的初始值。

核心要点:SPICE的核心是求解非线性微分方程组。直流分析解代数方程,瞬态分析解微分方程。交流分析是在直流工作点上做小信号线性化。

2.2 网表结构——你得会读,也得会写

网表是SPICE的灵魂。虽然现在大家都用图形化界面,但有时候你不得不手动改网表。比如做参数扫描,或者调用第三方模型。

一个标准的SPICE网表长这样:

* 标题行(必须要有)
V1 1 0 DC 5V
R1 1 2 1k
Q1 2 3 0 NPN
.model NPN NPN(BF=100)
.dc V1 0 5 0.1
.probe
.end

注意几个关键点:

  • 第一行必须是标题,以星号开头。别小看这个,有些老版本SPICE没标题行直接报错。
  • 节点编号:0号节点是地。其他节点你可以用数字,也可以用名字(比如VCC、OUT)。我个人习惯用名字,可读性强。
  • 元件格式:元件名 + 节点 + 参数值。电阻是R,电容是C,电感是L,晶体管是Q或M。
  • .model语句:定义器件模型参数。比如NPN管的BF(电流增益)、VA(厄尔利电压)。
  • 分析语句:.dc、.ac、.tran 这些,告诉SPICE你要做什么分析。
  • .end:结束标志。没有它,仿真器不知道什么时候停。

我的小技巧:写网表时,尽量给每个节点加个注释。比如 VCC 10 0 DC 5V ; 电源节点。这样过了一个月你再回来看,还能看懂。

2.3 直流分析——找静态工作点

直流分析,也叫DC分析。它的任务就是找到电路的静态工作点。说白了,就是电容开路、电感短路,然后解直流方程。

为什么重要?因为交流分析和瞬态分析都依赖直流工作点。你想想看,一个放大器,如果静态工作点没设对,管子可能工作在截止区或者线性区,那放大功能就废了。

设置要点:

  • .dc 语句:格式是 .dc 源名 起始值 终止值 步长。比如扫描V1从0到5V,步长0.1V。
  • 初始条件:有时候电路有多个稳态(比如触发器),你需要用 .ic 语句指定初始节点电压。
  • 收敛问题:如果仿真不收敛,试试减小步长,或者增加迭代次数(.options ITL1=500)。

我曾经遇到一个情况:一个带正反馈的比较器,直流扫描怎么都不收敛。后来我发现,是因为正反馈导致方程有多个解,SPICE在解之间来回跳。解决办法是加一个很小的初始扰动,或者用 .nodeset 指定一个合理的初始猜测值。

注意:直流分析时,所有电容视为开路,电感视为短路。如果你在DC分析中看到电容两端有电流,那肯定是设置错了。

2.4 交流分析——小信号频域响应

交流分析,也叫AC分析。它是在直流工作点的基础上,对电路做小信号线性化,然后计算频率响应。

说白了,就是给电路加一个正弦小信号,看它怎么响应。增益、带宽、相位裕度,都是靠这个分析得到的。

设置要点:

  • .ac 语句:格式是 .ac DEC 10 1 1MEG。意思是每十倍频程取10个点,从1Hz扫到1MHz。
  • 信号源:交流分析需要交流源。比如 V1 IN 0 AC 1,表示幅度为1V的交流信号。
  • 输出:通常看电压增益、输入阻抗、输出阻抗。用 .probe 语句输出波形。

我个人习惯用 .ac DEC 100 1 100MEG。为什么选100点?因为点太少,谐振峰可能漏掉;点太多,仿真慢。100点是个不错的折中。

还有一点:交流分析是线性分析。它假设信号很小,电路工作在线性区。如果你输入信号幅度是1V,而电源只有3.3V,那结果肯定不准。因为管子会进入非线性区。

避坑指南:我曾经用交流分析看一个功率放大器的频率响应,结果增益算出来100dB。后来发现,是因为输入信号设成了1V,而功放实际上只能处理毫伏级信号。小信号分析,信号幅度一定要小,通常1mV或1μV就够了。

2.5 瞬态分析——时域波形

瞬态分析,也叫TRAN分析。它是在时域上求解微分方程,看电路随时间的变化。

这个最直观。你给一个脉冲,看输出怎么跳变。建立时间、过冲、振铃,都在瞬态分析里看。

设置要点:

  • .tran 语句:格式是 .tran 1n 10u。意思是步长1ns,仿真总时长10μs。
  • 步长选择:步长太大会丢失细节,步长太小仿真慢。一般取信号最高频率周期的1/10到1/20。
  • 初始条件:用 .ic 语句设置电容初始电压,或者电感初始电流。
  • 最大步长:用 .tran 1n 10u 0 0.1n,最后一个参数是最大步长限制,防止SPICE自动步长跳太大。

我遇到过最坑的事:一个开关电源仿真,瞬态分析结果总是振荡。我以为是电路设计问题,查了三天。后来发现,是步长设得太大了,SPICE漏掉了开关切换的细节。把最大步长从1μs改成10ns,问题立刻解决。

我的建议:做瞬态分析时,先跑一个粗步长的快速仿真,看看大概波形。然后缩小步长,精细仿真关键区域。别一上来就设1ps步长,那会跑到天荒地老。

2.6 三种分析的配合使用

这三种分析不是孤立的。实际项目中,我通常这样用:

  1. 先做直流分析:确认静态工作点正确。比如运放的共模输入范围、输出摆幅。
  2. 再做交流分析:看小信号增益、带宽、相位裕度。确认稳定性。
  3. 最后做瞬态分析:看大信号响应、建立时间、过冲。

举个例子:设计一个运算放大器。先用DC分析看输入偏置电压、静态电流。然后用AC分析看开环增益和相位裕度。最后用TRAN分析看单位增益跟随器的阶跃响应。

如果AC分析显示相位裕度只有30度,那TRAN分析大概率会有过冲和振铃。你想想看,是不是这个道理?

总结一下:DC分析定工作点,AC分析看小信号,TRAN分析看大信号。三者结合,才能全面评估电路性能。别偷懒,该做的分析一个都不能少。

好了,这一章就到这里。下一章咱们聊聊实际仿真中的那些坑——收敛问题、精度问题、模型问题。都是我用真金白银换来的经验。