Keysight 双向直流电源(N6705C / N6781A / B2900 等)没有直接返回 “阶跃响应频谱” 的 SCPI 指令。只能用 SCPI 触发阶跃 → 高速采集电压时域波形 → 上位机做 FFT → 得到频谱(幅度 / 相位 vs 频率)。
下面给你完整、可直接运行的 SCPI + Python 方案:从配置 → 阶跃 → 采集 → FFT 频谱输出。
一、原理(为什么只能这么做)
频谱 = 阶跃响应的傅里叶变换
电源内部没有实时 FFT 硬件 / 指令,只能先采时域波形再算
阶跃响应频谱包含:环路带宽、谐振峰、开关频率谐波、纹波分布
二、SCPI:准备 + 触发阶跃 + 高速采样
1. 初始化(干净、固定工况)
scpi
*RST
*CLS
OUTP ON
VOLT 5.0
CURR 2.0
CAL:AUTO OFF
SENS:AUTO OFF
VOLT:BAND HIGH ; 高带宽 → 阶跃快、频谱宽
2. 配置高速采样(抓阶跃瞬态)
scpi
SENS:VOLT:SAMP 16384 ; 采样点数(2^N,FFT更高效)
SENS:VOLT:SRAT 1000000 ; 1 MS/s → 带宽 ≈ 500 kHz
TRIG:SOUR IMM ; 立即触发
TRIG:DELAY 0
3. 执行电压阶跃(激发响应)
scpi
VOLT 1.0
*WAI
INIT ; 开始采集
VOLT 5.0 ; 阶跃 1V → 5V,产生动态响应
*WAI
4. 读取时域波形
scpi
FETC:VOLT:ARR? ; 返回:v1.v2.v3....vn(CSV)
三、Python:SCPI 采集 + FFT 频谱计算
python
运行
import pyvisa
import numpy as np
import matplotlib.pyplot as plt
rm = pyvisa.ResourceManager()
inst = rm.open_resource("TCPIP0::你的仪器IP::inst0::INSTR")
inst.timeout = 30000
# 1. SCPI 配置(同上文)
inst.write("*RST")
inst.write("OUTP ON")
inst.write("VOLT 5.0")
inst.write("CURR 2.0")
inst.write("CAL:AUTO OFF")
inst.write("VOLT:BAND HIGH")
inst.write("SENS:VOLT:SAMP 16384")
inst.write("SENS:VOLT:SRAT 1000000")
inst.write("TRIG:SOUR IMM")
# 2. 阶跃 + 采集
inst.write("VOLT 1.0")
inst.write("*WAI")
inst.write("INIT")
inst.write("VOLT 5.0")
inst.write("*WAI")
# 3. 读波形
wave_csv = inst.query("FETC:VOLT:ARR?")
v = np.array([float(x) for x in wave_csv.split(',')])
fs = 1e6 # 采样率 1MS/s
N = len(v)
# 4. 去直流(只看动态响应)
v_ac = v - np.mean(v)
# 5. FFT
Y = np.fft.fft(v_ac)
freq = np.fft.fftfreq(N, 1/fs)
amp = np.abs(Y)[:N//2]
freq = freq[:N//2]
# 6. 绘图:频谱
plt.figure(figsize=(10.5))
plt.plot(freq/1000. 20*np.log10(amp)) # dB 幅度
plt.xlabel("频率 (kHz)")
plt.ylabel("幅度 (dB)")
plt.title("电压阶跃响应频谱")
plt.xlim(0. 500) # 0~500kHz
plt.grid(True)
plt.show()
inst.write("OUTP OFF")
inst.close()
四、从频谱能读出什么关键信息?
环路带宽:幅度下降到 -3dB 的频率
谐振峰:频谱凸起 → 环路不稳定 / 欠阻尼
开关频率:固定尖峰(如 200kHz)
纹波分布:高频谐波幅度
过冲对应频率:过冲越大,中高频幅度越高
五、常用 SCPI 查询(辅助)
scpi
VOLT:BAND? ; 查询当前带宽 LOW/MED/HIGH
SENS:VOLT:SRAT? ; 查询采样率
SENS:VOLT:SAMP? ; 查询采样点数
MEAS:VOLT:MAX? ; 阶跃峰值(过冲)
六、总结(一句话记牢)
❌ 无 SCPI 直接读 “阶跃频谱”
✅ SCPI:阶跃 + 高速采集时域波形
✅ 上位机:FFT → 幅度 / 相位频谱