Skip to content

Solder Ball Volume and Height Measurement

Project Background

Measurement Background

Given the key role of solder balls in chip packaging, their parameters such as height and roundness directly affect product quality. To ensure stability and reliability, high-precision measurement technology is required to address challenges like reflection and precision, meet 100% inspection requirements, and improve product quality and production efficiency.

Local Image

Camera Selection

Shengxiang Technology SS081017

Measurement Items

  1. Solder ball height
  2. Solder ball volume

Detection Requirements

  • Measurement accuracy ≤ 0.02mm
  • Measurement repeatability ≤ 0.015mm
  • Measurement cycle ≤ 600ms

Solution

AI-Vision uses cropping tools to cut out solder balls, then uses the Blob tool to find the position of each solder ball, and uses height and volume tools for one-click measurement.

Design Concept

Local Image

Implementation Effect Display

  • Project Result Display
    • Volume Measurement Result Local Image
    • Height Measurement Result Local Image

Project Process

1. Initialization

  1. Use the Lua Script tool to initialize CSV files for saving data.

Experience

.. is used for string concatenation of string type

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

, is used as a separator to split each data item

lua
writeV = ""
writeH = ""

if FileExists("./Volumn.csv") == false then
    writeV = writeV .. "Time,"
    for i=1,78,1 do
        writeV = writeV .. "Volume" .. i .. ","
    end
end

PrintToFile("./Volumn.csv",writeV)

if FileExists("./Height.csv") == false then
    writeH = writeH .. "Time,"
    for i=1,78,1 do
        writeH = writeH .. "Height" .. i .. ","
    end
end

PrintToFile("./Height.csv",writeV)
  1. Use the Load Point Cloud tool to load the point cloud image to be processed. Local Image

  2. Use the 3D Cropping tool to copy the point cloud in IM1 to IM1 for subsequent processing.

2. Preprocessing

Local Image

Position Adjustment

  1. Use the 3D Square Probe tool to output two edges of the workpiece. Local Image
  2. Use the 3D Geometric Intersection tool to output the intersection point of the two lines.
  3. Use the 3D Position Adjustment tool to adjust the point cloud position according to the output line intersection point.

Plane Fitting

  1. Use the 3D Region tool to select the region for plane fitting. Local Image
  2. Use the 3D Plane tool to fit the plane based on the region selected by the previous tool and set it as the zero plane. Local Image

Crop the Area to Be Measured

  1. Use the 3D Cropping tool to crop out the solder joint area.
  2. Use the 3D Cropping tool, select inverse cropping to cut out the areas that do not need to be measured, leaving the solder joints.
  3. Use the 3D Cropping tool to copy IM2 to IM3 and IM4 for volume and height measurement. Local Image

3. Volume and Height Measurement

Local Image

  1. Use the 3D Blob tool to output the position information of each solder joint. Local Image
  2. Use the 3D Volume tool, bind the output variable blob_center_points of the 3D Blob tool (including position information of all solder joints) as the input region, and measure the volume of all solder joints.
  3. Use the 3D Height tool, bind the output variable blob_center_points of the 3D Blob tool (including position information of all solder joints), and measure the height of all solder joints.

4. Data Saving

Use the Lua Script tool to save data to CSV files.

Experience

string.format is used for string formatting %.nf means formatting a floating-point number to retain n decimal places.

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

lua
-- Initialize concatenated strings
writeV = ""
writeH = ""

-- Concatenate time (first column)
writeV = writeV .. os.date("%Y_%m_%d %H:%M:%S") .. ","
writeH = writeH .. os.date("%Y_%m_%d %H:%M:%S") .. ","

-- Concatenate volume and height values (columns 2-79)
for i= 1,78,1 do
    writeV = writeV .. string.format("%.3f,",Volume[i])
    writeH = writeH .. string.format("%.3f,",Height[i])
end

-- Write to files
WriteLineToFile("./Volumn.csv",writeV)
WriteLineToFile("./Height.csv",writeH)

Experience Summary

Core Steps:

  1. Obtain position information of the area to be measured with 3D Blob.
  2. Batch measure volume and height.

AI-Vision, Making 3D Measurement Easier