VREF——IC测试笔记

1.代码

void VREF(void)
{
	util.GetActiveSite(act);
	for (int i=0;i<2;i++)
	{
		flag[i]=0;
	}

	if(act[0]==0)
 	{
	  flag[0]=1;
	}
 	if(act[1]==0)
	{
	  flag[1]=1;
	}
	
	dvc.FI("K",0,16,dvc.V_RNG_16V,dvc.I_RNG_20UA,dvc.ON);
	ovc.FI("R",0,2,ovc.V_RNG_2V,ovc.I_RNG_10UA,true,1);
	ovc.FV("VK",10,1e-3,ovc.V_RNG_16V,ovc.I_RNG_1MA,true,1);
	util.dlyms(1);
	
	for(vx=1;vx<=1.5;vx+=0.010)
	{
		dvc.FV("V1",vx,2e-3,dvc.V_RNG_2V,dvc.I_RNG_2MA,dvc.ON);
		util.dlyms(1);
		dvc.MV("K",dvc.TOTAL_AVG,1,1);
		util.GetMeasValue("K",temp);

		if(temp[0]<1.5&&flag[0]==0)
		{
			ovc.MV("R",1);
			util.GetMeasValue("R",temp1);
			temp1[0]=temp1[0]*1000;
			flag[0]=1;
		}
		if(temp[1]<1.5&&flag[1]==0)
		{
			ovc.MV("R",1);
			util.GetMeasValue("R",temp1);
			temp1[1]=temp1[1]*1000;
			flag[1]=1;
		}
        if(flag[0]==1&&flag[1]==1)
		{
			break;
		}
	}
	util.TestLog("VREF",temp1);
	dvc.FV("K",0,0,dvc.V_RNG_16V,dvc.I_RNG_20UA,dvc.ON);
	ovc.FV("R",0,0,ovc.V_RNG_2V,ovc.I_RNG_10UA,true,1);
	ovc.FV("VK",0,1e-3,ovc.V_RNG_16V,ovc.I_RNG_1MA,true,1);
	dvc.FV("V1",0,1e-3,dvc.V_RNG_2V,dvc.I_RNG_2MA,dvc.ON);
	util.dlyms(1);
	dvc.FV("K",0,0,dvc.V_RNG_16V,dvc.I_RNG_20UA,dvc.OFF);
	ovc.FV("R",0,0,ovc.V_RNG_2V,ovc.I_RNG_10UA,false,1);
	ovc.FV("VK",0,1e-3,ovc.V_RNG_16V,ovc.I_RNG_1MA,false,1);
	dvc.FV("V1",0,1e-3,dvc.V_RNG_2V,dvc.I_RNG_2MA,dvc.OFF);
}

2.解释

        这段代码是一个用于测试电压参考(VREF)的函数,它使用了一些假定的设备控制库(如dvcovc)和工具库(如util)来执行测试。下面是对这段代码的逐行解释和逻辑分析:

  1. 初始化:
    • 使用util.GetActiveSite(act)获取当前激活的测试站点。
    • 初始化一个名为flag的数组,用于标记两个测试点是否已记录到有效数据。
  2. 检查激活站点:
    • 如果激活站点的第一个或第二个位置为0(可能表示有设备连接到这些位置),则设置对应的flag为1,表示该位置需要被测试。
  3. 设置初始条件:
    • 使用dvcovcFIFV函数设置初始的测试条件,包括电压范围和电流范围等。
  4. 测试循环:
    • 通过一个循环,逐渐增加V1的电压值,从1V到1.5V,步长为0.01V。
    • 在每个电压值下,测量K通道的值,并判断是否小于1.5V(这可能是一个阈值判断,用于确定是否开始记录数据)。
    • 如果满足条件且对应的flag未设置,则测量R通道的值,乘以1000(可能是为了单位转换),并设置相应的flag
    • 一旦两个flag都被设置(即两个测试点都已记录到数据),则退出循环。
  5. 记录日志和清理:
    • 使用util.TestLog记录测试数据。
    • 将所有设备设置回初始状态或关闭状态,确保测试环境恢复到初始条件。

3.注意点和潜在问题:

  • 变量vx在循环中被用作循环变量,但它在循环前没有声明和初始化。这可能会导致编译错误或未定义行为。
  • temptemp1数组用于存储测量结果,但它们的定义和大小未在代码中给出。确保这些数组在使用前已被正确定义和初始化。
  • flag数组的使用是正确的,但假设temptemp1数组的大小足以存储所需的数据。
  • 在两个if语句中,如果temp[0]temp[1]都小于1.5V,并且两个flag都未设置,则R通道将被测量两次,这可能不是预期的行为。如果需要避免这种情况,可以考虑使用一个更复杂的逻辑来确保每个flag只被设置一次。
  • 代码中没有处理可能的设备通信错误或测量失败的情况。在实际应用中,应该添加错误处理和异常捕获机制。
  • 10
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值