VDROP掉落电压的三种扫描方式——IC测试学习笔记

1.多工位粗加细扫描

//掉落电压的三种不同的测量方法
//掉落电压的三种不同的测量方法
//掉落电压的三种不同的测量方法
DUT_API int VDO(short funcindex, LPCTSTR funclabel)
{

    CParam *VDO = StsGetParam(funcindex,"VDO");


	//方法1:多工位粗加细扫描
	double vx=0;
	double vstep1=0.1;
	double vstep2=0.01;
	double vh=VO+1;//5+1=6
	double vl=VO-0.3;//5-0.3=4.7

	for(int i=0;i<2;i++)
	{
		flag[i]=1;//在工位1、工位2不工作时,设置flag[0],flag[1]为1
	}
	//获取工位是否进行测试的信息,获取各个工位有效信息,SITENUM=2,如果程序设置的工位数小于 SITENUM,则返回-1,否则返回 0
	StsGetSiteStatus(sitesta,SITENUM);
	for(int i=0;i<SITENUM;i++)
	{
		if(sitesta[i])
			flag[i]=0;//工位1工作,i=0代表工位1工作,i=1代表工位2,谁工作谁flag为0
	}
	//输出端 给电流
	VOUT.Set(FI,-100E-3,FPVI10_10V,FPVI10_100MA,RELAY_ON);
	delay_ms(2);
	
	
	
	//粗扫描
	//循环,从vx=vh=6开始循环,6>=4.7,进入循环,直到vx<4.7,结束循环
	for(vx=vh;vx>=vl;)
	{
		VIN.Set(FV,vx,FPVI10_10V,FPVI10_1A,RELAY_ON);//输入端给6V电压
		delay_us(10);
		VOUT.MeasureVI(50,10);
		for(int i=0;i<SITENUM;i++)
		{
			temp[i]=VOUT.GetMeasResult(i,MVRET);//输出端,测量电压
			if((flag[i]==0)&&(temp[i]<=out1[i]*0.95))//flag为0,与电压条件同时成立,则此时的输入电压vx记入寄存器中 
			{
				result[i]=vx;
				//result=vx+0.1
				
			}
		} 
		vx=vx-vstep1;//电压不成立,继续递减,继续循环//result=vx+0.1
	}
	//细扫描
	//此时已经测得一个vx,如果测得的vx=4.6<vl=4.7,则进入循环
	if(vx<vl)
	{
		for(int i=0;i<SITENUM;i++)
		{
			if(sitesta[i]&&vx<result[i]&&result[i]!=0)//工位有效,4.6<4.7,4.7不为0,同时成立,则将result的值给vx,vx=4.7
				vx=result[i];
		}
		vx=vx+vstep1;//vx=4.8
	}
	else
		vx=vh;//这里的vx也可以VOUT1*0.98+规范的上限
	
	
	
	
	for(int i=0;i<2;i++)
	{
		flag[i]=1;
	}

	StsGetSiteStatus(sitesta,SITENUM);
	for(int i=0;i<SITENUM;i++)
	{
		if(sitesta[i])
			flag[i]=0;
	}
	VIN.Set(FV,0,FPVI10_10V,FPVI10_1A,RELAY_ON);
	delay_ms(2);
	//vx=4.8>4.7进入循环
	for(;vx>=vl;)
	{
		VIN.Set(FV,vx,FPVI10_10V,FPVI10_1A,RELAY_ON);//vx=4.80,输入端电压
		delay_us(200);
		VOUT.MeasureVI(10,10);
		for(int i=0;i<SITENUM;i++)
		{
			temp[i]=VOUT.GetMeasResult(i,MVRET);//测量输出端的电压值
			if((flag[i]==0)&&(temp[i]<=out1[i]*0.95))//符合条件的输入电压,result=vx,flag为1
			{
				result[i]=vx;
				flag[i]=1;
			}
		}
		if((flag[0]==1)&&(flag[1]==1))
			break;
		vx=vx-vstep2;//vx=result-0.01
	}
	for(int i=0;i<SITENUM;i++)
	{
		VDO->SetTestResult(i,0,(result[i]-temp[i])*1000);//符合条件的输入端电压-输出端测得电压,单位转换为mV
	} 

2.二分法扫描


//掉落电压的三种不同的测量方法
//掉落电压的三种不同的测量方法
//掉落电压的三种不同的测量方法
方法2:二分法多工位扫描
	double vh[4][4];//扫描上限
	double vl[4][4];//扫描下限
	double vc[4][4];//中心值
	int m;
	for(i=0;i<2;i++)
	{
		flag[i]=1;
	}

	StsGetSiteStatus(sitesta,SITENUM);
	for(i=0;i<SITENUM;i++)
	{
		if(sitesta[i])
			flag[i]=0;
	}
	vh[0][0]=4;
	vl[0][0]=3.1;  
	vh[1][0]=4;
	vl[1][0]=3.1;
	vc[0][0]=(vh[0][0]+vl[0][0])/2;
	vc[1][0]=(vh[1][0]+vl[1][0])/2;
	VOUT.Set(FI,-500E-3,FPVI10_10V,FPVI10_1A,RELAY_ON);
	for(i=0;i<20;i++)//使用循环(i从0到19)来逐步逼近每个工位的合适电压
	{
		//setValue存放每个工位设定的恒压值或者恒流值的数组。
		//选择恒压模式时,数组中的元素为恒压值,单位为 V,范围-40~40。
		//选择恒流模式时,数组中的元素为恒流值,单位为 A,范围-10~10。
		double setValue[2]={vc[0][i],vc[1][i]};
		//设置执行同步操作的工位数。若该数值为 2,则执行同步操作的工位为 SITE1、SITE2
		int siteSize=2;
		//对不同工位设定不同的电压值或电流值,且该操作对不同工位完全同步
		VIN.SetSyn(FV,setValue,siteSize,FPVI10_10V,FPVI10_1A,RELAY_ON);
		delay_us(200);
		VOUT.MeasureVI(10,10);
		//进入循环,测量两个工位的输出端的电压
		for(m=0;m<SITENUM;m++)
		{
			temp[m]=VOUT.GetMeasResult(m,MVRET);
			if((flag[m]==0)&&(temp[m]<=out1[m]*0.98))//工位有效,同时满足电压条件temp[m]<=out1[m]*0.98)则,扫描上限不变,扫描下限变为中心值。范围越来越小,直到找到合适电压
			{
				vh[m][i]=vh[m][i];
				vl[m][i]=vc[m][i];
				result[m]=vc[m][i];//中心值,只有在满足temp[i]<=out1[i]*0.98条件,才把此时中心值写入为result输出电压
				flag[m]=1;//已经得到了合适电压
			}
			if((flag[m]==0)&&(temp[m]>out1[m]*0.98))//工位有效,同时满足电压条件temp[m]>out1[m]*0.98则,扫描下限不变,扫描上限变为中心值。范围越来越小,直到找到合适电压
			{
				vl[m][i]=vl[m][i];
				vh[m][i]=vc[m][i];
				flag[m]=1;//已经得到了合适电压
			}
		}
	
		if((flag[0]==1)&&(flag[1]==1))
			break;
	}

	for(int m=0;m<SITENUM;m++)
	{
		VDO->SetTestResult(m,0,(result[m]-temp[m])*1000);//Vdrop =Vin -Vout
	} 

3.普通扫描


//掉落电压的三种不同的测量方法
//掉落电压的三种不同的测量方法
//掉落电压的三种不同的测量方法
方法3:普通扫描
	int i=0;
	double vx;
	double vstep=0.01;
	for(i=0;i<2;i++)
	{
		flag[i]=1;
	}

	StsGetSiteStatus(sitesta,SITENUM);
	for(i=0;i<SITENUM;i++)
	{
		if(sitesta[i])
			flag[i]=0;
	}
	
	
	
	VOUT.Set(FI,-100E-3,FPVI10_10V,FPVI10_1A,RELAY_ON);
	for(vx=3.8;vx>2.6;)
	{
		VIN.Set(FV,vx,FPVI10_10V,FPVI10_1A,RELAY_ON);
		delay_us(200);
		VOUT.MeasureVI(10,10);
		for(i=0;i<SITENUM;i++)
		{
			temp[i]=VOUT.GetMeasResult(i,MVRET);
			if((flag[i]==0)&&(temp[i]<=out1[i]*0.98))
			{
				result[i]=vx;
				flag[i]=1;
			}
		}
		if((flag[0]==1)&&(flag[1]==1))
			break;
		vx=vx-vstep;
	}
	for(int i=0;i<SITENUM;i++)
	{
		VDO->SetTestResult(i,0,(result[i]-temp[i])*1000);
	}


    return 0;
}

  • 9
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值