基于 YOLO 算法的扫描式 SMT 焊点缺陷检测系统
肖鹏;桓永犇;刘宏扬
第一部分 设计概述
1.1 设计目的
作为电子产品最重要的组成部分,印刷电路板(PCB)的设计日趋复杂和器件尺寸的缩小,促使对 SMT 可靠性提出了更高的要求[1]。因此对于 SMT 电路板的检测研究具有深刻的现实意义和经济价值。
在 SMT 工艺中,贴片器件焊点的好坏会严重影响 PCB 板的质量。轻则会导致可靠性下降,重则可能导致电路烧毁。为了能够确保将 PCB 板应用到高质量、 高可靠性的电子产品中,提高产品合格率,对焊点的缺陷检测是十分必要的[2]。
1.2 应用领域
本作品属于 SMT 工艺检测中的焊点检测领域,可区分良好焊点以及虚焊漏焊、短路、多锡、偏移等缺陷焊点情况。
作品可应用于小型的 SMT 贴片厂对批量 PCB 电路的焊点可靠性进行检测,或者电子维修领域对电路板进行辅助分析观察,同样也可在个人开发者对焊接电路的检测,相比传统方法可以大大降低人力和设备成本。
1.3 主要技术特点
目前,在国内外印刷电路板焊点质量检测的主要方法有:人工目测、自动光学检测、自动射线检测等方法[2]。
人工目测法是目前最简单的方式,但受检测员主观性影响较大,且检测速度低、错误率高[3]。
自动光学检测法(AOI)采用 CCD 摄影的形式获取元件和印刷电路板的图像,可实现自动化检测,但仪器成本较高,往往需数十万元。
自动射线检测(AXI)采用 X 光对 PCB 板进行扫描,可对球栅阵列(BGA) 等封装进行检测,但价格相比 AOI 仪器更加昂贵。
本作品采用基于机器视觉的检测方式,模拟人类视觉的智能行为,把所需要的信息从图像中提取、处理和分析,其具有成本低、抗干扰性强、鲁棒性强、可有效处理无规律和复杂背景缺陷等特点。
1.4 关键性能指标
机械位移系统参数:
电源额定电压:24V
电源额定电流:6A
电机运行速度范围:5mm/s---80mm/s
步距角:1.8°
最小运动距离:25um
丝杆有效行程:200mm
丝杆螺距:5mm
PCB 板扫描时间:T<40s (在 100mm*100mm PCB 以 50mm/s 扫描速度下测得)
成像系统参数:
摄像头像素:500w 像素
摄像头帧率:30 帧/s
物镜:0.7x-4.5x
目镜:0.35x Yolov3
算法参数: mAP
平均精度(mean Average Precision):84.3%
Yolo loss:11.2
处理速度:10fps/s(基于 zynq ultrascale 开发板部署下每秒预测图片的速度)
1.5 主要创新点
(1)YOlO 算法相比于 R-CNN 等算法对算力要求更小、运行速度更快,适合在 FPGA 上进行部署,且其有着较好的泛化能力[4][5],能有效减少背景错误。
(2)基于机器视觉的检测方式,相比于传统 AOI 光学检测方法,其对复杂背景下缺陷检测识别效果更好,抗干扰能力更强[6]。
(3)不受限于缺陷本身形态,不依赖手工规则,可对算法进行迭代复用。
(4)可对 PCB 板进行全自动扫描,实时在显示屏和 PC 上位机上显示,保存缺陷焊点图片及坐标位置。并对感兴趣的缺陷焊点进行溯回,将其移动至摄像头下观察。
第二部分 系统组成及功能说明
2.1 整体介绍
我们的系统主要由光学成像部分、图像处理部分,机械控制部分及人机交互界面四个部分组成。
光学成像部分主要由三维可调相机支架、USB 摄像头、目镜物镜和可调圆形光源组成。
图像处理部分则通过一块 zynq ultrascale 开发板连接摄像头,在 PL 端部署 yolov3 神经网络,将摄像头传回的图片进行焊点检测,通过 7 寸 HDMI 显示屏显示处理标注后的图片,并将有缺陷的焊点图片通过TCP协议传输至PC上位机。
机械控制部分则由一块 PYNQ 开发板、42 步进电机、驱动电路板、限位器和双轴滑台组成,同样通过 TCP 协议与上位机进行指令和数据传输,控制位移平台运动。
人机交互界面则是在 PC 上采用 PyQT 进行界面编写,作为 TCP 服务端,通过一个交换机将两块开发板连接在同一局域网下,实现协同操作。
2.2 各模块介绍
2.2.1 光学成像部分
光学成像部分主要由三维可调相机支架、USB 摄像头、目镜物镜和可调圆形光源组成,示意图如下图所示。
USB 摄像头采用型号 XGY300 的免驱彩色摄像头,CMOS 传感器大小为 1/2 英寸,像素大小为 300w,物镜为 0.7x-4.5x,目镜为 0.35x,放大倍数在 3-130 倍可调。
2.2.2 机械控制部分
电机控制部分硬件结构由 PYNQ、42 步进电机、驱动器、双轴导轨滑台、限位器和光耦组成。软件部分由上位机与 PYNQ 通过 TCP 协议通信完成对应控制。
整体结构如下图所示:
软件流程如下图所示:
(a)硬件设计
整体硬件 PCB 设计如下图所示:
电机驱动部分设计
A4988 是一款完整的微步电机驱动器,内置转换器,操作简便。它设计用于以全步,半步,四分之一,八分之一和十六分之一步模式操作双极步进电机,输出驱动能力高达 35V 和±2A 电流。A4988 包括一个固定的关断时间电流调节器, 能够在慢速或混合衰减模式下工作。细分驱动是减小步距角、提高步进分辨率、 增加电机运行平稳性的一种行之有效的方法,本设备使用 16 细分,能够满足高精密定位的要求。
光耦检测电路设计
光耦选用 6N137,输入 0~24V,输出 0~3.3V,采用共阴极接法。当金属滑台靠近限位器时,限位器信号线输出高电平,使光耦打开,PYNQ 引脚被置位, 作为电机停止信号。
(b)机械部分设计:
电机部分选用两相式 42 步进电机,其步距角为 1.8°,额定电流为 1.5A, 力矩为 0.7Nm。
采用双轴导轨滑台,可在 X 轴、Y 轴方向移动,有效行程均为 200mm,单圈行程为 5mm。
限位器选用 SN04-P 金属传感器固定在滑台上,额定工作电压为 10~30V, PNP 常开,有效输出信号为高电平,测量距离为 5mm,用以对控制电机起始位置。
(c)软件指令设计:
上位机通过 TCP 协议发送指令给 PYNQ,从而控制电机对待检测 PCB 进行复位、十字扫描、定位以及实时获取坐标等操作。指令格式如下表:
2.2.3 图像处理部分
(a)焊点情况分类
焊点情况的分类如下图所示,包含正常、多锡、少锡、漏焊、短路、偏移六种情况。
(b)数据集标注
数据集采用 labelImg 软件进行标注,对应英文名称如下
(c)YOLO 算法介绍
YOLO 是一种采用卷积神经网络(CNN)实现端到端目标检测的算法[7]。其运用回归的思想,将目标检测看成是一个回归的问题,能够实时预测多个目标的类别和目标边框的位置,另外 YOLO 采用滑动窗口的方式寻找目标,与传统的基于候选区域方式不同,它直接利用整幅图片训练网络模型[4]。
YOLO 经过不断改进已经从 YOLOv1 发展到 YOLOv5,本系统搭载的 YOLOv3 网络模型由骨干网络 Darknet-53 和 YOLO 检测层组成[8],骨干网络主要从图像中提取特征,YOLO 层用来预测类别和位置信息,Darknet-53 有 5 个不同尺度和深度的残差模块,每个残差模块借鉴 Resnet 结构,由一对连续的 3×3、1×1 卷积层和跳层连接组成,克服梯度消失以及精度下降问题,增强了特征表达能力。其神经网络结构如下图所示。
(d)焊点识别的训练过程:
制作数据集:
在待检测的板子上通过灰度处理,高斯模糊和调节摄像头放大尺寸的方法拍摄 300 多张照片,并进行标注。将百分之九十五的图片处理为训练集,剩下百分之五的图片为测试集。
图像增强:
将输入图片的数据进行归一化,使用(以 R 为例)的方式,并且在训练预处理和拍摄过程都加入了一定程度的高斯噪声,以期待将光照强度对于 pcb 检测的影响降到最低。
训练过程:
在训练最好的模型之前。我们对于 100 多张 pcb 图片的数据集进行过两次训练。在迭代 200-300 次左右(基础学习率为 2.5e-06)训练结果不太理想(loss 仅 为 45)。在最后一次训练,选择迭代 3000 次,基础学习率为 0.0025 在第 500 次 1500 次 2500 次中学习率以 10 的倍率衰减三次,从而获得比较满意的结果 (loss=9.7,mAP=0.95)(测试集)
2.2.4 上位机部分
软件界面采用交互式界面设计风格进行设计[9],使用户可以方便简洁地通过界面接收图像、控制电机、获得可视化结果,并可在软件界面中对检测最终结果进行展示。
PyQt 是 Python 中用来建立图形化用户界面的库,它具有 300 多个类和约 6000 个函数,目前 PyQt 可用的版本己更新至 PyQt5,其优势之一在于可以在所有主要计算机操作系统上运行,如 Mac,Unix 和 Windows。PyQt 在使用上完全继承了 Python 易学易用的特点,非常适合非计算机专业的科研人员使用[10]。
本系统按照前几节中对软件功能需求的详细分析进行界面功能的具体实现, 使用 Pyqt5 设计的 GUI 界面如下图所示。
该界面主要由三大部分组成,左侧部分通过 TCP 协议与 Zynq ultrascale 开发板通信,负责接收带有缺陷焊点的图片数据、接收或发送文本数据,主要包括连接和断开连接按钮、缺陷溯回按钮以及接收和发送信息按钮。
中间部分通过 TCP 协议发送相关指令给 PYNQ,使其控制电机运动,实现目标板图像数据的采集,共有复位、坐标询问、十字扫描、手动移动、缺陷溯回五大功能。
右侧用于输出日志信息,方便观察系统整体状态。
第三部分 完成情况及性能参数
3.1 系统架构完成情况
光学成像部分已完全搭建完毕,通过夹具固定摄像头器件,并可对摄像头进行两个维度的手动调节,在物镜下安装了一个可调白光光源用于照明。
机械控制部分目前已全部完成并进行了制板及测试,可实现对两个电机协同控制,以及接近开关信号的检测,其实物图如下所示。
上位机部分已经完成与机械控制系统的联调,可通过上位机实现共有复位、 坐标询问、十字扫描及手动移动功能,目前正在开发对网络图像的实时传输和缺陷溯回功能。
图像处理部分目前已将 YOLO 神经网络算法部署至 ZYNQ Ultrascale 开发板 上,可正常进行摄像头读取、检测焊点图片并对各类焊点进行标注,通过 HDMI 显示屏输出处理后图片。
3.2 算法测试情况
我们对 PCB 板进行放大拍摄并做灰度处理,再对处理后的图片进行标注制作成数据集送入神经网络训练,以下为在测试集上的测试结果:
根据测试结果,基本可以完成对焊点缺陷的检测,且置信度较高,但仍存在漏检的情况,后续需要对算法进一步优化以及对数据集进行补充。
第四部分 总结
4.1 可扩展之处
本作品目前已初步完成功能,预计在之后作品可进行如下扩展:
(1)收集各类 PCB 板,针对不同封装下各类焊点,制作更多的数据集, 提升算法精度。
(2)考虑和物联网进行结合,检测数据的同时上传焊点图片,减小人工的工作量,进一步获取更多数据。
(3)尝试采用其他机器学习算法,如 SSD 算法等进行实验,寻找更优的机器学习算法
(4)考虑针对复杂 PCB 场景下(如电脑、手机主板),它们芯片封装往往焊点不露出,可增加红外摄像头或 X-ray 方式获取焊点图片
(5)为进一步提升检测的准确性,可以考虑采用 3D 系统设备
(6)增加更多视觉方面的检测(如 PCB 表面清洁程度等)
(7)优化机械结构,选用更优的摄像头,提升检测图像稳定性。