磁控溅射靶材刻蚀模拟:蒙特卡罗与有限元耦合方法解析
2026/9/19 18:03:15 网站建设 项目流程

简介:针对磁控溅射工艺优化需求,这份文档以蒙特卡罗与有限元方法为核心,系统模拟镍靶溅射产额与靶材刻蚀形貌,并给出电磁场分布与刻蚀形貌的对应关系模型。内容面向具备物理和材料科学基础的研究人员、工程师,特别适用于从事磁控溅射技术研究及应用的工作者。文档内含完整的Python代码实现、理论推导与图表分析,覆盖蒙特卡罗溅射模拟、二体碰撞模型、电磁场有限元计算及磁环参数优化等关键环节,便于读者直接复现并扩展研究。资源包共1个docx文件,大小仅55KB,轻量便携。目前已有53人学习浏览,适合作为磁控溅射微观机理研究和工艺参数优化的可复现参考资料。

1. 磁控溅射靶材刻蚀要模拟,最先卡住的不是物理而是方法

磁控溅射的靶材烧蚀坑一深,膜厚均匀性就开始崩。实际产线上能做的就是降功率、换靶材、加磁场调节,可每一轮都是几个小时起底的实验。用模拟去预测刻蚀形貌并不是新鲜事,但多数人一上来就卡在选型上:溅射产额是离子碰撞问题,刻蚀形貌演化是传输与边界问题,而决定这二者的电磁场分布又得单独求解。三个物理过程交织在一起,想只靠一套理论公式是不现实的。工程上最稳的组合拳,是用蒙特卡罗方法算产额,用有限元方法算电磁场,再通过局部电流密度分布把它们耦合到形貌演化方程上。这套路线的好处是:每一步都可用独立实验数据校准,也能用比较小的计算量拿到工程上有意义的靶面轮廓预测值。本文就按这条路径来展开,最终落到能跑通的代码、参数和易错点上。

2. 靶材溅射产额与蒙特卡罗模拟:二元碰撞近似是主心骨

2.1 为什么解析公式算不准靶材溅射产额

溅射产额 Y 的定义很简单:每个入射离子从靶表面打出的原子数。但真要计算它,解析公式只能在非常窄的能量和角度范围里可靠。原因在于入射离子进入靶材后经历的是级联碰撞:离子将能量传给靶原子核,靶原子核再碰撞其他靶原子,只有当级联中某个原子获得超过表面结合能的能量且运动方向朝外时,它才能被发射出去。这个过程高度随机,和靶材晶体结构、表面粗糙度、入射角度以及离子能量都强相关。

因此常见做法是用蒙特卡罗方法模拟大量入射离子的级联历史,统计出平均产额。目前产业界最熟悉的程序是 SRIM/TRIM 系列,但它的算法核心——二元碰撞近似(BCA)——并不神秘,完全可以自己实现一个简化版,配合少量实验数据做校准。

2.2 BCA 模型中的三个关键参数

要实现一个可运行的最小蒙特卡罗产额计算器,只需要抓住三个物理参数:

  • 靶材的表面结合能 Es:这是控制产额绝对量级的最重要参数。对铜大约是 3.5 eV,铝约 3.4 eV,钨则接近 8.8 eV。该值越大,原子出射越难。
  • 位移阈值能 Ed:靶原子被撞离格点所需的最小能量。这个参数主要影响级联长度,对产额影响相对小。
  • 平均自由程 λ:离子在靶中发生一次核碰撞前走过的平均距离,由靶原子密度和碰撞截面决定。

蒙特卡罗的程序结构就是在一系列自由程-碰撞事件之间交替进行。每次碰撞中入射离子损失一部分能量,产生反冲靶原子;反冲原子自身也作为新的碰撞粒子参与后续级联。

2.3 最小可运行代码:统计溅射产额与角度分布

下面给出一段基于 BCA 思想的简化 Python 代码,思路是模拟单个离子在靶内的碰撞历史,最终统计出射原子的数量。

