锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

Proteus深入研究(三.1): VSM SDK翻译 (9/289)

时间:2022-11-07 12:00:00 三极管模块6qa5032

本文是Proteus VSM SDK出于非营利目的,英文版的中文翻译可以自由下载、转载、传播,但也请出于上述目的。

本人不提供Proteus软件的下载,有需要者可以上网搜索,或与Labcenter公司联系。

翻译的初衷是只用于我自己的研究和学习。

我没有义务保证所有句子和术语的正确性,但我非常欢迎你作为朋友指出错误。

你可以来找我参考本文造成的任何额外工作或其他损失。我会微笑着向你道歉,或者和你握手。然后我们可以讨论那些不合适的翻译,其余的我不负责。

还有一点需要解释的是,我的耐心和毅力不够好。这篇文章的英文原版共有289但是我一天只能安排一点时间去做,也许我可以每天翻译4~5页面,不能保证每天或每周都能继续这样做,所以,翻译完成后,可能会去公元20xx年了,嘿嘿,希望你能督促我。

哦,还有一点,如果有人发现有中文版,请告诉我我不会这么做。

在这里发图片实在是太费事了,所以干脆不发。

在这里排版也有点不太爽,所以干脆不排,直接把pdf文件文本内容复制到此。

本文pdf版本文件可到http://www.drgraph.com/viewthread.php?tid=357&extra=page%3D1&frombbs=1下载。

 

欢迎交流。

QQ: 282397369

MSN: ChenBinWen@hotmail.com

EMAIL: ChenBinWen@gmail.com

Mobile: 133****8893

Web: http://www.DrGraph.com

 

陈斌文

2009-6-23

 

本文主要介绍如何使用Proteus VSM来创建您自己的模型。

作为本文的读者,本文期望您是本系统的高级用户,并清楚怎样使用ISISPROSPICE进行原理图设计与仿真;我们还希望您具备必要的电路基础知识,能完成可正确模拟您所期望现象的仿真模型。这不是可有可无的要求,因为其中包括许多技能,这些技能将使您能决定正确的处理方式。

您可以登录www.labcenter.co.uk查看现有的模型信息。您也可以就将在VSM领域内研发的模型提出申请。

本文最后更新日期:30/10/2000

3.1      简介

本节将简要介绍SPICE如何进行电路仿真。如果您希望创建复杂的模拟电路元件模型,建议您阅读SPICE3F5相关文献。

下面仅就暂态分析进行讨论。

 

3.2      电路表示

一般来说,电路由节点与支路组成,其中,节点为两条以上的支路的共同连接点。在SPICE术语中只有节点电压,在支路已知的情况下,这就足以求解出所需的支路电流。

电路中,有三种基本的元器件,即:

l         电阻

l         理想电流源(VCCSCCCS)

l         理想电压源(VCVSCCVS)

可使用矩阵与向量来表示电路、当前状态及其结果。向量可看成是单维矩阵,或者是一个简单的数列。在各计算阶段,均需计算表达式

[I][Y] = [V]

其中,[I][V]为向量,而[Y]为一个二维矩阵。请注意该表达式与欧姆定律相类似。该表达式还代表了以下形式的方程组:

IaYa + IbYb + IcYc = V

这样可以求解VV也经常表示RHS向量,它位于上述方程右手端(Right Hand Side, RHS)

根据构成电路的支路,可设置[I]与矩阵[Y]中的值,从而求得矩阵方程的各个解,即[V]的各个分量。这些值可能是来自元件模型中的特定值,它们可以表示该模型的一些状态。因此,[I][Y]一起将确定电路状态,而[V]表示了结果。

 

3.3      电阻、受控电流/电压源

呵呵,可视一个电阻为一个线性电压控制电流源,且其输入输出节点包含相同管脚。实际上,SPICE就是通过将[I][Y]中的不同元素设置为常量这种方式来处理一个线性受控电流/电压源。

 

从另一角度来说,若注意到矩阵[Y]的特定行或列的值表示相应节点间的电流与它们之间的电势差之间的关系:该数越大,电压值越大。因此,支路电流与节点电压之间的任意线性关系可用矩阵[Y]中的常量来表示;同样,特定节点间的电流也可直接用[I]向量中的值来表示。

 

3.4      非线性

在前面,我们曾经提到过各计算阶段,这些计算阶段是如何定义的呢?OK,让我们先考虑简单的情况。如果我们面对的电路全是由线性时不变支路所构成,在所有时刻,均可求得矩阵方程中节点电压向量[V]的唯一解。一条线性支路遵守欧姆定律,包括R=V=0Y=I=0的情况。这也是可经由方程组[I][Y]=[V]求解的电路的唯一形式。

但我们如何处理象二极管与三极管这样的非线性元件呢?我们构造与非线性电路状态一致的虚假电路。让我们花点时间来理解这些概念。考虑一个电路中的一个二极管,假定我们已经知道电路稳态时的各节点电压。从二极管的理论函数可以知道二极管的状态:

 

