如何在Keithley2635B源表生成周期性信号时禁用预充电?
解决Keithley 2635B重复生成方波时周期起始出现平台的问题
我之前调试Keithley 2635B的自定义波形生成时,也碰到过一模一样的问题——用listv和delaylist做简单方波(+A/-A,延迟相同),设置smua.trigger.arm.count重复周期后,每个新周期开头都会出现莫名的平台,单周期输出却完全正常。结合官方手册和实际调试经验,给你梳理下原因和可行的解决办法:
可能的触发逻辑问题
这个平台本质上是周期衔接时的触发延迟导致的:
- 当用
smua.trigger.arm.count设置重复次数时,每次周期结束后源表会重新执行“武装触发”的流程,这个过程中硬件会有微小的响应延迟,导致下一个周期的第一个电平不能立即切换,从而形成平台; - 另外,
delaylist的循环衔接逻辑也可能有坑——默认情况下,列表执行完最后一个延迟后,源表会保持最后一个电平,直到下一次触发武装完成,这中间的间隙就是你看到的平台。
亲测有效的解决办法
1. 换用repeat.count替代arm.count
两者的触发逻辑差异很大:
arm.count是多次武装触发,每次武装执行一遍完整列表;repeat.count是单次武装下重复执行列表,能跳过多次武装的额外延迟,衔接更顺畅。
示例代码:
-- 配置方波的两个电平和对应延迟 smua.trigger.source.listv = {A, -A} smua.trigger.source.delaylist = {t, t} -- 设置单次武装下的重复周期数 smua.trigger.repeat.count = <Periods> -- 启动触发 smua.trigger.initiate()
2. 给列表加一个“无缝衔接”的过渡点
如果必须用arm.count,可以在列表末尾加一个快速切换回起始电平的点,把最后一个延迟设为0,让周期结束后立即跳回+A:
smua.trigger.source.listv = {A, -A, A} smua.trigger.source.delaylist = {t, 0, t} smua.trigger.arm.count = <Periods>
这样每个周期的结尾会瞬间切回起始电平,下一次武装触发后直接进入正常延迟,平台就会消失。
3. 拉满输出切换速率
检查源表的电压切换速率设置,把它调到最快(关闭 slew limit),减少电平切换的响应时间:
-- 关闭输出速率限制,让电平切换最快 smua.source.slewlimit = 0
注意:过快的切换可能引入少量噪声,你可以根据实际测试结果微调这个值。
4. 直接用内置方波功能
如果自定义列表的方式麻烦,不如试试源表自带的方波生成,稳定性更好:
-- 配置内置方波参数 smua.source.func = smua.OUTPUT_DCVOLTS smua.source.trigger.func = smua.TRIGGER_SQUARE smua.source.trigger.frequency = 1/(2*t) -- 周期是2t,对应你原来的两个延迟时间 smua.source.trigger.highlevel = A smua.source.trigger.lowlevel = -A smua.source.trigger.count = <Periods> smua.trigger.initiate()
调试小技巧
- 先测单周期输出,确认波形正常,排除列表本身的问题;
- 用示波器抓周期衔接处的波形,看看延迟到底出在哪个环节(是软件触发延迟还是硬件切换延迟);
- 如果平台依然存在,可以尝试升级源表的固件,有些老固件会有触发逻辑的小bug。
内容的提问来源于stack exchange,提问作者Guimoute
相关产品推荐
相关产品推荐