import random import math def sputter_yield(energy_eV, theta_deg, Es=3.5, Ed=13.0, num_ions=10000): """ 简化 BCA 蒙特卡罗溅射产额计算 energy_eV: 入射离子能量 theta_deg: 入射角(相对靶面法线) num_ions: 模拟离子数 """ yield_sum = 0.0 # 固定随机数种子,保证结果可复现 rng = random.Random(42) for _ in range(num_ions): e = float(energy_eV) theta = math.radians(theta_deg) emitted = 0 # 模拟一次入射离子的级联历史 for _ in range(200): # 限制最大碰撞次数,避免死循环 if e < Ed: break # 按平均自由程衰减:实际自由程用指数分布抽样 lam = 3.0 # 单位:原子层,典型金属约2-5 step = lam * -math.log(1.0 - rng.random()) # 简化处理:碰撞后能量按比例损失 loss_fraction = 0.12 + 0.05 * rng.random() e -= e * loss_fraction # 每次碰撞有一定概率产生一个向外的反冲原子 cos_phi = rng.random() # 出射角余弦,各向同性假设 cos_alpha = math.cos(theta) # 离子方向与表面法线夹角 # 动量传递效率与入射角的余弦相关 transfer = cos_alpha * math.exp(-step / lam) if transfer > Es / (e + 1e-8): emitted += 1 yield_sum += emitted return yield_sum / num_ions # 调用示例:500eV 氩离子垂直入射铜靶 y = sputter_yield(500.0, 0.0, Es=3.5, Ed=13.0, num_ions=50000) print(f"模拟溅射产额: {y:.2f} atoms/ion")

这段代码的物理简化是刻意为之的。真正的 BCA 模拟程序一次会追踪数百条碰撞级联分支,而这里每级最多只允许 200 次碰撞;能量损失也用了固定比例近似,没有区分核阻止与电子阻止。该代码的价值在于让你理解蒙特卡罗方法在产额计算中的运行逻辑:大量采样、随机游走、统计平均。实际工程中使用时,建议先用 SRIM 跑一批不同能量和角度组合的数据,再拟合出你自己的产额经验公式 Y(E, θ),精度远比这段演示代码好。

2.4 入射角度对产额的放大效应

产额随入射角增加而升高的规律在工程上极度重要。小角度入射时,离子在近表面的碰撞密度增大,级联更靠近表面,出射概率更高;但当入射角接近掠射(例如超过 80 度),离子直接在表面反弹或能量快速释放在最外一层,产额反而下降。峰值通常出现在 60–80 度之间。

这一行为直接决定了后续刻蚀形貌模拟中「局部入射角」的敏感性。靶面被刻出凹坑后,坑边缘位置的实际离子入射角已经不是离子的原始入射方向,而是离子方向相对于局部表面法线的夹角。这就意味着形貌演化过程必须逐位置更新入射角数据——这也是把蒙特卡罗结果与有限元场分布耦合起来的直接动因。

3. 磁控靶面的电磁场分布与有限元求解

3.1 为什么这里的电磁场必须用有限元方法

磁控溅射靶头内部的结构并不适合用解析公式套算。永磁体、极靴、靶材、屏蔽罩之间的几何关系复杂,而且靠近靶材表面的磁力线形状直接决定了二次电子能否被约束在靶面附近,进而决定电离效率和靶面电流密度分布。虽然可以用等效磁荷模型快速估算磁场,但一旦需要把结果嵌入选代求解框架,还是有限元方法最稳定。

有限元方法求解电磁场问题的思路是:将求解区域划分为小单元,在每个单元内用形函数近似未知场,组装出全局刚度矩阵,最后求解线性方程组。相比有限差分法,有限元对复杂几何边界的适应性好得多。

另外要提醒一点:如果你有授权,用 COMSOL 或 ANSYS 做电磁场仿真自然是最省力的;但自建一套有限元求解流程的价值在于可嵌入迭代循环——每次刻蚀形貌变化后重新计算场分布,再更新入射角。这正好能用上 MATLAB 有限元编程求解实例里常见的那套思路,只是这里用 Python 写,方便与后续的蒙特卡罗模块复用同一数据链路。

3.2 二维轴对称简化:磁矢势方程

磁控靶的磁路设计通常具有轴对称性(圆靶)或平移对称性(矩形靶)。对于圆靶平面磁控管,我们用磁矢势 A 的方位角分量 Aθ,控制方程为泊松型方程:

∇²Aθ = -μ0 Jθ_src

