跳转到内容

浏览器内仿真器的工作原理

  • 理解开关变换器为何在每个开关区间内都是线性电路,以及对其作精确逐步计算的含义。
  • 针对快时间常数(time constant),比较精确步进与简单的积分方法(integration rule)。
  • 了解仿真器如何求得周期稳态(periodic steady state),以及与从零初始状态开始的运行相比,这样做节省了什么。

在两个开关事件(event)之间,仿真器中的每个开关管和二极管要么导通、要么关断,剩下的是一个线性电路:电阻、电感、电容和恒定电源。其状态,即电感电流和电容电压,在每个区间内服从带恒定电源的线性微分方程,状态空间平均法(state-space averaging)也正是从这一描述出发的 [Erickson & Maksimović 2020, Ch. 7]。对于经电阻充电的电容,无论步长多长,一步内的解都是精确的:

v1=v∞+(v0−v∞)e−Δtτv_1 = v_\infty + \left(v_0 - v_\infty\right) e^{- \frac{\Delta t}{\tau}}
v1v_1
该步之后的电压
Δt\Delta t
时间步长(time step)
τ\tau
时间常数(time constant)
v0v_0
该步开始时的电压
v∞v_\infty
所趋近的电压
一阶电路的一个精确时间步✓ 经 8 项测试验证
假设、约定与出处
假设
  • 电路为线性,且其电源在该步内保持恒定
  • 单极点(一阶)阶跃响应
备注
每一步把相对于 v∞v_\infty 的偏差乘以 e−Δt/τe^{-\Delta t/\tau},无论步长多长,该值都在 0 与 1 之间:这一步是精确的,偏差不会增大。电感电流遵循同样的规律,时间常数为 L/R
出处
Alexander & Sadiku 2017, Ch. 7 (First-Order Circuits: the complete response); derived here
推导
sympy 逐步推导
公式 id
sim.exact_step · equations.yaml 条目

具有多个状态的电路用其方程矩阵的指数一次计算所有状态,仿真器用缩放与平方法(scaling and squaring)计算这一矩阵指数 [Higham 2005]。区间内除舍入外不作任何近似,因此步长不会限制一步所得状态的精度。尽管如此,仿真器仍采用较短的子步(sub-step),即周期的两千分之一或更短,因为它必须找出事件:在一个长步长内,二极管可能导通后又关断而不被察觉(计算方法)。

通用积分器则以小步长来近似求解。最简单的方法是前向欧拉法(forward Euler),它用每一步起点处的斜率计算该步,并在每一步都把衰减模态的偏差乘以一个固定的放大因子 [Hairer & Wanner 1996]:

gFE=1−Δtτg_\mathrm{FE} = 1 - \frac{\Delta t}{\tau}
gFEg_\mathrm{FE}
前向欧拉法的每步放大因子
Δt\Delta t
时间步长(time step)
τ\tau
时间常数(time constant)
前向欧拉法对衰减模态的每步放大因子✓ 经 8 项测试验证
假设、约定与出处
假设
  • 单独一个衰减模态:其变化率等于偏差除以 tau 的负值(试验方程)
  • 每一步的时间步长相同
备注
该方法取每步起点的斜率。只有步长短于 2τ2\tau 时,其放大因子才保持在 -1 与 1 之间;步长更长时,每一步都把偏差乘以一个绝对值大于 1 的数并翻转其符号,因此解无界增长。于是,电路中最快的时间常数(例如小电阻后面的小节点电容)限制了整个电路的步长
出处
Hairer & Wanner 1996, Sec. IV.2 (Stability Analysis for Explicit RK Methods: explicit Euler); derived here
推导
sympy 逐步推导
公式 id
num.gain_fe · equations.yaml 条目

步长超过时间常数的两倍时,放大因子的绝对值大于 1,解无界增长。变换器中既有快时间常数,例如开关节点处小电阻后面的小电容,也有输出滤波器的慢时间常数:这样的方法必须以短于最快时间常数的步长,计算最慢时间常数所需的那么多个周期。SPICE 用隐式(implicit)方法避免发散,无论步长多大,隐式方法都不会让衰减模态增长(见 ngspice 页面)。

当某个开关改变状态时,区间结束:在栅极信号的边沿,以及二极管电流降到零或其电压使其导通时。仿真器利用同一精确解在步内找出该时刻,因此下一个区间从正确的状态开始(计算方法)。

在 CCM 下,若滤波器会振铃,变换器输出从零初始状态开始,按滤波器的包络时间常数趋于稳定(包络时间常数),要使启动误差降到其一小部分,需要许多个周期(稳定所需周期数)。仿真器则直接寻找这样一个周期起始状态:一个周期把它映射回其自身。这就是周期稳态,即从一个周期的初始状态到下一个周期初始状态的映射(map)的不动点(fixed point)。牛顿法(Newton’s method)利用该映射的导数,即周期结束时的状态如何依赖于周期开始时的状态,经几次迭代就能求出它 [Aprille & Trick 1972]。对变换器而言,该导数是各步矩阵的乘积,并在每个发生时刻取决于状态的事件(例如二极管电流降到零)处修正(计算方法)。若开关时刻和各区间的顺序都不取决于状态,例如电流始终大于零、开关管两端没有电容的降压变换器,则该映射是仿射(affine)的,即矩阵乘以状态再加一个常数;此时若稳态唯一,一次牛顿迭代即可到达稳态。

一个电容以十纳秒的时间常数向某一电压充电,以五十纳秒为步长计算:

