×

PCB外观检查机系统的总体结构资料下载

消耗积分:3 | 格式:pdf | 大小:154.37KB | 2021-04-24

郑成枝

分享资料个

  印制外观检查机是PCB产品生产线上的重要质检设备,它基于光学图像处理和计算机视觉识别技术原理,主要功能是对PCB组件生产过程中遇到的外观缺陷进行检测。中国是世界PCB生产大国,但不是强国,PCB生产链中的重要环节——PCB设备仪器不强是形成这种状况的重要原因之一,为推进中国PCB产业的发展与进步,研制了较自动外观检查机操作简单、系统更加紧凑以及更高的性能价格比的手动PCB外观检查机。手动PCB外观检查机通过手动放板后传送装置自动传送PCB,线阵CCD相机均匀扫描PCB板,获得准确图像,再通过计算机对比处理已扫描的线路板并进行判断,然后分装置根据计算机反馈的控制信号自动分检PCB(OK/NG)。可对异物,露铜,补油,划伤,镀金不良,字符错误,绿油不均,焊盘不均匀,残铜,漏印,显影等外观方面的瑕疵进行精确检测。由于图像采集和处理的速度和效果将直接影响到PCB板检测的准确性和有效性,为此针对手动外观检查机的特点详细研究了图像采集系统,采用C#在。net框架下对ActiveMil进行二次开发并用GDI+图形接口库实现了图像采集软件系统的开发。   1 PCB外观检查机系统的总体结构   PCB在线检测系统结构复杂,其传动控制设备、电气控制系统和摄像机必须在计算机的精确控制下,才能协调处理工作,完成复杂的检测和分拣任务。基于机器视觉的PCB在线检测设备的结构如图1所示。   图1 基于机器视觉的PCB在线检测设备的结构   系统主要分为运动控制、图像采集和图像处理部分。图像采集部分是整个系统的重要组成部分。摄像机和镜头在机器视觉中相当于人的眼睛,负责拍摄对象的图像。图像采集部分是PCB检测系统的重要环节,也是检测处理的基础。PCB检测系统强调检测的速度和精度,所以需要图像采集部分及时、准确地提供清晰的图像。   2 图像采集系统的硬件结构   1)图像采集系统工作原理   当系统上电后,自动检测PCB载物台是否复位到起点。此过程主要有两个光纤传感器和伺服电机完成。两个传感器分别安装在四顾电机轨道的起点,即复位点和轨道端点。起复位,停止和电机反转的功能。上电后MCU检测到sesorl(复位点或起点处)无效,则调用电机反转程序,使PCB载物台回到起点位置,同时串口向PC机发送彩图无效信号。然后MCU继续判断是否有按键按下,如果有按键按下,电机开始正转,同时串口向PC机发送彩图有效信号。此过程也就是PCB线扫描过程,完成图像的采集。此过程电机经历三个阶段:加速阶段,匀速彩图阶段和减速停止阶段。在电机正转过程中,从七点开始,MCU通过特有的捕获比较单元(CCU6)来对伺服电机编码器反馈回来的脉冲计数,但计数值达到采图有效数值时,串口向PC发送采图开始信号,此时线阵CCD开始对PCB进行图像采集。在电机减速正转到轨道端点的传感器senor2处时,电机停止并马上反转回到起点处,此过程串口向PC机发送采图无效信号。至此一个完整的检测过程完整。MCU继续检测是否有按键按下来进行下一次检测。其中串口发送的采集有效和开始信号可以有效地避免误触发。CCD采集到的图像信号由CamreLink接口送至图像采集卡再由PC做进一步的图像处理。   图2 PCB外观检查机图像采集系统工作原理图   2)传感器与按钮的接收与检测   采用光耦隔离技术,可以实现电路间的光电隔离,即使输入信号能无阻通过,且防止输出信号反馈到输入端,有利地抑制尖峰脉冲和各种噪声的干扰,工作稳定,无触点,使用寿命长,传输效率高。为实时检测到反馈的转镜转速信号,本设计中采用了高速光耦ACPL-072L,传输速率可高达25 MBd,并且外围电路简单,如图3所示。   图3 ACPL-072L电路原理图   本设计利用XC164CS外设中含有捕获/比较单元CC25端口,将光耦传输信号作为外部中断信号来触发XC164,实现高速精确地传感定位与按钮检测。   3)CCD摄像机系统   该手动PCB外观检查机图像采集系统采用NED彩虹系列的3CCD彩色线扫描相��NUCLi7300。该相机应用广泛,可以进行以前黑白相机无法进行的颜色差异检测。外部接口为高速串行接口(Camera Link),可以很方便的与采集卡连接,也可以很方便的设置增益和偏移量,并具有修正RGB线延迟的功能。像素数为7 300x3 Line,像素大小为10x10 μm,数据速率60MHz,最短扫描速率7.6kHz。图4为本系统所用的连续线扫描速率模型时序图。   图4 CCD连续线扫描速率模型时序图   系统中的图像采集卡采用的是Matrox公司的SoliosXCL-SU74,该卡自带处理器处理两个独立基模式或一个中模式Camera Link配置、66 MHz采集速率、64 MB缓冲器、可以采集面阵和线阵摄像头,并具有多种采集模式。   目前市面上的影像检测系统大多采用面扫描(Areascan)的摄影机进行影像的采集及分析,但是由于该PCB外观检查机检查的PCB产品尺寸范围较大——50 mmx50mm~330mmx250 mm,精度的要求达亚像素级,面扫描摄影机的分辨率及取像速度无法满足这些要求,所以系统选取的是线扫描CCD。但是线扫描的检测系统必须利用运动速度才能取得面积影相,即被测PCB运动到相机视场时同过硬件发送触发信号给相机开始采集,故将采集卡的采集模式设置为硬件触发同步采集,并分配最大内存64 M。CCD与采集卡连接示意图如图5所示。   图5 CCD与采集卡连接示意图   3 软件系统组成   该图像采集系统的软件采用的开发语言是C#,软件开发包是AetiveMil9.0组件。   Matrox有着丰富的程序包-图像处理和模式识别库(MIL)和MIL的子库MIL-LITE(基本图像处理)。MIL是一个硬件独立的32位图像处理库,利用了Intel的MMX的多媒体图形加速功能对图像处理程序库进行了优化,可以处理二进制、灰度或彩色图像,它是独立于硬件平台的。并且对于快速Windows应用程序开发,MIL捆绑了ActiveMIL。AetiveMIL是一个管理图像采集,处理,分析,显示和存档的动态控件的*。Aeti-veMIL完全集成到Microsoft Visual Basic、Visual C++和。net快速应用程序开发环境中。该图像采集系统选用的是AetiveMil控件库,本控件库可以实现所有MIL的所有功能,而且由于使用了ActiveX控件,所以很大程度上降低了程序设计的难度,缩短了软件开发周期,提高了应用系统的稳定性。   3.1 基于AclivrMil的图像采集程序   对Matrox图像采集进行图像采集二次开发的通用软件结构如图6所示。   图6 Matrox卡开发原理图   图像采集程序的基本思路是:   1)打开通信通道,即确定一个应用对象(Application),并对每个应用对象创建一个或多个系统对象(System)。   2)初始化硬件资源,即为每个系统对象分配数据缓存(Data Buffer)、数据采集器(Digitizer)和数据显示(Display)对象。   3)启动采集过程,即将图像读入数据缓存,并将缓存赋值给数组,通过对数组的处理实现对图像的处理,图像数据与数据显示相关联后就可以通过显示控件或窗体显示预处理后的结果。   AetiveMIL可以让开发者快速简单地将一个图像应用程序和Windows用户界面结合起来。应用程序开发包含拖动和滚动工具放置以及加标点和单击配置,充分地减少代码量。在。net framework3.0卡发环境下,安装MIL开发包并正确配置后,Application、System、Image、ImageProcess、Display等组件将自动添加到工具栏。   开发者将所需用的控件拖拽到图像采集窗体上,一个Application,对应于单镜头手动外观机,一个System,单窗体显示——一个Disp-laly,为了提高CPU使用率应启用双缓存异步采集——两个ImageBuffer,及一个ImageProcess。   3.2 双缓存异步采集思想

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.lene-v.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'PCB外观检查机系统的总体结构资料下载',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.lene-v.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);