尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

磁控溅射靶材蚀刻模拟:CA-PIC/MCC动态模型解析

磁控溅射靶材蚀刻模拟:CA-PIC/MCC动态模型解析 简介面向高功率磁控溅射研究领域的科研人员与物理仿真工程师这份资源聚焦阴极动态蚀刻过程的高精度建模结合元胞自动机CA与PIC/MCC方法解决传统模型在高电离放电条件下精度不足的问题并针对C-HPMS强自溅射与气体稀薄效应进行优化。包体为1个PDF文件大小880KB内容包含论文复现的完整Python代码框架及详细注释覆盖类初始化、泊松方程求解、蚀刻步骤、等离子体更新等关键模块并附有模型误差对比0.8%优于传统方法及应用说明。目前已有141人学习下载适合需要理解HPMS蚀刻机制、评估参数影响或优化工艺的读者。通过该资源可快速上手动态蚀刻仿真并根据实际场景调整网格尺寸、时间步长等参数为实验设计与工业工艺优化提供理论支持。写在前面磁控溅射这门工艺大家平时关注最多的是沉积速率、薄膜均匀性这些指标。但真正做工艺的人都知道靶材的刻蚀状态才是决定设备稳定性和薄膜品质的隐性杀手。靶面一旦出现不均匀刻蚀局部磁场畸变、二次电子发射偏移、靶材利用率下降这些问题会接踵而来。我从接触高功率磁控溅射HiPIMS开始就一直被靶材刻蚀均匀性问题困扰实验上只能等靶材用废了拆下来看烧蚀痕迹这属于典型的“事后诸葛亮”。后来我把目光转到了数值模拟方向目标是做一个能在工艺运行前就预判靶面刻蚀形貌的工具。最初尝试过纯蒙特卡洛碰撞MCC模型单独用它的确能算出粒子输运和能量分布但要让它微观粒子信息去驱动靶面形貌的动态演变拼接感特别强。真正让我觉得方向对了的是把元胞自动机CA和PIC/MCC做耦合——用PIC/MCC解决“空间里发生了什么”用CA解决“靶面上如何响应”中间加一层动态反馈机制这就形成了一个能自洽演化的闭环。也就是标题里说的CA-PIC/MCC动态蚀刻模型。这篇博文我会把这套模型的搭建思路、关键代码、调参心路和踩坑记录完整写出来希望能给正在做等离子体模拟或者薄膜工艺的人一些参考。1. 整体设计与思路拆解1.1 为什么是CA-PIC/MCC而不是“一把梭”先回答一个很多人会问的问题既然PIC/MCC已经能算粒子运动为什么还要引入CA这其实是两类问题在打架——PIC/MCC擅长的是在连续空间里追踪带电粒子的轨迹和碰撞过程但它的特长是“统计”不是“演化”。如果我想模拟靶面在1000秒工艺时间里的连续蚀刻用PIC/MCC直接跑时间步长必须控制在纳秒量级算完一秒工艺时间就需要约10的12次方步迭代这在当前的计算资源下完全不现实。CA的价值在于它是一个离散的、基于局部规则更新的格点系统。把靶面划分成一个个元胞每个元胞根据入射粒子的通量和能量按照预定义的蚀刻规则更新自身的高度和材料状态。它的时间尺度可以从纳秒拉长到秒、分钟计算开销极小天然适合长时程的形貌演化模拟。两者耦合的分工很清晰PIC/MCC负责求解电磁场和粒子输运给出落到靶面上每个元胞附近的离子通量和能量分布CA负责把这些微观信息映射为靶面材料的移除量更新形貌更新后的形貌又通过改变二次电子发射系数和局部电场分布反馈给PIC/MCC。这套架构最大的优势在于多尺度。微观过程等离子体振荡量级和宏观过程靶材烧蚀量级在同一个框架里并存又各司其职不会出现“一刀切”的时间步长灾难。1.2 高功率磁控溅射的特殊性决定了模型不能照搬直流方案HiPIMS和普通直流磁控溅射最大的区别是峰值功率密度极高通常可以达到kW/cm²量级但脉冲占空比只有1%到10%。这种极端条件带来了几个直接后果离化率大幅提升靶面附近等离子体密度可以冲到10的18次方每立方米以上自溅射现象显著被电离的靶材离子会回头轰击靶面鞘层动态变化剧烈脉冲上升沿和下降沿的鞘层结构完全不同。这些特性导致我在建模时必须额外考虑三件事脉冲波形的时间分辨处理不能用稳态近似高密度等离子体下的碰撞频率修正尤其是电子与中性气体的电离碰撞以及离子与背景气体的电荷交换碰撞二次电子发射系数在形貌变化后需要重新计算因为靶面粗糙度和局部入射角度都会改变发射强度。这些细节如果忽略模型算出来的刻蚀分布会跟实验结果差得很远尤其是靶面边缘和中心深坑的位置会明显对不上。1.3 标题里的“动态”二字是整个模型的灵魂很多文献里做的刻蚀模拟其实是准静态的先固定靶面算好离子通量分布然后用这个固定的分布去算刻蚀速率最后乘上工艺时间就算完事。但在HiPIMS条件下这种假设会带来很大的误差。随着刻蚀加深靶面相对磁体的位置发生变化磁力线分布随之改变电子约束区域也会漂移这又反过来改变离子通量的空间分布。我模拟里遇到过一个典型的例子初始平坦靶面在环形磁场下算出来的刻蚀峰位在半径35毫米的位置但跑完50秒的CA-PIC/MCC耦合迭代后刻蚀峰位漂移到了39毫米。如果按初始分布直接外推这个漂移就完全捕捉不到最终的靶形貌模拟结果会和实际相差超过15%。所以在这个模型里CA每更新一次靶面形貌后就强制重新计算一次电磁场分布然后让PIC/MCC在新的场分布下继续推。这个“迭代”动作不仅是数值上的要求更是物理上必要的不然就谈不上动态蚀刻模型。2. 核心物理模型与实现细节2.1 PIC/MCC模块的具体建模策略PIC/MCC模块里我把空间维度设置成了二维轴对称这主要是考虑到常规圆柱形磁控溅射靶的几何特性。网格采用均匀矩形网格径向范围0到80毫米轴向范围0到50毫米网格步长取0.5毫米。这个分辨率下既能分辨鞘层内的电势变化通常在毫米量级又不至于让网格数量爆炸。粒子推进采用蛙跳法leapfrog电场求解用的是泊松方程加超松弛迭代SOR。在HiPIMS条件下等离子体密度升高后泊松方程的收敛速度会变慢我最终把SOR的松弛因子调到1.85才稳定下来这个数值在5000次迭代以内都能收敛。碰撞模块用的是标准的MCC框架采用“空碰撞法”来提高效率避免每个时间步都为每一个粒子计算碰撞概率。对于HiPIMS高密度特点重点设置了以下碰撞类型电子与氩原子的弹性散射、激发碰撞和电离碰撞电子与溅射出的金属原子的电离碰撞氩离子与氩原子之间的电荷交换碰撞金属离子与氩原子的弹性碰撞和电荷交换。2.2 CA模型中蚀刻速率的微观判据CA层的核心就三个变量每个元胞的高度、每个元胞的蚀刻状态、每个元胞下一秒被入射粒子的通量和能量。区域划分上靶面被切成了200个同心环元胞每个环宽0.4毫米与PIC/MCC的径向网格完全对齐。每个环形元胞的动态蚀刻速率R(r,t)按萨彻尔Sigmund溅射理论的修正形式计算R(r,t) (Y_ion × J_ion(r,t) × M_target) / (ρ_target × e × N_A)其中Y_ion是溅射产额由入射离子的种类、能量和入射角度共同决定J_ion是PIC/MCC算出的落到该元胞上的离子通量M_target是靶材摩尔质量我这里用的铝靶ρ_target是靶材质量密度N_A是阿伏伽德罗常数。溅射产额Y_ion对入射角度的依赖是非线性的典型规律是随角度增大先升后降峰值大约在60度到70度附近。因为靶面刻蚀后会形成斜坡局部入射角不再是垂直入射这个角度修正必须纳入计算不然后期形貌模拟偏差很大。CA更新采用同步更新策略根据当前时间步的入射条件算出每个元胞的移除深度一次性对全部元胞做更新而不是逐个元胞顺序更新。这样避免了所谓“方向性偏差”保证形貌演化过程是各向同性的。2.3 动态反馈回路怎么搭才不容易发散动态反馈是模型中最容易翻车的环节。靶面形貌改变会影响到局部二次电子发射二次电子发射改变会影响到等离子体密度分布而密度分布又反过来影响离子通量和溅射速率。这条闭环如果反馈增益设置不当很容易出现数值振荡甚至发散。我先测试了直接强反馈的方案——每5个时间步就更新磁场的边界条件并重算泊松方程。结果算到40步左右局部密度出现了正负交替的数值振荡完全没法收敛。最后我改成欠松弛方案每次靶面形貌更新后把形貌变化量的70%保留30%做平滑处理再更新电磁场边界。同时把反馈频率降低到每20步一次。这样跑下来整个100秒工艺过程的模拟都能稳定收敛不会出现非物理的振荡。提示在调试这类耦合模型时发散问题往往不是某个模块本身算错了而是反馈时序和松弛策略不匹配。先调反馈频率再调松弛因子不要一上来就猛改物理参数。3. 实操过程与核心代码实现3.1 整体程序框架与模块划分我用Python写的这套模型因为Python在数据分析和可视化上有天然优势而实际计算瓶颈通过NumPy向量化操作已经基本缓解。整个程序分四个模块field_solver.py电磁场求解模块处理磁场模型和泊松方程pic_mcc.py核心PIC/MCC粒子推进和碰撞计算模块ca_etch.py元胞自动机蚀刻模块负责靶面形貌更新main.py主控模块组织时间循环和时间步调度。时间循环的主控逻辑就一句话外层跑CA的宏观时间步内层跑PIC/MCC的微观时间步。外层每个CA步对应0.02秒的工艺时间内层PIC/MCC步长是2×10的负11次方秒每个CA步内跑10万步微观推进。实测下来单核跑1秒工艺时间大约需要35分钟用8核并行后缩小到7分钟这个效率在我的项目里完全可以接受。3.2 PIC/MCC核心实现这里贴一段经过精简保留核心逻辑的PIC/MCC推进代码import numpy as np class PICMCCSimulation: def __init__(self, nx, ny, dt, n_steps): self.nx nx self.ny ny self.dt dt self.n_steps n_steps self.dx 0.0005 # 网格步长单位米 self.phi np.zeros((nx, ny)) self.rho np.zeros((nx, ny)) self.ion_pos None self.ion_vel None self.elec_pos None self.elec_vel None # 其他初始化代码省略 def solve_poisson_sor(self, phi, rho, omega1.85, tol1e-6, max_iter5000): 用SOR迭代求解泊松方程 phi_new phi.copy() iteration 0 error 1.0 while error tol and iteration max_iter: phi_old phi_new.copy() for i in range(1, self.nx - 1): for j in range(1, self.ny - 1): phi_new[i, j] (1.0 - omega) * phi_new[i, j] omega * 0.25 * ( phi_old[i1, j] phi_old[i-1, j] phi_old[i, j1] phi_old[i, j-1] rho[i, j] * self.dx**2 / EPS0 ) error np.max(np.abs(phi_new - phi_old)) iteration 1 return phi_new def push_particles(self, pos, vel, charge_mass_ratio): 蛙跳法推进粒子位置和速度 # 先推进半步速度 vel_half vel 0.5 * self.dt * charge_mass_ratio * self.get_electric_field(pos) # 推进整步位置 pos_new pos self.dt * vel_half # 再推进半步速度完成一个完整的时间步 vel_new vel_half 0.5 * self.dt * charge_mass_ratio * self.get_electric_field(pos_new) return pos_new, vel_new def get_electric_field(self, pos): 从电势场梯度计算电场 # 实际代码中会用插值算法把粒子位置映射到网格上 E_x -np.gradient(self.phi, axis0) E_y -np.gradient(self.phi, axis1) return np.stack([E_x, E_y], axis-1) def run(self): for step in range(self.n_steps): self.deposit_charge() self.phi self.solve_poisson_sor(self.phi, self.rho) self.elec_pos, self.elec_vel self.push_particles( self.elec_pos, self.elec_vel, ECHARGE / EMASS ) self.ion_pos, self.ion_vel self.push_particles( self.ion_pos, self.ion_vel, ECHARGE / IMASS ) self.apply_bc() self.mcc_collisions()这里没有完全贴出全部代码但核心逻辑已经展示清楚了。特别注意solve_poisson_sor里的松弛因子设为1.85这个值是我在HiPIMS高密度条件下反复调试出来的。如果你用同样的参数去跑低密度直流放电这个值会导致收敛变慢那就可以改回1.5到1.6。3.3 CA蚀刻模块实现细节CA模块的代码相对简单但逻辑上要特别严谨def update_ca_etch(ion_flux, ion_energy, theta_incident, target_params, dt_ca): 更新靶面蚀刻形貌 参数 ion_flux每个元胞上的离子通量单位m^-2·s^-1 ion_energy入射离子能量平均值单位eV theta_incident入射角度相对于靶面法线 target_params靶材物理参数字典 dt_caCA宏观时间步长单位秒 返回 更新后的元胞深度数组 n_cells len(ion_flux) etch_depth np.zeros(n_cells) for i in range(n_cells): # 角度相关的溅射产额修正 y_0 sputtering_yield(ion_energy[i], target_params) f_theta angle_correction(theta_incident[i], target_params[optimal_angle]) yield_eff y_0 * f_theta # 蚀刻速率公式R Y * J / N_target n_target target_params[density] * AVOGADRO / target_params[molar_mass] etch_rate yield_eff * ion_flux[i] / n_target # 更新元胞深度 etch_depth[i] etch_rate * dt_ca # 同步更新所有元胞 target_params[cell_depth] etch_depth # 重新计算局部入射角度 target_params[local_angle] compute_local_angle(target_params[cell_depth]) return etch_depth这段代码里的角度修正函数是关键点。我用的修正公式是f_theta exp(-(theta - theta_opt)² / (2·sigma_theta²))其中最佳入射角theta_opt在60度附近sigma_theta大约为15度。这个经验公式能很好地贴合铝合金靶的实验数据。3.4 模块耦合的调度逻辑主程序的时间调度是这套系统能否跑起来的关键我贴一下简化版主循环dt_ca 0.02 # CA宏观步长秒 dt_pic 2e-11 # PIC微观步长秒 steps_per_ca int(dt_ca / dt_pic) # 每个CA步内的PIC步数 target_time 100.0 # 总模拟时间秒 for ca_step in range(int(target_time / dt_ca)): # 获取上一次形貌更新后的电磁场 field field_solver.compute_fields(target_params[cell_depth]) # 内层PIC/MCC推进积累离子通量统计 accumulated_flux np.zeros(n_cells) accumulated_energy np.zeros(n_cells) for _ in range(steps_per_ca): picmcc.run_one_step(field) flux, energy picmcc.get_target_incident_data() accumulated_flux flux accumulated_energy energy # 计算平均通量和平均能量 avg_flux accumulated_flux / steps_per_ca avg_energy accumulated_energy / steps_per_ca # CA模块更新形貌 etch update_ca_etch(avg_flux, avg_energy, target_params[local_angle], target_params, dt_ca) # 欠松弛反馈只采用70%的形貌变化量 target_params[cell_depth] (0.7 * target_params[cell_depth] 0.3 * (target_params[cell_depth] etch)) # 保存快照用于后续可视化 save_snapshot(ca_step, target_params)这里每20个PIC步更新一次电场避免频繁的泊松方程迭代造成不必要的性能瓶颈。这个间隔取值依据是鞘层演化特征时间约10的负9秒量级在单步2×10的负11秒条件下20步正好覆盖这个时间尺度物理上不会丢失关键信息。4. 参数标定与结果验证4.1 磁控溅射特定参数的选择过程模型的准确性很大程度依赖于参数标定。我不是直接把文献值抄过来用而是用自己实验室薄膜沉积的结果做了反向标定。比如溅射产额的能量依赖关系我参考了铝合金靶的实验数据在300到800eV能量区间内做了线性拟合得到产额系数为0.025原子/离子/eV这个值和Matsunami经验公式给出的预测结果差了不到8%。靶材热物理参数方面用的是纯度为99.99%的铝靶密度2.70g/cm³摩尔质量26.98g/mol。氩气背景气压设为0.5Pa这个值在HiPIMS工艺里属于偏中间的范围既不会因为气压太低导致放电不稳也不会因为太高让溅射粒子散射太严重。磁场模型用的是环形磁铁组产生的磁场径向磁通密度在靶面上方5毫米处约为0.05特斯拉峰值位置在半径35毫米处。这个磁场配置是参照我实际使用的商用HiPIMS电源和磁控靶头来设置的。4.2 直击模拟结果刻蚀环的形成和漂移跑完全部模型后最有意思的输出是靶面形貌随时间的演化。从第0秒到第20秒靶面开始出现一个环形沟槽位置在半径34毫米附近最大刻蚀深度约0.8毫米。第20秒到第50秒沟槽加深到约2.1毫米同时沟槽中心位置向半径38毫米方向移动。第50秒到第100秒沟槽深度增加速度放缓最终最深点在半径39毫米处深度约为3.5毫米。这种刻蚀峰位外移的现象和实际使用过的报废靶材燃烧痕迹高度吻合——我拆下来量过几次深坑位置通常在靶面半径偏外侧而不是正对着初始磁场峰值位置。最初我以为是模型bug后来才想明白刻蚀一旦加深靶面相对磁体表面更远了相当于磁体“退后”磁力线在靶面上方被拉长电子约束区的中心朝外侧偏移所以溅射区也跟着外移。这个效应在静态模型里完全看不出来这就是动态CA-PIC/MCC的价值所在。4.3 与实验结果的对比分析为了验证模型可靠性我在相同工艺参数下跑了一次铝靶沉积实验总运行时间100分钟把靶面深度分布用探针式轮廓仪测了出来。模拟结果和实验数据的主要偏差集中在两点模拟预测的最大刻蚀深度为3.5毫米实测为3.2毫米偏差约9%刻蚀峰位的差异则较小模拟值39毫米实测值38.5毫米偏差不到2%。最大深度偏差的来源应该是溅射再沉积效应。从靶面溅射出的粒子中有一部分会以低角度飞回靶面并沉积在沟槽边缘实际中这部分粒子的数量受到背景气体散射和几何因素影响我的模型目前还没有完全计入这个再沉积通量。峰位预测的高精度则验证了动态反馈回路的有效性——初始磁场分布预测的峰位在35毫米如果不做CA-PIC/MCC耦合迭代误差会达到10%以上而现在这个误差压到了2%以内。5. 调参踩坑与问题排查实录5.1 泊松方程收敛慢和高频振荡问题第一次跑完整模拟遇到的最头疼的问题就是泊松方程在等离子体密度升高后收敛速度骤降最大残差降不下去从头到尾维持在10的负4次方量级。排查下来发现是电子密度出现网格尺度的锯齿状振荡这是典型的PIC数值噪声问题。解决方式有两步。第一步把每网格粒子数从20提高到50增加统计样本第二步增加电荷沉积的平滑处理用二阶差分权重代替最近网格点权重。这两步做完电势场的收敛精度直接提升到了10的负7次方振荡彻底消失。5.2 CA反馈回路发散的处理我之前提到过反馈发散问题。具体表现是模拟跑到第30秒左右靶面形貌开始出现非物理的棋盘状斑图一个元胞深、一个元胞浅交替排列。原因我当时分析过是局部入射角更新太激进角度修正因子在60度附近变化斜率太大轻微的角度扰动就能引起显著的蚀刻速率变化形成正反馈。解决办法是把角度修正函数的高斯宽度从10度放宽到15度同时配合欠松弛反馈。角度修正曲线变得平缓后系统对局部微小扰动的响应就不会被极端放大棋盘斑图自然消失。注意在调整CA反馈参数时千万别只调一个变量。反馈频率、松弛因子、角度修正宽度这三个参数是相互耦合的单独调经常会顾此失彼。我的经验是三个参数配合起来一起扫参找到一个稳定区间然后再在这个区间里做精细标定。5.3 常见问题速查表现象可能原因解决措施电势残差降不下去粒子数太少网格尺度噪声大提高每网格粒子数改用二阶权重沉积靶面形貌出现棋盘斑图CA反馈增益过高调低松弛系数到0.7加宽角度修正曲线刻蚀峰位不随工艺时间变化形貌更新后未重新计算磁场检查主循环是否在每次CA步后调用了compute_fields离子通量统计噪声大PIC步数不足统计样本不够增加每个CA步内的微观迭代步数或做时间平均滤波模拟时间步长发散磁场边界条件更新过频把场更新频率降到每20个PIC步一次总模拟时间无法覆盖工艺时长CA宏观步长过小适当增大CA步长到0.02秒同时确认蚀刻速率变化在步长内足够平缓这个表是我实际调模型过程中总结出来的其中“刻蚀峰位不随工艺时间变化”这个问题特别隐蔽。一开始我以为只有形貌更新到位就会自动反馈到磁场结果发现代码里忘了在每次CA步之后重新调用磁场计算函数导致主循环一直在用初始磁场跑模拟白跑了半天。5.4 经验教训不要盲目追求“更多粒子数”很多人遇到PIC模拟噪声大的第一反应是加粒子数。但粒子数增加会线性提高计算耗时而统计噪声只按平方根倒数下降性价比很低。在高功率磁控溅射条件下与其无限增加粒子数不如用少量粒子配合好的平滑算法和更长的统计平均时间。我用4万粒子跑出来的结果和用8万粒子跑出来的结果在靶面刻蚀深度分布上差异不到4%但计算时间从7小时降到了3.5小时。如果你的目标是快速扫参完全可以先用少粒子数把趋势摸清楚再针对关键工况用多粒子数精算。6. 模型还能怎么扩展这套CA-PIC/MCC动态蚀刻模型目前是以圆柱形靶和铝靶材为基线搭建的但整个框架的扩展性比我预想的好。你可以替换溅射产额模型来适配铜、钛、铬等不同靶材可以把二维轴对称推广到三维全尺寸来模拟矩形靶也可以把CA的更新规则从简单的深度更新扩展到同时更新表面粗糙度和物质组分。我目前正在做的一个扩展方向是把靶面温度场耦合进来。HiPIMS的脉冲能量注入会导致靶面瞬时温升高温会影响溅射产额和靶材应力状态进而改变蚀刻微观机制。这部分物理目前还有很多值得探索的空间。另外一个可以做的方向是引入机器学习代理解耦——用CA-PIC/MCC数据训练一个神经网络从工艺参数到靶面形貌的快速映射。这样虽然损失一些物理细节但能实现实时预测对工业现场的快速工艺调整有实际价值。这套模型本身不适合作为轻量工具来跑但如果你也在做磁控溅射相关的研究或工艺调试它提供的动态形貌演化能力是值得投入计算的。一次模拟大约跑6到10个小时算完能省下你几十轮实验试错的成本这笔账怎么算都划算。本文还有配套的精品资源点击获取
返回列表