Keysight 双向直流电源(N6781A/B2902A/N6705B 等)没有一条 SCPI 命令能直接给出 “过冲时间–负载变化率” 的关系曲线,但可以用 SCPI 自动化扫描不同负载变化率 → 高速采样电压波形 → 后处理提取过冲时间,从而得到两者关系。下面给你完整 SCPI 命令流 + 测量原理 + 自动化脚本思路。
一、概念澄清(SCPI 里没有直接 “过冲时间”)
负载变化率 Slew Rate (SR):电流变化速度,单位 A/μs 或 A/ms,由电源 / 电子负载动态模式设定。
电压过冲时间 Overshoot Time:
过冲幅度:Vpk – Vsteady
过冲时间:从进入过冲到 ** 回到稳态误差带(如 ±2%)** 的时间。
SCPI 现状:
✅ 可设:负载电流、电流变化率、触发方式、采样点数
✅ 可读:电压最大值 / 最小值、采样波形数组
❌ 无:MEAS:VOLT:OVER:TIME? 这类直接命令
因此只能:多 SR → 采样波形 → 离线算过冲时间 → 绘 SR vs tovershoot。
二、SCPI 核心命令(双向电源 N6781A/B2902A)
1. 基础初始化
scpi
*RST
*CLS
OUTP ON ; 开输出
VOLT 5.0 ; 设定 Vsteady=5V
CURR 1.0 ; 限流 1A
2. 设置负载动态变化率(关键)
双向电源自身做负载阶跃(源 / 阱切换):
scpi
; 例如:1A ↔ 3A 方波,上升/下降斜率 = 0.1 A/μs
CURR:STAR 1.0
CURR:STOP 3.0
CURR:SLEW:RIS 0.1e6 ; 上升斜率 0.1 A/μs
CURR:SLEW:FAL 0.1e6 ; 下降斜率
CURR:MODE DYN ; 动态电流模式
若用外部电子负载,则 SCPI 发负载指令(如 CURR:SLEW)给负载,电源只做电压采样。
3. 高速电压采样(捕获过冲波形)
scpi
SENS:VOLT:RANG AUTO
SENS:VOLT:SAMP 2000 ; 2000 点
SENS:VOLT:SRAT 1e6 ; 1 MSa/s(1μs/点)
SENS:VOLT:TRIG:SOUR IMM ; 立即触发(或 EXT 同步负载边沿)
SENS:VOLT:TRIG:DEL 0 ; 无延迟
; 启动采样
INIT
; 读取波形(CSV 数组)
FETC:VOLT:ARR?
4. 读取峰值(用于过冲幅度)
scpi
MEAS:VOLT:MAX? ; Vpk
MEAS:VOLT:MIN? ; Vvalley
MEAS:VOLT? ; Vsteady
三、“过冲时间 vs 负载变化率” 测量流程(SCPI 自动化)
目标:在 0.01 → 1 A/μs 范围内扫描 SR,每次测 tovershoot。
步骤 1:遍历负载变化率(SCPI 循环)
scpi
; 伪代码(SCPI 无循环,由 Python 外层控制)
FOR SR IN [0.01. 0.05. 0.1. 0.2. 0.5. 1.0] A/μs
CURR:SLEW:RIS SR*1e6
CURR:SLEW:FAL SR*1e6
INIT ; 触发负载阶跃+采样
READ FETC:VOLT:ARR? ; 拿到波形数组 V(t)
READ MEAS:VOLT:MAX?
READ MEAS:VOLT?
ENDFOR
步骤 2:从波形提取过冲时间(后处理算法)
对每个 SR 的 V (t):
找稳态:Vsteady = mean(最后 20% 点)
过冲幅度:ΔV = max(V) − Vsteady
过冲起始:首次 > Vsteady×1.02 的时刻
过冲结束:最后一次 > Vsteady×1.02 后回到 ±2% 内的时刻
过冲时间:tovershoot = t_end − t_start
步骤 3:得到关系
横轴:负载变化率 SR(A/μs)
纵轴:过冲时间 tovershoot(μs)
典型趋势:SR 越大 → 过冲幅度越大 → 过冲时间先减小后增大(欠阻尼→过阻尼)。
四、Python + SCPI 最简可运行示例(N6781A)
python
运行
import pyvisa
import numpy as np
rm = pyvisa.ResourceManager()
inst = rm.open_resource("TCPIP0::192.168.1.100::inst0::INSTR")
inst.timeout = 10000
# 初始化
inst.write("*RST")
inst.write("OUTP ON")
inst.write("VOLT 5.0")
SR_list = [0.01. 0.05. 0.1. 0.2. 0.5. 1.0] # A/μs
tovershoot_list = []
for SR in SR_list:
inst.write(f"CURR:SLEW:RIS {SR*1e6}")
inst.write(f"CURR:SLEW:FAL {SR*1e6}")
inst.write("CURR:MODE DYN")
inst.write("SENS:VOLT:SAMP 2000")
inst.write("SENS:VOLT:SRAT 1e6")
inst.write("INIT")
# 读取波形
data = inst.query("FETC:VOLT:ARR?")
V = np.array([float(x) for x in data.split(',')])
t = np.arange(len(V)) * 1e-6 # μs
Vsteady = np.mean(V[-400:])
Vpk = np.max(V)
# 2% 误差带
upper = Vsteady * 1.02
cross_idx = np.where(V > upper)[0]
if len(cross_idx) > 0:
t_start = t[cross_idx[0]]
t_end = t[cross_idx[-1]]
tover = t_end - t_start
else:
tover = 0
tovershoot_list.append(tover)
print(f"SR={SR} A/μs, tover={tover:.2f} μs")
# 最后:plot(SR_list, tovershoot_list)
inst.close()
五、关键限制与替代方案
SCPI 只能采样,不能自动算时间:必须 PC 后处理。
采样率上限:N6781A 约 1 MSa/s,看 1μs 级过冲足够;亚微秒需示波器。
高精度替代:
示波器(Keysight MSO-X)+ 电源同步触发
示波器 SCPI:MEAS:OVER:TIME? 直接读过冲时间。
总结
无单条 SCPI 直接查 “过冲时间–负载变化率”。
用 SCPI 扫不同 SR → 高速采样电压波形 → 后处理提取过冲时间,即可得到关系。
命令核心:CURR:SLEW(设变化率)、SENS:VOLT:SAMP/SRAT(采样)、FETC:VOLT:ARR?(读波形)。