PySpice:使用具有定义的初始条件的电容器来模拟电路

问题描述 投票:0回答:1

使用 PySpice,我尝试模拟电路中具有定义的初始条件的电容器的放电行为。这是一个简化的示例:

import PySpice.Logging.Logging as Logging
logger = Logging.setup_logging()
import matplotlib.pyplot as plt
from PySpice.Spice.Netlist import Circuit
from PySpice.Unit import *

V1 = 10
circuit.V("1","node2", circuit.gnd, V1)
circuit.R("1", "node1", "node2", 3.5)
circuit.C("1", "node1", circuit.gnd, 100, initial_condition = 20)

simulator = circuit.simulator(temperature=25, nominal_temperature=25)

analysis = simulator.transient(step_time=1@u_s, end_time = 10000@u_s)

运行模拟后,我预计电容器会呈指数放电:“node1”处的电压应从“initial_condition”开始,到“node2”电压结束。 但在整个模拟过程中,“node1”处的电压保持在 V1。我做错了什么?

python initialization simulation circuit pyspice
1个回答
1
投票

首先,您的代码无法运行:您必须定义一个 Circuit 对象。

issue

似乎有与此相关的讨论

重现问题

修改后的代码块:

## imports

V1 = 10
R1 = 3.5
C1 = 100
C1_ic = 20

circuit = Circuit("circuit")

circuit.V("1","node2", circuit.gnd, V1)
circuit.R("1", "node1", "node2", R1)
circuit.C("1", "node1", circuit.gnd, C1, initial_condition=C1_ic)

simulator = circuit.simulator(temperature=25, nominal_temperature=25)
analysis = simulator.transient(step_time=u_ms(1), end_time=u_ms(1000))

print(simulator)

输出网表:

.title circuit
V1 node2 0 10
R1 node1 node2 3.5
C1 node1 0 100 ic=20
.options TEMP = 25C
.options TNOM = 25C
.end

此网表使用 LTSpice 生成所需的输出,但由于某种原因似乎无法在 PySpice 上工作。

解决方案

修改后的代码块:

## imports


V1 = 10
R1 = 3.5
C1 = 100
C1_ic = 20

circuit = Circuit("circuit")

circuit.V("1","node2", circuit.gnd, V1)
circuit.R("1", "node1", "node2", R1)
circuit.C("1", "node1", circuit.gnd, C1)

simulator = circuit.simulator(temperature=25, nominal_temperature=25)
## initial condition defined with simulator
simulator.initial_condition(node1=C1_ic)
analysis = simulator.transient(step_time=u_ms(1), end_time=u_ms(1000))

print(simulator)

输出网表:

.title circuit
V1 node2 0 10
R1 node1 node2 3.5
C1 node1 0 100
.options TEMP = 25C
.options TNOM = 25C
.ic V(node1)=20
.end

这种定义初始条件的方法是有效的,并且在 LTSpice 和 PySpice 仿真上都能产生正确的结果。

电气工程额外

您可以通过添加以下行在 python 中绘制分析结果:

plt.plot(analysis.time, analysis["node1"], label="node1")
plt.plot(analysis.time, analysis["node2"], label="node2")
plt.legend()
plt.show()

您会看到“node1”电压不会偏离 20 太多。这是由于您的电路参数(电阻和电容)造成的。了解时间常数,与仿真时间相比,您的时间常数太大了(100C * 3.5R = 35s >> 10s)

© www.soinside.com 2019 - 2024. All rights reserved.