其中源项来自永磁体的等效磁流密度。求解出 Aθ 后,磁感应强度各分量为:

  • Bz = (1/r) · ∂(r·Aθ)/∂r
  • Br = -∂Aθ/∂z

这里用 z 轴作为靶面法线方向,r 为径向坐标。在极靴下方放置永磁体,则靶面上方会出现一条与靶面近似平行的强磁场带,这正是磁控放电的「跑道」区域。

3.3 最小有限元组装代码:求解二维泊松方程

以下是使用纯 NumPy 组装二维拉普拉斯矩阵的最小实现。实际应用中可以用 scikit-fem 或 FEniCS 提升效率,但下面这段代码展示了有限元最朴素的流程。

import numpy as np def assemble_2d_laplacian(nx, ny): """ 5点差分法组装二维拉普拉斯矩阵 等价于双线性四边形单元有限元的简化形式 nx, ny: x/y 方向网格点数量 """ N = nx * ny A = np.zeros((N, N)) for i in range(nx): for j in range(ny): idx = j * nx + i A[idx, idx] = 4.0 if i > 0: A[idx, idx - 1] = -1.0 if i < nx - 1: A[idx, idx + 1] = -1.0 if j > 0: A[idx, idx - nx] = -1.0 if j < ny - 1: A[idx, idx + nx] = -1.0 return A nx, ny = 60, 40 # 径向和轴向网格数 A = assemble_2d_laplacian(nx, ny) # 构造磁势源项(简化:左侧一块永磁体的等效电流密度区域) b = np.zeros(nx * ny) source_start = nx // 3 for i in range(source_start, source_start + 8): for j in range(2, 6): idx = j * nx + i b[idx] = 1.0 # 固定边界(下边界接地) fixed_idx = [i for j in range(0, ny, ny-1) for i in range(nx)] fixed_idx += [j * nx for j in range(ny)] fixed_idx = list(set(fixed_idx)) for idx in fixed_idx: A[idx, :] = 0.0 A[idx, idx] = 1.0 b[idx] = 0.0 # 求解 phi = np.linalg.solve(A, b) phi_2d = phi.reshape((ny, nx)) # 从磁势梯度计算磁场分量对应量 Br = -np.gradient(phi_2d, axis=0) Bz = np.gradient(phi_2d, axis=1)

格点离散的矩阵组装看起来简单,真实有限元需要做单元分析和数值积分,系数不再固定为 4 和 -1。在参数设置上,你需要关心的几个点在代码中也很直观:网格密度影响磁场梯度分辨率、源项区域的形状决定了磁场峰位、边界条件设置不正确会在求解结果里出现明显畸变。

将有限元求得的磁场数据保存为结构化网格场,后续蒙特卡罗模块或者形貌演化模块在任意坐标上需要做双线性插值来读取 B 值。这个插值过程就是我们做场-粒子耦合的最直接接口。

4. 蒙特卡罗与有限元的耦合:从场到形貌的迭代框架

4.1 耦合的核心物理桥:局部离子通量

靶材溅射产额蒙特卡罗模拟告诉我们的是「某个入射方向的离子能打出多少原子」;有限元磁场计算告诉我们的是「哪个位置的二次电子最容易被约束」。两者之间需要用等离子体模型衔接上是:电子在磁场中受到洛伦兹力约束,回旋运动半径与 B 成反比,因此磁场强度大的区域电离率高,离子密度高,轰击靶面的离子通量也大。

工程上最常用的简化假设是:靶面某点 r 处的刻蚀速率 E(r) 与局部产额 Y(θ(r))、局部离子通量 J(r) 成正比:

E(r) = Y(θ(r)) · J(r) / n_target

其中 n_target 为靶材原子数密度, θ(r) 为离子入射方向与该点表面法线的夹角。这里的 J(r) 并不是均匀的,它的空间分布强烈依赖于靶面磁场的切向分量 B∥(r)。实际经验表明,靶面刻蚀峰的位置通常对应 B∥ 的极值带——这就是磁控靶那个「环形沟槽」的来源。COMSOL 电磁场仿真能做到的是把 B∥ 算得精细,却不能直接给出形貌演化;形貌演化这一步必须靠耦合迭代。

4.2 形貌演化的数值模式:时间步与几何更新

