在 ngspice 中运行网表
- 以批处理模式(batch mode)运行库中的网表,并读取其测量结果。
- 理解积分方法(integration rule)对比其时间步长(time step)快得多的模态有何影响,以及为什么梯形法(trapezoidal rule)会在电路本身不振铃的地方产生振铃。
- 选择使开关波形可信的选项。
仓库的 sim/ngspice/ 文件夹以 ngspice 网表(netlist)的形式收录了每个变换器算例 [ngspice – open source SPICE simulator]。运行 ngspice -b buck-ccm.cir,它会打印最后一个周期的 .meas 结果:开关节点电压、电感电流(反激变换器中为一次电流)和输出电压的平均值、最大值和最小值。运行 ngspice buck-ccm.cir,再输入 run,即可绘制该文件夹的 README 中列出的波形。CI 会重新运行每个网表,要求每个值都在理想公式的 1 % 以内(以该物理量在一个周期内的最大绝对值为基准),并要求输出已稳定。
SPICE 如何逐步计算电路
Section titled “SPICE 如何逐步计算电路”SPICE 在一系列时间点(time point)上计算电路。它选取每一步的步长,使其对积分方法估计的误差保持在容差(tolerance)以内;除非网表另行设定,相对容差(relative tolerance)为 0.001 [The ngspice team, Ngspice User's Manual]。在两个时间点之间,每个电容和电感都遵循 .options method 所选的积分方法:未另行指定时为梯形法,也可以选择 Gear 法,它使用后向差分公式(backward differentiation formula),默认最高用到第二个 [The ngspice team, Ngspice User's Manual]。
积分方法对快速模态的作用
Section titled “积分方法对快速模态的作用”变换器电路中可能存在比时间步长快得多的模态,例如在二极管停止导通处。单步法(one-step rule),如梯形法或后向欧拉法(backward Euler),每一步都把这种模态的偏差乘以一个固定的放大因子。梯形法取每步两端斜率的平均值:
- 梯形法的每步放大因子
- 时间步长(time step)
- 时间常数(time constant)
假设、约定与出处
- 假设
- 单独一个衰减模态:其变化率等于偏差除以 tau 的负值(试验方程)
- 每一步的时间步长相同
- 备注
- 该方法取每步两端斜率的平均值。任意步长下其放大因子都在 -1 与 1 之间(该方法是 A 稳定的),但步长远大于 时放大因子接近 -1:该模态几乎不衰减,且每一步都改变符号,形成电路本身并不存在的逐步振铃。如无另行指定,ngspice 采用该方法积分
- 出处
- Hairer & Wanner 1996, Sec. IV.3 (Stability Function of Implicit RK-Methods: the trapezoidal rule is A-stable, |R| tends to 1); derived here; The ngspice team, Ngspice User's Manual, .options, transient analysis: METHOD, trapezoidal by default
- 推导
- sympy 逐步推导
- 公式 id
num.gain_tr· equations.yaml 条目
无论步长多大,其放大因子的绝对值都不超过 1,因此解不会发散;但当步长远大于该模态的时间常数(time constant)时,放大因子趋近 -1:该模态几乎不衰减,并在每个时间点翻转符号,形成电路中并不存在的振铃 [Hairer & Wanner 1996]。Gear 法所用的后向差分公式中,第一个就是后向欧拉法,它取每步终点的斜率:
- 后向欧拉法的每步放大因子
- 时间步长(time step)
- 时间常数(time constant)
假设、约定与出处
- 假设
- 单独一个衰减模态:其变化率等于偏差除以 tau 的负值(试验方程)
- 每一步的时间步长相同
- 备注
- 该方法取每步终点的斜率。任意步长下其放大因子都在 0 与 1 之间,且随步长增大趋于零(该方法是 L 稳定的):比步长快得多的模态经过一步后几乎消失,且不产生振铃。它是后向差分公式(backward differentiation formula)中的第一个;当 .options method=gear 指定 Gear 法时,ngspice 使用这类公式,默认最高到第二个
- 出处
- Hairer & Wanner 1996, Sec. IV.3 (implicit Euler is L-stable) and Ch. V (Multistep Methods for Stiff Problems: backward differentiation formulas, the first of which is implicit Euler); derived here; The ngspice team, Ngspice User's Manual, .options, transient analysis: METHOD=gear, and MAXORD, 2 by default
- 推导
- sympy 逐步推导
- 公式 id
num.gain_be· equations.yaml 条目
其放大因子则趋于零,因此这种模态经过一步后几乎消失 [Hairer & Wanner 1996];第二个公式也能在几步之内使其衰减殆尽 [Hairer & Wanner 1996, Ch. V]。
库中观察到的现象
Section titled “库中观察到的现象”在 ngspice 的默认设置下,即采用梯形法且相对容差为 0.001 时,库中的 DCM 反激变换器恰好表现出这种现象:二极管一停止导通,二次电流就在相邻两步之间围绕零来回振铃,漏极电压则摆到低于零约一千伏。在相同容差下改用 Gear 法可以消除振铃,但二极管导通结束时其电流仍会越过零点,漏极电压在那一瞬间下冲到低于零数十伏。采用 .options method=gear reltol=1e-4(库中每个网表和原理图都带有这一行)后,两者都消失了。
时间常数为一纳秒的模态,以二十纳秒为步长计算:
| 符号 | 数值 | 求法 |
|---|---|---|
| 时间常数(time constant) | 1 ns | 已知 |
| 时间步长(time step) | 20 ns | 已知 |
| 梯形法的每步放大因子 | −0.818 | 梯形法对衰减模态的每步放大因子 |
| 后向欧拉法的每步放大因子 | 0.0476 | 后向欧拉法对衰减模态的每步放大因子 |
梯形法每一步把该模态乘以 −0.818:十步之后仍剩下约七分之一,且其符号在每个时间点都翻转。后向欧拉法把它乘以 0.0476:两步之后剩下的不到四百分之一。
▶ 在公式浏览器中打开:梯形法对衰减模态的每步放大因子
预设取自例题 num-stiff
扫描步长:放大因子在步长为时间常数的两倍处穿过零,步长更长时趋近 -1。
▶ 在公式浏览器中打开:后向欧拉法对衰减模态的每步放大因子
预设取自例题 num-stiff
后向欧拉法的放大因子则朝零减小。
在实验台上捕获 DCM 变换器在二极管停止导通时的开关节点波形。那里的振铃是真实的:电感与开关节点处的电容一起振铃,频率由这些元件决定。对同一电路仿真两次:一次采用梯形法和较长的最大步长,另一次采用 Gear 法和足够短的最大步长,短到能分辨真实的振铃,即取振铃周期的一小部分。在每个时间点都来回交替、且随最大步长改变而移动的振铃是数值性的;频率保持不变的振铃属于电路本身,除实验台附加的损耗外,它应与实验台上的结果相符。
- 在每个时间点都翻转符号的振铃来自积分方法,而不是电路(梯形法的放大因子)。
- Gear 法也会使其未能分辨的真实振铃衰减。对于无阻尼振荡,后向欧拉法的放大因子绝对值小于 1,而梯形法的恰好为 1 [Hairer & Wanner 1996]:除非步长相对于振铃周期很短,否则轻阻尼的 L-C 振铃在 Gear 法仿真中比在实际电路中衰减得更快。
- 更严格的容差是有代价的。它使步长变短、运行时间变长。库是为了 DCM 反激变换器的二极管关断而选用它的,并对所有算例一律采用。
- 工具 ngspice
开源 SPICE 仿真器;本站的仿真器在 CI 中与其交叉校验。 - 工具 Ngspice User's Manual
网表中每一行的参考文档:.tran 和 .meas 语句,以及设置积分方法和容差的 .options。
若网表未另行指定,ngspice 采用哪种积分方法?
答案与解析
正确答案:B 手册给出的 .options method 默认值是梯形法;Gear 法需要专门指定。
用梯形法以 20 ns 的步长计算时间常数为 1 ns 的模态。每一步把它乘以多少?
答案与解析
正确答案:D 步长的一半与时间常数之比为 10,放大因子为 (1 - 10)/(1 + 10),即 -9/11:该模态保留其大部分幅度,并改变符号。
这个放大因子在仿真波形中表现为什么?
答案与解析
正确答案:A 接近 -1 的放大因子使该模态几乎不衰减,并在每个时间点翻转其符号:这是积分方法造成的振铃,而不是电路的振铃。
用后向欧拉法,即 Gear 法所用后向差分公式中的第一个,以 20 ns 的步长计算同一模态。它会怎样?
答案与解析
正确答案:C 放大因子为 1/(1 + 20),约为 0.05:两步之后,该模态剩下的不到四百分之一。
为什么 Gear 法仿真可能错误地表现轻阻尼的 L-C 振铃?
答案与解析
正确答案:D 对于无阻尼振荡,后向欧拉法的放大因子绝对值小于 1,而梯形法的恰好为 1;步长较短时,两者的差别很小。
在 ngspice 的默认设置下,库中的 DCM 反激变换器表现出什么?
答案与解析
正确答案:A 二极管关断后留下的快速模态在梯形法下振铃;采用 Gear 法并将相对容差设为 1e-4 后,振铃消失。
本站例题、预设和练习中的数值均为合成值:为教学而凑整的数值,并非来自任何实际设计的数据。