You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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是子电路名,内部又定义了同名二极管模型,导致冲突。

修正方案

有两种可行方式:

  1. 移除子电路包装,直接用二极管模型
    修改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就能正确调用该二极管模型。

  2. 保留子电路,用子电路调用语法
    网表中调用子电路必须用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 09:45:42