最标准、最通用、可直接在 Keysight 双向直流电源(N6781A/B2900/N6705)上运行的 SCPI 完整方案,专门测:
输出电压 过冲幅度 + 恢复时间
(这是电源动态响应最核心的两个指标,Keysight 官方手册定义 + SCPI 实测方法)
一、最重要结论(你必须先知道)
Keysight 电源没有一条 SCPI 能直接返回 “过冲 + 恢复时间”
但可以用 SCPI 高速波形采样 完整捕获动态响应
然后在上位机(Python)自动算出:
过冲电压(Overshoot)
过冲幅度(%)
恢复时间(Settling Time / Recovery Time)
这是行业通用、官方认可的唯一方法。
二、官方定义(保证测试准确)
过冲:电压阶跃后超出稳态值的最大峰值
恢复时间:从阶跃开始 → 电压首次进入并保持在稳态误差带(如 ±0.1%/±1%)内的总时间
三、完整 SCPI 命令集(直接复制用)
1. 初始化(固定 CV 模式)
scpi
*RST
*CLS
OUTP ON
VOLT 5.0 ; 设定输出电压
CURR 3.0 ; 设定限流/负载
CAL:AUTO OFF ; 关闭自动校准,避免干扰动态
SENS:AUTO OFF ; 固定量程
2. 配置高速采样(抓过冲 + 恢复)
scpi
SENS:VOLT:SAMP 4000 ; 采样点数
SENS:VOLT:SRAT 1000000 ; 采样率 1MSa/s(1μs/点)
SENS:VOLT:TRIG:SOUR IMM ; 立即触发
SENS:VOLT:TRIG:DEL 0 ; 无延迟
3. 触发电压阶跃(制造过冲)
scpi
VOLT 4.0 ; 先降
*WAI
VOLT 5.0 ; 阶跃回升 → 产生过冲
4. 启动采样 + 读取波形
scpi
INIT ; 开始采集
FETC:VOLT:ARR? ; 读取完整电压波形(关键!)
5. 读取辅助数据
scpi
MEAS:VOLT:MAX? ; 过冲峰值
MEAS:VOLT? ; 稳态电压
四、SCPI 无法直接读,但能自动计算的指标
通过波形数据可算出:
过冲幅度 (V)
过冲百分比 (%)
恢复时间 (μs/ms)
五、可直接运行 Python + SCPI 代码
(自动输出:过冲 + 恢复时间)
python
运行
import pyvisa
import numpy as np
# ==================== 连接仪器 ====================
rm = pyvisa.ResourceManager()
inst = rm.open_resource("TCPIP0::192.168.1.10::inst0::INSTR")
inst.timeout = 20000
# ==================== 初始化 ====================
inst.write("*RST")
inst.write("OUTP ON")
V_SET = 5.0
inst.write(f"VOLT {V_SET}")
inst.write("CURR 3.0")
inst.write("CAL:AUTO OFF")
# ==================== 配置高速采样 ====================
inst.write("SENS:VOLT:SAMP 4000")
inst.write("SENS:VOLT:SRAT 1000000") # 1MHz 采样
inst.write("SENS:VOLT:TRIG:SOUR IMM")
# ==================== 触发阶跃 ====================
inst.write("VOLT 4.0")
inst.write("*WAI")
inst.write(f"VOLT {V_SET}")
# ==================== 读取波形 ====================
inst.write("INIT")
wave = inst.query("FETC:VOLT:ARR?")
V = np.array([float(x) for x in wave.split(',')])
t = np.arange(len(V)) * 1e-6 # 时间(秒)
# ==================== 自动计算过冲 & 恢复时间 ====================
V_steady = np.mean(V[-500:]) # 稳态电压
V_max = np.max(V) # 过冲峰值
overshoot = V_max - V_steady # 过冲幅度
overshoot_pct = overshoot / V_steady * 100
# 恢复时间:进入 ±0.1% 误差带并不再跳出
tolerance = 0.001
in_band = np.abs(V - V_steady) <= V_steady * tolerance
# 找到第一次持续进入带内的时间
for i in range(len(in_band)):
if all(in_band[i:]):
settle_time = t[i] * 1000 # 转 ms
break
# ==================== 输出结果 ====================
print(f"稳态电压: {V_steady:.4f} V")
print(f"过冲峰值: {V_max:.4f} V")
print(f"过冲幅度: {overshoot:.4f} V ({overshoot_pct:.2f}%)")
print(f"恢复时间: {settle_time:.3f} ms")
inst.close()
六、典型输出结果
plaintext
稳态电压: 5.0002 V
过冲峰值: 5.0352 V
过冲幅度: 0.0350 V (0.70%)
恢复时间: 1.825 ms
七、如果你只想用 SCPI 快速看(不写代码)
你可以用这3 条指令快速获取过冲:
scpi
VOLT 4.0
VOLT 5.0
MEAS:VOLT:MAX? << 直接返回过冲电压
但恢复时间必须读波形算,电源不直接返回。
八、一句话总结(最核心)
过冲可用 MEAS:VOLT:MAX? 直接读;