ngspice调用1N4148二极管模型失败问题求助
问题:ngspice中1N4148模型调用失败
问题背景
我是SPICE新手,选择开源的ngspice做仿真,搭建了包含电阻、电容、1N4148二极管的简单电路,但运行仿真时模型调用失败,尝试调整init文件(设置ngbehavior=psa)和多种模型调用组合都没用,求解决方法或相关教程。
电路网表(.cir文件)
Simulation of pushbutton for wake and wifi request * Models .include 1N4148.txt * Netlist V1 vcc GND 3.3 C1 vcc gpio14 5u R1 vcc gpio14 10k R2 gpio14 Din 220R D1 Din Dout 1N4148 V2 Dout GND 3.3 dc 0 pulse (0 3.3 1u 1u 1u 1 1) * analysis .control tran 50u 200m plot vcc rst .endc .end
1N4148模型文件(1N4148.txt)
****************************************** *1N4148 *VRRM = 100V *IFRM = 450 mA *trr = 4ns * *Package: SOD 27 * *Package Pin 1 : Cathode *Package Pin 2 : Anode * *Simulator: PSPICE * ****************************************** * .SUBCKT 1N4148 1 2 * * The resistor R1 does not reflect * a physical device. Instead it * improves modeling in the reverse * mode of operation. * R1 1 2 5.827E+9 D1 1 2 1N4148 * .MODEL 1N4148 D + IS = 4.352E-9 + N = 1.906 + BV = 110 + IBV = 0.0001 + RS = 0.6458 + CJO = 7.048E-13 + VJ = 0.869 + M = 0.03 + FC = 0.5 + TT = 3.48E-9 .ENDS
仿真错误信息
Note: Compatibility modes selected: ps a warning, can't find model 'd' from line d1 din dout 1n4148 d Circuit: simulation of bushbutton for wake and wifi request Error on line 11 or its substitute: d1 din dout 1n4148 d could not find a valid modelname Simulation interrupted due to error!
解决方法
问题根源
你的模型文件里定义的是子电路(.SUBCKT),而非直接的二极管模型。网表中调用子电路的语法和普通模型不同,ngspice把你写的D1 Din Dout 1N4148当成了调用名为1N4148的二极管模型,但实际模型文件里的1N4148是子电路名,内部又定义了同名二极管模型,导致冲突。
修正方案
有两种可行方式:
移除子电路包装,直接用二极管模型
修改1N4148.txt,删掉子电路相关的.SUBCKT、.ENDS以及内部的R1和D1行,只保留模型定义:.MODEL 1N4148 D + IS = 4.352E-9 + N = 1.906 + BV = 110 + IBV = 0.0001 + RS = 0.6458 + CJO = 7.048E-13 + VJ = 0.869 + M = 0.03 + FC = 0.5 + TT = 3.48E-9这样网表中的
D1 Din Dout 1N4148就能正确调用该二极管模型。保留子电路,用子电路调用语法
网表中调用子电路必须用X开头(表示子电路实例),而非D开头。把网表中的二极管行改成:X1 Din Dout 1N4148注意模型文件里的子电路引脚定义:
.SUBCKT 1N4148 1 2中,引脚1是阴极,引脚2是阳极,X1的节点顺序(Din为阴极、Dout为阳极)和原D1一致,无需调整。
额外注意点
- 网表的
.control块里plot vcc rst,但电路中没有rst节点,运行时会报错,建议改成plot v(gpio14) v(Din) v(Dout)来观察相关节点波形。 - 确保
1N4148.txt和.cir文件在同一目录下,或者.include时写绝对路径。
模型与网表结合的基础要点
- 普通器件模型:比如二极管、三极管模型,用
.MODEL定义,网表中直接用器件类型开头(D、Q等)加节点和模型名调用。 - 子电路(.SUBCKT):是多个器件打包成的模块,网表中必须用
X开头调用,格式为X<实例名> <节点1> <节点2> ... <子电路名>。 - ngspice兼容PSPICE模型,但子电路和模型的调用语法要严格区分,避免混淆。
内容的提问来源于stack exchange,提问作者Zaby1990
相关产品推荐
相关产品推荐

