大功率激光器广泛用于各种领域当中,例如激光切割、焊接、钻孔等应用中。由于镜头材料的体吸收或表面膜层带来的吸收效应,将导致在光学系统中由于激光能量吸收所产生的影响也显而易见,大功率激光器系统带来的激光能量加热会降低此类光学系统的性能。为了确保焦距稳定性和激光光束的尺寸和质量,有必要对这种效应进行建模。在本系列的 5 篇文章中,我们将对激光加热效应进行仿真,包括由于镜头材料温度升高而引起的折射率变化,以及由机械应力和热弹性效应造成的结构形变。本篇是这个系列收关的一篇内容。
在您的 FEA 软件中完成结构与热分析后,可将数据导出为一系列简单的文本文件,以便利用 STAR 模块导入到 OpticStudio 中。在这篇文章中,我们将演示如何执行完整的 OpticStudio 分析,以帮助您量化和了解系统光学性能的影响。有关所需 STAR 数据格式的完整详细信息,请参阅 OpticStudio 帮助文件 STAR 选项卡> FEA 数据组>加载 FEA 数据章节。对于 Ansys Mechanical,有 ACT 扩展可用于以正确格式自动输出数据。详情请查看:OpticStudio STAR 模块:Ansys 数据导出扩展。https://support.zemax.com/hc/zh-cn/articles/4406536983315
在 OpticStudio 中加载和拟合 FEA 数据
注意:这些步骤操作需要您持有 STAR Module 以及 OpticStudio 授权。
1 首先,我们打开文章下载附件中的 'Lens-3P_D25.4_2022.zar' 文件,这是系列文章首篇中介绍的原始序列模式光学系统。我们将在 STAR 模块上应用来自 FEA 工具的结构和热数据,并评估其对名义光学系统性能的相关影响。
2 如果要加载 FEA 数据,我们点击 STAR…FEA数据…加载FEA数据(STAR…FEA Data…Load FEA Data),浏览到对应数据文件位置,选择全部相关文件,并点击 打开(Open)。这里有多个文件夹,其中包含了来自分析流程中不同时间点的数据。首先,我们使用来自 “FEA_Data_800W_0010s” 文件夹的数据。
下拉菜单可用于向正确的表面分配结构数据集和热数据集。右侧显示的布局图可帮助我们检查数据集是否良好匹配至系统元件表面,然后选择确定(OK),以拟合数据。
使用拟合评估(Fit Assessment)工具可以检查每个数据集的拟合误差。默认情况下,在拟合表面形变前会删除每个数据集内部的刚体运动(RBM)。这通常可以提高拟合准确度,但用户能够完全控制该设置。
在结构数据摘要与热数据摘要(Structural Data Summary and Thermal Data Summary)表格中,用户可以启用或禁用每个表面的FEA数据集。
当启用STAR数据后,我们可以检查分析窗口,以查看FEA数据对系统性能的影响,如波前图(Wavefront Map)、点列图(Spot Diagram)、矢高图(Sag Map)等分析。
通过 ZOS-API 将 FEA 数据导入到 STAR,并开展光学性能分析
我们已经演示了如何方便地将 FEA 数据手动导入到 STAR。另一种方法是使用 STAR-API 的功能实现这个流程的自动化。当需要分析多个 FEA 数据集时,这种做法特别有用。在本节中,我们将演示如何使用 Matlab 脚本为 FEA 模拟的多个时步加载 FEA 数据。脚本 “TransientAnalysis.m” 将包含在文章附件中。
将在代码中创建以下六种函数,并且在下方提供了对应的讲解。
ListFiles():将数据文件夹作为输入字符串变量,该函数将读取数据文件夹中的文件名,并根据命名规则识别表面编号以及数据文件是形变文件还是温度文件。输出项是一个结构 Data 和一个整数型文件数,即文件夹中的文件数量。
RemoveAllFEA():该函数将允许从当前系统中删除所有导入的 FEA 数据。它将检查是否为每个表面导入了温度或形变数据集,然后卸载那些已导入的数据。
Surface = TheLDE.GetSurfaceAt(i);
StarData=Surface.STARData;
if StarData.Temperatures.FEAData.AreTemperaturesImported
StarData.Temperatures.FEAData.UnloadData()
fprintf('Remove Temperature Data @ surface %d\n',i)
end
if StarData.Deformations.FEAData.AreDeformationsImported
StarData.Deformations.FEAData.UnloadData()
fprintf('Remove Deformation Data @ surface %d\n',i)
end
FEALoad():用于从数据文件夹导入和加载变形和温度数据集。必须先卸载先前导入的数据,然后导入并应用新的 FEA 数据,否则结果将不会按预期更新。可以将 FEA 数据集的坐标转换为每个表面的全局或局部坐标。可以在拟合之前进行可选拟合设置配置,例如在拟合结构数据之前移除 RBM,并为热数据设置 GRIN 步长等。请注意,函数 ImportDeformations()/ImportTemperatures() 不仅导入数据,还执行数据拟合,因此应在此方法之前配置所有拟合设置。
if StarData.Deformations.FEAData.AreDeformationsImported
StarData.Deformations.FEAData.UnloadData() ;
end
StarData.Deformations.SetDataIsLocal;
StarData.Deformations.RBMs.Enable;
StarData.Deformations.FEAData.ImportDeformations(DeformationFilename);
StarData.Deformations.Fits.ApplyDeformations();
if StarData.Temperatures.FEAData.AreTemperaturesImported
StarData.Temperatures.FEAData.UnloadData() ;
end
StarData.Temperatures.SetDataIsGlobal;
StarData.Temperatures.Fits.GRINStep=0.2; StarData.Temperatures.FEAData.ImportTemperatures(TemperatureFilename);
StarData.Temperatures.Fits.ApplyTemperatures();
SpotDiagram():使用 ZOS-API 语法示例 22_seq_spot_diagram 中的代码段在系统像面绘制点列图。代码包括以下步骤:
打开批次化光线追迹工具:
raytrace = TheSystem.Tools.OpenBatchRayTrace();
执行不考虑偏振的批次化光线追迹,使用归一化光瞳坐标进行定义:
normUnPolData = raytrace.CreateNormUnpol((max_rays + 1) * (max_rays + 1),ZOSAPI.Tools.RayTrace.RaysType.Real,nsur);
normUnPolData.ClearData();
使用 Loop 添加追迹光线数目:
normUnPolData.AddRay(waveNumber, hx, hy_ary(field), px, py, ZOSAPI.Tools.RayTrace.OPDMode.None);
运行光线追迹工具并开始读取结果:
raytrace.RunAndWaitForCompletion();
normUnPolData.StartReadingResults();
使用条件 While Loop,并且读取光线结果:
[success, rayNumber, errCode, vigCode, x, y, ~, L, M, N, ~, ~, ~, ~, ~] = normUnPolData.ReadNextResult();
WavefrontMap():用于获取系统的波前图数据并且绘制对应结果。上述代码包含以下步骤。
创建新的波前图,并获取分析中的设置选项:
WavefrontMapAnlysis=TheSystem.Analyses.New_WavefrontMap();
WavefrontSettings=WavefrontMapAnlysis.GetSettings();
配置分析中的设置选项:
WavefrontSettings.Sampling=ZOSAPI.Analysis.SampleSizes.S_256x256;
WavefrontSettings.Field.SetFieldNumber(1);
WavefrontSettings.ShowAs=ZOSAPI.Analysis.ShowAs.FalseColor;
WavefrontSettings.STAREffects= ZOSAPI.Analysis.Settings.STAREffectsOptions.On;
应用设置并获取分析结果:
WavefrontMapAnlysis.ApplyAndWaitForCompletion();
WavefrontMap_Results = WavefrontMapAnlysis.GetResults();
对于 2D 结果,使用 DataGrids 取回数据结果:
analysis_data =WavefrontMap_Results.DataGrids(1);
Nx=analysis_data.Nx;
Ny=analysis_data.Ny;
Z=zeros(Nx,Ny);
for x=1:1:Nx
for y=1:1:Ny
Z(x,y)=analysis_data.Values(x,y);
end
end
SagMap():用于获取当前系统内的矢高图数据并绘制对应结果。代码将执行以下步骤。
创建新的矢高图分析,并获取分析中的设置选项:
SagMapAnlysis=TheSystem.Analyses.New_SurfaceSag();
SagSettings=SagMapAnlysis.GetSettings();
配置分析中的设置选项:
SagSettings.Sampling=ZOSAPI.Analysis.SampleSizes_Pow2Plus1_X.S_257x257;
SagSettings.ShowAs=ZOSAPI.Analysis.ShowAs.FalseColor;
SagSettings.Surface.SetSurfaceNumber(2);
应用设置选项并获取分析结果:
SagMapAnlysis.ApplyAndWaitForCompletion();
SagMap_Results = SagMapAnlysis.GetResults();
对于 2D 结果,使用 DataGrids 取回数据结果:
analysis_data =SagMap_Results.DataGrids(1);
Nx=analysis_data.Nx;
Ny=analysis_data.Ny;
Z=zeros(Nx,Ny);
for x=1:1:Nx
for y=1:1:Ny
Z(x,y)=analysis_data.Values(x,y);
end
end
在这个示例中,从 FEA 软件获取不同表面在不同时间下的温度和形变文件。本例中的时间分布包括 10 秒、60 秒、600 秒、1800 秒、3600 秒。
在主体函数中,已存在的 FEA 数据集将从系统中首先被移除,之后再将对应时步的温度和形变数据载入至系统当中。我们可以使用 Matlab 将对应的点列图以及波前图分析结果进行展示和绘制。
RemoveAllFEA(TheSystem);
[Data,file_num]=ListFiles(Datafolder)
FEALoad(TheSystem,Data);
fig=SagMap(TheSystem,surf_num);
fig=SpotDiagram(TheSystem,[0]);
fig=WavefrontMap(TheSystem,field_num,STARoption);
代码的在后面的一个函数是把来自每个时间段文件夹的帧分析图结合保存为 gif 格式图形文件。
function SaveGif(figure,outputname,i)
Frame=getframe(figure);
nn=frame2im(Frame);
[nn,cm]=rgb2ind(nn,256);
if i==0
imwrite(nn,cm,outputname,'gif','LoopCount',inf,'DelayTime',1.5);
else
imwrite(nn,cm,outputname,'gif','WriteMode','append','DelayTime',1.5);
end
end
使用 SaveGif 与 For Loop,我们可以获取连续的模拟分析结果。
该代码为交互式代码,需要确保在 Zemax License Manager 中已经安装 STAR 模块授权。
1.打开序列模式镜头文件。
2.在 Matlab下点击交互式扩展(Interactive Extension),生成交互式链接模板代码。
3.点击 编程…ZOP-API.NET应用…交互式扩展(Programming…ZOS-API.NET Applications…Interactive Extension)
4.在MATLAB中打开交互式代码 TransientAnalysis.m,相应地调整下列部分,以自定义您的代码:
5.运行此代码,将生成下列gif文件。
通过下面的 outSpot.gif 示例,可以看到点列图从名义性能在形变和温度影响下,在 10 秒、60 秒、600 秒、1800 秒和 3600 秒时间间隔的变化情况。
点击图片跳转原文可观看Gif文件
这里给出了 outWavefront 的示例。这个 Gif 文件显示了波前图从名义系统到五个时步的变化情况。
点击图片跳转原文可观看Gif文件
当把结构 FEA 数据集和热 FEA 数据集加载到系统中后,我们就可以检查 FEA 数据对系统性能的影响。例如,我们可以看下系统照射 10 秒激光后的情况。正如下列离焦 RMS 光斑半径曲线所示,我们的名义系统达到了衍射极限。
我们可以在这个曲线上,添加照射 10 秒激光后只显示热梯度效应以及同时显示结构形变和热梯度的离焦 RMS 光斑半径曲线,正如您所看到的,10 秒高强度激光光束照射会显著降低系统性能。RMS 光斑尺寸从几微米增加至近 300 微米。
此外,在对照射 10 秒后的系统分析像面上的轴上主光线位置时,我们注意到主光线发生了显著偏移。REAR 操作数返回了轴上主光线的径向位置。它从名义位置移动了 109 微米。这样就造成了用于描述成像角度偏差的瞄准误差(BSER 操作数)。
如果我们使用快速聚焦(Quick Focus)工具重新为系统聚焦,像面移动近 4 毫米,而且性能会有所提高。现在,我们可以看到光斑尺寸缩小,波前差减少,但性能仍然远未达到衍射极限。不过在删除大量离焦后,我们现在能在波前图中观察到一些由于热效应和结构效应导致的更精细结果。
接下来,我们将比较名义系统和系统在 5 个时步(即 10 秒、60 秒、600 秒、1800 秒和3600 秒)的波前差。
根据相关结果,从名义系统到 10 秒激光照射后的系统,我们观察到 RMS 光斑半径和 RMS 波前差显著增加。这种性能下降是激光加热的热弹性效应和热光学效应所导致的。随着时间的推移,热量可能会在系统上更加均匀地分布,从而导致光学元件的形状和折射率梯度变化更加均匀/平滑。在较长的照射时间下,这可能导致光斑尺寸缩小以及 RMS 波前差减少。
此外,STAR 模块还可提供系统查看器(System Viewer)工具,方便您查看镜头体内部的折射率梯度分布情况。下面所示的是 5 个时间间隔,即 10 秒、60 秒、600 秒、1800 秒、3600 秒时分别对应的折射率梯度分布。
在这个系统中,热致效应导致聚焦光斑显著增大,从而降低系统效率。如果改为使用更高透射率的光学膜层或修改系统外壳以改善冷却,这些效应可以得到缓解。OpticStudio、OpticsBuilder 和 STAR 实现的工作流程能方便地评估这些设计增强功能,并通过快速迭代获得理想解决方案。
在这篇文章中,我们使用 OpticStudio STAR 模块演示了结构、热和光学性能分析的端到端工作流程。我们从经过优化的序列模式系统开始,导出到 OpticsBuilder 开展光机设计,再导入回 OpticStudio 非序列模式,以执行光线追迹,并使用体探测器来捕获由于激光加热而导致的每个元件上的吸收通量。然后从 OpticStudio 非序列模式导出相关结果,共享给 FEA 工程师,以便开展 FEA 分析。在完成 FEA 分析后,我们使用 STAR 模块把结构 FEA 结果和热 FEA 结果导入回 OpticStudio 序列模式,以分析激光加热导致的性能下降。
面向 OpticStudio 的 STAR 模块提供的新功能可以将 FEA 结果直接集成到 OpticStudio 中。这有助于更全面地研究激光加热引起的热形变和结构形变所造成的影响。
通过结合使用 Zemax 工具套件、OpticStudio、OpticsBuilder 和 STAR 模块,设计团队能够在其光学和光机设计工作流程中无缝集成 FEA 数据。此外,STAR-API 还可帮助工程师简化和自动化完成整个流程。