仿真故障排查
当电路无法进行仿真时,你必须先判断问题出在电路本身,还是出在仿真过程。请按照本参考章节中的信息,逐条尝试建议的要点,每次只尝试一项。
有时在仿真过程中,会显示报告错误或警告的消息。这些消息列在 Messages 面板中。
- Warning Messages – 警告消息不会导致仿真致命失败。它们通常提供一些信息,说明 SPICE 为了完成仿真不得不对电路做出的更改,例如参数无效或缺失等。
- Error Messages – 错误消息提供的是仿真器无法解决、并且会导致仿真过程终止的问题信息。错误消息表示无法生成仿真结果,因此在你能够分析电路之前,必须先修正这些问题。
仿真分析失败的故障排除
所有仿真器面临的挑战之一是收敛性。术语 convergence 到底是什么意思?与大多数仿真器一样,Altium Designer 的 SPICE 引擎使用迭代过程:反复求解代表你的电路的方程,以找到静态(quiescent)电路电压与电流。如果无法找到这些电压与电流(即无法收敛),就无法对电路执行分析。
SPICE 使用以矩阵形式表达的联立线性方程,在仿真的每一步确定电路的工作点(直流电压与电流)。电路会被化简为一个电导数组,并填入矩阵以形成方程(G * V = I)。当电路包含非线性元件时,SPICE 会对线性方程进行多次迭代以处理非线性。SPICE 会先对节点电压做初始猜测,然后根据电路中的电导计算支路电流;再利用支路电流重新计算节点电压,如此循环重复。该循环会持续进行,直到所有节点电压与支路电流都落在指定容差范围内(收敛)。
但是,如果电压或电流在指定迭代次数内仍未收敛,SPICE 会产生错误消息(例如 singular matrix、Gmin stepping failed、source stepping failed 或 iteration limit reached)并中止仿真。SPICE 会将每一步仿真的结果作为下一步的初始猜测。如果你执行的是瞬态(Transient)分析(即时间在步进),而 SPICE 无法在指定时间步长下收敛到解,则会自动减小时间步长并重复循环。如果时间步长被减小得过小,SPICE 会显示 Timestep too small 消息并中止仿真。
通用仿真收敛故障排除
当仿真分析失败时,最常见的问题是电路无法收敛到合理的工作点。请使用以下技术来解决收敛问题。
收敛故障排除步骤
- 当你遇到收敛问题时,首先关闭除工作点(Operating Point)分析之外的所有分析。
- 查看 Messages 面板中是否有与仿真相关的错误/警告。
- 确保电路连线正确。不允许存在悬空节点和游离元件。
- 确保电路具有地节点,并且电路中的每个节点都有一条到该地的直流通路。可能会隔离节点的器件包括变压器和电容。电压源在直流下视为短路,电流源在直流下视为开路。
- 确保在输入仿真参数时,没有把数字 0 与字母 O 混淆。
-
确保为任何元件数值或仿真参数指定了正确的 SPICE 倍乘因子(例如
MEG而不是M,用于1e6)。倍乘因子不区分大小写。另外,数值与倍乘因子之间不允许有空格。例如,应写为1.0uF,而不是1.0 uF。 - 确保所有器件与源都设置为正确的数值。
- 确保任何受控源的增益设置正确。
- 临时去除串联电容或电流源,然后重新运行仿真。
- 临时去除并联电感或电压源,然后重新运行仿真。
-
在 Advanced Analysis Settings 对话框的 Advanced 选项卡中(通过在 Simulation Dashboard 面板的 Analysis Setup & Run 区域点击 Settings 进入),将
ITL1参数的值增大到300。这将允许工作点分析在放弃之前进行更多次迭代。 -
在 Advanced Analysis Settings 对话框的 Advanced 选项卡中,设置
RSHUNT1的值。该电阻值会被加在每个电路节点与地之间,有助于修正诸如“奇异矩阵(singular matrix)”错误等问题。一般来说,RSHUNT 值必须设置为非常高的电阻,例如1e12。 - 添加 .NS(Nodeset)器件来定义节点电压。如果某个节点电压的初始猜测偏差很大,可以使用 Nodeset 器件预先定义一个起始电压,用于工作点分析的预备计算。请在你放置的每个 Nodeset 器件中配置 Initial Voltage 参数。Nodeset 可从 Simulation Generic Components 库中放置。
- 如果 Nodeset 器件对收敛没有帮助,尝试通过放置 .IC 器件来定义初始条件。在这种情况下,工作点分析期间节点电压会被保持在指定值,随后在瞬态分析期间释放。初始条件器件可从与 Nodeset 器件相同的库中放置,Initial Voltage 参数必须以相同方式配置。
- 在 Simulation Dashboard 面板的 Analysis Setup & Run 区域中的 Transient 设置里启用 Use Initial Conditions 选项。该选项与 .IC 器件(或元件的 IC 参数)配合使用。启用后将不执行工作点分析,而是将指定电压作为瞬态分析的初始条件。
-
为你的模型指定串联电阻参数,并将
GMIN选项(Advanced Analysis Settings 对话框的 Advanced 选项卡)按10倍提高。 -
将半导体器件(尤其是二极管)的初始条件(Starting Condition)指定为
OFF。这可以通过在第一次迭代中跳过二极管(或半导体器件)来帮助解决数值收敛问题,从而改善收敛性。
DC Sweep 分析故障排除
当 DC Sweep 分析出现问题时,先尝试上述收敛故障排除步骤中列出的步骤。如果仍然遇到问题,请尝试以下方法:
- 更改 Simulation Dashboard 的 Analysis Setup & Run 部分中的 Step 参数值。如果器件模型中存在不连续点(例如模型的线性区与饱和区之间),增大步进大小可能使仿真跨过该不连续点;相反,减小步进将使仿真能够解析快速电压跃迁的不连续性。
- 不要使用 DC Sweep 分析。有些问题(例如滞回)无法通过直流分析解决。在这种情况下,更有效的方法是使用瞬态分析,并对相应电源的数值进行斜坡变化(ramp)。
瞬态分析故障排除
当瞬态分析出现问题时,先尝试上述收敛故障排除步骤中列出的步骤。如果仍然遇到问题,请尝试以下方法。
在 Advanced Analysis Settings 对话框的 Advanced 选项卡中(通过在 Simulation Dashboard 面板的 Analysis Setup & Run 区域点击 Settings 进入):
-
将
RELTOL参数设置为0.01。将容差从默认的0.001(0.1% 精度)放宽后,收敛到解所需的迭代次数会减少,仿真完成速度也会快得多。 -
将
ITL4参数的值增大到100。这将允许瞬态分析在每个时间步长上在放弃之前进行更多次迭代。提高该值可能有助于消除timestep too small错误,从而同时改善收敛性与仿真速度。 -
在电流/电压水平允许的情况下,通过增大
ABSTOL和VNTOL的值来降低精度。你的特定电路可能不需要达到 1uV 或 1pA 的分辨率。不过,你仍应至少保留比电路中预期的最低电压或电流水平低一个数量级的裕量。 - 将 Integration Method 更改为 Gear 方法之一。Gear 积分需要更长的仿真时间,但通常比梯形法更稳定。Gear 积分对会振荡或具有反馈路径的电路尤其有用。
其他可尝试的事项:
- 以更贴近实际的方式对电路建模。加入真实的寄生参数,尤其是杂散/结电容。在二极管周围使用 RC 吸收(snubber)。用子电路替换器件模型,尤其是射频与功率器件。
- 增大电路中任何周期脉冲源(Periodic Pulse)的上升/下降时间。即使是最好的脉冲发生器也无法瞬时切换。