基于图像处理的印刷板打孔定位与实现*
2018-08-22陈东强彭亚涛金戈
陈东强,彭亚涛,金戈
(厦门理工学院 电气工程与自动化学院,福建 厦门 361024)
印刷电路板作为电子产品制造的基础产业,广泛应用于各种电子产品中。随着PCB板的需求量增大,需要提高PCB板的生产效率。在PCB板生产过程中,需要人工对PCB板加工,这种操作虽然对生产设备要求简单,但缺点明显,即劳动强度大、工作效率低,且人工操作的出错率很高。随着市场对于产品质量的不断提高,这种人工加工PCB板的方法越来越不适应现代化大规模生产。因此,设计一种能够替代人工加工的自动PCB板打孔机势在必行。
本文通过数字图像处理技术采集PCB板图像上的孔位坐标,由图像的孔位坐标计算实际孔位坐标,完成PCB板定位要求。在运动控制模块设计方面,使用上位机将实际孔位坐标转换成一定规律的格式并传输给下位机,通过STM32单片机控制步进电机的运动,控制其钻头移动,从而完成自动PCB板打孔工作。
1 基于STM32的印刷板打孔机工作原理
在自动PCB打孔机工作时,要先将预先采集的PCB图像进行处理后得到一系列需要打孔的位置信息,再通过串口通信将这一系列的位置信息发送给由三轴步进电机以及STM32单片机所组成的下位机,STM32单片机在得到位置信息后执行指令,控制步进电机移动到指定位置,再启动钻头进行打孔动作,其原理图如图1所示。
图1 基于STM32的印刷板打孔机工作原理
文章按照下述部分展开论述:
⑴通过使用高精度的CCD摄像头采集需要加工的PCB线路板的图像,在获取清晰度足够的图像后,对图像采用图像去噪、图像二值化、兴趣域提取等方法处理,获取待加工的PCB线路板上需要打孔的位置信息。
⑵通过上位机对得到的位置信息进行处理,将简单的X、Y坐标形式的位置信息转换为增量坐标,并且使用一定规律的通行格式,将移动、停止、打孔等命令用简单的字母或者符号代替,发送给下位机。减少发送数据的长度,使得收发数据的速度更加快捷,处理起来更加方便。
⑶对下位机进行编程,以与上位机同样的通行格式对收到的指令进行解读,并进行该指令所包含的所有命令。通过控制步进电机的运动,控制钻头在印刷机X轴、Y轴上快速移动到打孔位置,再控制Z轴,使钻头可以上下移动进行打孔操作。
2 印刷板打孔定位设计
2.1 图像采集
通过使用高精度的CCD摄像头对图像进行采集,可以得到清晰度高,光照均匀,像素精度高的图像(图2)。
图2 正常PCB板图像
正常的PCB板图像传输到上位机后,在图像分析处理时,有利于后期的图像处理中漏孔的概率,以及减少图像运算的数据的大小。
2.2 图像处理
在图像处理方面采用MATLAB的图像处理工具箱,利用其强大的功能与完善的支持库,实现了利用软件对PCB过孔点自动识别的功能。
2.2.1 图像预处理
彩色图像是由三个不同的分量组成,对彩色图像处理时,我们往往需要对三个通道依次处理,时间消耗会很大,为了减少系统处理图像的时间,需要减少所需处理的数据量,因此,我们将图像灰度化,将三通道的数据转化为单通道的数据(图3)。
图3 灰度处理后的PCB图像
MATLAB中使用的是加权平均值法对图像进行灰度处理,该函数的调用格式为:
2.2.2 使用OTSU(大津法)处理图像
OTSU法用于对图像进行二值化处理[1]。其原理是利用阈值将图像分割位2个部分,即前景与背景,并且通过阈值的取值使得前景与背景的类间方差最大,保证了图像的分离性最大。
假设i为分离图像前后景的阈值。将图像分离后后可得到被分离的前、后景与整图像的面积以及整幅图像。先通过计算得到前景、后景的面积比θ1、θ2为:
式中G为图像的灰度级。通过计算出面积比可以进一步计算出整幅图像、前景、后景的平均灰度为:
整幅图像与前、后景的平均灰度值的关系为:
当整幅图像被根据阈值i分隔开之后,前后景与整体图像之间的平均灰度也相差较大,这种差异可以通过区域间的方差有效地描述出来,其表达式为:
将其改写为与阈值i相关的函数,可写成:
图4 二值化后的图像
通过图像的二值化,使得图像变得简单,而且数据量减小,能凸显出PCB板所需打孔的轮廓(图4)。
2.2.3 使用形态学运算剔除孤立点
图像上的孤立点可能在图像采集、量化等过程中产生,也可能在传输过程中产生。噪声的存在极大地干扰了图像的信息。对于图像的后继处理和分析都有影响。因此,需要对二值化后的图像进行剔除孤立点,避免其对图像识别产生干扰,以及促进其他处理环节性能的提升。
采用的MATLAB软件中提供的形态学运算消除图像的孤立点有2种方式。第1种是腐蚀滤波,在去除图像孤立点的同时,同时会对图像形状产生影响;第2种是开运算,与前者相比,速度上多了一个膨胀运算时间,但对图像形状影响不大。根据设计要求,需要对图像形状进行识别,本文采用形态学运算中的开运算去除图像孤立点(图5)。
图5 形态学运算流程图[3]
⑴构造结构元素
首先需要通过使用strel指令构造一个结构元素,在本文中构造的是一个由结构原点到最远距离为7的菱形结构,对应程序为:SE1=strel('diamond',7),所得到的结构元素为(图6):
图6 构造所得结构元素
⑵膨胀运算
从本质上来说,形态学运算为两个函数之间的逻辑运算。假设此时待运算图像的函数为f(x,y),结构元素的函数为b(x,y),膨胀运算的算法即f b。其运算公式为:
使用膨胀进行形态学运算,会将结构元素与图像中的所有像素进行对比,以填补图像中的微小空洞,使有图像部分的面积更大(图7)。
图7 膨胀运算前后图像对比
2.3 规定PCB板边界及找出标记点
2.3.1 规定PCB板边界
由于通过CCD摄像头所采取到的图像包含一部分拍照背景,在处理过程中,如果拍照背景也被规定在处理范围内会造成2点影响:一是图像信息更多,运算量更大;二是背景中可能存在干扰,会影响后期图像筛选识别的过程。同时,在采集图像中因为有光照的影响,单纯通过OTSU法采集到的图像会出现部分内容缺失的情况。所以在此时,为了能够准确地找出所有需要处理的图像信息,需要通过找出图像的边界,来规定后期处理中需要处理的图像的全部范围。
将其4个边角的坐标记录下来,如图8所示,方便在进一步对线路板上的打孔点定位时缩小查找范围,提高运算速度和精度。
图8 对PCB线路板的边角进行标记
为了实现通过图像定位得到PCB线路板上的所有打孔点坐标,需要在图像上建立一个由X、Y构成的两轴坐标系。基于这个两轴坐标系将所有的打孔点的定位坐标以(x,y)的形式标记出来,如图9。通过在PCB线路板上预设了四个孔径为5.0mm的八角形孔作为建立X、Y坐标的基准点。
图9 通过标记点构建坐标系
2.3.2 打孔点定位及坐标提取
为了提取到所有打孔点的坐标,需要对图像进行边缘检测,以方便确定所有打孔点的位置以及形状,便于与其他线路板上的元件以及标识进行区别,提高了筛选的精确度,确保能够实现尽量多的筛选出统一规格的打孔点。
2.3.2.1 使用Canny算子进行边缘检测
Canny边缘检测算子主要应用于多级的边缘检测。其算法的目的是找到一个边缘检测算法的最优情况,具体体现在:⑴算法要求实现对图像中的边缘的标识最大化;⑵算法要求识别出的图像边缘与原图像中的图像边缘要尽可能接近;⑶对同一图像的边缘只标识一次,避免重复响应[5]。相对于其他在边缘检测中用到的微分算子来言,Canny算子的优化程度是相当高的,其应用程度也十分广泛。
首先先对图像进性平滑处理。Canny算子使用的滤波器为一维的高斯函数G(x),通过分别从行与列上对原始图像f(x,y)进行卷积运算,以此平滑图像,得到平滑后的图像函数I(x,y)[6]。
其中τ为高斯函数的标准差,通过它来控制图像平滑程度。
接着通过使用2×2 邻域的一阶偏导的有限差分计算平滑图像I(x,y)的梯度的幅值以及方向。
即
其中M(x,y)梯度幅值,H(x,y)为梯度方向,kx和ky分别为I(x,y)被行滤波器fx和列滤波器fy作用后的结果[7]。
接着使用一个3×3的邻域对梯度幅值M(x,y)的点进行运算,如果该邻域中心点的梯度幅值大于其他点,则判断当前邻域中心为边缘点,反之则为非边缘点。
图10 Canny算子进行边缘检测(反色图)
最后通过使用双阈值法处理图像,采用高、低两个阈值对图像进行分割。其中高阈值分割得出的图像T1(i,j)应当不含有假边缘,但轮廓可能有间断。通过双阈值法,可以将T1(i,j)的边缘连接起来,形成轮廓。同时,该算法还可以在低阈值分割出的图像T2(i,j)的8邻域位置上寻找可以连接图像T1(i,j)轮廓的边缘。通递归跟踪的算法,不断完善图像T1(i,j)的轮廓,最终得到期望的结果[8](图10)。
2.3.2.2 遍历图像得到打孔点坐标
在得到PCB线路板的轮廓图之后,使用阈值分割的方法,通过对阈值进行设定,可以筛选出图像上高亮的部分,即电路部分。接着对图像进行直方图均衡化去除噪声,优化图像的质量。得到图像后,将PCB线路板部分设置成为感兴趣域(ROI)[9],定义一个打孔点的模型,通过设定其的形状以及大小,在感兴趣域中将模型与图像中的连通域进行比对,筛选出所有符合标准的区域,并提取出所有符合标准的对象的圆心坐标。该坐标即为PCB线路板像素上打孔点的圆心坐标[10]。
2.3.2.3 像素坐标转换实际坐标
根据标定PCB线路板上四个边角处的标记孔,得到左上角以及右下角的标记孔中心坐标 (x1,y1),(x2,y2),这两个标记孔在实际PCB线路板上的坐标为(x3,y3),(x4,y4),可以得到像素坐标转换到实际坐标的转换系数 k1,k2。
假设此时得到打孔点的像素坐标为(xa,ya),可以得到实际坐标为(xb,yb)。
图像处理结果如图11。
最后,通过调用保存所有点位置信息的数组,在指定目录下创建一个“.txt”格式的文本文档,将所有的位置信息以规定的格式写入该文本文档中。
图11 图像处理结果
2.4 上位机程序设计
在本文中,需要构造一个上位机操作软件,通过在上位机对操作软件进行操作主要实现以下几点功能:一是实现上位机与下位机的串口通信功能;二是实现通过上位机手动发送命令控制下位机动作;三是将处理得到的坐标点信息进行编码,生成一系列指令,依次发送给下位机,控制下位机根据指令完整地执行一系列的运动,使钻头可以依次移动到图像处理后所得到的所有打孔点并进行打孔动作,其原理如下(图12)∶
图12 上位机设计思路
2.5 电机运动控制硬件设计
在实现钻头移动的功能上选择使用丝杆步进电机搭配滑台实现该功能,丝杆步进电机主要是由步进电机、丝杆与滚珠滑台三个部分组成的。
丝杆步进电机将电机与带有螺纹的丝杆相咬合,通过驱动步进电机进行旋转,可以带动整根丝杆跟着进行同步旋转,而滑台内部则刻有与丝杆搭配使用的内螺纹,当丝杆进行旋转时,滑台就会根据丝杆旋转的方向进行前后移动。通过这种方式,丝杆步进电机可以将旋转式的转动改为滑台的前后运动。
同时这种运动方式可以通过控制步进电机转动的角度对滑台位移进行较为精确地控制,可以控制滑台可移动的最小位移。
其中 x为滑台位移,θ为步进电机转动的角度大小,l为丝杆每转动一圈滑台前进的距离。
2.6 下位机程序编译
根据需求,下位机需要完成的主要任务有:
① 可靠地接收到上位机的程序;
② 可以根据上位机发送的命令指令执行相应的命令;
③ 可以根据上位机发送的位移指令控制步进电机运动到相应位置。
2.6.1 初始化单片机
在编写单片机的程序时,首先需要做的事就是初始化单片机。在此,需要对STM32单片机进行初始化的操作[11]。首先需要定义单片机的串口,规定串口的相应参数例如波特率,同时因为当有信息通过串口通信时需要单片机立即做出反应,所以需要对串口通信进行开中断设置。同时还需要定义硬件需要使用到的I/O口,为了方便程序对I/O口的操作,将I/O口的地址赋值给变量,通过对该变量进行操作来改变相应I/O口的状态。
通过对串口定义后,可以通过定义一个数组来接收上位机发送过来的信息,将其按位存储到数组的相应位置中。
2.6.2 执行命令指令
为了能够区分命令指令和位移指令,避免两者混淆,使用了判断语句。
其流程图(图13)∶
图13 执行命令指令流程图
为了防止上位机连续不断的发送信息导致信息传递出现错误的情况的发生,上位机一次只发送一行指令,如果有多行命令指令需要发送,需要下位机先执行完当前的指令,发送特殊的指令告诉上位机自己已经执行完当前命令,此时上位机才会继续向下位机发送下一条指令。
2.6.3 执行位移指令
在执行位移指令前,也需通过判断的方式判断出是否为位移指令。若当前指令为位移指令,就需要根据位移指令的格式来对当前指令进行解读。对上位机已经生成的位置信息的格式进行了解释,其格式为“X/Y+增量位移+命令符”。下位机通过对数组第一位进行判断可以得出该位移指令是对应哪一个坐标轴,接着对4位位移信息进行读取,通过公式:
可以计算出此时应该移动的距离。
3 结论
通过对PCB加工的整个操作流程进行拆解,将其分成图像定位与电机控制2个部分。
在图像定位部分,选择了使用高精度CCD摄像头,为后续研究的进行打下了良好的基础。接着在处理图像时选择了MATLAB的图像处理工具箱,利用其强大的功能与完善的支持库,实现了利用软件对PCB过孔点自动识别的功能。
在运动控制部分,本研究使用了STM32F103ZET6单片机作为控制器,通过判断上位机发送的指令,结合延时语句,驱动步进电机进行平面定位,接着通过驱动Z轴步进电机进行往返运动,完成打孔动作。同时在信息收发的过程中,加入了校验功能,避免了信息的误传和错传。
具体完成的工作有以下几点:
⑴拥有相当快捷的速度
CCD摄像头反应时间在400 ms左右,图形一找到即可控制图形位置冲孔。
⑵拥有相当高的精确度
能够在识别范围内,摄像头输入PCB板图像,通过上位机分析,控制运动;下位机中采用的步进电机精度为0.04 mm,最小步长为0.02 mm。
⑶有一定的可靠性
通过一万次实验,135孔位的PCB板图像区分的准确率为97%,位置精确度维持在0.07 mm。
本文研究中仍有一部分还有待改进。其中有以下几处:
⑴在通过MATLAB进行图像分析时,设置的小孔模型较单一,只有一种模型,这样在识别过程中无法自动识别特殊形孔例如长方形、椭圆形孔。如果需要识别多个尺寸的孔径需要对程序进行多次修改,十分不方便。如果能够提前采样多种形孔,进行图像分析,能改善目前的缺陷。
⑵在下位机使用步进电机,精度没能达到要求,且在Z轴过孔时没有能够再次进行校准,打孔的精度不高。如果能够采用高精度的直线电机,并采用角度传感器或者光栅传感器进行反馈,可以提升控制精度。