为了能够将AOI设备的功能描述功能加以实现,我们需要将AOI设备进行分解,并以各独立模块进行设计和实现。在进行设计之前,我们先看一下设备的工作流程。
AOI设备的工作流程
AOI的检测的流程,可以分成建模和检测两个过程,图将这两个流程全部串接在一起,是一个AOI设备检测的完整的流程图。
上述流程包含了AOI检测可能有的所有的工作,为了能够完成这些工作,我们可以把检测分成不同模块进行设计和编程。有了这些模块的划分,就可以有条理的,以模块为单位的,独立地完成整个AOI设备的功能要求。
检测的模块分析
从AOI检测的流程中,我们可以看到检测过程有多种的检测任务组成,为了设计完成AOI设备的整体功能,可以分成多个模块加以编程实现。
AOI设备的模块划分:检测开始->图像采集模块->图像配准模块->特征提取和瑕疵查找模块->检查结束
图像采集模块
图像采集模块用于CCD摄像头图像的获取,即将PCB板放置在工作台上,通过工作台下的马达,和摄像头上的马达的位置调节,将待测PCB板移动到合适位置,进行CCD摄像,并采集摄取的图像信息。
在此模块,我们需要完成的工作有两个:
1.针对工作台下的马达,和CCD摄像头上的马达移动的驱动程序设计,最终完成X和Y向的平移。
2.在合适的位置,进行摄像,系统读取CCD摄入的图像信息。
图像配准模块
图像配准是进行检测的一个很关键的步骤,它的作用是建立起PCB模板图像和待测板图像之间的位置联系。
由于模板和待测的放置是在不同的时间放置,也可能有不同的工作人员放置,其放置的位置的肯定有位移,配准就是要找出这些位移值。将待测图像的数据经过位移纠正后,和模板的进行比对找瑕疵。
完成配准需要的工作有:
1.寻找图像的边缘点,并从中找出边缘线。
2.在边缘线里找出配准用的锚线(Anchor Line)。
3.利用锚线,采用配准算法,找出待测PCB板图像和模板图像之间位移值。
4.其中第1、2步在建模的过程中实现,第3步在待测板进行检测的过程中实现。
特征提取和瑕疵查找模块
特征提取和瑕疵查找,是设备最终进行检测的步骤。该模块包括对PCB图像中要进行检测的部分进行特征提取,而后通过特征比对,在待测板中查找存在的瑕疵。因为我们要检测的对象是PAD和BGA二种,所以必须对这二种对象分别进行处理。
针对PAD的处理步骤为:
1.取边缘点,进行矩形边缘检测,是矩形的判断为PAD。
2.取PAD的边界点为特征值,储存在文本文件内。
3.在待测PCB板上取特征值,进行配准处理。
4.在PCB中,使用瑕疵检测算法找出瑕疵,并标记。
针对BGA的处理步骤为:
1.取边缘点,进行圆形边缘检测,是圆形的判断为BGA。
2.取PAD的圆心和半径值为特征值,储存在文本文件内。
3.在待测PCB板上取特征值,进行配准处理。
4.在PCB中,使用瑕疵检测算法找出瑕疵,并标记。
在其中第l、2步在建模的过程中实现,第3、4步在待测板进行检测的过程中实现。
模块分析总结
本系统开发的各模块和检测过程的关系,如表表示。
各模块的总结 |
||||
采集模块 | 配准模块 | PAD处理模块 | BGA处理模块 | |
建模
过程 |
1.马达驱动 | 1.取边缘线 | 1.判断PAD. | 1.判断BGA |
2.CCD图像读取 | 2.取锚线 | 2.取PAD特征
函数 |
2.取BGA特征
函数 |
|
检测
过程 |
1.马达驱动 | 3.求模板和待测
图像之间位移 |
3.PAD配准 | 3.BGA配准 |
2.CCD图像读取 | 4.瑕疵检测 | 4.瑕疵检测 |
下一步的工作,就是通过编程完成各部分模块的功能。
程序设计的一些原则
实现AOI系统各部分的功能,需要通过编程加以实现,我们采用的开发平台为VC++6.0
而在实际的设计过程中,为了满足设计的指标,我们的程序设计必须遵守下面一些设计的原则:
1.无外部数据库,因为在检测过程中调用外部数据库将会大大地降低检测的速度,也会极大地消耗系统资源。
2.对于要有存储的各类特征值,系统定义了不同的结构加以存储。如印制板上的边缘线定义了Line的结构;焊盘PAD建模时定义了一个RecPad的结构;而对于BGA也自定义了一个BGA的结构来存储。
3.采用简单的外部文件,存储建模时生成的一些基本信息,如边缘线、锚线、PAD、BGA等。我们生成的文件为TXT格式的文件,格式简单而易于操作。
4.采用比对的方式进行AOI的检测,即将合格的同类样品和待测设备进行比较,并识别出待测样品是否有瑕疵。
5.区分处理图像的运算复杂度。将所有耗时较长的图像处理过程集中到建模的过程中,而检测时则尽量使用较为简单的图像处理算法。
6.对模板图像和待测图像之间的配准算法有严格的要求,要求简单实用,且误差率低。