You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySpice仿真带初始条件的电容电路异常问题排查

PySpice电容初始条件仿真问题排查

你的代码存在两个关键问题,导致仿真结果不符合预期:

1. 电路对象未初始化

代码中缺少创建Circuit实例的核心语句,直接调用circuit.V等方法会导致变量未定义错误,这是基础语法疏漏。必须先初始化电路对象,才能添加元器件。

2. 未启用初始条件模式(UIC)

SPICE仿真默认会先执行直流工作点分析来确定瞬态仿真的初始状态,此时电容被视为开路,节点1的直流电压会被计算为10V(与节点2等电位),电容的初始20V设置被直接忽略。要让仿真从电容的初始电压开始,必须在瞬态分析中启用uic(Use Initial Conditions)选项,强制跳过直流工作点分析。


修正后的完整代码

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 *

# 初始化电路实例
circuit = Circuit("Capacitor Discharge Circuit")

V1 = 10@u_V
circuit.V("1", "node2", circuit.gnd, V1)
circuit.R("1", "node1", "node2", 3.5@u_kΩ)
# 设置电容初始电压20V
circuit.C("1", "node1", circuit.gnd, 100@u_uF, initial_condition=20@u_V)

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

# 启用uic选项,使用初始条件执行瞬态仿真
analysis = simulator.transient(step_time=1@u_us, end_time=10000@u_us, uic=True)

# 绘制波形验证结果
plt.plot(analysis.time.as_unit(u_ms), analysis.node1.as_unit(u_V))
plt.plot(analysis.time.as_unit(u_ms), analysis.node2.as_unit(u_V), linestyle='--')
plt.xlabel('时间 (ms)')
plt.ylabel('电压 (V)')
plt.title('电容从20V放电至10V的波形')
plt.legend(['节点1电压', '节点2电压'])
plt.grid(True)
plt.show()

额外优化说明

  • 为所有电气量添加了PySpice的单位类型(如@u_V、@u_kΩ),避免单位歧义,代码更符合SPICE规范。
  • 补充了绘图代码,可直观看到节点1电压从20V指数衰减至10V的过程。

内容的提问来源于stack exchange,提问作者JKB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 21:01:35