动态电路仿真示波器的python实现

本文介绍了使用Python实现动态电路仿真相波器的方法,包括电路的网表表示、瞬时状态方程的创新列写、数值解法以及优化后的界面设计。通过龙格-库塔法减小迭代误差,采用PyQt5改进交互界面,提供直观的动态结果展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

动态电路仿真示波器的python实现

最近在学习电路这门计算机基础课,在课程中安排了用代码实现动态电路的仿真的实验任务,在此之前也已经完成了对于非动态电路的仿真实验,本次实验是在上次实验的基础上进行的。

前言

考虑到大家的实验成果都差不多,没什么创新型(不够卷。。。),我们决定利用数值解、龙科库塔等方法设计出人机交互式的任意动态电路仿真示波器。let me show!
以下是本篇文章正文内容,可供参考

一、实验意义

在含有电感和电容的电路中,设定一定的电路初始状态和时间零点后,电路中的电压、电流各项参数都是会随着时间发生动态变化的,这一点同普通的无电感及电流电路有着较大的差别,因此这种电路被称为动态电路,动态电路中所含的电感和电容的数量被称为动态电路的阶数,这与由动态电路得到的常微分方程是紧密相关的。

对于一般的动态电路来说,列写出对应的常微分方程是比较复杂的,同时当方程的阶数达到一定值时,是不易求出解析解的,因此,本实验给出了求解动态电路数值解的方法,可以适用于任意阶动态电路的求解。

二、系统各组件

1.网表 —— 电路的计算机表示

由电路教材中电路的概念可知,对于任意电路,均可表示成有向图 G=(V,E)。其中 V 是节点集,E 是边集(元件集),其中有向边的方向表示对应元件的参考方向。因此,任何图的表示方法均可以用于表示电路。著名的电路仿真软件 SPICE 采用了一种特殊的文本格式表示电路,称为网表(netlist)。如图1所示,网表中,每行表示一个元件,先描述与元件类型(VS、IS、G、R),再描述元件跨接在哪两个节点之间(边方向表示参考方向),最后描述不同元件的特性(电压、电流、电阻等)。
本实验中,我们仿照 SPICE 网表格式,设计了一种文本网表,用于存储实验中可能用到的电路。其中,首行两个数字,表示电路节点数和元件数,随后每行,描述一个元件。
网表示意图

2.瞬时状态方程 —— 一种兼容各种受控源的方程列写方法

本实验中,我们经过讨论,充分考虑了教材中所讲的节点电压方程列写方法,同时考虑到计算机运行的特性以及各种受控源的复杂情况,我们提出了一种创新性的,能够兼顾各种情况的普适性方程列写方法,下面对该方法进行介绍和展示:

(1) 思路的产生:

课堂上所介绍的方程的列写方法能够较好的满足基本电路元件(电阻、独立电压源、独立电流源)组成电路的计算。但是当电路中出现受控源时,矩阵方程不在规整,考虑到计算机可以完成较大规模的运算,我们决定在每个电子元件的两端均设置结点,同时结合电源所提供的附加信息,列写方程。

(2) 方程列写:

假设在一个电路模型中,存在N个电子元件,其中含有P个电源(其中包含I个电流控电源),M个新定义下的节点,将所有电子元件的端电压,以及通过电源的电流值设置为未知量(如果有电流控电源,则将对应元件上通过的电流也同样设置为未知量),这样共有M+P+I个未知量,则需要列写出对应数量的方程。
首先我们对每个新定义的节点列写的KCL方程,可以得到M个方程,对于每一个独立电流源或独立电压源,可直接列写约束条件的附加方程,对于电压控电源,结合相关比例与相关节点,可列出方程,最后对于电流控电源,可以通过相关比例与相关元件列出第一个方程,之后还可有VCR等性质列出第二个方程。这样我们就得到了共M+P+I个方程,可以解出相关未知量。
在这里插入图片描述

(3) 方程的求解

综上我们可以得到形如Ax = b的矩阵方程,由于方程的列写过程中,各个方程的参数都是独立的,A为可逆矩阵,故可以采用先求A的逆,x = A‘b的方法求解。

3.动态电路的数值解法

动态电路的核心特征在于电路中的参量值由于电容电阻的加入而随时间而发生变化,为了实现对于任意阶电路的仿真,介于解析解不易得到情况下,我们考虑到使用数值解的方法来对变化趋势进行描述。具体思路如下:

(1) 瞬时状态的求解

对于任意的动态电路,在电路的各个参数已知的情况下(包括电容的初始电压值和电感的初始电流值),我们可以将电容看作电压源,电感看作电流源来进行电路的等效,对于等效电路我们可以按照瞬时状态进行计算。
同样的,如果我们可以知道每个时间片的初始时刻的各个参数,我们就可以对于各个时间片的初始状态来进行计算,从而可以得到电路的数值解,因此我们需要从上一个时间片的计算结果推导出下一时刻的初始状态。

(2) 迭代方法

假设时间片的长度为∆t,我们已知t时刻的电路初始状态,并由此进一步解算出t时刻的电容电流值以及电感的电压值,接下来的迭代方法采用电容来进行演示,并假设电容的初始电压值为u,电感同理。
已知,电容的电压和电容满足如下关系:
i=Cdu/dt
因此,当∆t足够小时,i的值变化量很小,故满足如下式子:
∆u=i
∆t/C
则在t+∆t时刻电容的电压值为u+∆u,而电路中的非动态元件的计量值保持不变,因此我们可以通过这一方法得到下一时间片的各个元件的初始值。

(3) 方法的优化

在上文中,我们采用了假设∆t足够小时,i的值不变的方法来进行迭代,但是这种迭代方法存在误差较大的现象,使得误差随着迭代次数的增加而产生积累。为了减小误差,使结果更加的准确,我们采用了龙格-库塔的方法对求解过程进行优化。
龙格-库塔法介绍:龙格&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值