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;
}