应用举例1:IDDQ测试
在此例中,将2000个测试向量发送至必须用恒定2V加电的CMOS IC。此例将使用一个阈值电平,而且1μA及以下的静态电流将被认为是合格电流。无需保存实际的测量值,所以将只检查260X的箝位状态。为确保生产吞吐量符合要求,必须尽快完成测量,最好在1秒以内。测量仪器必须发送一个通过/失效指示至数字测试系统。
方案:开发TSP脚本用于创建“IddqTest(smu, ndevices, nvectors)函数”。此脚本的一部分被列在下面。完整的脚本可以在吉时利网站(www.keithley.com)下载。此脚本可以用测试脚本生成器查看、编辑、装载和运行。由于无法获得实际的“数字测试系统”,因而使用IDDQ测量与测试向量应用同步的触发线路进行环绕测试以评估函数的速度性能。260X的输入触发线路连至其输出触发线路。在此条件下,260X能以每秒约2500个向量的速率执行IDDQ测试。
函数定义如下。除了这里示出的以外,实际脚本包括更多注释。注释用双横线(--)标识。函数中声明了几个局部变量。所有变量都是全局的,除非显式声明为局部变量。此函数在执行实际测试前要进行一些仪器初始化设置。此设置包括设定2V源电平和1μA箝位极限,选择电压感测模式以及配置触发线路。例子中使用了本地(2线)电压感测。可以直接将其改为远端(4线)感测。
function IddqTest(smu, ndevices, nvectors)
-- 传递参数:
-- 源测量单元是用于测试的SMU(A或B)
-- ndevices是待测IC的数量
-- nvectors是Iddq测试序列用到的向量数量
-- 默认smua,如果未指定SMU。
if smu == nil then smu = smua end
-- ***** 声明并初始化临时变量*****
-- 保存“等待触发信号”布尔状态的变量
local l_sot_received
local l_trig_received
-- 放弃测试标记(布尔型)
local l_abort_test
-- 保存定时信息的变量
local l_start_time, l_stop_time, l_elapsed_time
-- 计数器变量
local l_i, l_nvectors_remaining
-- 用于模拟器件机械手分级的表格
local l_bins = {0,0} -- 全部分级初始设置为0
-- *************** 执行260X的初始化设置***************
smu.reset() -- 将SMU重置为缺省设置
smu.source.func = smu.OUTPUT_DCVOLTS -- 源DCV
smu.source.rangev = 2 -- 将自动选择6V量程
smu.source.levelv = 2 -- 源2V
smu.source.limiti = 1E-6 -- 电流箝位设为1uA
smu.sense = smu.SENSE_LOCAL -- 用smu.SENSE_REMOTE进行4线感测
-- 配置数字I/O端口
digio.writeprotect = 0 -- 全部比特撤销保护
digio.writeport(30) -- 将2、3、4和5比特/行设置为高
digio.writeprotect = 30 -- 触发线路2、3、4和5写保护
-- 配置触发线路2(输入SOT)
digio.trigger[2].mode = digio.TRIG_FALLING -- 检测下降沿
digio.trigger[2].clear() -- 清除“锁存”触发信号
-- 配置触发线路3(输出EOT)
digio.trigger[3].mode = digio.TRIG_FALLING -- 输出TTL低电平脉冲
digio.trigger[3].pulsewidth = 10E-6 -- 确保最小脉冲
-- 配置触发线路4(在设置了测试向量时输入TRIG)
digio.trigger[4].mode = digio.TRIG_FALLING -- 检测下降沿
digio.trigger[4].clear() -- 清除“锁存”触发信号
-- 配置触发线路5(在完成IDDQ测量后输出TRIG)
digio.trigger[5].mode = digio.TRIG_FALLING -- 输出TTL低电平脉冲
digio.trigger[5].pulsewidth = 10E-6 -- 确保最小脉冲
-- 清除错误队列
errorqueue.clear()
-- ************************* 执行测试*************************
-- 在前面板显示一些状态信息
display.clear()
display.setcursor (1,1)
display.settext(" Test In Progress")
display.setcursor (2,1)
display.settext(" Testing "..tostring(ndevices).." Parts")
timer.reset()
l_start_time = timer.measure.t()
for l_i = 1, ndevices do
-- 等待SOT指示器件准备好进行测试;10ms后超时
l_sot_received = digio.trigger[2].wait(0.01)
-- 打开SMU输出;等到测试完成
smu.source.output = smu.OUTPUT_ON
-- 初始化中断标记和向量计数器
l_abort_test = false
l_nvectors_remaining = nvectors
digio.trigger[4].clear() -- 清除全部“锁存”触发信号
-- 重复测试直至不再有测试向量或测试失败
while (l_nvectors_remaining >0) and not (l_abort_test) do
-- 等待来自数字测试系统的触发信号;10ms后超时
l_trig_received = digio.trigger[4].wait(10E-3)
-- 如需建立时间,delay(0.0005)在这里插入延时
-- 检查箝位状态;返回布尔值真或假
l_incompliance = smu.source.compliance
--
- 基于计算机的测试系统接地技术探讨(01-25)
- 基于DDS技术的声纳信号模拟器(01-25)
- 利用增益测试小诀窍获得最佳失真水平(01-12)
- 什么是离子注入技术(04-27)
- 感应式指针手表电池测试器(09-13)
- 有趣的人体反应速度测试电路(06-13)