陳東強,彭亞濤,金戈
(廈門理工學(xué)院 電氣工程與自動化學(xué)院,福建 廈門 361024)
印刷電路板作為電子產(chǎn)品制造的基礎(chǔ)產(chǎn)業(yè),廣泛應(yīng)用于各種電子產(chǎn)品中。隨著PCB板的需求量增大,需要提高PCB板的生產(chǎn)效率。在PCB板生產(chǎn)過程中,需要人工對PCB板加工,這種操作雖然對生產(chǎn)設(shè)備要求簡單,但缺點明顯,即勞動強度大、工作效率低,且人工操作的出錯率很高。隨著市場對于產(chǎn)品質(zhì)量的不斷提高,這種人工加工PCB板的方法越來越不適應(yīng)現(xiàn)代化大規(guī)模生產(chǎn)。因此,設(shè)計一種能夠替代人工加工的自動PCB板打孔機勢在必行。
本文通過數(shù)字圖像處理技術(shù)采集PCB板圖像上的孔位坐標,由圖像的孔位坐標計算實際孔位坐標,完成PCB板定位要求。在運動控制模塊設(shè)計方面,使用上位機將實際孔位坐標轉(zhuǎn)換成一定規(guī)律的格式并傳輸給下位機,通過STM32單片機控制步進電機的運動,控制其鉆頭移動,從而完成自動PCB板打孔工作。
在自動PCB打孔機工作時,要先將預(yù)先采集的PCB圖像進行處理后得到一系列需要打孔的位置信息,再通過串口通信將這一系列的位置信息發(fā)送給由三軸步進電機以及STM32單片機所組成的下位機,STM32單片機在得到位置信息后執(zhí)行指令,控制步進電機移動到指定位置,再啟動鉆頭進行打孔動作,其原理圖如圖1所示。
圖1 基于STM32的印刷板打孔機工作原理
文章按照下述部分展開論述:
⑴通過使用高精度的CCD攝像頭采集需要加工的PCB線路板的圖像,在獲取清晰度足夠的圖像后,對圖像采用圖像去噪、圖像二值化、興趣域提取等方法處理,獲取待加工的PCB線路板上需要打孔的位置信息。
⑵通過上位機對得到的位置信息進行處理,將簡單的X、Y坐標形式的位置信息轉(zhuǎn)換為增量坐標,并且使用一定規(guī)律的通行格式,將移動、停止、打孔等命令用簡單的字母或者符號代替,發(fā)送給下位機。減少發(fā)送數(shù)據(jù)的長度,使得收發(fā)數(shù)據(jù)的速度更加快捷,處理起來更加方便。
⑶對下位機進行編程,以與上位機同樣的通行格式對收到的指令進行解讀,并進行該指令所包含的所有命令。通過控制步進電機的運動,控制鉆頭在印刷機X軸、Y軸上快速移動到打孔位置,再控制Z軸,使鉆頭可以上下移動進行打孔操作。
通過使用高精度的CCD攝像頭對圖像進行采集,可以得到清晰度高,光照均勻,像素精度高的圖像(圖2)。
圖2 正常PCB板圖像
正常的PCB板圖像傳輸?shù)缴衔粰C后,在圖像分析處理時,有利于后期的圖像處理中漏孔的概率,以及減少圖像運算的數(shù)據(jù)的大小。
在圖像處理方面采用MATLAB的圖像處理工具箱,利用其強大的功能與完善的支持庫,實現(xiàn)了利用軟件對PCB過孔點自動識別的功能。
2.2.1 圖像預(yù)處理
彩色圖像是由三個不同的分量組成,對彩色圖像處理時,我們往往需要對三個通道依次處理,時間消耗會很大,為了減少系統(tǒng)處理圖像的時間,需要減少所需處理的數(shù)據(jù)量,因此,我們將圖像灰度化,將三通道的數(shù)據(jù)轉(zhuǎn)化為單通道的數(shù)據(jù)(圖3)。
圖3 灰度處理后的PCB圖像
MATLAB中使用的是加權(quán)平均值法對圖像進行灰度處理,該函數(shù)的調(diào)用格式為:
2.2.2 使用OTSU(大津法)處理圖像
OTSU法用于對圖像進行二值化處理[1]。其原理是利用閾值將圖像分割位2個部分,即前景與背景,并且通過閾值的取值使得前景與背景的類間方差最大,保證了圖像的分離性最大。
假設(shè)i為分離圖像前后景的閾值。將圖像分離后后可得到被分離的前、后景與整圖像的面積以及整幅圖像。先通過計算得到前景、后景的面積比θ1、θ2為:
式中G為圖像的灰度級。通過計算出面積比可以進一步計算出整幅圖像、前景、后景的平均灰度為:
整幅圖像與前、后景的平均灰度值的關(guān)系為:
當整幅圖像被根據(jù)閾值i分隔開之后,前后景與整體圖像之間的平均灰度也相差較大,這種差異可以通過區(qū)域間的方差有效地描述出來,其表達式為:
將其改寫為與閾值i相關(guān)的函數(shù),可寫成:
圖4 二值化后的圖像
通過圖像的二值化,使得圖像變得簡單,而且數(shù)據(jù)量減小,能凸顯出PCB板所需打孔的輪廓(圖4)。
2.2.3 使用形態(tài)學(xué)運算剔除孤立點
圖像上的孤立點可能在圖像采集、量化等過程中產(chǎn)生,也可能在傳輸過程中產(chǎn)生。噪聲的存在極大地干擾了圖像的信息。對于圖像的后繼處理和分析都有影響。因此,需要對二值化后的圖像進行剔除孤立點,避免其對圖像識別產(chǎn)生干擾,以及促進其他處理環(huán)節(jié)性能的提升。
采用的MATLAB軟件中提供的形態(tài)學(xué)運算消除圖像的孤立點有2種方式。第1種是腐蝕濾波,在去除圖像孤立點的同時,同時會對圖像形狀產(chǎn)生影響;第2種是開運算,與前者相比,速度上多了一個膨脹運算時間,但對圖像形狀影響不大。根據(jù)設(shè)計要求,需要對圖像形狀進行識別,本文采用形態(tài)學(xué)運算中的開運算去除圖像孤立點(圖5)。
圖5 形態(tài)學(xué)運算流程圖[3]
⑴構(gòu)造結(jié)構(gòu)元素
首先需要通過使用strel指令構(gòu)造一個結(jié)構(gòu)元素,在本文中構(gòu)造的是一個由結(jié)構(gòu)原點到最遠距離為7的菱形結(jié)構(gòu),對應(yīng)程序為:SE1=strel('diamond',7),所得到的結(jié)構(gòu)元素為(圖6):
圖6 構(gòu)造所得結(jié)構(gòu)元素
⑵膨脹運算
從本質(zhì)上來說,形態(tài)學(xué)運算為兩個函數(shù)之間的邏輯運算。假設(shè)此時待運算圖像的函數(shù)為f(x,y),結(jié)構(gòu)元素的函數(shù)為b(x,y),膨脹運算的算法即f b。其運算公式為:
使用膨脹進行形態(tài)學(xué)運算,會將結(jié)構(gòu)元素與圖像中的所有像素進行對比,以填補圖像中的微小空洞,使有圖像部分的面積更大(圖7)。
圖7 膨脹運算前后圖像對比
2.3.1 規(guī)定PCB板邊界
由于通過CCD攝像頭所采取到的圖像包含一部分拍照背景,在處理過程中,如果拍照背景也被規(guī)定在處理范圍內(nèi)會造成2點影響:一是圖像信息更多,運算量更大;二是背景中可能存在干擾,會影響后期圖像篩選識別的過程。同時,在采集圖像中因為有光照的影響,單純通過OTSU法采集到的圖像會出現(xiàn)部分內(nèi)容缺失的情況。所以在此時,為了能夠準確地找出所有需要處理的圖像信息,需要通過找出圖像的邊界,來規(guī)定后期處理中需要處理的圖像的全部范圍。
將其4個邊角的坐標記錄下來,如圖8所示,方便在進一步對線路板上的打孔點定位時縮小查找范圍,提高運算速度和精度。
圖8 對PCB線路板的邊角進行標記
為了實現(xiàn)通過圖像定位得到PCB線路板上的所有打孔點坐標,需要在圖像上建立一個由X、Y構(gòu)成的兩軸坐標系?;谶@個兩軸坐標系將所有的打孔點的定位坐標以(x,y)的形式標記出來,如圖9。通過在PCB線路板上預(yù)設(shè)了四個孔徑為5.0mm的八角形孔作為建立X、Y坐標的基準點。
圖9 通過標記點構(gòu)建坐標系
2.3.2 打孔點定位及坐標提取
為了提取到所有打孔點的坐標,需要對圖像進行邊緣檢測,以方便確定所有打孔點的位置以及形狀,便于與其他線路板上的元件以及標識進行區(qū)別,提高了篩選的精確度,確保能夠?qū)崿F(xiàn)盡量多的篩選出統(tǒng)一規(guī)格的打孔點。
2.3.2.1 使用Canny算子進行邊緣檢測
Canny邊緣檢測算子主要應(yīng)用于多級的邊緣檢測。其算法的目的是找到一個邊緣檢測算法的最優(yōu)情況,具體體現(xiàn)在:⑴算法要求實現(xiàn)對圖像中的邊緣的標識最大化;⑵算法要求識別出的圖像邊緣與原圖像中的圖像邊緣要盡可能接近;⑶對同一圖像的邊緣只標識一次,避免重復(fù)響應(yīng)[5]。相對于其他在邊緣檢測中用到的微分算子來言,Canny算子的優(yōu)化程度是相當高的,其應(yīng)用程度也十分廣泛。
首先先對圖像進性平滑處理。Canny算子使用的濾波器為一維的高斯函數(shù)G(x),通過分別從行與列上對原始圖像f(x,y)進行卷積運算,以此平滑圖像,得到平滑后的圖像函數(shù)I(x,y)[6]。
其中τ為高斯函數(shù)的標準差,通過它來控制圖像平滑程度。
接著通過使用2×2 鄰域的一階偏導(dǎo)的有限差分計算平滑圖像I(x,y)的梯度的幅值以及方向。
即
其中M(x,y)梯度幅值,H(x,y)為梯度方向,kx和ky分別為I(x,y)被行濾波器fx和列濾波器fy作用后的結(jié)果[7]。
接著使用一個3×3的鄰域?qū)μ荻确礛(x,y)的點進行運算,如果該鄰域中心點的梯度幅值大于其他點,則判斷當前鄰域中心為邊緣點,反之則為非邊緣點。
圖10 Canny算子進行邊緣檢測(反色圖)
最后通過使用雙閾值法處理圖像,采用高、低兩個閾值對圖像進行分割。其中高閾值分割得出的圖像T1(i,j)應(yīng)當不含有假邊緣,但輪廓可能有間斷。通過雙閾值法,可以將T1(i,j)的邊緣連接起來,形成輪廓。同時,該算法還可以在低閾值分割出的圖像T2(i,j)的8鄰域位置上尋找可以連接圖像T1(i,j)輪廓的邊緣。通遞歸跟蹤的算法,不斷完善圖像T1(i,j)的輪廓,最終得到期望的結(jié)果[8](圖10)。
2.3.2.2 遍歷圖像得到打孔點坐標
在得到PCB線路板的輪廓圖之后,使用閾值分割的方法,通過對閾值進行設(shè)定,可以篩選出圖像上高亮的部分,即電路部分。接著對圖像進行直方圖均衡化去除噪聲,優(yōu)化圖像的質(zhì)量。得到圖像后,將PCB線路板部分設(shè)置成為感興趣域(ROI)[9],定義一個打孔點的模型,通過設(shè)定其的形狀以及大小,在感興趣域中將模型與圖像中的連通域進行比對,篩選出所有符合標準的區(qū)域,并提取出所有符合標準的對象的圓心坐標。該坐標即為PCB線路板像素上打孔點的圓心坐標[10]。
2.3.2.3 像素坐標轉(zhuǎn)換實際坐標
根據(jù)標定PCB線路板上四個邊角處的標記孔,得到左上角以及右下角的標記孔中心坐標 (x1,y1),(x2,y2),這兩個標記孔在實際PCB線路板上的坐標為(x3,y3),(x4,y4),可以得到像素坐標轉(zhuǎn)換到實際坐標的轉(zhuǎn)換系數(shù) k1,k2。
假設(shè)此時得到打孔點的像素坐標為(xa,ya),可以得到實際坐標為(xb,yb)。
圖像處理結(jié)果如圖11。
最后,通過調(diào)用保存所有點位置信息的數(shù)組,在指定目錄下創(chuàng)建一個“.txt”格式的文本文檔,將所有的位置信息以規(guī)定的格式寫入該文本文檔中。
圖11 圖像處理結(jié)果
在本文中,需要構(gòu)造一個上位機操作軟件,通過在上位機對操作軟件進行操作主要實現(xiàn)以下幾點功能:一是實現(xiàn)上位機與下位機的串口通信功能;二是實現(xiàn)通過上位機手動發(fā)送命令控制下位機動作;三是將處理得到的坐標點信息進行編碼,生成一系列指令,依次發(fā)送給下位機,控制下位機根據(jù)指令完整地執(zhí)行一系列的運動,使鉆頭可以依次移動到圖像處理后所得到的所有打孔點并進行打孔動作,其原理如下(圖12)∶
圖12 上位機設(shè)計思路
在實現(xiàn)鉆頭移動的功能上選擇使用絲桿步進電機搭配滑臺實現(xiàn)該功能,絲桿步進電機主要是由步進電機、絲桿與滾珠滑臺三個部分組成的。
絲桿步進電機將電機與帶有螺紋的絲桿相咬合,通過驅(qū)動步進電機進行旋轉(zhuǎn),可以帶動整根絲桿跟著進行同步旋轉(zhuǎn),而滑臺內(nèi)部則刻有與絲桿搭配使用的內(nèi)螺紋,當絲桿進行旋轉(zhuǎn)時,滑臺就會根據(jù)絲桿旋轉(zhuǎn)的方向進行前后移動。通過這種方式,絲桿步進電機可以將旋轉(zhuǎn)式的轉(zhuǎn)動改為滑臺的前后運動。
同時這種運動方式可以通過控制步進電機轉(zhuǎn)動的角度對滑臺位移進行較為精確地控制,可以控制滑臺可移動的最小位移。
其中 x為滑臺位移,θ為步進電機轉(zhuǎn)動的角度大小,l為絲桿每轉(zhuǎn)動一圈滑臺前進的距離。
根據(jù)需求,下位機需要完成的主要任務(wù)有:
① 可靠地接收到上位機的程序;
② 可以根據(jù)上位機發(fā)送的命令指令執(zhí)行相應(yīng)的命令;
③ 可以根據(jù)上位機發(fā)送的位移指令控制步進電機運動到相應(yīng)位置。
2.6.1 初始化單片機
在編寫單片機的程序時,首先需要做的事就是初始化單片機。在此,需要對STM32單片機進行初始化的操作[11]。首先需要定義單片機的串口,規(guī)定串口的相應(yīng)參數(shù)例如波特率,同時因為當有信息通過串口通信時需要單片機立即做出反應(yīng),所以需要對串口通信進行開中斷設(shè)置。同時還需要定義硬件需要使用到的I/O口,為了方便程序?qū)/O口的操作,將I/O口的地址賦值給變量,通過對該變量進行操作來改變相應(yīng)I/O口的狀態(tài)。
通過對串口定義后,可以通過定義一個數(shù)組來接收上位機發(fā)送過來的信息,將其按位存儲到數(shù)組的相應(yīng)位置中。
2.6.2 執(zhí)行命令指令
為了能夠區(qū)分命令指令和位移指令,避免兩者混淆,使用了判斷語句。
其流程圖(圖13)∶
圖13 執(zhí)行命令指令流程圖
為了防止上位機連續(xù)不斷的發(fā)送信息導(dǎo)致信息傳遞出現(xiàn)錯誤的情況的發(fā)生,上位機一次只發(fā)送一行指令,如果有多行命令指令需要發(fā)送,需要下位機先執(zhí)行完當前的指令,發(fā)送特殊的指令告訴上位機自己已經(jīng)執(zhí)行完當前命令,此時上位機才會繼續(xù)向下位機發(fā)送下一條指令。
2.6.3 執(zhí)行位移指令
在執(zhí)行位移指令前,也需通過判斷的方式判斷出是否為位移指令。若當前指令為位移指令,就需要根據(jù)位移指令的格式來對當前指令進行解讀。對上位機已經(jīng)生成的位置信息的格式進行了解釋,其格式為“X/Y+增量位移+命令符”。下位機通過對數(shù)組第一位進行判斷可以得出該位移指令是對應(yīng)哪一個坐標軸,接著對4位位移信息進行讀取,通過公式:
可以計算出此時應(yīng)該移動的距離。
通過對PCB加工的整個操作流程進行拆解,將其分成圖像定位與電機控制2個部分。
在圖像定位部分,選擇了使用高精度CCD攝像頭,為后續(xù)研究的進行打下了良好的基礎(chǔ)。接著在處理圖像時選擇了MATLAB的圖像處理工具箱,利用其強大的功能與完善的支持庫,實現(xiàn)了利用軟件對PCB過孔點自動識別的功能。
在運動控制部分,本研究使用了STM32F103ZET6單片機作為控制器,通過判斷上位機發(fā)送的指令,結(jié)合延時語句,驅(qū)動步進電機進行平面定位,接著通過驅(qū)動Z軸步進電機進行往返運動,完成打孔動作。同時在信息收發(fā)的過程中,加入了校驗功能,避免了信息的誤傳和錯傳。
具體完成的工作有以下幾點:
⑴擁有相當快捷的速度
CCD攝像頭反應(yīng)時間在400 ms左右,圖形一找到即可控制圖形位置沖孔。
⑵擁有相當高的精確度
能夠在識別范圍內(nèi),攝像頭輸入PCB板圖像,通過上位機分析,控制運動;下位機中采用的步進電機精度為0.04 mm,最小步長為0.02 mm。
⑶有一定的可靠性
通過一萬次實驗,135孔位的PCB板圖像區(qū)分的準確率為97%,位置精確度維持在0.07 mm。
本文研究中仍有一部分還有待改進。其中有以下幾處:
⑴在通過MATLAB進行圖像分析時,設(shè)置的小孔模型較單一,只有一種模型,這樣在識別過程中無法自動識別特殊形孔例如長方形、橢圓形孔。如果需要識別多個尺寸的孔徑需要對程序進行多次修改,十分不方便。如果能夠提前采樣多種形孔,進行圖像分析,能改善目前的缺陷。
⑵在下位機使用步進電機,精度沒能達到要求,且在Z軸過孔時沒有能夠再次進行校準,打孔的精度不高。如果能夠采用高精度的直線電機,并采用角度傳感器或者光柵傳感器進行反饋,可以提升控制精度。