利用垂直断层成像的检查方法

文档序号:6849517阅读:627来源:国知局
专利名称:利用垂直断层成像的检查方法
相关申请本发明请求保护1999年11月8日递交的美国临时专利申请No.60/163,932的权利。
把I/O插脚焊接到印刷电路板的通孔上并且进一步焊接到印刷电路板表面上的导电焊垫上,从而形成集成电路器件的I/O插脚与印刷电路板之间的电气互连。
用来检查各个组件、集成电路器件以及印刷电路板之间的电连接的方法已经公知,例如,已经使用了手动或自动的光学检测技术,检查各个组件和集成电路器件的位置以及与印刷电路板之间的连接。但是,光学检测技术不能胜任对相当高密度的集成电路与印刷电路板之间的互连的检查,例如,这种技术通常不足以检查日渐普及的球-栅格-阵列(BGA)(Ball-Grid-Array)型的器件。
为了检查高密度板和BGA型器件,相信利用穿透性辐射的检查系统更优于光学检测系统。利用穿透性辐射例如x射线技术能够检查BGA型器件的电连接,包括所有周边接合点和隐藏在集成电路外壳下的接合点。为了形成位于集成电路外壳下的接合点的图像,检查系统应当能够在穿过装置的I/O插脚的高度处产生水平断面图像(这里也称为水平“断层”图像)。
已知能够产生水平断层图像的x射线检查系统。例如,美国专利Nos.5,097,492和5,594,770描述了两种产生水平断面图像的另一种方法。在美国专利No.5,097,492中所示的装置是利用X射线分层摄影原理产生水平断面图像。但是,该技术的一个缺点是得到的水平断面图像通常包括由所关注的平面以外的结构产生的模糊不清的假像。美国专利No.5,594,770不是依赖于X射线分层照相原理,而是采取使用固定式检测器的层析X射线摄影术原理。根据该技术,获取并且组合预定数量的离轴透射图像,从而产生所关注的平面的水平断层图像。
已经很好地证明了层析X射线合成的理论,利用层析X射线合成方法,能够在沿着垂直轴设置的不同焦平面处产生穿过测试目标的水平断层图像。尽管该技术在水平看穿试验目标和确定例如焊接接合点的质量方面具有优点,但可能丧失有关几个水平断层图像之间相关性的有价值信息。具体地,有价值的缺陷图形信息例如可穿过几个水平断层延伸的空隙图形(空穴)在单个水平断层图像中可能非常淡薄,特别是水平焦平面未穿过空隙的中心的地方。在带引线装置的情况下,可能会有高的跨接,即插脚之间的跨接,但跨接发生在高于焊点轮廓的高度处。由于检查每个和逐个断层是不可行的,因此这些缺陷可能漏掉。
因此,希望具有检查电连接的改进的方法和装置。
根据本发明的第二方案,提供一种利用垂直断层图像检查缺陷的方法。这些缺陷可以包括(但不限于)I/O插脚的断开或翘起、器件的倾斜、焊料不足或过量、空穴和跨接。
根据本发明的第三方案,提供一种检查BGA接合点的方法。该方法包括在断层图像中测量以预定的角度穿过BGA接合点的多个直径;然后应用一定的准则把测得的直径与预期的直径相比较。
按照本发明的一个优选实施例,提供一种利用垂直断层信息检查连接情况的方法和装置。已经很好地证明了层析X射线摄影术的理论和层析X射线摄影术再现的实践,利用层析X射线摄影术能够将穿过目标的位于不同焦平面的水平断层合成起来。本领域普通技术人员已经知晓用于产生这些水平断层图像的技术和设备。在这方面,参见美国专利Nos.5,594,770、5,097,492和4,688,241,这里将它们的内容合并进来作为参考。重要的是指出这里使用的术语“水平断层图像”和“垂直断层图像”指的是包含与图像有关的信息的资料组,图像可以实际显示也可以不显示。


