STS8200配置参数及编程函数

程序框架

全局函数

全局函数大部分以STS开始,如STSSetMultiSite()

非全局函数需要在函数前添加通道号,如fovi0.MeasureVI()


BEGIN_SINGLE_SITE()

END_SINGLE_SITE()

对某一工位单独进行操作,可配合for循环进行串行测试

dvi0.Set(FV,0,DVI400_20V,DVI400_400MA,RELAY_ON);
for(BYTE i = 0; i < 4; i++)
{
  BEGIN_SINGLE_SITE(i)
  dvi0.Set(FV, result[i], DVI400_20V, DVI400_400MA, RELAY_ON);
  delay_ms(1);
  END_SINGLE_SITE()
}

delay_ms()

毫秒延时


delay_us()

微秒延时


STSDelayms()

毫秒延时,支持小数


StsSetModuleToSite(模块,工位,通道,-1)

STSSetMultiSite()

绑定工位通道

注意:

1) CBIT128、DIO和TRM模块不做工位绑定;

2) OVI40和FOVI100绑定方式不同。

OVI40的“0”代表CH0~CH3,“1”代表CH4~CH7,“2”代表CH8~CH11,…以此类推。

FOVI100的“0”代表CH0,“1”代表CH1,…以此类推

3)各通道绑定的最大通道数


StsSetSiteStatus()

设置工位状态,0为无效,1为有效。使用完成后及时回复之前的状态。

StsSetSiteStatus(0x000D);//0000 0000 0000 1101——设置site1,site3,site4有效,其他工位均无效。

StsGetSiteStatus()

获取工位状态到数组,0为无效,1为有效

BYTE sitesta[4];
StsGetSiteStatus(sitesta, 4); //获取各个工位有效信息

StsGetDieCorXY()

获取测试中圆片的die的XY坐标

int CorX[4]={0};
int CorY[4]={0};
StsGetDieCorXY(CorX, CorY, 4);//获取4个工位的die坐标

STSSetTimeCheck()

STSGetTimeElapsed()

计算两函数之间经过的时间,单位ms


STSSetSaveInterval()

设置保存数据的采样间隔(包含fail数据)


AWG

AWG使用流程:

  • 1.设置波形数组pattern;
  • 2.AWGLoader()导入波形;
  • 3.设置V1源初始状态;
  • 4.AWGSelect()选择运行的波形,
  • 5.设置V/ITrig;
  • 6.MeasureVI(MEAS AWG)设置同步测量;
  • 7.STSEnableAWG();
  • 8.STSEnableMeas();
  • 9.STSAWGRun /STSAWGRunTriggerStop();

STSAWGCreateSineData(存储波形数据首地址,波形数据长度,周期数,波峰值,直流偏置,相位)

创建正弦波数据组

创建的AWG波形起始点和结束点均需包含在AWG波形数据中,因此数据长度=AWG波形采样数+1。

周期数:默认为1

波峰值:默认为0

直流偏置:默认为0

相位:默认为0,单位deg。

double awg_pattern[1000]=(0.0);
STSAWGCreateSineData(&awg_pattern[0],100,1,5,0,180);//创建正弦波,周期数100,波峰1V,直流偏置5V,相位180°,从数组awg_pattern的第1项开始保存。

STSAWGCreateTriangleData(存储波形数据首地址,波形数据长度,周期数,波峰值,直流偏置,相位)

创建三角波数据组


STSAWGCreateSquareData(存储波形数据首地址,波形数据长度,周期数,波峰值,直流偏置,占空比)

创建方波数据组

占空比:默认为50,单位%


STSAWGCreateRampData(存储波形数据首地址,波形数据长度,周期数,起始值,结束值)

创建斜波数据组

起始值、结束值默认为0


STSEnableAWG(需要使能的VI源)

使能同步AWG

STSEnableMeas(需要使能的VI源)

使能同步测量

需先设置AwgLoader()和AwgSelect()函数

VI源只能提阿尼额FPVI10、FOVI100对应源的名称,最多可以填32路源


STSAWGRun(延迟时间)

AWG同步启动,运行AWG扫描和测量

运行时间取扫描和测量的较长时间

延迟时间:AWG扫描运行后延迟一段时间进行测量,默认为空。建议不填写此参数


STSAWGRunTriggerStop(触发VI源名称,触发后停止的VI源)

AWG同步启动,触发后停止

触发VI源应与SetMeasVTrig/SetMeasITrig的源一致

停止源最多可填写16个,如触发源也需要停止则要再写一次