显式时间推进是最容易实现的第一版形貌模拟。每一时间步内:

  1. 读取当前位置的 B∥ 值,更新离子通量 J。
  2. 由局部表面法线与离子轨道方向的夹角计算 θ。
  3. 从产额查找表 Y(E, θ) 插值出该点产额。
  4. 按时间步 dt 推进该点的刻蚀深度。

需要注意,这里的关键参数是「表面法线的更新」。随着靶材被刻蚀出凹坑,局部表面法线方向会旋转,导致局部入射角改变。这一效应会产生正反馈:凹坑底部法线朝向离子来流方向,入射角变小,产额下降;而凹坑侧壁处入射角变大,产额增加,刻蚀加速。如果不迭代几何,模拟出的形貌会与实验相差甚远。

4.3 耦合迭代的骨架代码

下面给出一个典型的刻蚀形貌推进循环,它依赖前文中已经得到的产额查找表函数 sputter_yield 和有限元磁场数组:

import numpy as np def etch_profile_evolution( surface_r, surface_z, B_parallel, energy_eV, angle_map, dt, step_count, sputter_yield_fn, n_target ): """ 一维靶面轮廓(径向)的刻蚀演化 surface_r: 径向坐标数组 surface_z: 当前靶面高度数组 B_parallel: 各径向位置处的磁场切向分量(有限元插值结果) """ growth_factor = 1e-4 # 电磁场约束导致的离子通量倍增系数 for t in range(step_count): for i in range(1, len(surface_r) - 1): # 从曲面差分计算局部法线角度 dz_dr = (surface_z[i+1] - surface_z[i-1]) / \ (surface_r[i+1] - surface_r[i-1]) surface_normal_angle = np.arctan(dz_dr) # 入射角=离子方向(垂直向下)与法线的夹角 theta_local = 90.0 - abs(np.degrees(surface_normal_angle)) # 局部入射通量 = 背景通量 * 磁场增强因子 local_flux = 1.0 + growth_factor * B_parallel[i]**2 # 溅射产额查表 y_local = sputter_yield_fn(energy_eV, theta_local) # 刻蚀推进 etch_rate = y_local * local_flux / n_target surface_z[i] -= etch_rate * dt # 形貌稳定性:不允许表面高度穿透下边界 surface_z[i] = max(surface_z[i], surface_z[i] - 0.5 * dt) return surface_z

这个代码里几个参数要细说。 growth_factor 是一个耦合强度系数,它将磁场强度转换为额外的离子通量贡献,实际上需要通过实验校准。dt 的选择需要满足数值稳定性条件:如果 dt 过大,表面高度会振荡,甚至出现非物理的「锯齿」轮廓;建议从某个小量开始逐步放大测试。以上代码中那个 max 操作是一个粗糙的数值稳定处理,工程上建议改为平滑滤波器。

更精细的方法是在每个时间步后重新做电磁场计算,因为靶面形状变化会改变附近的电场分布和磁路间隙,但这种迭代代价较高,常见做法是质量好的靶材每跑 50 个时间步更新一次磁场即可。

5. 工艺优化与电磁场影响分析:参数映射表与实战调参

5.1 控制变量:哪些工艺参数最能撬动刻蚀形貌

完成了模拟框架的搭建,就到了它最能产出价值的环节——工艺参数扫描。电磁场影响分析的典型做法是固定其他条件,逐一扫描各关键量。我的习惯是先做三组系列:

  • 磁场系列:靶面 B∥ 由 200 G 变化到 800 G,观察刻蚀峰位、峰宽和靶材利用率。
  • 气压系列:工作气压从 0.3 Pa 到 3 Pa,对应离子能量衰减和散射角度分布变化。
  • 靶基距系列:靶材到基片的间距从 60 mm 到 150 mm,此参数对薄膜均匀性影响大,但对靶面刻蚀轮廓影响相对小,属于二线变量。

每组扫描后记录的特征量包括:刻蚀深度均匀性标准差、最大刻蚀深度所在半径位置、靶材利用率(实际消耗靶材体积与理论可用体积之比)。

5.2 电磁场分布对刻蚀形貌影响的三条可验证规律

下面的表是我在实际工艺优化中会重点对比的几组规律,而不是设定实验。发现规律时,先看磁场,再看气压,最后才考虑靶基距。

