电路模拟器实际上如何工作?


31

最近,我有机会使用LiveWire(这是一个电路模拟器),开始想知道它们如何精确地计算出每个组件上的电压以及流过每条导线的电流。

到目前为止,我只被教过基本的电路分析技能(例如网格分析和节点分析),而且我不完全确定它们是否足够通用,可以在电路模拟器中以“万能”的方式实现。

作为一名程序员,这引起了我的兴趣,我很想看看在构建这种电路仿真器时通常采用哪些技术。

我很抱歉,如果这不属于此处,那是在此处和StackOverflow之间进行选择,我感到尽管这是一个面向软件开发的问题,但该问题更适用于此站点及其用户群。


主要技巧是花费很多时间。因此,可以处理复杂的时间函数,其中包含许多具有小时间片的差分方程。如果讨厌的复杂性可以表示为微分方程,则通常会显着降低复杂度,这些微分方程在数字仿真中成为差分方程。
奥林·拉斯洛普

Answers:


14

我已经详细研究了Falstad模拟器的代码。对于仅由线性组件(例如电阻器,开关和电压源)组成的电路(出于仿真目的,逻辑门输出之类的对象被视为接地电压源),模拟器将视每个电路节点,电压源(连接两个节点)或连线(同样)定义线性方程和变量,这样方程的数量和变量的数量始终相等。对于电路节点,变量是节点的电压,该方程式计算流经该节点的总电流等于任何电流源注入的总电流。对于电压源或电线(将电线作为电位差为零的电压源),

诸如电流源和电阻器之类的东西与电阻器或变量无关。取而代之的是,电流源会增加一个电路节点所需的总电流(请记住,每个电路节点都有一个方程,该方程可评估流入和流出的总电流),而对于另一电路节点则减小该电流。电阻有些棘手:对于每个端点的方程式,电阻会为每个端点的节点电压添加项。

例如,连接节点1和2的100欧姆电阻将表示节点1上的每伏增加都会使流入节点1的电流减少0.01安培,并使流入节点2的电流增加相同的量。同样,节点2上的每伏增加都会使流入节点1的电流增加0.01安培,并使流入节点2的电流减少相似的量。

考虑一个具有10伏电源的电路,该电路连接节点1和5,以及连接节点1和2、2和3、2和4以及3和4的100欧姆电阻。进一步假设节点1上有一个接地图标。因此:

neg ---+-1---R100---2---R100---3---100---4---pos
      gnd           |                    |
                    +---------100--------+

将有两个“电压源”:接地线和10伏电源(分别被视为方程式/变量5和6)。因此,等式为:

-X1*0.01                             +X5 -X6 = 0  Node 1
+X1*0.01 -X2*0.01          +X4*0.01          = 0  Node 2
         +X2*0.01 -X3*0.01 +X4*0.01          = 0  Node 3
         +X2*0.01          -X4*0.01      +X6 = 0  Node 4
-X1*1                                        = 0  Volts 5 (voltage between 1 and gnd)
-X1*1                      +X4*1             = 10 Volts 6 (voltage between 1 and 4)

该等式系统可以表示为N×N矩阵加N项阵列。每个方程式由矩阵中的一行表示,每一行上的值表示每个变量的系数。每个方程的右侧存储在单独的数组中。在求解方程式之前,您将知道流入每个节点的净电流(在这种情况下为零),以及通过电压源连接的成对节点之间的电压差。求解方程式将得出每个节点的电压和流过每个电压源的电流。

如果电路中包含电容器,则每个电容器都将被视为与低值电阻器串联的电压源;在每个模拟步骤之后,将根据流过电压的电流量来调整电压源。电感器将被视为高值电阻器,将电流馈入一个电阻,然后从另一个电阻中取出(电流量根据电阻两端的电压进行调整)。对于电容器和电感器,电阻值将由仿真步骤表示的时间量控制。

更复杂的电路元件(如晶体管)被视为电压源,电流源和电阻器的组合。不同于使每个模拟时间步长都处理一次的较简单的电路元件,像晶体管之类的元件会根据它们所看到的电压和电流来计算其有效电阻等,评估所有结果方程式,并根据以下公式重新评估其电阻新的电压和电流,重新计算方程式等,以达到平衡,在平衡中,其有效电阻应与运输者所看到的电压和电流相同。

对于完全由“线性”元素组成的中等规模的电路,Falstad仿真器的速度可以相当快。如果唯一改变的是右侧系数,那么重复求解方程组的时间是非常合理的。如果左侧发生变化(例如,由于晶体管的有效电阻上升或下降),则时间会变慢得多,因为系统必须“重构”方程式。每个仿真步骤必须多次重构方程式(对于晶体管可能是必需的),这会使事情变得更慢。

对于大型仿真,使用一个大矩阵并不是一个好的方法;即使矩阵相当稀疏,它也将占用与节点数加上电压源的平方成正比的空间。如果不需要重构,则在每个模拟步骤上求解矩阵所需的时间将与矩阵大小的平方成正比;如果需要重构,则与矩阵大小的立方成正比。但是,在显示电路与线性方程组之间的关系时,该方法确实具有一定的优雅。