fovi1.SetMeasVTrig(2,TRIG FALLING);
fovi0.MeasureVI(500,20,MEAS AWG);
fovi1.MeasureVI(500,20,MEAS AWG);
STSEnableAWG(&fovio);//fovi0同步使能AWG 
STSEnableMeas(&fovi0,&fovi1);// fovi0 和 fovi1 同步使能测量
STSAWGRunTriggerStop(&fovi1,&fovi1,&fovi0);//当fovi1触发时,fovi0与fovi1同时停止

FXVI

FXVI(通道号,命名)

定义一路FXVI通道并绑定逻辑通道

FOVI VCC(0,”VCC”); //定义逻辑通道0位VCC
STSSetModuleToSite(MD_F0V1,SITE_1,0,1,2,3,4,5,6,7,-1)://分配0-7通道给site1

Set(工作模式,值,量程,继电器状态,耗时)

设置FXVI的工作状态

模式:FI/FV

继电器状态:

RELAY_ON:接通输出继电器
RELAY_OFF:断开输出继电器
RELAY_HOLD:输出继电器保持上一个状态

耗时:达到设置值所用时间,默认0.1ms,分辨率0.1ms,具有capload功能

fovi0.Set(FV,16.5,FOVI_50V,FOVI_100MA,RELAY_ON)//施加16.5V电压,量程50V100mA,接通输出继电器

SetSync()

多工位同步分别设置工作状态

SetClamp()

设置钳位为满量程的百分比,范围为10%~102%

MeasureVI(采样次数,测量间隔,测量模式)

设置测量参数

采样次数:范围1~2048

测量模式:

MEAS_NORMA:默认
MEAS_AWG:AWG测量模式

GPFXVI()

编组并指定通道,每个group内的FXVI通道配置2~128路,在Group进行Set()前,必须设置所有通道的工作模式,量程和继电器状态一致。编组可以节约测试时间,降低机器成本

GetMeasResult(测量工位,读回数据类型,数据处理方式)

获取measureVI的测量结果

读回数据类型:

MVRET:电压测量数据

MIRET:电流测量数据

数据处理方式:

AVERAGE RESULT:数据平均值(默认)

MAX RESULT:数据最大值

MIN RESULT:数据最小值

TRIG RESULT:AWG同步测量时,跳变触发的位置。即MeasureVl中第几个采样点发生跳变.

INT型变量:每一个采样数据。当此处为INT型变量为N时,返回第N+1个点的测量值

fovi0.MeasureVI(20,10)://采样次数:20间隔时间:10us,默认模式
for(i=0;i<SITENUM;i++){
  adresult1[i]=fovi0.GetMeasResult(i,MIRET);//获取测量电流的平均值
  adresult2[i]=fovi0.GetMeasResult(i,MIRET,15);//获取第16个点的测量电流值
}

AwgLoader(波形名称,模式,量程,存储数据数组,数据大小)

导入AWG波形

同一路通道可导入多个AWG波形,但命名必须不同,对相同名称的只写入第一次调用AwgLoader函数中设置的波形.

启动AwgLoader函数会把波形写入RAM中,因此执行该语句会占用测试时间。一次性写入2048个点的数组需要12ms左右的时间,写入时间与写入点数成正比。波形总长度必须小于等于2048,超出2048以后的数据不会写入RAM

STSAWGCreateRampData (&awg_pattern[o],sam,1,16.5,21.5);//定义波形,电压由16.5V到21.5V,采样数50,波形储存在awg_pattern数组中
fovi0.AwgLoader("Vst ",FV.FOVI 50V.FOVI 100MA,awg_patter,sam);// 载入awg_pattern波形,命名为Vst,施加电压,量程50V100mA,

AwgSelect(波形名称,起始点,结束点,结束后的跳转点,间隔时间)

选择运行的AWG波形并设置运行参数

AWGSelect前需设置Set语句,set的量程档位必须与AwgLoader中一致

AWGSelect只设置波形参数,并不输出波形。输出需使用STSAWGRun

SetMeasVTrig/ SetMeasITrig(触发值,触发方式)

设置电压/电流触发

触发方式:

TRIG_FALLING下降沿触发(默认)

TRIG_RISING上升沿触发

