SPICE中最有用的指令之一就是允许您为瞬态分析指定节点的初始条件的指令。初始条件是瞬态分析开始时电路的电气条件。它们可用于表示处于静止状态的电路,也可以表示特定时刻的电路状况。
通过.IC指令您可以指定瞬态分析的初始条件。可以指定节点电压和电感电流。DC求解是使用初始条件作为主要约束来执行的。该指令有多种用途。例如,假设您正在仿真逐渐放电的充电电池或已达到特定电压的电解电容器。在所有这些情况下,该指令都是不可替代的,它可以帮助设计人员仿真任何工作状态下的电路。
请注意,通常情况下,程序不会为单个元件分配初始电压值,而是为其所连接的节点分配初始电压值。这是一个微妙但重要的细微差别,需要您在设计中理解和实施。实际上,.IC指令并不是电路模型的一部分,正相反,它是瞬态仿真的一部分。一旦定义了初始条件,它将具有观察和执行的高优先级。要使用的语法如下:
.IC [V(<n1>)=<voltage>] [I(<inductor>)=<current>]
例如:
.IC V(in)=2 V(out)=5 V(vc)=1.8 I(L1)=300m
可以在同一行中设置多个初始条件,或者您可以使用许多单个且独立的指令,每个指令用于特定的初始条件。
假设您要模拟一个电路,该电路包含一个电解电容和一个与之并联的LED,显然还有一个电阻器用于保护。在没有任何初始指令的情况下,由于电容器上没有其他电压源,因此正常仿真时电容器上的电势为0V。该解决方案需要观察电容器的电气行为,所以该电容器已预先充电至12V电压。因此,仿真必须从元件上的正电压开始,这可以通过.IC指令来实现。图1中的电路图显示了以下元件:
我们不妨详细分析一下这三个相关的波形图:
图1:最初充电了的电解电容器可为LED供电一段时间。
LTspice SPICE源代码列表如下:
* .IC directive for LTspice – by Giovanni Di Maria
C1 cap 0 2200µF
R1 cap D 330
D1 D 0 LED1
.model LED1 D(Is=1e-19 N=1.6 Rs=2.5 Eg=2.1)
.tran 0 5
.IC V(cap)=12V
.backanno
.end
ngspice源代码列表如下,结果相同:
* .IC directive for ngspice – by Giovanni Di Maria
C1 cap 0 2200µF
R1 cap D 330
D1 D 0 LED1
.model LED1 D(Is=1e-19 N=1.6 Rs=2.5 Eg=2.1)
.IC V(cap)=12V
.control
tran 100mS 5s
plot v(cap)
.endc
.end
图2显示了相反的过程,即对已部分充电的电解电容器进行充电。电路图包含以下元件:
从图中可以看出,电容器的充电不是从0V开始,而是从4V开始,因为它含有部分初始电荷。瞬态在大约30秒后结束。LTspice SPICE源代码列表如下:
* .IC directive for LTspice – by Giovanni Di Maria
C1 cap 0 2200µF
R1 cap N001 3.3k
V1 N001 0 12V
.tran 60
.IC V(cap)=4V
.backanno
.end
ngspice源代码列表如下:
* .IC directive for ngspice – by Giovanni Di Maria
C1 cap 0 2200µF
R1 cap N001 3.3k
V1 N001 0 12V
.IC V(cap)=4V
.control
tran 100mS 60s
plot v(cap) ylimit 0,13
.endc
.end
图2:用LTspice和ngspice得到的部分充电电容器及相关图形
如上所述,SPICE中的.IC指令用于指定一个或多个节点瞬态分析的初始条件。初始条件是指瞬态分析开始时的电路条件。不过,也可以为各个元件指定初始电压值。通常,在LTspice和ngspice中,只需手动编辑SPICE源代码列表并指定元件两端的电压就足够了,使用以下属性:
C1 cap 0 220µF IC=9
在LTspice的GUI(图形用户界面)上,操作更为简单,只需右键单击元件,同时按下 CTRL键即可。然后,您需要在SpiceLine框中指定“IC=9”属性。这一更改也将在SPICE源代码列表中显示。图3显示了一个涉及电解电容器放电的简单电路。当其下降的电压达到第一个晶体管的截止阈值时,LED点亮。请注意,电路图中未使用.IC指令,而是电容器包含其“IC=9”的属性,该属性决定了该元件的初始电压。LTspice SPICE源代码列表如下:
* .IC directive for LTspice – by Giovanni Di Maria
C1 cap 0 220µF IC=9
R1 N005 cap 10k
Q1 N004 N003 0 0 BC_547
D1 N002 N004 LED1
R2 N001 N002 330
V1 N001 0 9V
Q2 N003 N005 0 0 BC_547
R3 N001 N003 10k
.tran 0 40 0
.model BC_547 NPN (IS=50.7F NF=1 BF=325 VAF=155
+ IKF=.3 ISE=15.6P NE=2 BR=4 NR=1 VAR=24
+ IKR=.45 RE=.907 RB=3.63 RC=.363 XTB=1.5
+ CJE=20.8P CJC=8.33P TF=611P TR=138N)
.model LED1 D(Is=1e-19 N=1.6 Rs=2.5 Eg=2.1)
.backanno
.end
ngspice源代码列表如下:
* .IC directive – by Giovanni Di Maria
C1 cap 0 220uF IC=9V
R1 N005 cap 10k
Q1 N004 N003 0 0 BC_547
D1 N002 N004 LED1
R2 N001 N002 330
V1 N001 0 9V
Q2 N003 N005 0 0 BC_547
R3 N001 N003 10k
.model BC_547 NPN (IS=50.7F NF=1 BF=325 VAF=155
+ IKF=.3 ISE=15.6P NE=2 BR=4 NR=1 VAR=24
+ IKR=.45 RE=.907 RB=3.63 RC=.363 XTB=1.5
+ CJE=20.8P CJC=8.33P TF=611P TR=138N)
.model LED1 D(Is=1e-19 N=1.6 Rs=2.5 Eg=2.1)
.probe alli
.control
tran 10mS 40s UIC
plot v(cap)
plot i(D1)
.endc
.end
设计电路时,应避免在同一节点上定义不同的初始电压。例如,为电压发生器的节点明确指定初始电压不会产生任何影响。
图3:在某些情况下,可以不使用一般的.IC指令,而是在元件级添加“IC”属性。
SPICE中的.IC指令是一个功能强大的工具,可用于指定瞬态分析的初始条件。电路中的初始条件对于获得准确且真实的仿真结果非常重要。元件级IC指令可用于为每个元件指定初始条件。然而,该指令可能会导致不可预测的结果,特别是如果两个相互并联的元件具有不同的起始电压时。在这种情况下,仿真器可能会使用平均电压,但这不一定准确。因此,如果在元件级使用IC指令,必须确保并联的元件具有相同的起始电压。为了避免这个问题,建议在电路级使用.IC指令。该指令允许您一次性指定连接在给定节点上的所有电路元件的初始条件。
(原文刊登于EDN姊妹网站Power Electronics News,参考链接:SPICE Course for Electronic Simulation, Part 11: Initial Conditions and the .IC Directive,由Ricardo Xie编译。)