由于PySpice是完全使用ngspice来进行计算分析,所以我们首先介绍如何使用ngspice。ngspice如何下载和安装已经在上一篇文章中介绍,请参考:dc lin:PySpice: 使用ngspice进行电路仿真分析-1:安装zhuanlan.zhihu.com
本文介绍的内容的完整资料,可以参考官方文档:http://ngspice.sourceforge.net/docs/ngspice-31-manual.pdfngspice.sourceforge.net
ngspice本质上可以视为一个黑盒子工具,我们提供输入文件,它进行计算分析,把结果输出文件,本文首先介绍这个输入文件的格式:
【1】 输入文件是文本文件,满足:输入文件的第一行作为标题,无需作任何修饰
最后一行必须以.end作为结尾
中间是各种电路元素的描述行
【2】 电路元素(circuit element,或称device instances)
每个电路元素都必须以一行(称为instance line)表示,包括:名字(name) ,注意第一个字符决定了元素的类型,如下表2-1
连接的电路节点(circuit node)
元素的参数 (values of parameters)
表2-1: 元素的类型字符A: XSPICE code model,例: A1
B: Behavioral(arbitrary) source,例:B1
C: 电容(Capacitor), 例:C1
D: 二极管(Diode),例:D1
E: 电压控制电压源(voltage-controlled voltage source, VCVS),例E1
F: 电流控制电流源(current-controlled current source, CCCS), 例F1
G: 电压控制电流源(voltage-controlled current source, VCCS),例G1
H: 电流控制电压源(current-controlled voltage source, CCVS), 例H1
I: 电流源current source,例I_input, I1
J: 结型场效应晶体管(junction field effect transistor, JFET),例J1
K: 耦合型互感电感(Coupled (Mutual) Inductors), 例:K1
L: 电感(inductor),例:L1
M:金属氧化物场效应晶体管(Metal oxide field effect transistor (MOSFET)),如M1
N:GSS数字装置(Numerical device for GSS) ,如:N1
O: 有损传输线(Lossy transmission line) ,如: O1
P: 耦合多导体线(CPL)(Coupled multiconductor line (CPL)),如P1
Q: 双极结晶体管(BJT)(Bipolar junction transistor (BJT)),如Q1
R: 电阻( Resistor),如:R1, R2
S: 电压控制开关(Switch (voltage-controlled)) ,如:S1
T:无损传输线(Lossless transmission line) ,如:T1
U: 均布电阻电容线路(Uniformly distributed RC line) ,如:U1
V: 电压源(Voltage source),如:V1, Vinput
W:电流控制开关(Switch (current-controlled)) ,如:W1
X:子电路(Subcircuit) ,如X1
Y:单损耗传输线(TXL)(Single lossy transmission line (TXL)) , 如:Y1
Z: Metal semiconductor field effect transistor (MESFET)金属半导体场效应晶体管(mesfet), 如:Z1
不同的元素节点有自己的不同参数,见下面的说明。
例1:如下文件描述了图2-1的电路
文件名:1.cir
RC Circuit Transient Response
*resistor connected between nodes 1 and 2
r1 1 2 1k
*capacitor connected between nodes 2 and 0
c1 2 0 1u
*piecewise linear input voltage
vin 1 0 pwl(0 0 10ms 0 11ms 5v 20ms 5v)
*transient analysis for 20ms, step size 0.02ms
.tran 0.02ms 20ms
*defining the run-time control functions
.control
run
*plotting input and output voltages
plot v(1) v(2)
.endc
.end
【3】比例后缀(scale factor suffix)
在ngspice中的数值,可以是整数或者浮点数(和C语言一致),为了很好的表示非常大或非常小的值,可以在数值后面加上下面的后缀,参见表3-1:
表3-1:ngspice使用的比例后缀T:太tera,
,例: 20T
G: 吉Giga,
,例: 20G
Meg:兆Mega,
,例:20Meg
K:千Kilo,
,例:20K
mil:密尔Mil,
,如:20mil
m:毫milli,
,如20m,注意,20M和20m是一样的,都不是20兆
u:微micro,
,如10u
n:纳nano,
,如10n
p:皮pico,
,如10p
f:费femto,
,如10f
在ngspice中,任何数值后面跟的非比例后缀都会被忽略,所以10, 10V, 10Volt, 10Hz,这4个都会被转换成10,1000, 1k, 1K, 1K_Omega都是表示1000。
【4】基本行 basic line
【4.1】 .title 标题行
每个文件的第一行就是标题行,无需做任何说明修饰,但是,也可以在任一行(只能一行)最左边加.title或.TITLE来指定是标题行,标题行的内容会作为输出文件的最上面的显示。
【4.2】.end结束行
如题。
【4.3】注释
注释分两种,一是整行注释,在行首加*,另一种是行尾注释,是加$或//,下面是示例:
* 这是整行注释
C1 = 10pF $这是电容,是行尾注释
R1 = 4Meg //这也是行尾注释
【4.4】.model器件模型device models
指定器件模型,可以把它赋予给多个器件,其语法是:
.model 器件模型名称 type (参数1=值1 参数2=值2 ... )
比如,下面我们建立一个npn三极管的器件模型mod1,设置其放大倍数bf(Ideal maximum forward beta)是50倍,工作时饱和电流(Transport saturation current) Is=1e-13安培,正向俄利电压(Forward Early voltage, Vaf或Vbf) Vaf=50 V:
.model MOD1 npn ( bf=50 is=1e-13 vaf=50)
由于一些模型的参数非常多,一行放不下,ngspice支持在新行的第一列加+标识,可以指定新行还是属于上一行的内容,参考下例:
.MODEL t2n2222a NPN
+ ISS= 0. XTF= 1. NS = 1.00000
+ CJS= 0. VJS= 0.50000 PTF = 0.
+ MJS= 0. EG = 1.10000 AF = 1.
+ ITF= 0.50000 VTF= 1.00000 F = 153.40622
+ BR = 40.00000 IS = 1.6339e-14 VAF = 103.40529
+ VAR= 17.77498 IKF= 1.00000 IS = 4.6956e-15
+ NE = 1.31919 IKR= 1.00000 ISC = 3.6856e-13
+ NC = 1.10024 IRB= 4.3646e-05 NF = 1.00531
+ NR = 1.00688 RBM= 1.0000e-02 RB = 71.82988
+ RC = 0.42753 RE = 3.0503e-03 MJE = 0.32339
+ MJC= 0.34700 VJE= 0.67373 VJC = 0.47372
+ TF = 9.693e-10 TR = 380.00e-9 CJE = 2.6734e-11
+ CJC= 1.4040e-11 FC = 0.95000 XCJC= 0.94518
ngspice支持的model type参见下表4-1:R: Semiconductor resistor model
C: Semiconductor capacitor model
L: Inductor model
SW: Voltage controlled switch
CSW: Current controlled switch
URC: Uniform distributed RC model
LTRA: Lossy transmission line model
D: Diode model
NPN: NPN BJT model
PNP: PNP BJT model
NJF: N-channel JFET model
PJF: P-channel JFET model
NMOS: N-channel MOSFET model
PMOS: P-channel MOSFET model
NMF: N-channel MESFET model
PMF: P-channel MESFET model
VDMOS: Power MOS model
【4.5】 .subckt子电路(subcircuits)
子电路定义了一个电路的模块(赋予一个名字),然后可以以器件的方式把它加入到实际电路中作为一个实体元素,参见下例:
* 实际电路中的元件:
xdiv1 10 7 0 vdivide //xdiv1是元件名,vdivide是子电路名* 子电路定义:
.subckt vdivide 1 2 3
r1 1 2 10K
r2 2 3 5K
.ends
上面的电路中,子电路的1节点对应于主电路的10节点,2节点对应主电路的7节点,3节点对应主电路的0节点。可以参考下面的电路图:
【4.6】.global全局节点定义
这里定义的节点可以在本文件的任何电路和子电路中访问。
例:
.GLOBAL gnd vcc
【4.7】.include导入命令
把文件粘贴到该行,看下例:
.INCLUDE /users/spice/common/bsim3-param.mod
【4.8】.lib导入元件库
该指令导入文件中的指定的元件库,语法:
.lib filename libname
示例:
.LIB /users/spice/common/mosfets.lib mos1