跳到正文
PreciSim
physics

台面物件

标定板、PCB、芯片、晶圆、料盘、胶点——台面上的东西怎么生成、怎么上色、有多高,每一步的公式。

「公式公开、实现闭源」:引擎怎么把台面上的物件画成相机看到的像素,全部写在这里。

物件是算出来的,不是贴图

台面上的每个物件都是参数化的:给它一个世界坐标和采样足迹,它回答三件事——

回答 用在哪
外观:这一点的灰度 相机成像
高度:这一点表面比台面高多少 离焦、测距读数、打标光斑大小
特征真值:圆心、角点、孔心、焊盘中心、芯片中心 自动评分(只在开放真值时才能读到)

物件由生成器生成,预设是生成器的一组命名参数。现在有这些生成器:

生成器 是什么 特征真值
dot_grid 圆点阵列标定板 每颗圆心(阵列)
checker 棋盘格 内角点(阵列)
ring_target 同心环靶标,可排成阵列 靶心
line_grid 线阵 交点(阵列)
blank / patch 均质的板(空白打标板、铜箔)
fiducial 基准点:圆 / 十字 / 方 / 菱形 / 环 中心
pcb 基板 + 阻焊 + 走线 + 焊盘 + 基准点 + 通孔 基准点、孔心、焊盘中心
die 裸芯片:周边焊盘或凸点阵列 + 对位十字 焊盘、凸点、十字
wafer 晶圆:圆片 + 缺口 + 切割道 + 芯片阵列 + 墨点 芯片阵列、完整芯片、墨点、缺口
tray 料盘:穴位阵列,穴里有芯片 穴位、每颗料的实际位姿
holes / shapes 任意孔组 / 图形,可从文件导入 孔心 / 图形中心
image 一张灰度图片

内置预设 31 个(圆点板、棋盘格、靶标、线阵、四种空白打标板、四种基准点、三种 PCB、三种芯片、两种晶圆、两种料盘), 每个都写明它是为验证哪个算法而存在的。

图形:到边界的距离

每个图元(圆、矩形、圆角矩形、环、线段、十字、菱形、多边形)只回答一件事:这一点到边界的有向距离 d (在里面为负,在外面为正)。覆盖度由它推出:

t   = clamp((d − a/2) / (−a), 0, 1)        a = 采样足迹(一个像素在台面上覆盖多大)
覆盖 = t² (3 − 2t)                          边界上正好 0.5

圆心、角点严格落在参数给的位置上,不经过任何量化——这就是特征真值能精确到纳米的原因。

规则阵列(圆点板上万颗圆、晶圆上几百颗芯片)不逐个试:用 round(坐标 / 间距) 直接定位最近的一个。 不规则的点集(导入的钻孔文件)用网格分桶,每个采样点只看自己格子里那几个。

叠放:从上往下合成

物件有层级(layer,大的在上)。一个采样点从最上面的物件开始往下合成:

G ← 0, A ← 0
对每个物件(从上往下):
    w = (1 − A) × 覆盖度
    G ← G + w × 灰度
    A ← A + w
    A 到 1 就停
灰度 = G + (1 − A) × 台面底纹

不透明的物件(板、基板)在自己的外形里覆盖度处处为 1;只画图形、不带底的物件(印在 PCB 上的基准点、导入的轮廓) 在图形外为 0,下面的东西透上来。高度取第一个自带高度且覆盖过半的物件。

材料与光照

每种材料有一个漫反射灰度 g(含纹理)和一个镜面强度 s(0–1)。光源有四类: 同轴 coax、低角度环光 ring、背光 back、穹顶 dome,按各自亮度归一成份额 c r b d(和为 1)。

平   = exp(−(斜率 / 0.08)²)        平的表面把同轴光反回镜头
斜   = 1 − exp(−(斜率 / 0.35)²)    斜面把低角度光反进镜头

灰度 = g × (1 − 0.8 s r)
     + s × (250 − g) × c × 平
     + s × 200 × r × 斜
     + s × (250 − g) × d × 0.35
通孔 = g + (245 − g) × b