大多数SPICE类型的模拟器也使用这种算法。这是香料的概述ecircuitcenter.com/SpiceTopics/Overview/Overview.htm
2013年

1
仅供参考-KLU是电路模拟器中常用的算法。KLU代表Clark Kent LU,因为它基于非超节点算法Gilbert-Peierls的算法,它是超节点算法SuperLU的前身。KLU是一种稀疏的高性能线性求解器,它采用混合排序机制以及优雅的因式分解和求解算法。
user6972 2013年

重要的是要注意,有几种晶体管模型,例如BSIM或EKV。从根本上讲,这些模型从单个晶体管的操作及其对电气特性的影响的角度考虑了所有物理原理。它不仅仅代表电压源,电流源和电阻的组合,还包含更多内容。如果要选择其他模型,则可以使用LEVEL参数。Jacob Baker的本教程是一个好的开始。希望能帮助到你。

11

LiveWire是许多功能不同的电路模拟器之一。

例如,Falstad电路模拟器似乎具有与LiveWire相似的功能级别-并且在该链接处提供了源代码。那应该是一个好的开始。

为了进行更复杂的电路仿真,许多工具的起源可以追溯到UC Berkley的SPICE。根据BSD许可,可从UCB请求获得SPICE源代码。

特定于制造商的SPICE版本通常将自己产品的非常详细的半导体仿真模型集成到其仿真器中。例如,Linear Technologies的LTSpice IV或Texas Instruments的TINA-TI。在下面,通常都是SPICE。

在WikiPedia页面上引用有关SPICE的信息:

电路仿真程序以SPICE及其衍生产品最为突出,它采用文本网表来描述电路元件(晶体管,电阻器,电容器等)及其连接,并将此描述转换为要求解的方程式。产生的一般方程是非线性微分代数方程,可使用隐式积分法,牛顿法和稀疏矩阵技术求解。

在更高的水平上,Proteus虚拟系统建模等多种商业产品 Proteus Design Suite的一部分使用专有增强功能进行混合模式SPICE电路仿真-这些工具既可以仿真模拟电路行为,也可以仿真数字微控制器代码,它们之间的交互完全建模。

在更加有限和有限的级别上,某些原理图编辑器(例如,集成到此站点中的Circuit Lab工具)提供了少量的仿真功能。尽管这在实用的非平凡电子设计中可能并没有那么有用,但是研究其功能和实现将为软件开发人员提供一些洞察力,以了解哪些对用户有效,哪些对用户无效。


5

类似于SPICE的电路模拟器完成了三项主要分析:

  • 直流工作点
  • AC分析
  • 瞬态分析

直流工作点线性电路分析(由直流电源,线性电阻器和线性受控电源组成)使用改进的节点分析(MNA)进行。也可以使用网格分析,但是很容易建立节点分析方程。

对于非线性电路(包括晶体管等设备,可以将其建模为非线性受控源),必须使用一些其他技巧。从概念上讲,简单的方法是对多个方程使用牛顿方法的扩展。

牛顿的方法涉及猜测解,然后对仅是“接近”所猜测解的电路进行线性建模。线性化电路的解用作对解的新猜测,并且迭代该过程,直到连续迭代“收敛”到非线性电路的(希望)正确解上为止。在现实世界中,使用更复杂的非线性求解器可以更快地完成求解,并且由于收敛失败而导致的错误更少。

AC分析时,首先做一个DC分析,找到一个工作点进行。然后,您研究工作点周围的微小扰动的影响。根据定义,“小”意味着足够小,以至于非线性效应并不重要。这意味着电路元件将根据工作点转换为线性等效元件。然后,可以使用MNA(复数代表储能元件的阻抗)来解决电路中AC源引起的干扰的影响。

瞬态分析完成后,像奥林在评论中说,通过考虑电路变量如何随时间上非常小的步骤。同样,在每个时间步上,电路都围绕其工作点线性化,因此可以使用MNA来建立方程式。一种解决随时间变化的行为的简单方法是Euler方法。然而,在实践中再次使用更复杂的方法来允许使用较大的时间步长并具有较小的误差。

您会看到,这些方法中的共同点是对电路行为进行线性近似,并使用MNA对其进行求解,直到找到对非线性电路行为的解决方案为止。

自1970年代以来,这三种分析一直是类似SPICE的模拟器所做的主要分析。较新的仿真器增加了其他功能,例如谐波平衡(扩展了AC分析以适应非线性元素的混合效应)或电磁仿真来模拟传输线效果。但是,在使用类似SPICE的仿真器时,您应该了解DC,AC和瞬态仿真的前三项。


我谈到了如何建立MNA方程在前面的答案:electronics.stackexchange.com/questions/19198/...
Photon的

2
我们还应该补充一点,数字电路仿真使用完全不同的方法。这就使模数联合仿真成为一个完整的问题。
Photon
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.