集成电路封装与系统测试.docx
《集成电路封装与系统测试.docx》由会员分享,可在线阅读,更多相关《集成电路封装与系统测试.docx(16页珍藏版)》请在冰豆网上搜索。
![集成电路封装与系统测试.docx](https://file1.bdocx.com/fileroot1/2023-8/13/565ff2ee-aa36-402e-a388-806c24a5c0e0/565ff2ee-aa36-402e-a388-806c24a5c0e01.gif)
集成电路封装与系统测试
集成电路封装与系统测试课程实验报告
电子、集成专业
(2014—2015学年第一学期)
课程名称集成电路封装与系统测试
课程类别□必修
限选
班级
学号
姓名
任课教师
考试日期
一、实验目的-2-
二、实验原理-2-
BC3199集成电路测试系统简介-2-
测试电路原理图-3-
测试参数分析-3-
测量输出电压Vo-3-
测量电源电压调整率-4-
测量负载电压调整率-4-
三、实验设备-4-
四、实验步骤-4-
焊制电路板-4-
建立LM7805测试程序-5-
测试数据及结果-5-
五、实验结论-6-
六、心得体会-6-
附录:
-7-
一、实验目的
随着各种模拟、数字集成电路的用量越来越大,其质量对整机的性能和可靠性起着越来越大的作用,因此深入开展集成电路相关测试技术的研究具有重要的意义。
本次实验我们以BC3199测试系统作为集成电路测试平台,将模拟集成电路LM7805作为测试对象,测试其输出电压、电源电压调整率和负载电压三个参数。
二、实验原理
BC3199集成电路测试系统简介
BC3199测试系统是一款模拟数字混合信号测试系统,用于测试电源管理类器件、运算放大器、模拟开关、DAC/ADC以及中小规模数字电路,适用于工程测试与量产测试。
BC3199集成电路测试系统分为电源箱与测试头两部分,适配器可以直接安装到测试头引出的测试插座之上,无需任何测试连接线,测试时通过双手按压测试控制板的两个测试按钮进行测试。
SBC主控计算机安装在机箱的上部,分体机外接主计算机。
PCI槽上插有一块专用接口板,用于计算机和系统主机之间数据传输,此接口板通过50线扁平电缆与机内的系统接口板连接。
机内有系统接口板、电压/电流源、电压测量及数据采集板、时间测量单元、交流信号源、数字I/O板等。
系统框图如图1所示。
图1BC3199集成电路测试系统框图
VeritestATE为BC3199集成电路测试机的配套控制软件,可以对被测器件进行测试序列生成、测试参数生成以及自动测试,同时具有设备校准与自检,测试结果保存和分析,以及HANDLER连接等功能。
该软件可以在WindowsXP系统上运行。
系统软件采用与测试程序分离的编程方法,用户可以建立单独的工程编写测试方案的代码,所生成的动态连接库可以被系统软件识别和运行,用户可以在所生成的工程中调试这些代码。
测试电路原理图
通过查找资料分析综合后采用如下电路原理图
图2测试原理图
其中C1=,C0=
测试参数分析
根据LM7805的器件参数文档,需要器件的测试参数如下图3所示。
图1LM7805电气特性
测量输出电压Vo
输出电压即为在一定条件下,LM7805输出端口的电压值。
在代码中,利用GetVo函数即可得到不同条件下的Vo值。
测量电源电压调整率
电源电压调整率即为当输入侧电压从允许输入的最低值变化到规定的最大值时,输出电压的相对变化值占额定输出电压的百分比,一般不超过%。
在图2中,通过测出的输出电压Vo值,利用公式:
res[1]=fabs(Vo2-Vo1);
regline=((res[1]/)/(fabs(Vi2)-fabs(Vi1)))*100;
测量负载电压调整率
负载调整率来源于电源的输出电压因负载大小的变化(空载到满载),而电压调整率来源于电源在满载时,其输出电压因该电源的供电电压波动引起的变化。
三、实验设备
BC3199VC2005
四、实验步骤
焊制电路板
焊制后的电路板如下图:
图4实际电路
建立LM7805测试程序
BC3199测试程序编写采用C++语言对系统硬件行为进行描述。
它采用了测试策略与数据分离的设计。
用户可以通过测试程序编写出所需要的全部或者基本测试参数,通过系统软件界面修改或者输入数据。
用户编写的测试程序最终将生成DLL动态链接库,可以使用系统软件调用这些测试程序。
测试代码见附录
测试数据及结果
加载以上测试程序,进入以下测试界面。
在连测状态下,BC3199测试系统可对测试结果进行数据统计并生成报表。
经测试,得到某批次LM7805测试数据结果报表见表1。
序号
Vo(V)
Vo7V(V)
Vo20V(V)
Vo5mA(V)
Vo1A(V)
Regline1(mV)
Regline2(mV)
Regload1(mV)
Regload2(mV)
1
2
3
4
5
6
7
8
9
10
表1实验测试数据
图5芯片手册数据
由实验数据可知,当输入条件为五、实验结论
通过本次测试,可以确定我们测得LM7805芯片的输出电压、电源电压调整率和负载电压调整率三个参数要求的,通过相应的电路、步骤和测试原理可以再测试LM7805芯片其他的参数,最终判断其是否为合格产品。
附录:
#include""
#include"D:
\\BC3199\\NEW-VeriTestATE\\TestFiles\\"
ATE_TEST_ITEM_DECLARE(VO);//输出电压
ATE_TEST_ITEM_DECLARE(Regline);//电源电压调整率
ATE_TEST_ITEM_DECLARE(Regload);//负载电压调整率
voidCreateTestItem(void)
{
unsignedintParameterID=0;
BEGIN(VO,,,"V",4);
("OutputMeas(MAX)",V,"V"),"V");
("Vi",V,"V"),"V");
("VClamp",V(8,"V"),"V");
("Io",V(-500,"mA"),"mA");
("IClamp",V(2000,"mA"),"mA");
("VsOn_Delay",V,"ms"),"ms");
("DIV",V,"---"),"---",0);
("Num",V,"---"),"---",0);
MAKE(VO);
BEGIN(Regline,0,100,"%/V",2);
("OutputMeas(MAX)",V,"V"),"V");
("Vi1",V,"V"),"V");
("Vi2",V,"V"),"V");
("VClamp",V,"V"),"V");
("Io",V(-500,"mA"),"mA");
("IClamp",V(2000,"mA"),"mA");
("VsOn_Delay",V,"ms"),"ms");
("DIV",V,"---"),"---",0);
("Num",V,"---"),"---",0);
MAKE(Regline);
BEGIN(Regload,0,100,"mV",2);
("OutputMeas(MAX)",V,"V"),"V");
("Vi",V(10,"V"),"V");
("VClamp",V(8,"V"),"V");
("Io1",V(-5,"mA"),"mA");
("Io2",V(-1000,"mA"),"mA");
("IClamp",V(2000,"mA"),"mA");
("VsOn_Delay",V,"ms"),"ms");
("DIV",V,"---"),"---",0);
("Num",V,"---"),"---",0);
MAKE(Regload);
BEGIN(IQ,0,,"mA",3);
("OutputMeas(MAX)",V,"V"),"V");
("Vi",V,"V"),"V");
("VClamp",V(8,"V"),"V");
("Io",V(0,"mA"),"mA");
("IClamp",V(1000,"mA"),"mA");
("VsOn_Delay",V,"ms"),"ms");
("DIV",V(200,"---"),"---",0);
("Num",V,"---"),"---",0);
MAKE(IQ);
BEGIN(deltaIQ_deltaI,,,"mA",3);
("OutputMeas(MAX)",V,"V"),"V");
("Vi",V,"V"),"V");
("VClamp",V(8,"V"),"V");
("Io1",V(-5,"mA"),"mA");
("Io2",V(-1000,"mA"),"mA");
("IClamp",V(1200,"mA"),"mA");
("VsOn_Delay",V,"ms"),"ms");
("DIV",V(200,"---"),"---",0);
("Num",V,"---"),"---",0);
MAKE(deltaIQ_deltaI);
BEGIN(deltaIQ_deltaV,,,"mA",3);
("OutputMeas(MAX)",V,"V"),"V");
("Vi1",V,"V"),"V");
("Vi2",V,"V"),"V");
("VClamp",V(8,"V"),"V");
("Io",V(-500,"mA"),"mA");
("IClamp",V(1000,"mA"),"mA");
("VsOn_Delay",V,"ms"),"ms");
("DIV",V(200,"---"),"---",0);
("Num",V,"---"),"---",0);
MAKE(deltaIQ_deltaV);
BEGIN(VDrop,,,"V",3);
("OutputMeas(MAX)",V,"V"),"V");
("Vi_begin",V,"V"),"V");
("Vi_end",V,"V"),"V");
("VFail",V,"V"),"V");
("Step",V,"V"),"V");
("VClamp",V(8,"V"),"V");
("Io",V(-1000,"mA"),"mA");
("IClamp",V(1500,"mA"),"mA");
("VsOn_Delay",V,"ms"),"ms");
("DIV",V,"---"),"---",0);
("Num",V,"---"),"---",0);
MAKE(VDrop);
BEGIN(RR,62,100,"dB",1);
("Freq",V(100,"Hz"),"Hz");
("VL",V(8,"V"),"V");
("VH",V(18,"V"),"V");
("VClamp",V(8,"V"),"V");
("Io",V(-500,"mA"),"mA");
("IClamp",V(1500,"mA"),"mA");
("ACMRange",V(2,"---"),"---",0);
("VsOn_Delay",V,"ms"),"ms");
MAKE(RR);
}
floatGetVO(floatVoutMax,floatVi,floatVClamp,floatIo,floatIClamp,floatVsOn_Delay,unsigned
{
USING_RESULT(res);
//所有继电器关
pDrv->OpenAllCBits();
pDrv->Delay(5);
//根据判据判断量程
if(VoutMaxSetMeasureChannel(BMV0,VM_2V);
elseif(VoutMaxSetMeasureChannel(BMV0,VM_5V);
elseif(VoutMaxSetMeasureChannel(BMV0,VM_10V);
elseif(VoutMaxSetMeasureChannel(BMV0,VM_20V);
elseif(VoutMaxSetMeasureChannel(BMV0,VM_50V);
//输入电压设置,判断箝位量程
PVI_CURRENT_RANGEirange=PVI20UA;
if(IClampelseif(IClampelseif(IClamp<2)irange=PVI2MA;
elseif(IClamp<20)irange=PVI20MA;
elseif(IClamp<200)irange=PVI200MA;
elseif(IClamp<2000)irange=PVI2A;
elseif(IClamp<10000)irange=PVI10A;
pDrv->VIFV(APVI0,FPRG,Vi,PVIV_AUTO,IClamp,-IClamp,irange);
//负载电流设置,判断箝位量程
PVI_VOLTAGE_RANGEvrange=PVI2V;
if(VClampelseif(VClampelseif(VClampelseif(VClamppDrv->VIFI(APVI1,FT3,Io,PVII_AUTO,VClamp,-VClamp,vrange);
//接入输入输出滤波电容
pDrv->SetCBits(pDrv->GetRelay(),pDrv->GetRelay(54,55));
pDrv->Delay(5);
//打开输出继电器
if(fabs(Io)>
pDrv->EnableOut(APVI0);
pDrv->Delay(10);
pDrv->VIOn(APVI0);
pDrv->Delay(10);
pDrv->EnableOut(APVI1);
pDrv->Delay(VsOn_Delay);
//测量
pDrv->SetTriggerTimer(VsOn_Delay);
pDrv->VoltageMeausure(SITE1,TRIG,DIV,NUM);
pDrv->SetCBits(pDrv->GetRelay(55),pDrv->GetRelay());
pDrv->DisableOut(APVI1);
pDrv->Delay(5);
pDrv->VIOff(APVI0);
//关闭输出继电器
pDrv->DisableOut(APVI0);
pDrv->Delay(10);
pDrv->OpenAllCBits();
pDrv->Delay(5);
pDrv->VMReadResult(SITE1,res);
returnres[1];
}
voidReglineProc(PARAMLIST)
{
USING_PARAM_POS(VoutMax,0);
USING_PARAM_FLOAT(Vi1,1);
USING_PARAM_FLOAT(Vi2,2);
USING_PARAM_POS(VClamp,3);
USING_PARAM_FLOAT(Io,4);
USING_PARAM_POS(IClamp,5);
USING_PARAM_POS(VsOn_Delay,6);
USING_PARAM_UINT(DIV,7);
USING_PARAM_UINT(NUM,8);
USING_RESULT(res);
floatVO1=GetVO(VoutMax,Vi1,VClamp,Io,IClamp,VsOn_Delay,DIV,NUM,pDrv,pCond);
floatVO2=GetVO(VoutMax,Vi2,VClamp,Io,IClamp,VsOn_Delay,DIV,NUM,pDrv,pCond);
res[1]=fabs(VO2-VO1);
res[1]=((res[1]//(fabs(Vi2)-fabs(Vi1)))*100;
RETURN_UNIT_RESULT(SITE1,res,"%/V");
}
voidRegloadProc(PARAMLIST)
{
USING_PARAM_POS(VoutMax,0);
USING_PARAM_FLOAT(Vi,1);
USING_PARAM_POS(VClamp,2);
USING_PARAM_FLOAT(Io1,3);
USING_PARAM_FLOAT(Io2,4);
USING_PARAM_POS(IClamp,5);
USING_PARAM_POS(VsOn_Delay,6);
USING_PARAM_UINT(DIV,7);
USING_PARAM_UINT(NUM,8);
USING_RESULT(res);
floatVO1=GetVO(VoutMax,Vi,VClamp,Io1,IClamp,VsOn_Delay,DIV,NUM,pDrv,pCond);
floatVO2=GetVO(VoutMax,Vi,VClamp,Io2,IClamp,VsOn_Delay,DIV,NUM,pDrv,pCond);
res[1]=fabs(VO1-VO2);
RETURN_UNIT_RESULT(SITE1,res,"mV");
}精心搜集整理,只为你的需要