1. 问题现象与根因剖析
1.1 不收敛的表象
在TINA里跑瞬态仿真,不收敛很少是“突然死机”式的崩溃,而是一步步给你添堵。最常见的场景是:仿真进度条走到某个时间点就停住,接着弹窗提示“Time step too small”或者“Minimum step size reached”;有时候更直接,报一个“Singular matrix”,告诉你在当前时刻根本解不出节点电压。还有种情况比较隐蔽,仿真器没报错,跑完了,但波形上满是锯齿状的高频振荡,理论上不该出现在这个频段的东西全来了。
这几种现象看着都是“不收敛”,但成因差别很大。Time step too small,说明求解器把步长一缩再缩,缩到下限还是达不到误差要求,只能抛锚。Singular matrix则是矩阵层面出了问题,通常是电路拓扑里有理想的电压源直接并联电容,或者存在纯电感割集这一类结构,雅可比矩阵秩不够,无法求逆。锯齿振荡往往不是数值问题,而是电路本身在仿真器眼里是个无阻尼系统——真实的寄生电阻帮你吸收掉了,但在SPICE里这些损耗不存在。
1.2 为什么功率MOSFET特别容易不收敛
很多人一开始会怀疑是自己电路搭错了,其实功率MOSFET本来就是瞬态仿真的“重灾区”。以英飞凌600V CoolMOS这类管子为例,官方SPICE模型不是教科书里那种Level 1 MOS加电容的简单模型,而是完整的子电路,里面包含了:
- 用来模拟Rdson电压和温度特性的压控电阻或JFET结构
- 高度非线性的电容:Ciss、Coss、Crss,通常用受控源拟合
- 体二极管模型,带反向恢复参数
- 封装寄生电感、热阻网络等
这些元件的共同特点是:状态变量之间耦合强,而且很多特性是分段拟合的,导数在分段点不连续。SPICE引擎做瞬态分析时,每个时间步都要做牛顿-拉夫逊迭代,遇到导数突变或者强非线性,迭代就容易发散。尤其是开关瞬间,Vds在几十纳秒内从几百伏掉到接近零,Coss的容值可能变化几个数量级,这个非线性强度已经超出了默认迭代策略能处理的极限。
还有一个容易被忽略的坑:很多模型里用了行为级电压源或电流源(E元件、G元件、B元件)来做拟合。这些受控源在边界处的处理差异很大,TINA兼容SPICE 2和SPICE 3语法,但个别行为源写法在解析时会有偏差,导致瞬态计算出现奇怪的跳变。所以遇到不收敛,先把模型当作最大的怀疑对象,没有错。
2. TINA中英飞凌MOSFET模型的导入与检查
2.1 模型获取与格式选择
英飞凌的模型获取路径很固定:官网首页进入“Models(仿真模型)”栏目,或者直接搜料号加SPICE model,就能进入下载中心。下载前留意器件是标准系列还是车规AEC版本,同一个料号后缀不同可能对应不同的模型文件。
下载下来的文件常见的后缀有.lib、.sub、.cir、.spi,本质上都是SPICE文本文件,内容大同小异。英飞凌对大部分产品会同时提供PSpice模型和LTspice模型,少数还提供SIMetrix格式。选择哪一份?我的建议是优先选标注“通用SPICE”或“LTspice”的版本,因为TINA对这两种格式的兼容性整体较好,纯PSpice语法(比如某些混合仿真扩展语法)偶尔会有解析问题。
2.2 导入TINA的两种方式
在TINA里导入SPICE模型,我常用的有两条路。第一条是直接用菜单导入:
- File → Import → SPICE Netlist
- 选择下载好的.lib文件
- TINA会弹出窗口提示解析结果,成功后会生成一个带引脚的原理图符号
这种方法省事,但有个坑:TINA解析subckt后自动生成的符号管脚顺序,不保证和你手工用的原理图符号一致。英飞凌的模型文件通常按D、G、S(有时带温度调控引脚)顺序定义,导入后一定打开符号检查,对照datasheet确认管脚映射,别直接接线上电。
第二条路是手动放置Generic SPICE Subcircuit元件,然后双击编辑,把模型文件的subckt内容粘贴进去。这样适合临时测试单个模型,也方便改内部参数做敏感性分析。缺点是需要自己维护引脚映射,容易出错。我个人的习惯是:正式项目用第一条路,快速验证某个奇怪的收敛问题时用第二条路。
2.3 导入后的参数体检
导入完成不等于万事大吉。我会习惯性地打开模型的属性窗口,扫一眼关键参数。如果模型是传统MOS模型,能看到VTO、KP、RD、RS、RG这些常规参数;但英飞凌的大功率模型很多是行为模型,参数命名会不同,比如包含温度系数、Coss拟合系数之类。这时候别慌,重点看三样东西:
- 阈值电压VTO是否在合理范围,增强型N沟道一般是2V到4V
- 有没有RDS(ON)对应的导通电阻参数,用来和datasheet对一下
- 体二极管参数是否存在,反向恢复相关参数(如TRR、RRM)的量级是否正常
为什么做这一步?我遇到过不止一次:官网模型更新版本后,内部参数命名变了,导入TINA时部分参数没被识别,导致模型表现异常——比如VGS加10V完全不导通,或者体二极管当成理想二极管。参数体检能帮你提前发现这类问题,否则你在后面所有仿真里都会被一个“坏模型”带偏。
这里再补充一点,有些厂商为了防抄,会在模型里加入仿真器专属的加密校验,TINA可能解析不了加密部分。这时候不用硬刚,去下载纯文本的standard版本模型,或者换用其他仿真器验证。
3. 五步解决不收敛:从仿真参数到电路改造
3.1 第一步:放宽求解器容差
SPICE引擎内部有一套误差控制系统,核心参数是RELTOL、ABSTOL和VNTOL。RELTOL控制相对误差,默认值0.001,意思是每个节点电压和支路电流的相对变化超过千分之一就必须缩小步长重算。ABSTOL是电流绝对误差,默认1e-12安培,对功率电路来说实在太小了,因为你的电流动不动几十安培,1e-12的绝对误差意味着求解器在追逐几个数量级以下的微小变化,白白消耗大量计算时间,还容易卡死。VNTOL是电压绝对误差,默认1e-6伏,同样过度严格。
在TINA的分析选项里,你可以把RELTOL放宽到0.01,ABSTOL调到1e-9甚至1e-8,VNTOL调到1e-4。功率MOSFET的开关波形精度完全不受影响,但噪声底问题会显著改善。放心调,这个操作在所有SPICE同类工具里都是通用的,很多资深PSpice用户跑功率电路,也会把容差调松一个量级。
3.2 第二步:控制时间步长
瞬态仿真里,TINA是根据误差自动变步长的,但用户设置的最大时间步长是一个天花板。默认值往往偏大,好处是仿真快,坏处是遇到开关动作时,求解器不得不在一个很大的步长里硬生生迭代出纳秒级的跳变,收敛难度直线上升。
我的做法是:在瞬态分析设置里手动指定最大步长,数值取开关周期的1/200到1/1000。比如开关频率100kHz,周期10us,最大步长设成50ns;如果还要仔细观察开关沿,可以加密到10ns。代价是仿真时间会拉长,尤其是多管拓扑,但换来的是稳定性和精度,值。
另外,如果电路里用的是理想脉冲源,默认上升沿和下降沿往往是0或极小值(比如1ps),这等于给求解器出了个难题。把上升沿和下降沿设置为实际驱动器的水平,比如50ns到100ns,求解器就有充分的时间窗口完成迭代过渡。这个操作在物理上也是合理的,真实的栅极驱动器输出爬升率受栅极电荷限制,根本不可能达到1ps。
3.3 第三步:设置合理的初始条件
大量瞬态不收敛,其实是启动阶段埋下的雷。比如你想仿一个母线电容预充到400V的电路,如果仿真开始那一刻,400V电压源直接接到一个未充电的电容上,相当于强制节点电压在t=0瞬间跳变400V,任何数值积分都无法平滑处理这种阶跃,不收敛几乎是注定的。
应对方法有三类:
- 在瞬态分析设置里勾选Use Initial Conditions(UIC)模式,然后为关键节点添加初始电压指令,把母线电容设置成预充状态
- 使用初始条件文件,在TINA里给节点赋初值
- 更稳妥的办法是先把电源用带斜坡的方式加电,比如把直流电压源换成PWL源,在20us内从0慢慢升到400V,让电路有一个接近真实的启动过程
对双脉冲测试这类电路,正确设置初始条件尤其重要:母线电容电压初始化为目标母线电压,电感电流初始化为0(第一脉冲开始前),其他节点用DC工作点结果预充。这样仿真的起点就是一个稳态,求解器不需要在第一个步长里强行处理巨大跳变。
3.4 第四步:在电路层面“物理消振”
如果前两步还压不住,问题很可能出在电路本身——不是数值问题,而是你的电路在SPICE眼里是个无阻尼的振荡器。真实电路有PCB寄生电感、走线电阻、器件封装阻抗,这些损耗会把高频振铃吸收掉;但SPICE里如果你没把这些寄生参数放进去,电路就会在开关边沿激起无穷无尽的振荡,求解器被这些高频振荡拖死。
朴素的办法是给电路增加真实的阻尼元件:
- 栅极串联电阻Rg从1欧到几十欧,串在驱动源和栅极之间,抑制米勒平台附近的栅极振荡
- D-S之间并联RC吸收电路,典型值电阻几个欧姆、电容几百皮法到纳法,专门吸收关断尖峰
- 如果用了快恢复二极管,在二极管两端并联小RC同样有效
- 在D-S之间并联一个几兆欧的电阻,给直流偏置建立通路,避免浮空节点导致奇异矩阵
这些元件的数值要结合开关频率和寄生参数选,不是越大越好。RC吸收的电容太大,会额外消耗开关损耗,电阻太大又起不到阻尼作用。我一般先取R=10欧、C=470pF起步,观察波形振铃再调整。这样改动后,电路在物理上更像真实样机,仿真器的迭代过程也顺畅得多。
3.5 第五步:模型降级替代
到了这一步,仍然不收敛的话,就要考虑“绕路”了。低成本的排查方式是用理想开关模型(TINA里的电压控制开关或普通开关)替换功率MOSFET,先把电路整体调通,确认控制逻辑、工作点、损耗分布都没问题。然后用英飞凌模型替换回来,如果原来的问题又出现,基本上可以断定问题出在MOSFET模型与电路条件的匹配上。
模型替换还有一层思路:英飞凌官网一份器件会提供多个版本,比如标准SPICE模型和简化模型,或者PSpice版在TINA里运行不佳,换LTspice版试试。不同版本的模型对非线性电容、体二极管反向恢复的处理方式有差异,换个版本经常能解决。代价是简化的模型牺牲了部分精度,尤其是在Rdson温度特性和Coss曲线拟合上会粗糙一些。我的原则是:先用简化模型完成架构验证,最后再做精确仿真,两者交替使用,效率最高。
4. 实操案例:双脉冲测试电路的不收敛排查
4.1 电路拓扑与仿真设置
把上面这些方法落到实际中,最典型的就是双脉冲测试(Double Pulse Test,DPT)电路。这个电路在功率器件测试台架里是标准存在,用来提取开关损耗和动态特性,在TINA里仿真它也常碰到不收敛。我用英飞凌600V CoolMOS中的一个常见料号做例子:IPB60R040C7,搭一个简化但有代表性的DPT电路。
电路参数如下:
- 高压直流源VDC:400V
- 母线电容Cbus:100uF
- 负载电感L:200uH
- 续流二极管D:超快恢复二极管
- 栅极驱动:脉冲发生器,输出电压0到15V,脉冲宽度根据目标电流设计
- 栅极电阻Rg:10欧
- 漏极寄生电感Lstray:20nH,模拟PCB和封装电感
仿真目标:第一脉冲在50us内把电感电流Id冲到大约20A,然后关断,观察关断尖峰;第二脉冲验证续流阶段的电流转移。先不管电流精确值,目标是让仿真稳定跑完。
4.2 第一次仿真:报错与现象
我故意用一个很天真的设置来演示不收敛的发生。脉冲源的上升沿设为1ns,仿真时间50us,最大步长不设,容差用默认值,初始条件不初始化。点运行后,大概在t=1.2us附近,进度条停住了,弹出Time step too small。
我把波形拉出来看,Vds在关断那一刻冲上去之后,一路振荡,从几百伏直接跳到上千伏,再被硬生生拉回来,反复几次之后彻底发散。这就是典型的数值振荡加物理振铃叠加效应。栅极电压在米勒平台附近也有明显的来回抖动,说明Cgd的极强非线性把栅极节点也拖下水了。
4.3 逐步排查与解决过程
排查不是一股脑把所有参数全改掉,那样等于没排查。我按顺序做:
第一步,把脉冲源上升沿从1ns改成50ns。这一改,仿真能往前推进了,但还是会在关断沿附近卡住,不过报错点从1.2us挪到了接近50us的位置,说明启动阶段的问题解决了,关断瞬间才是核心矛盾。
第二步,在D-S之间并联RC吸收,先取R=10欧、C=470pF。这步改动很有效,关断尖峰被压到600V以内,仿真的收敛性明显提升。虽然还是偶尔报Time step too small,但已经不是每次都崩。
第三步,设置初始条件。运行前给Cbus设置初始电压400V,电感电流设0,同时在瞬态分析里启用UIC。这步做完,启动阶段彻底稳定,仿真终于能从头到尾跑完。
第四步,在能跑完的前提下,再把最大步长设为10ns,RC吸收微调到R=4.7欧、C=1nF,输出波形平滑干净,关断尖峰约550V,Id峰值和手算结果基本一致。
整个过程大概花了半小时。最值钱的不是最后那组参数,而是先解决启动、再解决关断、再处理阻尼、最后优化精度这条排查顺序。
4.4 最终结果与参数对照
最终稳定运行的仿真参数整理如下:
| 项目 | 第一次尝试 | 最终参数 |
|---|---|---|
| 脉冲上升沿 | 1ns | 50ns |
| 最大时间步长 | 默认 | 10ns |
| 初始条件 | 无 | Cbus=400V,IL=0(UIC) |
| D-S吸收 | 无 | 4.7欧 + 1nF |
| 容差 | 默认 | RELTOL=0.01,VNTOL=1e-4 |
稳定后的波形特征:Vgs在导通和关断过程中没有明显振铃,Vds关断尖峰约550V,比母线电压400V高出150V,能量主要被RC吸收网络和寄生电感吸收;Id波形在50us内上升到约20A,关断后电流转移给续流二极管,第二脉冲阶段电流斜率恢复,整个时序和理论分析一致。
5. 常见问题与排查技巧速查表
5.1 典型报错与应对
把我在TINA里做功率MOSFET仿真时常遇到的报错整理成一张表,方便直接查阅:
| 报错或现象 | 根因方向 | 优先处理 |
|---|---|---|
| Time step too small | 强非线性导致迭代不收敛;无阻尼振铃 | 放宽RELTOL;给脉冲设上升下降沿;加RC吸收 |
| Singular matrix | 理想电压源并联电容;纯电感割集;浮空节点 | 检查拓扑;串联合理电阻;给浮空点加偏置电阻 |
| No convergence in operating point | 静态工作点无法建立 | 先断开大电容电感,逐级上电;用UIC跳过工作点计算 |
| 波形锯齿状高频振荡 | 模型查找表导数不连续;电路无物理阻尼 | 加栅极电阻;加RC吸收;削减寄生振荡源 |
| 开关波形断断续续 | 最大步长设置过大 | 将最大步长设为开关周期的1/200到1/1000 |
5.2 独家避坑技巧
这几条都是拿时间换来的。
我的习惯是“一个模型先单测,再进系统”。拿到英飞凌的SPICE模型,先搭一个最简单的单管测试小电路,正栅压、关断、加感性负载,确认模型本身能正常跑。如果模型自己都跑不利索,进了三电平、全桥这类复杂拓扑只会更麻烦。单测通过后再做大电路,能省下大把定位时间。
另一个技巧:区分“计算步长”和“输出步长”。TINA允许你设置输出波形的采样间隔,这跟内部求解器的步长是两回事。很多人把输出步长设得很小,结果数据量爆炸、仿真变慢,但实际求解器未必需要那么小的步长。合理做法是输出步长略大于或等于最大计算步长,波形足够看,速度也快。
关于不同仿真器的对比,也有必要多说一句。同样的模型,LTspice默认设置下能跑通,TINA报错,不稀奇;反过来也一样。SPICE引擎虽然都源于伯克利SPICE,但各家在收敛策略、默认步长、容差处理上差别不小。遇到顽固的不收敛,在LTspice或Cadence Spectre上做一次对照,能帮助你判断到底是模型问题、电路问题,还是仿真器算法差异。我有一次折腾了一个下午的TINA不收敛,换到LTspice一跑就通了,最后发现是英飞凌模型里一个加密的表达式在TINA里没被完整解析。
最后一点,关于初始条件的使用。UIC模式是把双刃剑:它跳过了直流工作点计算,能帮助你绕开工作点不收敛,但同时也意味着电路在t=0时刻不满足基尔霍夫定律。如果初始条件设置得不一致,比如电容电压和电感电流之间违反能量守恒,求解起飞后就可能再次发散。所以用UIC时,初始条件要尽可能选取一个物理自洽的状态,或者先用DC分析的结果做预充。
我在实际项目中,还有一个压箱底的技巧:如果目标只是做系统级验证或控制策略设计,完全不需要动用精确的MOSFET模型。先用TINA里的理想开关、简化半导体模型把系统的能量流、控制环路、保护逻辑跑通,最后再针对开关瞬态换上英飞凌精确模型,专门研究dv/dt、di/dt、损耗这些细节。这种分层验证的思路,比拿着一套精确模型从第一天硬撑到最后要可靠得多。
说到这,想起一个很有代表性的经历。有一次帮同事排查一个英飞凌MOSFET在TINA里跑H桥逆变的不收敛问题,同事已经把容差、步长、吸收电路全试了一遍,还是崩。最后我发现问题出在驱动信号上——他用的是理想电压脉冲,但H桥上下管的驱动信号是互补的,在死区时间内,一个管已经关闭,另一个还没导通,此时电感电流没有续流通路,节点电压直接被拉到电源轨之外,模型就崩了。解决办法很简单:给每一路驱动都加上合理的死区时间,并在输出端并联一个假负载电阻提供续流路径。这件事让我更坚定了一个认知:不收敛很多时候是电路设计本身的问题,仿真器只是用报错的方式帮你指出来而已。
所以,如果你在TINA里用英飞凌功率MOSFET做瞬态仿真遇到不收敛,别急着怀疑工具。先按这篇文章的思路,从模型体检开始,逐项排查,你会发现大部分问题都能在半小时内解决。等你的仿真跑顺了,看到Vgs、Vds、Id的波形在屏幕上干净利落地切换,那种感觉还是挺值的。
我自己的体会是:SPICE仿真器的收敛性问题,永远是数值方法和物理模型之间的博弈。数值上,你可以通过容差、步长、初始条件做文章;物理上,你要让电路更接近真实系统,加阻尼、加寄生、加合理的驱动时序。两条腿都得有,单靠哪一边都不行。这套基于TINA的排查方法论,希望真能帮你把那堵墙撞碎。