参数变化刻蚀形貌的预期响应物理原因
B∥ 增大刻蚀 V 形坑变窄加深,利用率先升后降电子约束增强,电离带集中,跑道宽度收窄
磁场布置外移刻蚀峰位外移,靶边缘刻蚀加剧磁力线在靶面的出口位置跟随极靴位形移动
气压升高刻蚀轮廓整体变浅变宽,产额下降离子在鞘层中散射碰撞增多,平均入射能量和方向角弥散
溅射功率升高刻蚀深度近似线性增加,形貌形状不变功率主要提升离子通量,对产额和入射角影响弱

实际工作中有一个常见误区:把磁场强度单独调大就能提升靶材利用率。事实上靶材利用率是「均匀性/深度」的折中结果,太强的磁场会使刻蚀坑变得特别窄而深,在坑底打穿靶材甚至击穿冷却水,而坑外区域几乎不消耗。磁控靶材设计的核心指标不是最大刻蚀深度,而是靶面轮廓是不是平滑且有足够的消耗面积。

5.3 正交实验表与模拟批量调度

工艺优化阶段建议用正交表来规划模拟批次。如果同时扫描磁场强度(3 水平)、气压(3 水平)和靶基距(3 水平),全因子需要 27 次模拟,正交 L9 表 9 次即可覆盖主效应。在 Python 中只需要把前文的耦合代码包装成函数,然后在值域上循环即可得到数据列。

对于每次批量模拟,保存下面三样东西:输入参数 JSON 文件、初始磁场分布与最终磁场分布的差异、最终表面轮廓曲线。这三样东西是后续排错和数据回归分析的元数据,比只看最终刻蚀深度有用得多。

6. 验证与排错:先用平板靶解析解校准蒙特卡罗和有限元

代码写完后直接上复杂工况是灾难。工程上最可靠的推进路径是先验证两个子过程的正确性,再验证耦合后的趋势合理性。

第一层验证是蒙特卡罗产额代码的收敛性。检查 Y 值是否随模拟离子数增加而稳定收敛,通常到 5 万离子后起伏应小于3%。不同入射角 0/45/60 度的产额比例应当符合物理常识:60 度入射产额应明显大于垂直入射。如果不满足,优先检查表面结合能的数值和碰撞能量分配逻辑。用 SRIM 的公开数值作基准校准是一个成本最低的捷径,可以把你自己的产额函数与 SRIM 数据的偏差控制在 15% 以内。

第二层验证是有限元场分布的正确性。选一个简单的轴对称磁路模型,例如一个圆形永磁体加一块铁磁性极靴,然后用前文的二维泊松求解器计算,再和你手边已有的磁场探头测量值或文献数据对比。重点看峰位的位置峰值相对偏差是否在 10% 以内。这个验证能暴露边界条件设置中常见的重贴问题,例如把磁性材料边界设为零磁势边界导致磁场整体偏弱。

第三层验证我一直推荐做:执行一次「零磁场」基线模拟。把磁场增强系数设为零,此时靶面刻蚀应为近似均匀的平面下降(如果忽略边缘效应)。如果这个基线情况出现明显的不均匀形貌,那说明问题出在前文的几何推进或产额查表部分,而不是在电磁场耦合部分。这个测试能快速缩小 bug 的排查范围。

使用前文代码时,有四个高频错误点值得特别关注。第一个是把角度单位弄混,numpy 三角函数默认弧度,而工艺参数习惯用角度,建议在读取参数处统一转弧度,并写好类型注释。第二个是把表面法线方向算反,导致凹坑区域出现负反馈而不是正反馈,刻蚀形貌整体倒转。第三个是耦合代码中的海量法线更新忽略了电场对离子轨道的偏折,这在磁场较弱或工作气压较高的条件下会带来明显偏差。第四个是时间步长过大的振荡问题,投入产出比最高的处理方式是直接使用隐式时间推进,把表面高度对角隐式处理,可以直接避免这类数值失稳。

若你准备用 MATLAB 实现等价逻辑,可按相同流程在本机复现,迭代循环写得更顺手;但核心物理解释不变,最终统一以坐标文件方式交换数据,这也是我跨语言协作时的习惯做法。仿真做完后,实际上机的验证可以只做一个低功率短时间的刻蚀实验,与模拟出的轮廓做对比,确认计算可靠后,再全速推进。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询