从而可求解,其电阻阻值为Vd/Id(欧姆定律),而电流源(Is)未实际产生输出,故其电流为0。下图可很好地例示这一点:

 

发明SPICE的那个聪明绝顶的家伙认识到,电路将会向它的解收敛,在每次迭代过程中,设置

Yr = Id/Vd

其中,Id由前一个方程计算而得,而Vd由前面的另一个方程求得,并且还有

Is = Id – d(Id)/d(Vd)

我们来看一下其工作过程:假定二极管通过一个电阻连接到电池

l         二极管开始工作时,将为开路,求解其初始化矩阵后将会发现,其两端电压为电池电压,而流经电流为0

l         使用上面的方程,代入计算YrIs的新值。Yr将为0,但Is将为负值,因为Id0(通过求解上一个方程),且结果位于上图中右边斜率较陡处

l         将新值代入电流源,重新计算

l         电流源将产生电流,经由二极管并在串联电阻两端产生压降。回到第二步,二极管两端的压降变小,且其电流将从0开始增大。换句话说,我们朝着正确的解方向迈进了一步。

l         如果更多次地重复该过程,则会得到解

且电流源的作用消失了。在这个时候,可认为电路已经收敛稳定。

如果您有一定的数学基础,您会认为这是Newton-Rapheson方法,事实上就是这种方法,当然其中还需要做一些额外的处理,如防止除零以及其它类似措施,特别是不允许设置任何大于GMIN系统变量的值。

 

3.5      时变性

为全面描述问题,我们必须考虑时变电路。电路中的时变部分一般为电容与电感,更严格地说,一些信号发生器与混合模式接口模型元件也是时变的。考虑到二极管与三极管的模型中包括电容,可认为它们也是时变的。

我们如何对电容建模?我们可以用一个并联的电阻与电流源来表示二极管,根据二极管的伏安特性可求得相应的值,即

Q=CV(V=Q/C)

Q=It,或更精确的I = dQ/dt

注意到在一个给定时刻,电容就象一个电池,其电流源部分将产生出电流,则电容模型就不必按Newton-Rapheson方式收敛,因为它是一个线性元件。

为进行电容电路的仿真分析,我们可将仿真时刻分割成为离散时间片断。在每个离散时刻,电容将依据该时刻其存储的电荷以及先前求得的“直流”结果进行建模。请注意,如果电路中还有其它非线性元件,这样处理可能会导致该时刻进行迭代分析。

那么,该怎么办呢?我们刚说过,电容模型是基于其存储电荷的。但问题是我们怎么知道那是多少?求解后,我们可以知道它应该是多少(因为我们可以由Vc求得Q,即Q=CVc),但我们还需要一些先验信息,以便得到可以进行仿真分析的正确模型。事实上,我们也可以知道电容的工作历史数据,因为可以记录自从分析开始以来的所有电荷与电流数据值(前提是我们有意记录了这些数据)。因此,我们可以由时刻t之前(t-1, t-2)的电荷值来推断出t时刻的电荷值,这里需要用到的是GearTrapezoidal积分理论。

在此,有两个显示易见的结论:首先,划分的时间间隔是一个非常重要的参数。它应该比较小,以便保证我们的推断的正确性,但它也应该尽可能的大,以便缩短分析时间。其次,我们所计算得到的结果值几乎不可能完全准确(尽管它与真值可能非常接近)。所有这些将导致稳定性问题。这里有一种将该问题可视化的方法。想像在一个悬崖边,它的边缘不稳定。不稳定性来源于电路的初值。我们可以通过在电路的解(悬崖的边)之间放置木板来为它们搭桥以通过悬崖之间的深沟,但走得越远,就越难将木板放到正确的位置(稳定的状态)。如果我们超过了限度,将它放得过远,虽然看起来方向是对的,但后续的电路就无法达到一个稳定的状态,或者我们就直接掉进深渊。

这确实是一个困难的问题。对于电路仿真分析的前期探索人员来说,这甚至比非线性元件的问题还要难。它都来自于数值积分(这也是我们进行计算的依据)Nyquist稳定判据。

该积分的主要目的是求得下一步计算的输入值,也就是要确定我们的木板要放多远。时间间隔步长不是一成不变的,它可以根据任意目的进行改变。但即使做了这么多(确实多,在计算时间上也是),我们也可能陷入失望的错误境地。举个简单的双稳例子吧。在晶体管即将开关时,无法知道电容的情况。若假定开关间隔时间较长,则电路在开关间隔间是稳定的,这将会导致我们在开关时可能会处理失当,无法得到收敛结果。避免错误结果的唯一办法就是回到上一步,以一个较小的步长进行计算。

从创建模型角度来说,这个过程由Proteus VSM进行处理,它通过调用ISPICEMODEL::trunc函数,可以让各个模型有机会去接受或拒绝下一步时间间隔的机会。幸运的是,SPICE接手了剩下的工作。

相关文章