半导体芯片视觉定位9点标定方案

半导体芯片视觉定位:9 点标定完整工程方案

(平面固晶机 / 点胶机 / 焊线机 / 芯片拾取:相机垂直向下、无 Z 变化、纯 XY 平面定位,这是半导体行业最标准、最稳定、量产级方案)

一、方案定位:为什么半导体用「9 点标定」?

半导体视觉定位 99% 满足:

平台平面运动(XYθ,Z 固定或很小)

相机垂直安装(垂直光路,无强透视)

精度要求高(μm 级)

速度要求高(毫秒级转换)

9 点仿射 / 单应性标定 = 像素 ↔ 物理坐标直接输出:芯片物理坐标 (mm) + 旋转角度 (°)满足:固晶、粘片、AOI、切割对位、焊线对位。

二、系统构成(半导体标准配置)

相机:全局快门工业相机(120W~500W)

镜头:远心镜头 / 高精度定焦镜头(低畸变)

光源:同轴光 / 环形无影光(芯片打光关键)

运动平台:XYθ 伺服 / 音圈平台

标定件:9 点标定板(玻璃光刻板 / 陶瓷 Mark 点)

算法:9 点最小二乘标定 + 亚像素中心提取

三、标定目标(数学输出)

建立:像素坐标 (u, v) ↔ 平台物理坐标 (X, Y)变换模型:

最终输出:3×3 单应性矩阵 H(推荐,比仿射更稳)

四、半导体 9 点标定实施步骤(现场可直接照做)

步骤 1:制作 / 安装 9 点标定板

要求:

3×3 均匀分布 9 个 Mark

精度:±1μm ~ ±5μm

材质:玻璃光刻 / 陶瓷 / 不锈钢蚀刻

布满整个视场(不要只在中间)

步骤 2:运动平台走 9 点网格

固定相机,移动平台,使标定板中心依次到达相机视野中心。记录:

9 组 平台坐标 Pw [i] = (Xw, Yw)(机械坐标)

9 组 像素坐标 Pp [i] = (u, v)(视觉提取中心)

半导体要点:走点必须匀速、回零、消反向间隙,否则标定报废。

步骤 3:亚像素精定位(半导体精度核心)

对每个标定 Mark,用:

二值化

轮廓查找

椭圆拟合 / 角点亚像素化(cornerSubPix)

得到0.01pixel 级精度中心。

步骤 4:最小二乘求解变换矩阵

输入 9 组对应点,求解:

H=findHomography(P

p

,P

w

)

得到:像素→物理矩阵 H。

步骤 5:验证精度(必须做)

用第 10 点测试:

像素定位 → 计算物理坐标

与平台实际坐标对比

误差要求:≤ 1/5 像素(半导体合格标准)

五、芯片定位流程(量产运行逻辑)

拍照:芯片 / 晶圆 Mark 点

预处理:滤波、阈值、形态学

提取中心:亚像素中心 (u, v)

坐标转换:(u,v) → H → (X,Y)

输出偏移:

下发补偿给运动平台

六、关键参数(半导体行业经验值)

像素精度:0.1μm/pixel ~ 5μm/pixel

标定重复精度:≤ ±1μm

单应性矩阵优于仿射:抗畸变、抗轻微倾斜

标定温度:恒温 25℃(半导体必须温控)

七、可直接落地的代码(Python 半导体定位完整版)

import cv2

import numpy as np

====================== 1. 9点标定数据(半导体示例) ======================

像素点(u,v):从标定板Mark提取

P_p = np.array([

120, 118\], \[326, 122\], \[534, 119\], \[123, 325\], \[328, 327\], \[531, 324\], \[121, 530\], \[325, 532\], \[533, 528

], dtype=np.float32)

物理点(X,Y):平台机械坐标 mm

P_w = np.array([

0.0, 0.0\], \[5.0, 0.0\], \[10.0, 0.0\], \[0.0, 5.0\], \[5.0, 5.0\], \[10.0, 5.0\], \[0.0,10.0\], \[5.0,10.0\], \[10.0,10.0

], dtype=np.float32)

====================== 2. 最小二乘求单应性矩阵 ======================

H, status = cv2.findHomography(P_p, P_w, cv2.RANSAC, 1.0)

print("=== 半导体9点标定矩阵H ===")

print(np.round(H,6))

====================== 3. 芯片定位:像素→物理坐标 ======================

def pixel2world(u, v, H):

p = np.array([[u, v]], dtype=np.float32)

world = cv2.perspectiveTransform(p.reshape(-1,1,2), H)

return world[0][0]

测试:芯片像素中心 → 物理坐标

u_chip = 328

v_chip = 326

X, Y = pixel2world(u_chip, v_chip, H)

print(f"\n芯片像素({u_chip},{v_chip})")

print(f"物理坐标 X={X:.3f}mm Y={Y:.3f}mm")

八、方案优势(半导体产线为什么选它)

快:坐标转换仅一次矩阵乘法(<100μs)

稳:9 点最小二乘抗噪声

准:配合远心镜头,可达 **±1μm**

简单:易标定、易维护、易验收

通用:固晶、焊线、AOI、切割、粘片全适用