s = 0 的材料(标定板、FR4)对光源方向不敏感,只随总亮度变化。铜、硅、焊锡、胶点的 s 在 0.6–0.8: 同轴光下亮、低角度环光下平面发暗、斜面(胶点边缘、焊球)发亮——对位算法选哪路光,就是在这里看出区别的。

内置材料(灰度 / 镜面):标定板白 205/0、黑 35/0、FR4 150/0.05、绿阻焊 95/0.25、铜 185/0.6、喷锡 200/0.7、 硅 120/0.8、铝焊盘 215/0.5、黑色阳极氧化铝 38/0.15、不锈钢 165/0.45、PET 膜 230/0.1、陶瓷 225/0.05、胶 175/0.7。

激光打在什么材料上留下什么颜色也由材料决定:黑色阳极氧化铝打出白字(只会变亮),其它材料打出暗痕(只会变暗)。

高度与分层离焦

物件有厚度:PCB 1.6 mm、陶瓷片 0.635 mm、芯片 0.3 mm、料盘 3 mm……而景深只有零点一几毫米。 所以对焦在台面上时 PCB 是糊的,要把 Z 抬高一个板厚才合焦——这是真机现象。

一个视场里同时有好几种高度时(基板上放了芯片),离焦按高度分层

层宽 = 景深 / 4(最多 12 层)
第 k 层的离焦量 = 帧离焦量 − 该层平均高度
每层各模糊一遍整张图,每个像素取它所在那一层的结果

视场里只有一种高度时就是一层,与没有物件时完全一样。测距仪读的也是"台面 + 物件"的合成表面。

变体:放料误差、涨缩、翘曲、缺陷

真实的料每次都放得不一样。变体按种子抽样落定,之后是确定的:

变体 效果
placement 中心偏移 ΔX ΔY、转角 Δθ(固定值或按 σ 抽样)
scalePpm 局部 X / Y 各自涨缩(PCB 热涨缩、软板拉伸)
warpUm 翘曲:中心拱起、四角为 0 的二次曲面
missingPadRate 随机缺掉的焊盘比例(不画、也不进真值)
defects 颗粒(有高度)、划痕、脏污
contrast 灰度的增益与偏置

随机源由 (机台种子, 物件 id, variant.seed) 派生,与加载顺序、线程调度无关。 特征真值记的是抽样后的实际值,自动评分比的是"算法测出来的"对"实际落成的",不是对图纸上的标称值。 控制台和 3D 画的是标称值——实际值只有开放真值才能读到。

加工:烧蚀、点胶、钻孔、取放

过程 对世界的改变
烧蚀(激光打标) 胶囊形痕迹,线宽随离焦按高斯光束变化;颜色由材料决定
点胶 长出一个球冠。体积 V、接触角 θ:t = tan(θ/2),底面半径 a = ∛(6V / (π t (3 + t²))),顶高 h = a·t;胶线为抛物线截面,线宽 w = √(3A / t)A 为每毫米体积
钻孔 露出通孔(背光下透亮),那一点的高度回到台面
取放 从料盘某穴取走一颗料(穴空了),放到目标位置:底面落在目标处的表面上,放置误差按 σ 抽样

点胶、钻孔、取放目前由引擎控制台和宿主接口触发;上位机侧的点胶阀、吸嘴设备接口还在规划中

从文件导入

来源 支持的内容
Gerber(RS-274X) 坐标格式、单位、圆 / 矩形 / 长圆 / 多边形光圈,画线、闪烁、直线与圆弧插补、区域填充;宏光圈与清除极性跳过
Excellon 钻孔 公制 / 英制、前导零 / 尾零省略、刀具表、坐标模态
DXF 直线、圆、圆弧、多段线(含凸度圆弧);闭合轮廓可画实心或画轮廓线
坐标表 CSV x, y[, 直径]
晶圆图 CSV 行, 列, 分级,分级不为 1 打墨点
图片 PNG(8 / 16 位,非隔行)、PGM

Gerber、钻孔、DXF 是 Y 向上的,导入时翻成台面的 Y 向下。

最后更新: 2026/9/23
这页有帮助吗?