int T_Point=0;
double Trig=200e-6;//触发电流
double Trig Point[4]=(0);
double result[4]=(0);
int sam=51;//AWG波形图案数据长度
int interval 200;//AWG采样间隔 单位us
double awg_pattern[100]=(0.0);
STSAWGCreateRampData(&awg_pattern[o],sam,1,16.5,21.5);//定义波形数据,范围 16.5V到 21.5V
fovi0.AwgLoader("Vst ",FV,FOVI 50V,FOVI_100MA,awg_pattern,sam);//载入 50 个采样点的awg 波形到RAM,将AWG波形命名为Vst.
fovi0.Set(FV,16.5,FOVI 50V,FOVI 100MA,RELAY ON);//设置电压电流量程,必须与导入Vst的AwgLoader()函数中的一致
fovi0.AwgSelect("Vst",0.sam-1,sam-1,interval);//选择Vst波形,开始点0,结束点:sam-1,结束后跳转到:sam-1,采样间隔时间:200us.
fovi0.SetMeasITrig(Trig,TRIG_RISING);//设置触发电流 200uA,上升沿触发
fovi0.Measure VI(sam,interval,MEAS_AWG);//采样次数:50,采样间隔时间:200us,AWG模式
STSEnableAWG(&fovio);//同步AWG波形到fovi0.
STSEnableMeas(&fovi0);//同步测量fovi0.
STSAWGRun();//开始AWG同步
for(i=0:i<SITENUM;i++){
  Trig Point[i]=fovio.GetMeasResult(i,MIRET,TRIG RESULT);//获取fovi0的触发位置
  T_Point=Trig_Point[i];
  Vst->SetTestResult(i,0,awg_pattern[T_Point]);
}

AwgRun(波形名称,起始点,结束点,结束后的跳转点,间隔时间,模式)

启动某一路AWG

模式:

AWG_SINGLE 运行一次

AWG_LOOP 循环运行,使用AwgStop()停止

AwgStop()

停止某一路AWG循环运行

Pulse(脉冲值,脉冲时间us,启动测量时间us,采样次数,采样间隔时间us)

输出脉冲信号

采样次数:范围1~2048,默认10


CBIT

CBIT128

SetOn(设置的继电器位,-1)

设置继电器闭合(低电平),未指定的继电器断开(高电平)

继电器位可以填写多个,以-1结束

CBIT128 cbit128;
BYTE K1=0:
BYTE K2=1:
BYTE K3=2:
BYTE K4=3;

cbit128.SetOn(K1.K2.-1);//仅K1、K2闭合,K3、K4断开
cbit128.SetOn(K1,K2,K3,K4,-1);//K1、K2、K3、K4均闭合
cbit128.SetOn(-1)://K1、K2、K3、K4均断开

SetCBITOn()

设置单个继电器闭合(低电平),其他继电器保持原状

SetCBITOff()

设置单个继电器断开(高电平),其他继电器保持原状

cbit128.SetOn(K1);// K1闭合

cbit128.SetOn(K2);//K2闭合,此时K1K2均为闭合状态

cbit128.SetOff(K1)://K1断开,此时K1断开K2闭合

CBIT128无多工位绑定,可通过如下方法实现并行操作

测试条件:四工位测试,每个工位使用2个继电器K1、K2:

SITE1:K1=CBit0,K2=CBit1:
SITE2:K1=CBit8,K2=CBit9;
SITE3:K1=CBit16,K2=CBit17;
SITE4:K1=CBit23,K2=CBit24;
CBIT128 cbit128;

//方法1:
BYTE K1_S1=0;//SITE1 RELAY
BYTE K2 S1=1://SITE1 RELAY
BYTE K1 S2=8://SITE2 RELAY
BYTE K2_S2=9;//SITE2 RELAY
BYTE K1_S3=16;//SITE3 RELAY
BYTE K2_S3=17://SITE3 RELAY
BYTE K1_S4 =23;//SITE4 RELAY
BYTE K2_S4 =24;//SITE4 RELAY
cbit128SetOn(K1_s1,K1_s2.K1_S3,K1_S4,K2_s1,K2_S2,K2_S3,K2_S4,-1);
∥同时吸合四个STE的K1和K2继电器

//方法2:
#define K10,8,16,23;
#define K2 1,9,17,24;
cbit128.SetOn(K1,K2,-1);//同时吸合四个STE的K1和K2继电器

DIO

DIO(板编号)

定义一块DIO板

DIO dio0(0);


Init()

初始化DIO模块,使所有继电器断开,所有通道处于高阻态。不影响图形存储和RAM

dio.Init()


Connect(通道号)

Disconnect(通道号)

接通/断开指定通道号的继电器,以-1结尾

如通道号留空则操作数字部分所有8通道输出继电器

dio.Connect();//接通数字部分所有8通道输出继电器
dio0.Disonnect(0,1,2,-1)//断开dio0板0/1/2通道的输出继电器

