大功率激光器廣泛用于各種領(lǐng)域當(dāng)中,例如激光切割、焊接、鉆孔等應(yīng)用中。由于鏡頭材料的體吸收或表面膜層帶來的吸收效應(yīng),將導(dǎo)致在光學(xué)系統(tǒng)中由于激光能量吸收所產(chǎn)生的影響也顯而易見,大功率激光器系統(tǒng)帶來的激光能量加熱會降低此類光學(xué)系統(tǒng)的性能。為了確保焦距穩(wěn)定性和激光光束的尺寸和質(zhì)量,有必要對這種效應(yīng)進行建模。在本系列的 5 篇文章中,我們將對激光加熱效應(yīng)進行仿真,包括由于鏡頭材料溫度升高而引起的折射率變化,以及由機械應(yīng)力和熱彈性效應(yīng)造成的結(jié)構(gòu)形變。本篇是這個系列收關(guān)的一篇內(nèi)容。
使用 STAR 模塊分析 STOP 效應(yīng)
在您的 FEA 軟件中完成結(jié)構(gòu)與熱分析后,可將數(shù)據(jù)導(dǎo)出為一系列簡單的文本文件,以便利用 STAR 模塊導(dǎo)入到 OpticStudio 中。在這篇文章中,我們將演示如何執(zhí)行完整的 OpticStudio 分析,以幫助您量化和了解系統(tǒng)光學(xué)性能的影響。有關(guān)所需 STAR 數(shù)據(jù)格式的完整詳細信息,請參閱 OpticStudio 幫助文件 STAR 選項卡> FEA 數(shù)據(jù)組>加載 FEA 數(shù)據(jù)章節(jié)。對于 Ansys Mechanical,有 ACT 擴展可用于以正確格式自動輸出數(shù)據(jù)。詳情請查看:OpticStudio STAR 模塊:Ansys 數(shù)據(jù)導(dǎo)出擴展。https://support.zemax.com/hc/zh-cn/articles/4406536983315
在 OpticStudio 中加載和擬合 FEA 數(shù)據(jù)
注意:這些步驟操作需要您持有 STAR Module 以及 OpticStudio 授權(quán)。
1 首先,我們打開文章下載附件中的 'Lens-3P_D25.4_2022.zar' 文件,這是系列文章首篇中介紹的原始序列模式光學(xué)系統(tǒng)。我們將在 STAR 模塊上應(yīng)用來自 FEA 工具的結(jié)構(gòu)和熱數(shù)據(jù),并評估其對名義光學(xué)系統(tǒng)性能的相關(guān)影響。
2 如果要加載 FEA 數(shù)據(jù),我們點擊?STAR…FEA數(shù)據(jù)…加載FEA數(shù)據(jù)(STAR…FEA Data…Load FEA Data),瀏覽到對應(yīng)數(shù)據(jù)文件位置,選擇全部相關(guān)文件,并點擊?打開(Open)。這里有多個文件夾,其中包含了來自分析流程中不同時間點的數(shù)據(jù)。首先,我們使用來自 “FEA_Data_800W_0010s” 文件夾的數(shù)據(jù)。
下拉菜單可用于向正確的表面分配結(jié)構(gòu)數(shù)據(jù)集和熱數(shù)據(jù)集。右側(cè)顯示的布局圖可幫助我們檢查數(shù)據(jù)集是否良好匹配至系統(tǒng)元件表面,然后選擇確定(OK),以擬合數(shù)據(jù)。
使用擬合評估(Fit Assessment)工具可以檢查每個數(shù)據(jù)集的擬合誤差。默認情況下,在擬合表面形變前會刪除每個數(shù)據(jù)集內(nèi)部的剛體運動(RBM)。這通??梢蕴岣邤M合準(zhǔn)確度,但用戶能夠完全控制該設(shè)置。
在結(jié)構(gòu)數(shù)據(jù)摘要與熱數(shù)據(jù)摘要(Structural Data Summary and Thermal Data Summary)表格中,用戶可以啟用或禁用每個表面的FEA數(shù)據(jù)集。
當(dāng)啟用STAR數(shù)據(jù)后,我們可以檢查分析窗口,以查看FEA數(shù)據(jù)對系統(tǒng)性能的影響,如波前圖(Wavefront Map)、點列圖(Spot Diagram)、矢高圖(Sag Map)等分析。
通過 ZOS-API 將 FEA 數(shù)據(jù)導(dǎo)入到 STAR,并開展光學(xué)性能分析
我們已經(jīng)演示了如何方便地將 FEA 數(shù)據(jù)手動導(dǎo)入到 STAR。另一種方法是使用 STAR-API 的功能實現(xiàn)這個流程的自動化。當(dāng)需要分析多個 FEA 數(shù)據(jù)集時,這種做法特別有用。在本節(jié)中,我們將演示如何使用 Matlab 腳本為 FEA 模擬的多個時步加載 FEA 數(shù)據(jù)。腳本 “TransientAnalysis.m” 將包含在文章附件中。
將在代碼中創(chuàng)建以下六種函數(shù),并且在下方提供了對應(yīng)的講解。
ListFiles():將數(shù)據(jù)文件夾作為輸入字符串變量,該函數(shù)將讀取數(shù)據(jù)文件夾中的文件名,并根據(jù)命名規(guī)則識別表面編號以及數(shù)據(jù)文件是形變文件還是溫度文件。輸出項是一個結(jié)構(gòu) Data 和一個整數(shù)型文件數(shù),即文件夾中的文件數(shù)量。
RemoveAllFEA():該函數(shù)將允許從當(dāng)前系統(tǒng)中刪除所有導(dǎo)入的 FEA 數(shù)據(jù)。它將檢查是否為每個表面導(dǎo)入了溫度或形變數(shù)據(jù)集,然后卸載那些已導(dǎo)入的數(shù)據(jù)。
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():用于從數(shù)據(jù)文件夾導(dǎo)入和加載變形和溫度數(shù)據(jù)集。必須先卸載先前導(dǎo)入的數(shù)據(jù),然后導(dǎo)入并應(yīng)用新的 FEA 數(shù)據(jù),否則結(jié)果將不會按預(yù)期更新??梢詫?FEA 數(shù)據(jù)集的坐標(biāo)轉(zhuǎn)換為每個表面的全局或局部坐標(biāo)??梢栽跀M合之前進行可選擬合設(shè)置配置,例如在擬合結(jié)構(gòu)數(shù)據(jù)之前移除 RBM,并為熱數(shù)據(jù)設(shè)置 GRIN 步長等。請注意,函數(shù) ImportDeformations()/ImportTemperatures() 不僅導(dǎo)入數(shù)據(jù),還執(zhí)行數(shù)據(jù)擬合,因此應(yīng)在此方法之前配置所有擬合設(shè)置。
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 中的代碼段在系統(tǒng)像面繪制點列圖。代碼包括以下步驟:
打開批次化光線追跡工具:
raytrace = TheSystem.Tools.OpenBatchRayTrace();
執(zhí)行不考慮偏振的批次化光線追跡,使用歸一化光瞳坐標(biāo)進行定義:
normUnPolData = raytrace.CreateNormUnpol((max_rays + 1) * (max_rays + 1),ZOSAPI.Tools.RayTrace.RaysType.Real,nsur);
normUnPolData.ClearData();
使用 Loop 添加追跡光線數(shù)目:
normUnPolData.AddRay(waveNumber, hx, hy_ary(field), px, py, ZOSAPI.Tools.RayTrace.OPDMode.None);
運行光線追跡工具并開始讀取結(jié)果:
raytrace.RunAndWaitForCompletion();
normUnPolData.StartReadingResults();
使用條件 While Loop,并且讀取光線結(jié)果:
[success, rayNumber, errCode, vigCode, x, y, ~, L, M, N, ~, ~, ~, ~, ~] = normUnPolData.ReadNextResult();
WavefrontMap():用于獲取系統(tǒng)的波前圖數(shù)據(jù)并且繪制對應(yīng)結(jié)果。上述代碼包含以下步驟。
創(chuàng)建新的波前圖,并獲取分析中的設(shè)置選項:
WavefrontMapAnlysis=TheSystem.Analyses.New_WavefrontMap();
WavefrontSettings=WavefrontMapAnlysis.GetSettings();
配置分析中的設(shè)置選項:
WavefrontSettings.Sampling=ZOSAPI.Analysis.SampleSizes.S_256x256;
WavefrontSettings.Field.SetFieldNumber(1);
WavefrontSettings.ShowAs=ZOSAPI.Analysis.ShowAs.FalseColor;
WavefrontSettings.STAREffects= ZOSAPI.Analysis.Settings.STAREffectsOptions.On;
應(yīng)用設(shè)置并獲取分析結(jié)果:
WavefrontMapAnlysis.ApplyAndWaitForCompletion();
WavefrontMap_Results = WavefrontMapAnlysis.GetResults();
對于 2D 結(jié)果,使用 DataGrids 取回數(shù)據(jù)結(jié)果:
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():用于獲取當(dāng)前系統(tǒng)內(nèi)的矢高圖數(shù)據(jù)并繪制對應(yīng)結(jié)果。代碼將執(zhí)行以下步驟。
創(chuàng)建新的矢高圖分析,并獲取分析中的設(shè)置選項:
SagMapAnlysis=TheSystem.Analyses.New_SurfaceSag();
SagSettings=SagMapAnlysis.GetSettings();
配置分析中的設(shè)置選項:
SagSettings.Sampling=ZOSAPI.Analysis.SampleSizes_Pow2Plus1_X.S_257x257;
SagSettings.ShowAs=ZOSAPI.Analysis.ShowAs.FalseColor;
SagSettings.Surface.SetSurfaceNumber(2);
應(yīng)用設(shè)置選項并獲取分析結(jié)果:
SagMapAnlysis.ApplyAndWaitForCompletion();
SagMap_Results = SagMapAnlysis.GetResults();
對于 2D 結(jié)果,使用 DataGrids 取回數(shù)據(jù)結(jié)果:
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
利用所創(chuàng)建的函數(shù)獲取光學(xué)性能分析結(jié)果
在這個示例中,從 FEA 軟件獲取不同表面在不同時間下的溫度和形變文件。本例中的時間分布包括 10 秒、60 秒、600 秒、1800 秒、3600 秒。
在主體函數(shù)中,已存在的 FEA 數(shù)據(jù)集將從系統(tǒng)中首先被移除,之后再將對應(yīng)時步的溫度和形變數(shù)據(jù)載入至系統(tǒng)當(dāng)中。我們可以使用 Matlab 將對應(yīng)的點列圖以及波前圖分析結(jié)果進行展示和繪制。
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);
代碼的在后面的一個函數(shù)是把來自每個時間段文件夾的幀分析圖結(jié)合保存為 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,我們可以獲取連續(xù)的模擬分析結(jié)果。
該代碼為交互式代碼,需要確保在 Zemax License Manager 中已經(jīng)安裝 STAR 模塊授權(quán)。
1.打開序列模式鏡頭文件。
2.在 Matlab下點擊交互式擴展(Interactive Extension),生成交互式鏈接模板代碼。
3.點擊?編程…ZOP-API.NET應(yīng)用…交互式擴展(Programming…ZOS-API.NET Applications…Interactive Extension)
4.在MATLAB中打開交互式代碼 TransientAnalysis.m,相應(yīng)地調(diào)整下列部分,以自定義您的代碼:
5.運行此代碼,將生成下列g(shù)if文件。
通過下面的 outSpot.gif 示例,可以看到點列圖從名義性能在形變和溫度影響下,在 10 秒、60 秒、600 秒、1800 秒和 3600 秒時間間隔的變化情況。
點擊圖片跳轉(zhuǎn)原文可觀看Gif文件
這里給出了 outWavefront 的示例。這個 Gif 文件顯示了波前圖從名義系統(tǒng)到五個時步的變化情況。
點擊圖片跳轉(zhuǎn)原文可觀看Gif文件
當(dāng)把結(jié)構(gòu) FEA 數(shù)據(jù)集和熱 FEA 數(shù)據(jù)集加載到系統(tǒng)中后,我們就可以檢查 FEA 數(shù)據(jù)對系統(tǒng)性能的影響。例如,我們可以看下系統(tǒng)照射 10 秒激光后的情況。正如下列離焦 RMS 光斑半徑曲線所示,我們的名義系統(tǒng)達到了衍射極限。
我們可以在這個曲線上,添加照射 10 秒激光后只顯示熱梯度效應(yīng)以及同時顯示結(jié)構(gòu)形變和熱梯度的離焦 RMS 光斑半徑曲線,正如您所看到的,10 秒高強度激光光束照射會顯著降低系統(tǒng)性能。RMS 光斑尺寸從幾微米增加至近 300 微米。
此外,在對照射 10 秒后的系統(tǒng)分析像面上的軸上主光線位置時,我們注意到主光線發(fā)生了顯著偏移。REAR 操作數(shù)返回了軸上主光線的徑向位置。它從名義位置移動了 109 微米。這樣就造成了用于描述成像角度偏差的瞄準(zhǔn)誤差(BSER 操作數(shù))。
如果我們使用快速聚焦(Quick Focus)工具重新為系統(tǒng)聚焦,像面移動近 4 毫米,而且性能會有所提高?,F(xiàn)在,我們可以看到光斑尺寸縮小,波前差減少,但性能仍然遠未達到衍射極限。不過在刪除大量離焦后,我們現(xiàn)在能在波前圖中觀察到一些由于熱效應(yīng)和結(jié)構(gòu)效應(yīng)導(dǎo)致的更精細結(jié)果。
接下來,我們將比較名義系統(tǒng)和系統(tǒng)在 5 個時步(即 10 秒、60 秒、600 秒、1800 秒和3600 秒)的波前差。
根據(jù)相關(guān)結(jié)果,從名義系統(tǒng)到 10 秒激光照射后的系統(tǒng),我們觀察到 RMS 光斑半徑和 RMS 波前差顯著增加。這種性能下降是激光加熱的熱彈性效應(yīng)和熱光學(xué)效應(yīng)所導(dǎo)致的。隨著時間的推移,熱量可能會在系統(tǒng)上更加均勻地分布,從而導(dǎo)致光學(xué)元件的形狀和折射率梯度變化更加均勻/平滑。在較長的照射時間下,這可能導(dǎo)致光斑尺寸縮小以及 RMS 波前差減少。
此外,STAR 模塊還可提供系統(tǒng)查看器(System Viewer)工具,方便您查看鏡頭體內(nèi)部的折射率梯度分布情況。下面所示的是 5 個時間間隔,即 10 秒、60 秒、600 秒、1800 秒、3600 秒時分別對應(yīng)的折射率梯度分布。
在這個系統(tǒng)中,熱致效應(yīng)導(dǎo)致聚焦光斑顯著增大,從而降低系統(tǒng)效率。如果改為使用更高透射率的光學(xué)膜層或修改系統(tǒng)外殼以改善冷卻,這些效應(yīng)可以得到緩解。OpticStudio、OpticsBuilder 和 STAR 實現(xiàn)的工作流程能方便地評估這些設(shè)計增強功能,并通過快速迭代獲得理想解決方案。
在這篇文章中,我們使用 OpticStudio STAR 模塊演示了結(jié)構(gòu)、熱和光學(xué)性能分析的端到端工作流程。我們從經(jīng)過優(yōu)化的序列模式系統(tǒng)開始,導(dǎo)出到 OpticsBuilder 開展光機設(shè)計,再導(dǎo)入回 OpticStudio 非序列模式,以執(zhí)行光線追跡,并使用體探測器來捕獲由于激光加熱而導(dǎo)致的每個元件上的吸收通量。然后從 OpticStudio 非序列模式導(dǎo)出相關(guān)結(jié)果,共享給 FEA 工程師,以便開展 FEA 分析。在完成 FEA 分析后,我們使用 STAR 模塊把結(jié)構(gòu) FEA 結(jié)果和熱 FEA 結(jié)果導(dǎo)入回 OpticStudio 序列模式,以分析激光加熱導(dǎo)致的性能下降。
面向 OpticStudio 的 STAR 模塊提供的新功能可以將 FEA 結(jié)果直接集成到 OpticStudio 中。這有助于更全面地研究激光加熱引起的熱形變和結(jié)構(gòu)形變所造成的影響。
通過結(jié)合使用 Zemax 工具套件、OpticStudio、OpticsBuilder 和 STAR 模塊,設(shè)計團隊能夠在其光學(xué)和光機設(shè)計工作流程中無縫集成 FEA 數(shù)據(jù)。此外,STAR-API 還可幫助工程師簡化和自動化完成整個流程。