浏览器内仿真器的工作原理
- 理解开关变换器为何在每个开关区间内都是线性电路,以及对其作精确逐步计算的含义。
- 针对快时间常数(time constant),比较精确步进与简单的积分方法(integration rule)。
- 了解仿真器如何求得周期稳态(periodic steady state),以及与从零初始状态开始的运行相比,这样做节省了什么。
每个区间内的线性电路
Section titled “每个区间内的线性电路”在两个开关事件(event)之间,仿真器中的每个开关管和二极管要么导通、要么关断,剩下的是一个线性电路:电阻、电感、电容和恒定电源。其状态,即电感电流和电容电压,在每个区间内服从带恒定电源的线性微分方程,状态空间平均法(state-space averaging)也正是从这一描述出发的 [Erickson & Maksimović 2020, Ch. 7]。对于经电阻充电的电容,无论步长多长,一步内的解都是精确的:
- 该步之后的电压
- 时间步长(time step)
- 时间常数(time constant)
- 该步开始时的电压
- 所趋近的电压
假设、约定与出处
- 假设
- 电路为线性,且其电源在该步内保持恒定
- 单极点(一阶)阶跃响应
- 备注
- 每一步把相对于 的偏差乘以 ,无论步长多长,该值都在 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),即周期的两千分之一或更短,因为它必须找出事件:在一个长步长内,二极管可能导通后又关断而不被察觉(计算方法)。
快时间常数下的简单方法
Section titled “快时间常数下的简单方法”通用积分器则以小步长来近似求解。最简单的方法是前向欧拉法(forward Euler),它用每一步起点处的斜率计算该步,并在每一步都把衰减模态的偏差乘以一个固定的放大因子 [Hairer & Wanner 1996]:
- 前向欧拉法的每步放大因子
- 时间步长(time step)
- 时间常数(time constant)
假设、约定与出处
- 假设
- 单独一个衰减模态:其变化率等于偏差除以 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)的,即矩阵乘以状态再加一个常数;此时若稳态唯一,一次牛顿迭代即可到达稳态。
一个电容以十纳秒的时间常数向某一电压充电,以五十纳秒为步长计算:
| 符号 | 数值 | 求法 |
|---|---|---|
| 该步开始时的电压 | 0 V | 已知 |
| 所趋近的电压 | 10 V | 已知 |
| 时间常数(time constant) | 10 ns | 已知 |
| 时间步长(time step) | 50 ns | 已知 |
| 该步之后的电压 | 9.93 V | 一阶电路的一个精确时间步 |
| 前向欧拉法的每步放大因子 | −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)
变换器方程的平均、扰动与线性化,以及 PWM 调制器的小信号模型。 - 课程 6.002 Circuits and Electronics (Spring 2007)
MIT 的第一门电路课程,含视频讲座、讲义和习题。
仿真器为什么能精确计算每个开关区间?
答案与解析
正确答案:C 区间内每个开关管和二极管都处于导通或关断状态;电路矩阵的指数给出任意步长上的精确解。
一个电容以 10 ns 的时间常数从 0 V 向 10 V 充电。经过一个 10 ns 的精确步后,它的电压是多少?
答案与解析
正确答案:A 与 10 V 的偏差在一个时间常数内衰减为原来的 1/e:10 V × (1 - 1/e) 约为 6.3 V。
用前向欧拉法以 50 ns 的步长计算时间常数为 10 ns 的模态。每一步把其偏差乘以多少?
答案与解析
正确答案:C 1 减去步长与时间常数之比,即 1 - 5:偏差的大小每一步都变为原来的四倍,并改变符号。
对于不振铃而衰减的模态,前向欧拉法的步长最大为多少时才能使其不增长?
答案与解析
正确答案:D 放大因子,即 1 减去步长与时间常数之比,只有在步长不超过时间常数的两倍时,其绝对值才不超过 1;振铃的模态需要更短的步长。
仿真器如何求得周期稳态?
答案与解析
正确答案:A 稳态是从一个周期起点到下一个周期起点的映射的不动点;牛顿法利用该映射的导数求出它。
对于电流始终大于零、开关管两端没有电容的降压变换器,原则上需要几次牛顿迭代?
答案与解析
正确答案:B 开关时刻和各区间的顺序都不取决于状态,而仿射方程若解唯一,牛顿法一次迭代就能解出。二极管电流降到零,或开关管两端的电容需要先完成电压摆动,都会使某个时刻取决于状态,这时就需要几次迭代。
本站例题、预设和练习中的数值均为合成值:为教学而凑整的数值,并非来自任何实际设计的数据。