LoadPatternWithLabel()

加载带标签的波形

使用图形码并行描述8通道波形,每行代码描述在同一时间8个通道的输出波形,顺序为从左到右7~0。

图形码包括:0、1、L、H、Z、X。含义如下

“0”—驱动低

“1”—驱动高

“L”一期望低

“H”一期望高

“Z”一期望为高阻态(需要外部上下拉至VOH和VOL之间的一个电平)

“X”一保持

标签可以理解为定位点,第一行和最后一行必须带标签,中间行可以按需求添加。标签名不可重复。


ReLoadPatternWithLabel()

按标签重新加载波形

1)重新加载的第一个pattern必须加标签。

2)从重新加载的标签起,会逐行替换已加载的pattern数据,直到替换内容结束或遇到下一个标签而停止替换(Load中的标签或是ReLoad中的标签都会停止替换)。

3)若在运行完新替换的pattern.后还希望运行以前的pattern,则需要用ReLoadPatternWithLabel

函数再将pattern reload回去。


LoadPatternFromFileWithLabel()

从文件加载波形

SetVIH(通道号,电压值)

SetVIL(通道号,电压值)

SetVOH(通道号,电压值)

SetVOL(通道号,电压值)

设置通道的驱动高低电平和比较高低电平的值

通道号可留空,则表示同时设置8个通道

电压值范围-2~7V


SetClockFreq(频率值)

SetClockPeriod(周期长度)

设置图形运行频率

频率取值范围1~5E6 单位Hz

周期取值范围2E-7~1 单位s


SetDelay(通道号,驱动前沿发生时刻值,驱动后沿发生时刻值,比较时刻值)

?比较

比较时刻值默认为20nS


SetWaveFormat(通道号,格式代码)

设置通道驱动格式

格式代码:

NRZ——不归0(非起效时间保持状态)

RTO——归1(非起效时间置1)

RTZ——归0(非起效时间置0)

SBC——反码环绕(非起效时间与PEL相反)

PEL指用户输入pattern向量,如图T1为PEL作用时刻,T2为波形起效时刻。


SetOnTheFlyWithLabel(波形套ID,开始标签,结束标签)

设置两标签间的波形套

波形套ID:DIO::OnTheFly1~15

如不设置,则波形套按照ClockFreq-ClockPeriod-Delay-WaveFormat函数的设置运行波形


SetClockFreqWithLabel(波形套ID,频率值)

设置波形套的频率

频率=1/周期 周期指单个信号持续时间


SetDelayWithLabel(波形套ID,通道号,前沿时刻值,后沿时刻值,比较时刻值)

设置波形套的时间参数


SetWaveFormatWithLabel(波形套ID,通道号,格式代码)

设置波形套的驱动格式


RunPatternWithLabel(开始标签, 结束标签)

运行指定标签之间的波形。

1)图形pattern总数=结束标签-起始标签+1.如10到20总共有11个pattern

2)起始标签和结束标签之间的图形pattern总数不能超过65536。

3)RunPatternWithLabeli语句后需加入适当延时,该延时应大于图形周期×pattern数。即Tdelay>T*(endLabel-beginLabel+1)

4)受DIO板硬件限制,对RunPatternWithLabel()执行错误检查GetChannelFailWithLabel()、GetFailCount()、GetSerialPatternResultWithLabel()时,需要在末尾多加两行pattern


GetChannelFailWithLabel(通道号)

获取指定通道上一次RunPatternWithLabel后是否有错误行


GetFailCount()

获取8个通道上一次Run后的总错误行数


GetSerialPatternResultWithLabel(通道号,起始标签,结束标签,方向)

获取指定通道的向量串行输出的结果

方向:MSB 输出从高位(左侧位)开始;LSB 输出从低位(右侧位)开始

dio.LoadPatternWithLabel("L0000000","a1");
dio.LoadPatternWithLabel("H1111111");
dio.LoadPatternWithLabel("L0000000","a2");
dio.LoadPatternWithLabel("XXXXXXXX");
dio.LoadPatternWithLabel("XXXXXXXX","a3");
dio.RunPatternWithLabel("a1","a3")://运行a1到a3

delay_ms(2);//延迟时间取决于pattern运行时间

BOOL flag=TRUE:
int failNum=0;

flag=dio.GetChannelFailWithLabel(7);//获取CH7从a1到a2的错误信息,如果有错误则flag=1,否则flag=0
if(flag == 1){
  failNum=dio.GetFailCount();//获取8个通道a1到a2的错误行数
}

