资讯中心

联系我们

深圳市维立信电子科技有限公司
地址:深圳市福田区红荔路第一世界广场A座8D-E
咨询电话:0755-83766766
E-mail:info@welissom.com

如何通过SCPI命令查询Keysight双向直流电源输出电压阶跃响应的频谱特性?

2026-05-18 09:46:49  点击:

  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 → 幅度 / 相位频谱