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

相機選型
LMI雷射線掃相機 Gocator2520
檢測要求
測量精度 ≤ 0.03mm
測量重複性 ≤ 0.02mm
測量週期 ≤ 2s
解決方案
Vision-Studio採用整合工具的方法,一個工具直接計算出整體小球的共面度,在大大提升速度的同時簡化了工程邏輯。
設計思路

執行效果展示
工程結果展示:

HMI結果展示:

操作流程
一、初始化
- 選擇
Lua脚本语言工具,建立待接收資料的csv檔案。
- 拼接表頭字串,儲存到csv檔案
經驗
.. 用於string型別字串拼接
part1 = "Hello, "
part2 = "world!"
result = part1 .. part2
print(result) # 輸出: Hello, world!
,作為分隔符,分割每個資料項
-- 生成用于拼接的字符串
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)- 選擇
加载点云工具,獲取點雲。
二、預處理

位置調整
在實際專案執行過程中,工件擺放位置可能有偏差,因此可以通過查詢單個點或線來調整點雲3D位置,確保不同影像原點在同一位置。
使用
3D方形探针工具,得到工件的左側與上側兩條邊。使用
3D几何交点工具,繫結上一步運算元變數輸出的兩條邊作為輸入幾何,輸出兩直線交點。使用
3D位置调整工具,繫結上一步運算元輸出輸出的直線交點作為新原點調整點雲XY方向位置。
平面擬合
在實際專案執行過程中,工件擺放z軸方向也就是上下位置可能會有偏差,需要確立z軸零平面作為基準面,確保點雲同一平面高度(z值)相同。
選擇
3D区域工具,選取pcb板上面6塊突出的柱子為擬合平面的區域。
選擇
3D平面工具,繫結上一步獲取的區域作為輸入區域來擬合平面,並將擬合出來的平面作為零平面。
二次定位
對於該案例,客戶要求的xy原點位置在點雲中心位置,因此需要進行二次定位來調整基準位置。
- 選擇
3D方形探针工具,在四條邊上選取區域box,執行工具找到上下左右4條邊。

選擇
3D几何交点工具,分別繫結上一步找到的四條邊中的兩條邊作為輸入,獲取左上左下右上右下四個頂點。選擇
多点定位工具工具,繫結上一步獲取的四個頂點位置引數作為輸入點,執行工具輸出上下左右四個頂點的中心點,同時調整點雲位置xy到中心點。
裁切出待測區域
該工程針對焊錫球共面度,為了便於直接對焊錫球進行後續測量,可以裁切出焊錫球區域。
選擇
3D裁切工具,設定區域box只包含焊錫球點雲區域,輸出得到只包含焊錫球區域點雲到IM1,便於後續處理。
三、共面度測量
選擇共面度工具,框選出進行測量的區域,進行共面度檢測。

四、資料判斷及儲存
選擇lua语言脚本工具,將測量的結果進行判斷且顯示在影像上,並將判斷結果和資料儲存在檔案中。
繫結
共面度工具輸出變數平面度值根據平面度值進行結果判斷並顯示資料
- 儲存判斷結果到csv檔案。
經驗
string.format 用於格式化字串 %.nf表示將浮點數格式化為保留 n 位小數。
pi = 3.14159 str = string.format("Pi is approximately %.3f", pi) print(str) -- 輸出: Pi is approximately 3.141
-- 设置全局变量
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)