Skip to content

BGA球共面度檢測

專案簡介

專案背景

焊錫球的共面度不良可能導致焊接不良、短路等問題,嚴重影響產品的效能和壽命,將測量得到的資料進行統計分析,包括最大值、最小值和均值等,以評估焊錫球的共面度是否滿足產品要求。

本地圖片

相機選型

LMI雷射線掃相機 Gocator2520

檢測要求

測量精度 ≤ 0.03mm
測量重複性 ≤ 0.02mm
測量週期 ≤ 2s

解決方案

Vision-Studio採用整合工具的方法,一個工具直接計算出整體小球的共面度,在大大提升速度的同時簡化了工程邏輯。

設計思路

本地圖片

執行效果展示

  • 工程結果展示:

    本地圖片

  • HMI結果展示:

    本地圖片

操作流程

一、初始化

  1. 選擇Lua脚本语言工具,建立待接收資料的csv檔案。
  • 拼接表頭字串,儲存到csv檔案

經驗

.. 用於string型別字串拼接

part1 = "Hello, "
part2 = "world!"
result = part1 .. part2
print(result) # 輸出: Hello, world!

,作為分隔符,分割每個資料項

lua
-- 生成用于拼接的字符串
write = ""

--判断该文件是否存在,若不存在生成该文件,若存在跳过生成
if FileExists("./BGA.csv") == false then
    -- “,”表示下一列,“\n”表示换行
   write = write .. "Time," .. "Degree of coexistence" .. "," .. "OK/NG" .. "\n"
end

-- 拼接入当前时间
write = write .. os.date("%Y_%m_%d %H:%M:%S") .. ","

-- 字符串写入csv文件中
-- 当无该文件时,系统会自动生成该文件,同时该工具会WARN提示系统内无该文件
PrintToFile("./BGA.csv" , write)
  1. 選擇加载点云工具,獲取點雲。

二、預處理

本地圖片

位置調整

在實際專案執行過程中,工件擺放位置可能有偏差,因此可以通過查詢單個點或線來調整點雲3D位置,確保不同影像原點在同一位置。

  1. 使用3D方形探针工具,得到工件的左側與上側兩條邊。

  2. 使用3D几何交点工具,繫結上一步運算元變數輸出的兩條邊作為輸入幾何,輸出兩直線交點。

  3. 使用3D位置调整工具,繫結上一步運算元輸出輸出的直線交點作為新原點調整點雲XY方向位置。

平面擬合

在實際專案執行過程中,工件擺放z軸方向也就是上下位置可能會有偏差,需要確立z軸零平面作為基準面,確保點雲同一平面高度(z值)相同。

  1. 選擇3D区域工具,選取pcb板上面6塊突出的柱子為擬合平面的區域。

    本地圖片

  2. 選擇3D平面工具,繫結上一步獲取的區域作為輸入區域來擬合平面,並將擬合出來的平面作為零平面。

    本地圖片

二次定位

對於該案例,客戶要求的xy原點位置在點雲中心位置,因此需要進行二次定位來調整基準位置。

  1. 選擇3D方形探针工具,在四條邊上選取區域box,執行工具找到上下左右4條邊。

本地圖片

  1. 選擇3D几何交点工具,分別繫結上一步找到的四條邊中的兩條邊作為輸入,獲取左上左下右上右下四個頂點。

  2. 選擇多点定位工具工具,繫結上一步獲取的四個頂點位置引數作為輸入點,執行工具輸出上下左右四個頂點的中心點,同時調整點雲位置xy到中心點。

裁切出待測區域

該工程針對焊錫球共面度,為了便於直接對焊錫球進行後續測量,可以裁切出焊錫球區域。

  1. 選擇3D裁切工具,設定區域box只包含焊錫球點雲區域,輸出得到只包含焊錫球區域點雲到IM1,便於後續處理。

    本地圖片

三、共面度測量

選擇共面度工具,框選出進行測量的區域,進行共面度檢測。

本地圖片

四、資料判斷及儲存

選擇lua语言脚本工具,將測量的結果進行判斷且顯示在影像上,並將判斷結果和資料儲存在檔案中。

  1. 繫結共面度工具輸出變數平面度值

  2. 根據平面度值進行結果判斷並顯示資料

  • 儲存判斷結果到csv檔案。

經驗

string.format 用於格式化字串 %.nf表示將浮點數格式化為保留 n 位小數。

pi = 3.14159 str = string.format("Pi is approximately %.3f", pi) print(str) -- 輸出: Pi is approximately 3.141

lua
-- 设置全局变量
SetFloatVariable('Value',math.floor(1000*Result)/1000)

-- 进行结果判断
if Result<0.065 or Result>0.075 then
    -- 数据显示
    DrawText3D(0,"red",0,0,5,20,"检测结果:" .. "NG")
    write = string.format("%.3f," , Result) .. "NG" .. "\n"

else
    DrawText3D(0,"green",0,0,5,20,"检测结果:" .. "OK")
    write = string.format("%.3f," , Result) .. "OK" .. "\n"
end

-- 将字符串写入文件中
PrintToFile("./BGA.csv" , write)

Vision Studio