Keysight 双向直流电源(N6781A / RP7900 / B2900 等)没有一条 SCPI 直接返回 “恢复时间–温度关系”,但可以用:
SCPI 读内部温度
SCPI 做负载阶跃 + 高速采样电压波形
上位机算恢复时间(回到稳态带的时间)
多温度点循环 → 得到恢复时间 vs 温度曲线
一、定义:电压恢复时间(Recovery Time)
行业标准:负载 / 电压突变后,电压回到并稳定在稳态值 ±X mV(如 ±15 mV)内的最短时间。温度升高 → 环路带宽下降 → 恢复时间变长。
二、关键 SCPI(读温度 + 瞬态采集)
1. 查询仪器内部温度(核心!)
scpi
MEAS:TEMP? ; 读电源内部温度(°C)
STAT:TEMP:LIM? ; 过温保护阈值
2. 初始化 + 关闭自动功能(保证可重复)
scpi
*RST
*CLS
OUTP ON
CAL:AUTO OFF
SENS:AUTO OFF
VOLT:BAND HIGH ; 高带宽,瞬态更快
CURR 5A ; 设定负载电流
3. 高速采样配置(抓恢复过程)
scpi
SENS:VOLT:SAMP 16384 ; 采样点数
SENS:VOLT:SRAT 1000000 ; 1 MS/s → 1 μs 分辨率
TRIG:SOUR IMM
TRIG:DEL 0
4. 触发负载阶跃(激发恢复过程)
scpi
CURR 1A ; 轻载
*WAI
INIT ; 开始采集
CURR 5A ; 阶跃到重载 → 电压掉下去再恢复
*WAI
5. 读取波形 + 温度
scpi
FETC:VOLT:ARR? ; 电压时域波形
MEAS:TEMP? ; 同步读温度
三、上位机计算恢复时间(Python)
逻辑:
找到稳态电压 V_set
设定恢复带:V_set ± 15 mV
从阶跃后找第一次进入并停在带内的时间点 → 恢复时间 Tr
python
运行
import pyvisa, numpy as np
rm = pyvisa.ResourceManager()
inst = rm.open_resource("TCPIP0::IP::inst0::INSTR")
inst.timeout = 30000
# 配置
V_SET = 5.0
I_LOW, I_HIGH = 1.0. 5.0
fs = 1e6
dt = 1/fs
band = 0.015 # ±15mV
# 初始化
inst.write("*RST; OUTP ON; CAL:AUTO OFF")
inst.write(f"VOLT {V_SET}; CURR {I_LOW}")
inst.write("VOLT:BAND HIGH")
inst.write("SENS:VOLT:SAMP 16384")
inst.write(f"SENS:VOLT:SRAT {fs}")
# 阶跃+采集
inst.write("*WAI; INIT")
inst.write(f"CURR {I_HIGH}; *WAI")
# 读数据
wave = np.array([float(x) for x in inst.query("FETC:VOLT:ARR?").split(',')])
temp = float(inst.query("MEAS:TEMP?"))
# 找恢复时间
upper = V_SET + band
lower = V_SET - band
in_band = np.logical_and(wave >= lower, wave <= upper)
# 找到第一次连续稳定在带内
for i in range(len(wave)):
if np.all(in_band[i:i+100]): # 连续100点
tr = i * dt
break
print(f"温度={temp:.1f}°C, 恢复时间={tr*1e6:.2f} μs")
inst.close()
四、如何得到 “恢复时间–温度” 关系
控温:高低温箱或自然升温(满载运行)
循环测量
每 2–5°C 测一次
每次:读温度 → 阶跃 → 采波形 → 算 Tr
拟合曲线:Tr (°C),通常是正斜率(温度越高恢复越慢)
五、常用辅助 SCPI
scpi
VOLT:BAND? ; 当前带宽
SENS:VOLT:SRAT? ; 采样率
MEAS:VOLT? ; 稳态电压
STAT:OPER:TEMP? ; 温度状态寄存器
六、一句话总结
❌ 无直接 SCPI 指令输出 Tr–T 关系
✅ MEAS:TEMP? + 负载阶跃 + 高速采样 + 上位机判稳
✅ 温度上升 → 恢复时间增大(环路变慢)