图1表示具有沿虚线表示的Z轴的多个水平断层图像位置的BGA接合点。尽管形成水平断层图像的优点在于水平“看透”目标和确定焊接接合点的质量,但是丧失了不同水平断层的相关信息的有用信息。例如穿过几个水平断层的空隙(空穴)的特征等有价值的缺陷特征信息可能在该水平断层中明显地削弱,取决于所分析的水平断层图像的数量和它们之间的间隔。通常,只分析少数有意义的断层,特别是在例如焊垫/组件、球和焊垫/电路板的高度处,可能会错过水平断层图像之间的空间中的空穴。但是,由于它从几个水平断层中获得信息,例如空穴的特征在垂直断层中非常突出。
另一个例子是带有引线的器件的两个插脚之间的高跨接,由于跨接不是位于焊垫/组件水平断层的高度,检查可能产生的每个和逐个水平断层又是不现实的,所以经常出错。由于垂直断层是产生的所有水平断层的组合的效果,所以可以检测高跨接。
利用这里描述的垂直断层技术能够检测到其它有价值的特征信息,例如在二维或平的水平断层中很难看到的非润湿的或倾斜的组件。按照优选实施例,利用能够获得形成水平断层图像的资料的系统来取得这种资料。然后如下所述,可以利用水平断层图像数据产生垂直断层图像数据。
因为在沿着Z轴的不同点但沿着X轴和Y轴的相同点处构建每个水平断层图像,因此能够再构建出垂直断层而不必需登录X和Y轴中的水平断层。图2表示由多个水平断层得到的垂直断层的合成。
在Z轴方向上,优选实施例首先试图确定被检查的连接的“最佳”水平断层图像。为了该目的最好使用这里称之为Z定位法的软件为基础的技术,通常,Z定位法有两种截然不同的优选应用。第一种,可以利用它来识别用于合成垂直断层的最佳水平断层。第二种,可以利用它来识别用于分析焊接连接、BGA接合点和电子组件等中的缺陷的最佳水平断层。图8是表示用于检查接合点例如BGA接合点的优选方法的综合流程图。下面将给出有关Z定位法的其它细节。
对于垂直断层应用来说,首先用Z定位法找出用于合成检查接合点的垂直断层图像的最优选的Z轴位置;然后,把从Z定位法得到的Z位置保持在预期的垂直断层的中心处,然后再利用位于最佳断层上下的几个水平断层创建该垂直断层。把来自彼此相互叠摞在其顶上的每个水平断层的相应列的像素组合合成一个垂直断层。这就可以提供例如在(X,Y)标定的特定位置处的器件的一列接合点的垂直剖面,根据所需要的垂直断层图像的取向,需要在不同的Y轴位置(保持X不变)或在不同的X轴位置(保持Y不变)处产生不同的垂直断层。利用这里称为XY定位法和将在下面描述的软件为基础的技术来确定最佳垂直断层。
这里提供几种运算法则,基于垂直断层图像中的缺陷特征来检测缺陷。图3表示倾斜的BGA器件的垂直断层图像的一个例子。使用例如来自NicoletImaging Systems of San Diego,California的MV-6000之类的自动缺陷识别系统,对缺陷特征分析垂直断层图像,就能够自动地检查器件的取向。下面给出这种分析工具的例子。Z定位法找出焦平面中的水平断层的方法在作出一系列的断层之后,由于对缺陷需要检查位于适当的焦平面或Z轴位置的断层,所以选择正确的断层的问题变得很重要。如上所述,不仅可以利用Z定位法来识别用于合成垂直断层的最佳水平断层,还可以利用Z定位法来找出识别用于分析缺陷的最佳水平断层。
Z定位法有选择地但自动地把所关注的区域进行分段,并利用该信息计算下面定义的焊料量Σgray=0bga_gray(background_gray-gray)*histogram[gray]]]>计算每个水平断层图像的总和,必须根据取样定理(取样的比率<=2*变化的频率)进行断层标高的选择,总和值是断层的特征值,然后检索这些特征值找到特定的图案从而检测出“最佳”断层。因为所关注的区域例如由于翘曲而很难精确地定位,所以最好在所关注的预期区域的上下或穿过它的几个高度处合成水平断层图像,然后可以利用这里描述的Z定位法来识别所关注的特定区域的所需要的水平断层图像,所需要的水平断层图像在这里称为“最佳”断层。因此,“最佳断层”不准备指不同水平断层图像的定性对比,而是指位于所需要的Z轴位置的用来分析所关注的区域的水平断层图像。
例如,在所关注的区域是BGA接合点的情况下,通过查看所合成的水平水平断层图像的总和值的分布,就可以识别穿过球中心的水平断层。具体地,这种情况下的特征值具体对应于滤掉了噪音之后的总和分布中的最明显的峰值,可以用该断层来运行分析的算法。用下面的方法可以得到更好质量的断层。在确定了最明显的峰值之后,利用最小二乘方拟合来拟合该峰值和位于该峰值下面的下一个点和位于该峰值上面的下一个点。拟合后的等式的导数设定为零,找出最大值或最优高度。由离轴图像的同样的初始设定产生位于上述计算的最优高度的另一个断层。这就是算法可以处理的断层,从而分析接合点的特征并找出缺陷。重温该详细的说明,本领域的普通技术人员会很清楚其它类型的所关注区域的其它特征值。
另外,可以检索总和值的分布来找到如上计算出来的所关注区域中的焊料量低于噪声电平的Z轴上的位置。Z轴上的该位置通常对应于焊垫/导线界面的高度。
为了增加成功识别最佳断层的机会,最好识别一些无障碍支座。无障碍支座能够限定检索的范围,从而提高效率和速度。
垂直分割断层从给定的水平断层u1,u2,u3……un构建垂直断层v的处理如下。水平断层u1,u2,u3……un定义为u[i]=ui
ui
[1] ui
[2] ………ui
[n]ui[1]
ui[1][1] ui[1][2] ………ui[1][n]ui[m]
ui[m][1] ui[m][2] ………ui[m][n]其中i=断层的个数,m,n是每个水平断层中的列数和行数,然后,垂直断层v定义如下u1
u1
[1] u1
[2] ………u1
[n]u2
u2
[1] u2
[2] ………u2
[n]uz
uz
[1] uz
[2] ………uz
[n]其中z是水平断层的个数,u1
,u2
,u3
,……uz
是来自所有断层的相应像素。
一旦合成了垂直断层信息,对其进行分析从而检测缺陷。图7是表示利用垂直断层成像的优选检查方法的常见流程图。至于分析垂直断层图像的步骤,例如可以在BGA接合点上使用的几个优选方法,用来在垂直断层中的特征上检测缺陷如下所述。
1.断开或翘起的球/导线现在参见图4,可以利用BGA接合点中球的高度的测量来确定该球是否断开或翘起。一个优选的方法按如下方法进行,矩形窗口垂直穿过接合点的垂直断层;确定所关注区域中的接合点的轮廓;把位于一列中的每行中的数据进行平均,给出最终轮廓向量中的点P。对轮廓中的所有列进行该操作,然后利用最终向量计算差值向量,如下所述。
差值向量=P[I]-P[I+2] 对于I=0,N其中N是轮廓的列数。最大和最小值位置中的差值给出像素的高度,将该测量到的高度与阈值进行对比,得出接合点的定性评价。通过计算位于最大和最小位置之间的中间点来计算每个导线的位置,中间点的相对位置的比较将显示出缺陷插脚。
2.不恰当的焊点轮廓可以采用位于不同高度的导线和焊点轮廓的宽度(w)的测量结果来确定焊点轮廓是否形成得适当。通过放置穿过焊接接合点的垂直断层的矩形窗口和测量它在该位置的宽度可以进行测量。然后最好沿着z轴在包括与焊垫、焊点轮廓和球的中间相对应的几个点处重复。最大和最小宽度将显示接合点是否有缺陷,例如,在球的边缘的焊点轮廓的缺乏会超出较小的宽度。
3.空穴空穴的位置和它的测量很好地配合,空穴很容易被定位在垂直断层中,并且它的尺寸相当于测量到的像素量。用来检测空穴的方法如下。首先把空穴区域分段,这里使用的分段指的是将所关注的区域划分为段或区,使得每个段保持与它的邻段不同的一些属性。在这种情况下,图象中的空穴区域显示出比焊料和/或球即背景亮得多。空穴区域需要识别为位于灰色亮度范围内。然后检查分段的区域的连接情况,方法如下。把围绕有疑问的像素的所有像素相互连接起来。如果每个像素与区域内的所有其它像素相连接,该区域内的一组像素称为是被连接起来的。用连接起来的来定义如果在区域S中存在从p到q的通道则像素p和像素q被连接起来并且p和q都属于区域S中的该组像素。在某些情况下,我们可能发现几个空穴,每个空穴隔离开并且计算它们的尺寸用于分析。围绕接合点的区域有时也可以象沿着空穴一样被分段,围绕该接合点的区域需要舍弃掉,因为它本身不是空穴。
4.倾斜的器件或者用简单的三角法或者用回归法,在器件的相对端处在垂直断层中将插脚定位(或任一或所有中间插脚)并计算它们之间的夹角,就可以很容易地测量倾斜的器件。
用于识别倾斜器件的优选方法如下。利用在上面的编号为2的段落中定义的定位器定位接合点的中心。一旦把所关注的所有接合点的中心定了位,通过如下所示的线性等式给出由如上述的相同的定位器得到的z位置、x和y位置的值z[I]=a*x[I]+b*y[I]+c其中I=连接点数1,N;a,b,c是将从数据来确定的系数;和x[I],y[I],z[I]是接合点在X,Y,Z中的位置。
计算(dz/dx)和(dz/dy)提供对装置的倾斜度的测量结果。
图3表示倾斜的BGA器件的垂直断层图像和图5表示分析垂直断层图像数据的另一种方法。如图5所示,通过定位BGA器件的相对的端处的球的中心并比较各个球中心的Z轴位置,就可以识别倾斜的器件。
5.跨接可以有效地在垂直断层中识别两个接合点之间处于不同高度的跨接的位置。如果仅仅观察某些水平断层来试图有效地判断跨接的存在或不存在,可能错过这种类型的缺陷。优选的方法如下把垂直断层的高度和宽度间距大小的矩形窗口放置在接合点之间,将该面积分段以隔开跨接。对每行的所有列中的被分段的像素数进行计数,如果所有行具有正(>0)计数值,则这两个接合点被认为是跨接的。
6.不充分的/过量的焊料可以计算位于导线/焊点轮廓中的不同高度处的焊料量,来判断焊点轮廓的质量,这有助于确定不充分的焊点轮廓。优选的方法如下把矩形窗口穿过该接合点放置在三个位置一焊垫、焊点轮廓和球处;提取所关注的区域。焊料量的计算如下Σi=1bagdgray(background_gray-i)*h[i]]]>其中i是像素的亮度,而h是像素的直方图。辅助的BGA测量技术随着BGA和FCA类型圆形元件的普及,也增加了对这些栅格阵列的自动检查的关注。BGA或FCA的一个有辨别力的特征是具有圆形,完好形成的BGA接合点是圆形的。因此,BGA或FCA接合点相对于预期圆形的偏离将用来表示接合点的完善性。图9是表示用于检查BGA接合点的优选方法的流程图。以下说明用于评估这种接合点的质量的优选方法。
1.用任何以质心为基础的粗略的定位器定位BGA接合点。该位置将是下面步骤2的良好起始点。把代表BGA球的像素分段或从背景环境(在这种情况下例如电路板)和杂乱信号或噪音中分离出来。
然后对所有被分段的像素的X位置求和并且除以N(N是分了段的像素的总数)Σi=1NX[i])/N]]>然后对所有被分段的像素的Y位置求和并且除以N(N是分了段的像素的总数)Σi=1NY[i])/N]]>接合点的XY位置可能不是足够好,因为图像中的空穴或其它假像可能导致明显偏离目标的实际中心。然后需要精确的定位器来得到更好的位置。
2.利用精确的定位器使得在段落1中找到的位置更好,该位置应当与图像中的噪音或杂乱信号或者球中的空穴无关而保持良好。在BGA Refine中提出优选的精确定位器,在下面的软件附录1中给出。
如图6所示,考虑定了位的接合点中心来定位定位器窗口。根据球的直径来计算定位器窗口偏移量。利用矩形定位器窗口在穿过球中心沿着X轴的4个位置和穿过球中心沿着Y轴的4个位置处定位球边缘。在这8个位置中,通过利用图6中的球的每一侧上的5点导数边缘定位器和作为两个位置的中点确定的中心检测球边缘。
对来自窗口5,6,7和8的X位置进行平均,从而给出新的X位置;对来自窗口1,2,3和4的Y位置进行平均,从而给出新的Y位置。新的X,Y是球的中心。
该5点导数定义如下提取上面每个窗口中的所有像素。在X方向的窗口的情况下,对任何特定行的所有列中的所有像素进行平均,来找出行轮廓。对所有行进行该操作得到整个轮廓。然后将5点导数应用到整个轮廓上,如下式Out[I]=2*(P[I+4]-P[I])+(P[I+3]-P[I+1])对于(I=1,轮廓的尺寸)3.一旦精确地把接合点定了位,以4个或更多个不同的角度测量BGA的直径。随着所使用的角度的数量的增大,计算时间增加,但定性测定的精度同样增加。记录测量到的直径,提供球的实际直径。用偏差的平方和来测量测得的直径与期望直径的偏差。换句话说,该偏差是Σi=1N(D-d[i])2]]>其中D=每个球的预期的直径d[i]=对于i=1,N所测量到的直径N=直径测量的数量上面得到的值是由于焊点轮廓形状与预期的理想情况之间的偏差引起的误差的平方的总和。该总和越小,接合点越好。“好的”BGA焊点轮廓将具有接近0的值,与此同时“坏的”具有很大的值。从有关“好的”和“坏的”接合点的数据的分布能够统计地确定实际的差距。为了给出有关目前优选实施例的额外的详细说明,下面在软件附录2中给出有关焊接质量判断的以软件为基础的解决方法的实施例。
根据本发明的一个优选实施例,用于确定BGA接合点的质量的方法应用到从所分析的水平断层图像中得到的数据上。或者是,该方法可以应用到利用穿透性辐射技术例如X射线分层摄影法产生的实际断层图像上。XY定位找出正确的垂直断层的方法如上所述,可以利用层析X射线照相组合分析在不同的焦平面穿过目标的水平断层图像。从包含在水平断层图像中的这些数据中,通过沿着X轴或沿着Y轴改变位置可以在所关注的区域中产生不同的垂直断层图像。通过下面的方法提出用于找到给出垂直断层的正确位置的优选方法。
XY定位的方法是有选择地但是自动地把接合点的区域分段,并利用该信息计算如下定义的焊料量Σgray=0bkgndgray(background_gray-gray)*histogram[gray]]]>计算每个垂直断层图像的总和值。必须根据取样定理(取样的比率<=2*变化的频率)进行断层的取样,总和值是断层的特征值。然后检索这些特征值找到用来检测最佳断层的特定图案。最显著的最大值是最佳断层的近似位置,连同位于该显著最大值之上的一个断层和之下的一个断层的数值和位置一起,得到该断层的特征值和它的Z坐标位置。用最小平方配合方法,把二次方程式模型与该数据配合,并且把导数设为0来确定它的最大值。用器件的导线宽度或球直径和间距来限定最佳X(或Y)的检索范围。这或是对该接合点的侧边的检索范围或是对所关注的接合点的列的检索范围。为了增加识别最佳断层图像的成功机会,最好识别一些无障碍支座。无障碍支座允许检索的范围受到限制,改善检查的精度和速度。
尽管上面结合特定的实施例已经描述了本发明,应当理解本发明不限于这些具体的实施例。相反地,准备覆盖落入到本发明的构思和范围内的所有变形、改进和等同物,如下面的权利要求所述。软件附录1<pre listing-type="program-listing">#define TEMPLATE_SIZE 5#define NUM_WIN 5#define NUM_EDGE_TYPE 2extern roi_t*imgroip;voidBGARefine(jitype*jip){/*Structures*/roi_t *roi;roi_t *tmproi;profile_t p;profile_t delta_grays;/*****Local variables *********/int gray;int xloc=0,yloc=0;int x_roi,y_roi;int win_w=0,win_h=0;int ball_diam=0,total_area=0;int templocX,templocY=0;int scr_x=0,scr_y=0;int left_scr_x=0,lef_scr_y=0;int right_scr_x=0,right_scr_y=0;int i=0,orient=0;int correction=0,win_offset=0;int save_templocX,save_templocY=0;int left_delta,right_deltaint left_index=0;int left_gray=0;int right_indcx=0;int right_gray=0;int ball_width=0,bump_width=0;int xcenter[NUM_WIN];int ycenter[NUM_WIN];int diag =READPAR(diag_BGARefine);int drop_percent=READPAR(BGARefine_edge_drop_percent[JTYPE()]);int p_bump_diameter=PARPIXELS(ball_diameter[JTYPE()]);int p_pad_pitch=PARPLXELS(pad_spacing[JTYPE()]);int penumbra_width=PARPIXELS(penumbra_width[JTYPE()]);&lt;dp n="d14"/&gt;int win_dy =PARPIXELS(BGARefine_win_dy[JTYPE()]);int win_dx =PARPIXELS(BGARefine_win_dx[JIYPE()]);int win_dw =PARPIXELS(BGARefine_win_dw[JTYPE()]);int win_dh =PARPIXELS(BGARefine_win_dh[JTYPE()]);#ifdef_OAI_int x_scr=GETXSCREEN(RoiGetMil2Pix(imgroip))+GETBBINT(ilst_delta_x,JNUM());int y_scr=GETYSCREEN(RoiGetMil2Pix(imgroip))+GETBBINT(ilst_delta_y,JNUM()); #elseint x_scr=XSCREEN()+OffsetGetX(offet);int y_scr=YSCREEN()+OffsetGetY(offset); #endiftemplocX=x_scr;templocY=y_scr;/*size windows and other parameters*/ball_diam=p_bump_diameter+2*penumbra_width;win_w=IABS(2*p_pad_pitch-3*p_bump_diameter/2);win_h=(ball_diam)/4;win_offset=ball_diam/NUM_WIN;win_offset=MAX(1,win_offset);RoiCenterShift(win_dx,win_dy,&amp;amp;templocX,&amp;amp;templocY,ORIEN());save_templocX=templocX;savc_tcmplocY=templocY;win_w=win_w+win_dw;win_h=win_h+win_dh;for(orient=0;orient<=90;orient+=90){ templocX=save_templocX; templocY=save_templocY; RoiCenterShift(0,-ball_diam/2,&amp;amp;templocX,&amp;amp;templocY,orient); for(i=0;i<NUM_WIN;i++) { RoiCenterShift(0,win_offset,&amp;amp;templocX,&amp;amp;templocY,orient); RoiCreate(imgroip,templocX,templocY,win_w,win_h,orient,&amp;amp;roi); /*Save the initial joint location in roi coordinates*/ RoiViewToRoi(roi,templocX,templocY,&amp;amp;x_roi,&amp;amp;y_roi); DiagDisplayRoi(roi,diag);DiagWindowBlink(roi,OVER_GREEN,diag);&lt;dp n="d15"/&gt; RoiColAvg(roi,&amp;amp;p,diag); ProfDeltaGray(&amp;amp;p,&amp;amp;delta_grays,STD_SLOPE_DELTA,diag); /*Locate the outer edge of the ball*/ ProfMin(&amp;amp;delta_grays,0,delta_grays.size/2,&amp;amp;left_index, &amp;amp;left_delta,diag); ProfMax(&amp;amp;delta_grays,delta_grays.size/2,delta_grays.size-1, &amp;amp;right_index,&amp;amp;right_delta,diag); if(READPAR(diags_on)) {correction=STD_SLOPE_DELTA/2;/*convert to screen coordinates and display thelocation*/RoiToView(roi,left_index+correction,y_roi,&amp;amp;left_scr_x,&amp;amp;left_scr_y);DiagDisplayDots(left_scr_x,left_scr_y,OVER_GREEN,diag);/*convert to screen coordinates and display thelocatlon*/RoiToView(roi,right_index+correction,y_roi,&amp;amp;right_scr_x,&amp;amp;right_scr_y);DiagDisplayDots(right_scr_x,right_scr_y,OVER_GREEN,diag);if(DiagPrintText(diag)){fprintf(stderr,″Left(Green Dot)Edge found@x=%d y=%d\n″, left_scr_x,left_scr_y);fprintf(stderr.″Right(Green Dot)Edge found@x=%d y=%d\n″, right_scr_x,right_scr_y); } } if(orient=90) xcenter[i]=left_scr_x+right_scr_x; else ycenter[i]=left_scr_y+right_scr_y; RoiDestroy(roi); }/*for loop for num of window*/}/*loop for orient*/for(i=0;i<NUM_WIN;i++){&lt;dp n="d16"/&gt; xloc+=xcenter[i]; yloc+=ycenter[i];}xloc=(5+(10*xloc)/(2*NUM_WIN))/10;yloc=(5+(10*yloc)/(2*NUM_WIN)/10;}</pre>软件附录2<pre listing-type="program-listing"> templocX=x_scr;templocY=y_scr;/*size windows and other parameters*/ball_diam=p_bump_diameter+2*penumbra_width;win_w=IABS(2*p_pad_pitch-3*p_bump_diameter/2);win_h=(ball_diam)/4;RoiCenterShift(win_dx,win_dy,&amp;amp;templocX,&amp;amp;templocY,ORIENO);for(orient=0,i=0;i<NUM_ORIENT;i++,orient+=45){RoiCreate(imgroip,templocX,templocY,(win_w+win_dw),(win_h+win_dh),orient,&amp;amp;roi);RoiColAvg(roi,&amp;amp;p,diag);ProfDeltaGray(&amp;amp;p,&amp;amp;dclta_grays,STD_SLOPE__DELTA,diag);ProfMin(&amp;amp;delta_grays,0,delta_grays.size/2,&amp;amp;left_min_slope_index,&amp;amp;left_min_slope,diag);ProfScanFirstAbove(&amp;amp;delta_grays,left_min_slope_index,delts_grays.size/2,0,&amp;amp;left_bot_edge,diag);ProfMax(&amp;amp;delta_grays,delta_grays.si2e/2,delta_grays.size-1,&amp;amp;right_max_slope_index,&amp;amp;right_max_slope,diag);ProfScanFirstBelow(&amp;amp;delta_grays,right_max_slope_index,delta_grays.size/2,0,&amp;amp;right_bot_dge,diag);/*Locate the outer edge of the ball on the left side of the window*/ProfMin(&amp;amp;p,0,p.size/2,&amp;amp;left_min_index,&amp;amp;left_min_gray,diag);ProfMax(&amp;amp;p,0,p.size/2,&amp;amp;left_max_index,&amp;amp;left_max_gray,diag);ToolDropThresh(left_max_gray,left_min_gray,ball_drop_percent,&amp;amp;left_ball thresh_gray,diag);ProfScanFirstAbove(&amp;amp;p,p.size/2,0,left_ball_thresh_gray,&amp;amp;left_ball_edge_loc,diag);/*Locate the outer edge of the ball on the right side of the window*/&lt;dp n="d17"/&gt; ProfMin(&amp;amp;p,p.size-1.p.size/2,&amp;amp;right_min_index,&amp;amp;right_min_gray,diag); ProfMax(&amp;amp;p,p.size-1,p.size/2,&amp;amp;right_max_index,&amp;amp;right_max_gray,diag); ToolDropThresh(right_max_gray,right_min_gray,ball_drop_percent,&amp;amp;right_ball_thresh_gray,diag); ProfScanFirstAbove(&amp;amp;p,p.size/2,p.size-1,right_ball_thresh_gray,&amp;amp;right_ball_edge_loc,diag); /*locate the left edge of the ring*/ ToolDropThresh(left_max_gray,left_min_gray,ring_drop_percent,&amp;amp;left_ring_thresh_gray,diag); ProfScanFirstAbove(&amp;amp;p,p.size/2,0,left_ring_thresh_gray,&amp;amp;left_ring_edge_loc,diag); /*locate the right ring edge of the ball*/ ToolDropThresh(right_max_gray,right_min_gray,ring_drop_percent, &amp;amp;right_ring_thresh_gray,diag); ProfScanFirstAbove(&amp;amp;p,p.size/2,p.size-1,right_ring_thresh_gray, &amp;amp;right_ring_edge_loc,diag); inner_ball_width[i]=IABS(left_ball_edge_loc-right_ball_edge_loc); outer_ball_width[i]=IABS(left_ring_edge_loc-right_ring_edge_loc); bump_width[i]=((float)outer_ball_width[i]*PIXEL2MIL()); ball_width[i]=((float)outer_ball_width[i]*PIXEL2MIL()); RoiDestroy(roi);}/*for loop for diff orientations*/</pre>
权利要求
1.一种利用垂直断层成像的检查方法,包括步骤获取对应于多个穿过所关注的目标的水平断层图像的数据;从该数据中划定所关注的垂直区域;和在落入到所关注的垂直区域中的数据的基础上构建垂直断层图像。
2.根据权利要求1的检查方法,其特征在于划定所关注的垂直区域的步骤包括定位穿过所关注的区域的最佳水平断层图像。
3.根据权利要求2的检查方法,其特征在于构建垂直断层图像的步骤包括从位于最佳水平断层图像之上和之下的水平断层图像合成垂直断层图像。
4.根据权利要求2的检查方法,其特征在于定位最佳水平断层图像的步骤包括对于至少两个水平断层图像计算位于至少两个水平断层图像中的每一个中的焊料量。
5.根据权利要求4的检查方法,其特征在于定位最佳水平断层图像的步骤还包括检查计算出的焊料量的分布。
6.根据权利要求2的检查方法,其特征在于定位最佳水平断层图像的步骤包括识别位于水平断层图像中的一个或多个支座。
7.根据权利要求1的检查方法,其特征在于划定所关注的垂直区域的步骤包括定位最佳垂直断层图像。
8.根据权利要求7的检查方法,其特征在于定位最佳垂直断层图像的步骤包括对于至少两个垂直断层图像计算位于至少两个垂直断层图像的每一个中的焊料量。
9.根据权利要求8的检查方法,其特征在于定位最佳垂直断层图像的步骤还包括查看计算出的焊料量的分布。
10.根据权利要求1的检查方法,其特征在于获取数据的步骤包括对所关注的目标施以穿透性辐射;和检测穿过所关注的目标的辐射。
11.一种利用垂直断层成像的检查方法,包括步骤获取对应于穿过所关注的目标的多个水平断层图像的数据;从该数据中划定所关注的垂直区域;在落入到所关注的垂直区域中的数据的基础上构建垂直断层图像;和分析该垂直断层图像来确定是否存在缺陷。
12.根据权利要求11的检查方法,其特征在于分析垂直断层图像包括确定BGA接合点是否翘起。
13.根据权利要求12的检查方法,其特征在于确定BGA接合点是否翘起包括确定BGA接合点的高度的测量;和将该高度与极限值对比。
14.根据权利要求12的检查方法,其特征在于确定BGA接合点是否翘起包括计算多个相邻的BGA接合点的中点;和将所计算的至少两个中点相互对比。
15.根据权利要求11的检查方法,其特征在于分析垂直断层图像包括确定焊料轮廓是否形成得适当。
16.根据权利要求11的检查方法,其特征在于分析垂直断层图像包括确定是否存在空穴。
17.根据权利要求16的检查方法,当存在空穴时,还包括确定空穴大小的步骤。
18.根据权利要求11的检查方法,其特征在于分析垂直断层图像包括确定器件是否倾斜。
19.根据权利要求11的检查方法,其特征在于分析垂直断层图像包括确定是否存在跨接。
20.根据权利要求11的检查方法,其特征在于分析垂直断层图像包括检测是否存在不充分的焊料量。
21.一种检查BGA接合点的方法,包括步骤寻找BGA接合点的位置;用精确定位器矫正该位置;在断层图像中测量以预定的角度穿过BGA接合点的多个直径;和应用一种准则把测量到的直径与预期的直径相比较。
22.根据权利要求21的检查BGA接合点的方法,其特征在于在BGA接合点的位置的中心处测量多个直径。
23.根据权利要求21的检查BGA接合点的方法,其特征在于寻找BGA接合点的位置的步骤包括将以质心为基础的粗略的定位器施加于断层图像上。
24.根据权利要求21的检查BGA接合点的方法,其特征在于精确定位器包括在BGA接合点上施以多个定位器窗口;在一个定位器窗口中定位两个球边缘;和确定两个球边缘之间的中点。
25.根据权利要求24的检查BGA接合点的方法,其特征在于在一个定位器窗口中定位两个球边缘包括在BGA的任何一侧上施以偏差边缘定位器。
26.根据权利要求25的检查BGA接合点的方法,其特征在于对于多个定位器窗口中的每一个重复在定位器窗口中定位两个球边缘的步骤。
27.根据权利要求21的检查BGA接合点的方法,其特征在于准则包括按如下形式计算总和&Sigma;i=1N(D-d[i])2]]>其中D是预期的直径而d[i]是测量到的直径。
28.根据权利要求27的检查BGA接合点的方法,其特征在于该准则还包括将总和值与极限值进行对比。
29.一种用于检查所关注的区域的方法,包括步骤获取对应于穿过所关注的目标的多个水平断层图像的数据;从多个水平断层图像中定位最佳的水平断层图像,该定位步骤包括对于至少两个水平断层图像计算位于至少两个水平断层图像中的焊料量;和查看计算出的焊接量的分布。
全文摘要
一种利用垂直断层成像的检查方法。首先获取穿过所关注的目标的多个水平断层图像;再从代表水平断层图像的数据中划定所关注的垂直区域;然后在落入所关注的垂直区域内的水平断层图像数据的基础上构建垂直断层图像;最后分析垂直断层图像数据从而检测出缺陷。另外,提供一种检测BGA接合点中的缺陷的方法,该方法包括定位该接合点的中心,该方法还包括测量穿过接合点中心的多个直径和应用准则来把测得的直径与预期的直径相比较。
文档编号H01L21/60GK1409816SQ00816889
公开日2003年4月9日 申请日期2000年11月7日 优先权日1999年11月8日
发明者罗希特·帕特奈克 申请人:泰瑞达因公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1