DWORD pattern=0;
pattern=dio. GetSerialPatternResultWithLabel(7,”a1”,”a2”,MSB)//获取CH7从a1到a2的结果,如果结果是LHL则返回值为二进制111,即十进制7.

LoopSetWithLabel(起始标签,结束标签,循环次数)

Pattern循环输出

结束标签可与起始标签相同,此时循环次数范围为2~4194303

结束标签与起始标签不同时,必须位于起始标签后,此时循环次数范围为1~4194303,从第二次循环起只运行从起始标签+1到结束标签的pattern。

如要无限循环则循环次数=-1,每次循环都运行起始标签到结束标签的pattern,需使用StopPatern()结束循环

循环输出不允许标签交叉和嵌套

StopPatern()

结束循环

dio.Connect();

delay_ms(1);

dio.LoopSetWithLabel("a","b",-1);//a到b无限循环

dio.RunPatternWithLabel("a","b")://运行a到b的波形pattern

delay_ms(1);//循环运行时间

dio.StopPattern()://停止循环

SetExternalTriggerEnableWithLabel(等待触发起始标签,等待触发结束标签,触发结果)

设置外部信号触发

触发结果:true 使能;false 无效

触发信号脉冲宽度不得小于130nS

一般会设置起始标签与结束标签相同,则运行到该行结束后停止运行,等待外部触发信号到来后继续运行后续pattern。

如果结束标签在起始标签后,则每次外部信号只会触发运行1行pattern,直到运行到结束标签。如起始到结束标签有5行,则运行到起始标签行停止,前4次触发信号均运行1行,第5次触发运行剩余pattern


SetExternalTriggerModeWithLabel(触发方式)

设置外部信号触发模式

触发方式:

DIO::RisingEdge 上升沿触发

DIO::FallingEdge 下降沿触发

dio.LoadPatternWithLabel("L0000000",a1):
dio.LoadPatternWithLabel("H1111111"):
dio.LoadPatternWithLabel("L1111111","a2"):
dio.LoadPatternWithLabel("L0000000");
dio.LoadPatternWithLabel("H1111111"):
dio.LoadPatternWithLabel("L0000000","a3"):

dio.SetExternalTriggerEnabledWithLabel("a2","a2".true)://设置a2等待触发
dio.SetExternalTriggerModeWithLabel(DIO::RisingEdge)://设置上升沿触发

dio.RunPatternWithLabel("a1","a3");//运行a1到a3的pattern
delay_ms(5);//设置运行pattern的延迟,运行到a2结束时会停止
EN.Set(FV,5,FOVI_10V,FOVI_10MA,RELAY_ON)://使能信号
//触发信号使能后a2后续的pattern将继续运行

SetSynRunPatternWithLabel(起始标签,结束标签)

设置DIO板同步运行

STSDIOStartSynRunPatternWithLabel()

启动多块DIO同步运行pattern

两个函数需配合使用,每次运行DIO同步前都需要设置一次同步标志


I2CSet()


常见问题

Q:FOVI和FPVI的区别?

A:两块板卡主要区别如下:
1)FOVI单板八通道,分为两组,每四个通道为一组,分组浮动;FPVI单板双通道,每通
道独立浮动;
2)FOVI最大采样次数是2048,最小采样间隔是10us;FPVI最大采样次数是4096,最小采样间隔是2us;
3)FOVI最大电压量程是50V(最大输出是40V),最大电流档位是1A,脉冲档位;FPVI最大电压量程是100V(硬件版本3.1及以上),最大电流档位是10A,也是脉冲档位;
4)FOVI在1A脉冲工作模式下是依靠150mA恒流源进行充电;FPVI在10A脉冲工作模式下是依靠400mA(SM8122Rev1.20及以下版本)500mA(SM8122Rev3.10版本)恒流源进行充电;

Q:浮动源Capload功能有什么作用?

A:浮动源Capload从上一个状态缓慢上下电至本次设定状态,可避免过冲造成被测器件损坏。浮动源积分时间与电压电流档位无关,与板卡硬件及驱动逻辑有关。FOVI和FPVI有两个硬件积分时间档位:0.1ms和0.2ms,最小设置到0.1ms,超过0.2ms,会启动Capload功能

Q:GROUP函数支持哪些板卡与函数,有什么注意事项?

A:GROUP目前仅支持FOVI与FPVI板卡,支持调用的函数包括Set、SetClamp、MeasureVI,执行GROUP的Set()函数之前,需要将GROUP内板卡所有通道的工作模式、电压/电流量程和输出继电器的状态设置一致。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