何时使用
当 KiCad 原理图分析器已输出子电路检测 JSON,需要用 SPICE 仿真反验证计算值(滤波器截止频率、分压比、运放增益、LC 谐振、晶振负载电容等)时使用。它把传统仿真流程倒置:不要求用户手工搭建激励源和分析配置,而是依据分析器的检测结果自动生成针对性测试平台并批量仿真。
适合:RC/LC 滤波器、电压分压器、反馈网络、运放电路、晶振电路、去耦/PDN 阻抗、电流检测、RF 匹配、缓冲吸收等可仿真子电路;设计评审中作为"验证"环节插入。
不该用(负边界):
- 比较器 / 开环运放——无反馈网络可验证,跳过。
- 有源振荡器——自包含模块,外部无可验证项。
- 稳压器控制环路稳定性——行为模型只覆盖 DC 反馈,不含补偿器模型。
- 电平转换 FET、高边功率开关、保险丝/压敏电阻——需厂商特定模型或完整负载上下文。
- 任何无法解析出 R/C/L 值的检测项——
parse_value()取不到值即跳过。 - 未安装任何仿真器时:优雅跳过并在报告中注明,不视为错误(仿真是可选增强)。
步骤
- 先跑原理图分析器,生成检测 JSON(本技能消费其
findings[]数组,按detector字段分组)。 - 运行 SPICE 仿真:对支持的子电路类型自动生成
.cir测试平台并调用仿真器,产出sim_report.json。 - 解读报告并呈现给用户:读取 JSON,将 pass/warn/fail/skip 结果并入设计评审报告的"仿真验证"小节。
可选增强:
- PCB 寄生参数仿真(
--parasitics):原理图与 PCB 并存时,注入走线电阻、过孔电感等寄生量,得到更真实结果。适合高阻反馈网络(>100kΩ)、LC/RF 匹配、长模拟信号线、高频电路;典型低阻数字电源场景用理想仿真即可。 - 蒙特卡洛容差分析(
--monte-carlo N):在容差带内随机化元件值跑 N 次,输出统计分布与灵敏度(哪个元件贡献最大变差)。适合反馈网络、精密分压、临近规格边界的滤波器。
指令
# 第 1 步:原理图分析器输出检测 JSON
python3 <kicad-skill-path>/scripts/analyze_schematic.py design.kicad_sch --output analysis.json
# 第 2 步:仿真所有支持的子电路类型
python3 <skill-path>/scripts/simulate_subcircuits.py analysis.json --output sim_report.json
# 仅仿真指定类型
python3 <skill-path>/scripts/simulate_subcircuits.py analysis.json --types rc_filters,voltage_dividers
# 保留仿真文件用于调试(默认临时目录,跑完清理)
python3 <skill-path>/scripts/simulate_subcircuits.py analysis.json --workdir ./spice_runs
# 复杂电路加大超时(默认每个子电路 5s)
python3 <skill-path>/scripts/simulate_subcircuits.py analysis.json --timeout 10
# 输出省略文件路径(报告更干净)
python3 <skill-path>/scripts/simulate_subcircuits.py analysis.json --compact
# 可选:PCB 寄生参数仿真
python3 <kicad-skill-path>/scripts/analyze_pcb.py design.kicad_pcb --full --output pcb.json
python3 <skill-path>/scripts/extract_parasitics.py pcb.json --output parasitics.json
python3 <skill-path>/scripts/simulate_subcircuits.py analysis.json --parasitics parasitics.json --output sim_report.json
# 可选:蒙特卡洛(100 次/子电路;可改均匀分布、设随机种子)
python3 <skill-path>/scripts/simulate_subcircuits.py analysis.json --monte-carlo 100 --mc-distribution uniform --mc-seed 123
仿真器自动检测,首个可用者优先;可用 --simulator ngspice|ltspice|xyce 或 SPICE_SIMULATOR 环境变量覆盖。仅依赖 Python 3.8+ 标准库,无 pip 依赖。
容差来源:优先从值字符串解析("680K 1%"→1%,"22uF/6.3V/20%/X5R"→20%);未指定时默认 电阻 5% / 电容 10% / 电感 20%。
示例
报告输出(节选):
{
"summary": {"total": 5, "pass": 3, "warn": 1, "fail": 0, "skip": 1},
"simulation_results": [{
"subcircuit_type": "rc_filter",
"components": ["R5", "C3"],
"status": "pass",
"expected": {"fc_hz": 15915, "type": "low-pass"},
"simulated": {"fc_hz": 15878, "phase_at_fc_deg": -0.78},
"delta": {"fc_error_pct": 0.23}
}],
"simulator": "ngspice"
}
呈现给用户的写法:
## 仿真验证(4 通过,1 警告,0 失败,1 跳过)
### RC 滤波器 R5/C3(fc=15.9kHz 低通)—— 已确认
仿真 fc=15.9kHz,与计算值偏差 <0.3%,fc 处相位 -45 度符合预期。
### 运放 U4A(反相增益 -10)—— 需结合上下文
仿真增益 20.0dB@1kHz,符合 -10x;带宽 98.8kHz(理想模型)。
注:LM358 GBW≈1MHz,实际带宽约 100kHz——确认信号频率 <85kHz 以保证 <1dB 增益误差。
### RC 滤波器 R12/C8 —— 不匹配
仿真 fc=3.2kHz vs 期望 15.9kHz(偏差 80%)。多半是分析器误判拓扑,
R12 可能用作上拉而非串联滤波元件,需手工核对原理图。
注意事项
- 状态语义:pass=仿真在容差内确认检测(无需动作);warn=有可记录的小偏差/模型局限(带上下文报告);fail=仿真与分析器矛盾(查
.cir与.log,可能是真实设计问题、拓扑误判或测试平台 bug);skip=数据缺失/配置不支持/仿真器错误(看note字段原因)。 - 无源电路用理想模型,数学上精确:偏差 >1% 必是 bug(拓扑检测、测试平台生成或值解析其一),实测通常 <0.3%。但它不告诉你真实电路行为——未含下游负载、PCB 寄生、温度效应。
- 运放模型:识别出的约 100 个常见型号用每零件行为模型(含真实 GBW/压摆率/失调/输出摆幅);未识别则回退理想模型(Aol=1e6,GBW≈10MHz)。看
model_note字段判断用了哪种;行为模型下的增益带宽警告是有价值的设计洞察,非仿真错误。 - 晶振仿真用通用 Butterworth-Van Dyke 等效电路,主要价值是抓"缺失/严重错误的负载电容",非精确频率预测。
- 已知局限:分压器按 R_bot/(R_top+R_bot) 不带负载仿真(目的是验证计算而非建模整电路);LC 滤波器 Q 用估算电感 ESR(默认 Q=100,谐振频率不受 Q 影响);运放供电轨从网络名推断(无标注默认 ±5V,仅有 VCC 时按单电源处理);分析器可能给出
__unnamed_N内部网名,仿真正确但可读性差。 - 调试时用
--workdir保留文件;.cir是标准 SPICE 网表可手工ngspice -b file.cir运行,.log含仿真器输出。
互见
设计评审流程:先跑原理图/PCB 分析器产出检测 JSON → 再用本技能仿真验证 → 仿真结果作为报告的"验证"小节。本条采编自 aklofas/kicad-happy(MIT)。