精确步进示例
符号数值求法
v0v_0 该步开始时的电压0 V已知
v∞v_\infty 所趋近的电压10 V已知
τ\tau 时间常数(time constant)10 ns已知
Δt\Delta t 时间步长(time step)50 ns已知
v1v_1 该步之后的电压9.93 V一阶电路的一个精确时间步
gFEg_\mathrm{FE} 前向欧拉法的每步放大因子−4前向欧拉法对衰减模态的每步放大因子

在长达五个时间常数的一步中,精确步进使电容电压从 0 V 变为 9.93 V。同样步长下,前向欧拉法的放大因子为 −4:它的第一步落在终值电压的另一侧,与终值的距离是起始时的四倍,此后每一步都再重复一次。

▶ 在公式浏览器中打开:前向欧拉法对衰减模态的每步放大因子
预设取自例题 sim-exact-step

扫描步长:只有步长小于时间常数的两倍时,前向欧拉法放大因子的绝对值才不超过 1。

▶ 在公式浏览器中打开:一阶电路的一个精确时间步
预设取自例题 sim-exact-step

无论步长多长,精确步进都趋近终值电压。用降压变换器示例打开仿真器:其稳态是直接计算出来的,无需经过启动过程。

▶ 在仿真器中打开:降压
预设取自例题 buck-basic

用函数发生器输出的方波经电阻给电容充电,并捕获电容电压。在半个周期开始时和一个时间常数之后读取其值,与精确步进的结果比较。然后取间隔为两倍时间常数的采样点,从第一个采样点开始手工应用前向欧拉法:第一步就已越过终值电压,而电路本身并不会这样。

  • 稳态不是启动过程。存在稳态时,仿真器给出的是稳态;实验台上的启动或负载阶跃会经历仿真器不显示的瞬态过程。只有找不到稳态时,它才绘制从零初始状态开始的启动过程。
  • 仅靠小步长并不能使显式(explicit)方法稳定。对于不振铃而衰减的模态,步长必须短于最快时间常数的两倍,即使该模态快到对结果无关紧要也是如此(前向欧拉法的放大因子)。轻阻尼的振铃则需要短得多的步长,而无阻尼的振铃在任何步长下都会增长 [Hairer & Wanner 1996, Sec. IV.2]。
  • 图中绘制的是采样点。比子步更窄的峰值可能出现在报告的数值中,却不出现在图中。
  • 图书章节 AC Equivalent Circuit Modeling (Ch. 7) — R. W. Erickson, D. Maksimović · 访问于 2026-09-23
    变换器方程的平均、扰动与线性化,以及 PWM 调制器的小信号模型。
  • 课程 6.002 Circuits and Electronics (Spring 2007) — A. Agarwal, MIT OpenCourseWare (course content by A. Agarwal and J. H. Lang) · 访问于 2026-09-23
    MIT 的第一门电路课程,含视频讲座、讲义和习题。
  1. 仿真器为什么能精确计算每个开关区间?

    1. 因为它采用非常小的步长
    2. 因为它在浏览器中运行 SPICE
    3. 在一个区间内,电路是带恒定电源的线性电路,因此其解是可以计算的指数函数
    4. 因为变换器中没有电容
    答案与解析

    正确答案:C 区间内每个开关管和二极管都处于导通或关断状态;电路矩阵的指数给出任意步长上的精确解。

  2. 一个电容以 10 ns 的时间常数从 0 V 向 10 V 充电。经过一个 10 ns 的精确步后,它的电压是多少?

    1. 约 6.3 V
    2. 约 3.7 V
    3. 10 V
    4. 5 V
    答案与解析

    正确答案:A 与 10 V 的偏差在一个时间常数内衰减为原来的 1/e:10 V × (1 - 1/e) 约为 6.3 V。

  3. 用前向欧拉法以 50 ns 的步长计算时间常数为 10 ns 的模态。每一步把其偏差乘以多少?

    1. 约 0.007
    2. 1
    3. -4
    4. -1
    答案与解析

    正确答案:C 1 减去步长与时间常数之比,即 1 - 5:偏差的大小每一步都变为原来的四倍,并改变符号。

  4. 对于不振铃而衰减的模态,前向欧拉法的步长最大为多少时才能使其不增长?

    1. 时间常数的一半
    2. 时间常数
    3. 任意步长
    4. 时间常数的两倍
    答案与解析

    正确答案:D 放大因子,即 1 减去步长与时间常数之比,只有在步长不超过时间常数的两倍时,其绝对值才不超过 1;振铃的模态需要更短的步长。

  5. 仿真器如何求得周期稳态?

    1. 用牛顿法求解这样一个周期起始状态:一个周期把它映射回其自身
    2. 从零初始状态开始仿真,直到不再有任何变化
    3. 采用平均模型
    4. 从 ngspice 中读取
    答案与解析

    正确答案:A 稳态是从一个周期起点到下一个周期起点的映射的不动点;牛顿法利用该映射的导数求出它。

  6. 对于电流始终大于零、开关管两端没有电容的降压变换器,原则上需要几次牛顿迭代?

    1. 数百次
    2. 一次,因为此时周期映射是仿射的:矩阵乘以状态,再加上一个常数
    3. 与包络时间常数的个数相同
    4. 不需要
    答案与解析

    正确答案:B 开关时刻和各区间的顺序都不取决于状态,而仿射方程若解唯一,牛顿法一次迭代就能解出。二极管电流降到零,或开关管两端的电容需要先完成电压摆动,都会使某个时刻取决于状态,这时就需要几次迭代。

本站例题、预设和练习中的数值均为合成值:为教学而凑整的数值,并非来自任何实际设计的数据。