没有合适的资源?快使用搜索试试~ 我知道了~
所谓仿真,就是描述一个实际系统的数学模型的特征,对仿真器而言,系统的模型无非 就是一系列的代数或微分方程(组)。MAST 语言主要是用来创建模拟、数字或系统模型的, 而用MAST 语言建模实际上就是指定要被仿真的模型,它实际上就是要建立一系列的方程, 因此用MAST 语言建模的核心就是用线性(或非线性)的代数、微分方程(组)来描述对 象的特征。它包括电、机械、光和流体等。
资源推荐
资源详情
资源评论
1
MAST 建模讲义
一、引言
所谓仿真,就是描述一个实际系统的数学模型的特征,对仿真器而言,系统的模型无非
就是一系列的代数或微分方程(组)。MAST 语言主要是用来创建模拟、数字或系统模型的,
而用 MAST 语言建模实际上就是指定要被仿真的模型,它实际上就是要建立一系列的方程,
因此用 MAST 语言建模的核心就是用线性(或非线性)的代数、微分方程(组)来描述对
象的特征。它包括电、机械、光和流体等。
从上面的定义可以看出,Saber 仿真器并不是单纯的一个电路模型仿真器,从理论上讲
如果你能用 MAST 语言建立任何建模,通过 Saber 仿真器就能进行仿真,但在实际情况是
它讲受系统硬件的限制。仿真器实际上要作的工作就是解方程。
既然 Saber 仿真器的主要工作就是解方程,那么可不可以将描述系统特征的数学方程用
MATLAB 来求解呢?因该说是可以的。但是有时建立一个系统的模型非常困难,特别是一
些结构复杂的系统。用 MAST 建模时可以首先建立系统中元件的模型,然后将各个元件按
照一定的要求连接起来就构成系统模型,因此在这种情况下描述系统模型方程由仿真器自动
完成。
正如上所述,只要能写出描述对象特征的方程就能用 MAST 语言建模,因此 MAST 语
言不仅可以建立模拟元件的模型,还可以建立数字元件的模型,对于数字模型是用元件在各
离散时刻的离散值来描述的。
在 MAST 语言中,被 Saber 仿真器使用的最核心的单元就是模板(template),在创建模
型中,模板是分层结构的。所谓分层结构就是在创建模板中可以引用其它模板。这样的结构
有几个好处:
1)在你创建模板的过程中可以直接调用 Saber 库中元件模型,这样将大大的减少你编
写模板的工作量。
2)对于你经常使用到的电路结构(该结构中可以包括其它电路结构),可以将其构成一
个子系统,而其它模板可以调用这个子模板。
3)可以建立一个顶层模板,在该模板中调用系统中的其它所有模板,它只反映各模板
之间的连接及各模板所需要传递的参数。该模板通常叫网表。这样在仿真中修改参
数就很方便。
模板的命名。在这个问题上有两点需要注意,1、模板的扩展名必须是 .sin,即
templatename.sin。2、模板名必须以字母开头。
如果是用 SPICE 语言写的模板,Saber 仿真器也可以对它进行仿真,但之前必须把它转
换为 Saber 格式,用 spitos 来转换。
根据仿真对象的不同,所建模板的表现形式也不同,描述模板程序不同,构成模板的复
杂程度不同,但作为模板它们都有一些共同的特征,首先它们都是由 MAST 语言写成的
(Saber 的模型可以由其它语言写,如 VHDL
,但那不是本课程的内容),其次是模板的结
构具有相似性。与此相对应,在本部分内容中应注意 MAST 语言本身的特征以及模板的一
些结构特征。
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
二、模板的结构
一个模板可能有部分以下的一个或几个部分,也可能有以下的全部
Units definitions
Connection point definitions
Template header
Header declarations
2
{
local declarations
Parameters sections
When statements
Values section
Control section
Equations section
}
在编写模板时,没有上面顺序的限制,可以按任意顺序编写,但有两点需特别注意,在
使用一个量之前必须首先定义这个量,你定义的量的位置就决定了它是全局的或是局部的。
如果你要在模板中引用文件,你可以在任何地方引用文件,关于文件的引用将在后面作简单
介绍。但是为了增加程序的可读性,建议编写模板程序时采用上述顺序。另外,如果要调用
程序,如果该文件为全局调用,建议调用句放在 header declarations 部分,如果该文件为局
部调用,建议放在 local declarations 部分。
你的模板可能只有以上的某些部分,至于那些部分是你需要的则是根据你模型的需要。
例如,顶层模板就不包括模板头,头定义以及函数体{ }。下面将分别介绍在模板中各部分
的情况。如下例:
c.c2 p:vcc m:out1 = c=normal(5000p,0.2)
c.c3 p:vcc m:out2 = c=normal(5000p,0.2)
c.c1 p:n4 m:n6 = c=normal(1000p,0.2)
r.r1 p:out3 m:n8 = rnom=normal(10k,0.1)
r.r4 p:n4 m:out3 = rnom=normal(100k,0.1)
r.r3 p:vin m:n4 = rnom=normal(10k,0.1)
r.r5 p:n6 m:out3 = rnom=normal(10k,0.1)
r.r6 p:vcc m:out2 = rnom=normal(10k,0.1)
r.r7 p:vcc m:out1 = rnom=normal(10k,0.1)
图 1 一个差分放大器的原理图
3
r.r8 p:n5 m:0 = rnom=normal(10k,0.1)
r.r2 p:n9 m:0 = rnom=normal(10k,0.1)
i_dc.isink p:n1 m:vee = dc_value=1m
q2n2222.q1 b:n8 c:out2 e:n1
q2n2222.q2 b:n5 c:out1 e:n1
v_pulse.v2 p:vin m:0 = period=10m, ac_phase=0, initial=-.01, delay=1m, width=5m,
\
ac_mag=.1, tr=1u, tf=1u, pulse=0.01
v_dc.sym12 p:0 m:vee = dc_value=15
lm324_1.u1 vee:vee vcc:vcc inp:n9 inm:n4 out:out3
v_dc.v3 p:vcc m:0 = dc_value=15
这就是与图 1 对应的 MAST 语言的结构。从上面这段程序可以看出,这段程序就是一个网
表。下面是一个电阻模型
template resistor p m = res
electrical p,m number res
{
equations { i(p->m) += (v(p)-v(m))/res }
}
下面是一个电容模型
template capacitor p m = cap
electrical p,m
number cap
{
equations { i(p->m) += d_by_dt(cap*(v(p)-v(m))) }
}
在上述网表中所用的电容的模型如下:
element template c p m = c,model,l,w,ic,esr,rleak,tc,tnom,
ratings,rth_ja,part_type,part_class
//template header
#...declaration of connections:
electrical p,m
process..imodel model = (tc1 = 0,tc2 = 0) # Process model for defining
capacitance.
#...declaration of argument
number c = undef, # Capacitance.
esr = 0, # Equivalent Series Resistance
rleak = inf, # Parallel leakage resistance
l = 0, # Optional Capacitor length specification.
4
w = 0, # Optional Capacitor width specification.
ic = undef, # initial condition on vcap
tc[2] = [0,0], # Temperature coefficients.
tnom = 27, # Nominal temperature
rth_ja = undef # thermal resistance
# Bring in temperature - in degrees celsius
external number temp, include_stress, c_tol, c_vmax, c_vrmax
external standard..pdist pdist
struc {
number vmax = undef, # Max. forward voltage
vrmax = undef, # Max. reverse voltage
tjmax = undef, # Max. junction temperature
tjmin = undef, # Min. junction temperature
pdmax_ja= undef # Max. power dissipation
} ratings=()
string part_type = "capacitor", # type of the device
part_class = "generic" # class of the device
export val p pwrd # instantaneous power dissipation
export val tc tempj # instantaneous junction temperature
export val joule energy # energy stored in capacitor (1/2)*(c*v**2)
// header declaration
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Start the definition
{
#...Make working array for tc assignment in parameter section
#...Assign the current instance values to initialize
number wtc[2] = [tc[1],tc[2]] # Temperature coefficients
#...declare internal node
electrical pm
#...Quantities useful for output:
val v v, # Total Capacitor voltage.
vesr, # Voltage across ESR
vcap # Voltage across capacitor and leakage resistor
val q q # Capacitor charge.
val i ileak, # leakage current (non-dissipative)
5
iesr # equiv. series resistance current (dissipative)
val nu ceff
#...Define the "undefined" number
number cap, # Final value of capacitance.
xw, # Final value of capacitor width.
xl, # Final value of capacitor length.
dl, # Final value of geometry reduction.
xesr, # Final value of equivalent series resistance.
xgleak, # Final value of leakage conductance.
rth_eff, # Final value of thermal resistance.
pdmax, # Final value of maximum power dissipation rating.
xvmax, # Final value of ratings->vmax
xvrmax, # Final value of ratings->vrmax
xtjmax, # Final value of ratings->tjmax
xtjmin # Final value of ratings->tjmin
number tempj_tnom=25
group{v,vesr,vcap,q,ileak,iesr,ceff} hsp
// local claration
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
parameters {
#...Check input parameters.
if ( (c == undef) & ((model->cj == 0)|(model->cjw == 0)|(l == 0)|
((w == 0)&(model->wdf == 0))) ) {
# Capacitance is not specified.
saber_message("TMPL_S_ALT_SPEC", instance(),
"Capacitance","c","model->cj, model->cjw, l, and w")
}
# If the tc argument (array) is not defined, use the model->tc's
# else, the working array wtc has already been set to equal the
# instance values 'arguments' for tc[1,2]
if ( (tc[1] == 0) & (tc[2] == 0) ) {
wtc = [model->tc1,model->tc2]
}
if (c ~= undef) {
剩余25页未读,继续阅读
资源评论
wangkaihn
- 粉丝: 2
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于yolov5识别算法实现的DNF自动脚本源码.zip
- 基于Python实现的自动化办公项目.zip
- 基于python实现的基于PyQt5和爬虫的小说阅读系统.zip
- 机械设计整经机上纱自动化sw20非常好的设计图纸100%好用.zip
- Screenshot_20240427_031602.jpg
- 网页PDF_2024年04月26日 23-46-14_QQ浏览器网页保存_QQ浏览器转格式(6).docx
- 直接插入排序,冒泡排序,直接选择排序.zip
- 在排序2的基础上,再次对快排进行优化,其次增加快排非递归,归并排序,归并排序非递归版.zip
- 实现了7种排序算法.三种复杂度排序.三种nlogn复杂度排序(堆排序,归并排序,快速排序)一种线性复杂度的排序.zip
- 冒泡排序 直接选择排序 直接插入排序 随机快速排序 归并排序 堆排序.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功