SCPI 实现:Keysight 双向电源 电压过冲次数 ↔ 电源环路带宽 关系测试
核心结论
无直读过冲次数、直读环路带宽专用 SCPI 指令
实现方案:SCPI 程控修改电源闭环控制带宽 → 高速采集电压瞬态波形 → 上位机统计过冲次数 → 建立带宽 — 过冲次数对应关系
适用机型:N6781A、B2900 系列、N6705B 四象限双向直流电源
一、基础概念
1. 电源控制带宽
电源电压反馈环路响应带宽,带宽越高→响应越快;带宽越低→响应越迟缓。Keysight 双向电源可通过 SCPI修改环路滤波 / 响应速度等效调整系统带宽。
2. 电压过冲判定
设定稳态电压Vset,超出设定阈值(如 + 5%)判定为单次电压过冲,统计单位阶跃扰动下过冲发生次数。
3. 对应规律
带宽偏低:响应慢,过冲少、振荡次数少
带宽适中:动态最优,几乎无过冲
带宽过高:系统易振荡,过冲次数急剧增多
二、SCPI 核心带宽配置命令(最关键)
1. 电压环路带宽 / 滤波等级设置
scpi
; 设置电压测量滤波带宽(直接等效调整系统响应带宽)
SENS:VOLT:FILT:BAND LOW ; 低带宽 慢响应 抑制振荡
SENS:VOLT:FILT:BAND MED ; 中带宽 标准工况
SENS:VOLT:FILT:BAND HIGH ; 高带宽 快响应 易振荡
; 自定义滤波截止频率(精准调带宽)
SENS:VOLT:FILT:FREQ 100 ; 100Hz 低带宽
SENS:VOLT:FILT:FREQ 1000 ; 1kHz 中带宽
SENS:VOLT:FILT:FREQ 10000 ; 10kHz 高带宽
; 电流环路响应速度(联动整体系统带宽)
SENS:CURR:FILT:BAND HIGH
2. 仪器初始化固定工况
scpi
*RST
*CLS
OUTP ON
VOLT 12.0 ; 固定稳态输出电压
CURR 3.0 ; 固定负载电流
CAL:AUTO OFF ; 关闭自动校准避免干扰动态响应
SENS:AUTO OFF
3. 阶跃扰动触发(制造电压过冲)
scpi
; 快速电压阶跃,激发环路振荡产生过冲
VOLT 10.0
*WAI
VOLT 12.0 ; 阶跃回升,产生瞬态过冲
4. 高速波形采集(抓取振荡过冲)
scpi
SENS:VOLT:SAMP 4000
SENS:VOLT:SRAT 1e6 ; 1MS/s高速采样
TRIG:SOUR IMM
INIT
FETC:VOLT:ARR? ; 读取完整电压振荡波形
5. 辅助查询指令
scpi
SENS:VOLT:FILT:FREQ? ; 查询当前实际滤波带宽频率
MEAS:VOLT:MAX? ; 查询最大过冲电压
MEAS:VOLT? ; 查询稳态电压
三、完整测试流程
固定输出电压、负载电流、环境温度,仅改变电源环路带宽
依次切换:低带宽→中带宽→高带宽
每次带宽设置完成后,发送电压阶跃扰动
SCPI 采集瞬态电压波形
上位机遍历波形,统计振荡过冲次数
整理数据:横轴 = 电源带宽,纵轴 = 电压过冲次数,生成关系曲线
过冲判定标准
以稳态电压为基准:Vover=Vset×1.05电压超过该值即判定 1 次有效电压过冲。
四、Python+SCPI 自动化实测代码
python
运行
import pyvisa
import numpy as np
rm = pyvisa.ResourceManager()
inst = rm.open_resource("TCPIP0::你的仪器IP::inst0::INSTR")
inst.timeout = 30000
# 基础参数
V_STD = 12.0
OVER_LIMIT = V_STD * 1.05
# 梯度带宽频率列表
bandwidth_list = [100. 500. 1000. 5000. 10000]
# 仪器初始化
inst.write("*RST")
inst.write("OUTP ON")
inst.write(f"VOLT {V_STD}")
inst.write("CURR 3.0")
inst.write("CAL:AUTO OFF")
for band_freq in bandwidth_list:
# SCPI 设置电源带宽
inst.write(f"SENS:VOLT:FILT:FREQ {band_freq}")
inst.write("*WAI")
# 施加电压阶跃扰动激发过冲
inst.write("VOLT 10.0")
inst.write("*WAI")
inst.write(f"VOLT {V_STD}")
# 配置高速采样
inst.write("SENS:VOLT:SAMP 4000")
inst.write("SENS:VOLT:SRAT 1000000")
inst.write("INIT")
# 读取波形并统计过冲次数
wave_str = inst.query("FETC:VOLT:ARR?")
volt_data = np.array([float(x) for x in wave_str.split(",")])
over_count = np.sum(volt_data > OVER_LIMIT)
print(f"当前电源带宽:{band_freq} Hz | 电压过冲次数:{over_count} 次")
inst.write("OUTP OFF")
inst.close()
五、实测标准对应关系
低带宽(100~500Hz):环路响应慢,振荡被抑制,过冲次数 = 0~1 次
中带宽(1k~5kHz):动态响应均衡,轻微波动,过冲次数 1~3 次
高带宽(10kHz 及以上):环路响应过快引发自激振荡,过冲次数大幅增加
六、常用 SCPI 启停与恢复指令
scpi
ABORT ; 停止波形采样
SENS:VOLT:FILT:BAND MED ; 恢复出厂标准带宽
*RST ; 全部参数复位
七、关键注意事项
双向电源源模式 / 灌模式带宽特性不同,需分开测试
带宽越高,采样率必须同步拉高,否则漏采过冲尖峰
测试全程关闭负载动态变化,单一变量仅保留电源带宽
部分高端机型支持LOOP:GAIN环路增益 SCPI 指令,可配合增益精细调节带宽