ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

基于VirtualLab Fusion的Herriott池建模与仿真全流程解析

基于VirtualLab Fusion的Herriott池建模与仿真全流程解析 做气体吸收测量的人十有八九绕不开多通池。Herriott池算是其中结构最优雅的一种两面球面凹镜相对一放光在里面来回弹几十次等效光程一下就拉到了几十米甚至上百米而物理尺寸却只有巴掌大小。最近我在VirtualLab Fusion里完整走了一遍Herriott池的建模与仿真流程从参数计算、组件搭建到光斑演化分析过程比预想中曲折但也确实值得整理出来。这篇文章就是我自己的实操记录供做光谱检测、激光器腔外增强或者其他需要长光程小体积方案的朋友参考。1. 为什么是Herriott池原理与参数设计1.1 多通池的基本原理与选型痕量气体检测的核心矛盾很简单吸收信号强度正比于光程但仪器体积和光路稳定性又反过来限制光程。想在几十厘米的空间里获得数十米的有效吸收路径只能让光“折叠”起来。多通池就是干这件事的器件常见方案有White池、Herriott池和Chernin池等。White池用三块球面镜实现光路折叠光斑排布灵活但结构复杂装配难度高。Chernin池适合超长光程但镜面利用率和对准难度都很高。相比之下Herriott池的结构最为简单两块曲率半径相同的球面凹面镜面对面放置一束光从其中一块镜面边缘的小孔射入在两块镜子之间反复反射最后从另一侧出射。Herriott池的优势在于只要初始入射位置和角度合适光斑在镜面上会自然排成对称的椭圆图案出射位置可预测不需要额外的折返镜组。实际工程里它被大量用在TDLAS可调谐半导体激光吸收光谱、光声光谱和激光腔外增强系统中主要就是因为它结构皮实、机械公差宽松而且对装调的容忍度高。我最早接触它是想把一台体积只有30厘米长的小型光谱仪吸收程做到10米以上Herriott池几乎是唯一不需要复杂光学平台就能实现的方案。1.2 关键参数与光斑演化规律理解Herriott池核心是搞懂两个参数镜面曲率半径R和镜间距d。当d接近R时也就是接近共焦条件光线在两块镜子之间来回反射时每次到达镜面的横向位置都会绕着一个中心点旋转一个固定角度。这个旋转角θ的近似关系为θ ≈ arccos(1 - d/R)当d/R 1时θ约为90°也就是说光斑每经过一次镜面反射就在镜面上转四分之一个圆弧四次往返后回到初始位置附近。这个旋转角决定了光斑在镜面上的排布方向和间距也决定了有效反射次数。实际设计时d/R通常在0.9到1.1之间取值偏离共焦条件后光斑轨迹会从规则椭圆变成更稀疏或更密集的图案。除了d/R入射光束在镜面上的初始位置和倾斜角同样关键。光斑在两面镜子上各自形成椭圆轨迹如果入射点偏离镜面中心椭圆中心跟着偏移入射角度越大光斑散开的范围越大反射次数也越多。但角度过大会导致光斑超出镜面边缘光学损耗急剧上升。反射次数和等效光程由初始倾斜角、镜面口径和入射点三者的关系共同决定它们之间没有独立的解析式可以直接套用这正是需要用仿真软件做参数扫描的原因。我在设计初期先按经典公式估算了一组参数然后才在VirtualLab Fusion里建模型验证。下表是我常用的一组初值适合波长1.55 μm、镜面口径1英寸的常规配置参数典型值作用曲率半径R100 mm决定共焦间距与光斑尺寸镜间距d100 mm与R配合确定旋转角入射点x方向偏心2 mm展开光斑椭圆轨迹入射倾斜角10~20 mrad控制反射次数与光斑密度镜面反射率99.5%决定有效光程增益镜面孔径12.7 mm半径限制最大反射次数对刚开始接触的人我的建议是不要一上来就追求上百次反射先按d R的共焦条件跑通模型确认光斑分布和出射位置都与预期一致再去慢慢调整入射角增加反射次数。2. VirtualLab Fusion中的建模思路与组件选型2.1 几何追迹还是物理光学追迹VirtualLab Fusion支持多种追迹引擎第一步要明确选哪种。Herriott池内的光束来回反射几十次每一次反射都会改变光束的横向位置和角度还要考虑衍射、干涉和高斯光束的相位演化纯几何光学追迹虽然能快速给出光斑轨迹但无法正确模拟衍射损耗和干涉效应尤其在入射光束接近衍射极限、镜面口径相对束腰并不大时几何追迹得到的反射次数往往偏乐观。我的做法是分两步走先用几何追迹引擎做光路粗验证确认光线确实能在两面镜子之间稳定往返且不跑出镜面范围再切换到物理光学场追迹引擎观察高斯光束在多次反射后的束腰变化、光斑形态和出射能量分布。物理光学追迹的结果更接近实验但计算时间明显更长参数扫描时如果直接用物理光学一次扫描可能要跑很久。先用几何追迹把参数空间缩小到一两个候选组合再做物理光学验证效率会高很多。另外需要注意VirtualLab Fusion里的追迹设置中有“最大反射次数”或者“终止条件”这类选项。Herriott池动辄几十次反射默认追迹次数可能不够必须手动设置足够大的上限否则光线会在某个反射点被判定为“传播结束”仿真结果里反射次数肉眼可见地减少。2.2 组件配置光源、反射镜与探测面VirtualLab Fusion里建模Herriott池需要用到这几类组件光源、反射镜、孔径/挡光板和探测器。光源我习惯用高斯光束模型波长设为吸收谱线对应值束腰位置放在入射小孔外侧附近束腰半径按实际光纤准直器输出估算。反射镜直接用球面反射镜组件设定曲率半径R、镜面口径和反射率。高反膜层设为99.5%以上但要留一个出射机制否则光永远困在池内探测器收不到信号。实际实验中光通常从镜面上的一个小孔或边缘射出仿真里可以用一块不透明挡板模拟小孔或者直接在小范围内放一个探测器统计出射能量。组件布局上我会把坐标系原点放在M1入射镜的中心。M1位于z 0处凹面朝正z方向M2位于z d处凹面朝负z方向即M1和M2相对而视。光源放在M1后方偏下位置以一定倾斜角切入M1边缘的小孔。这里有个细节小孔位置与入射光轴必须仔细对齐入射光通过小孔后在池内以某个横向位置和角度开始往返初始横向位置和角度就是决定光斑图案的两个自由度。为了方便后续扫描我建议给所有参数命名时带上后缀比如d_mirror、R_curv1、tilt_x_deg。VirtualLab Fusion的参数管理器支持这种命名方式参数扫描结果表里一眼就能看出哪个参数影响了反射次数。坐标布局清晰之后再去跑追迹出问题也容易定位。3. 实操从零搭建Herriott池仿真模型3.1 初始参数定义与光束入射设置下面给出一个完整的实操流程以我最近做的模型为例。工作波长选择1550 nm这是光纤通信和气体检测都很常用的波段镜面曲率半径R取100 mm镜间距d先取100 mm满足共焦条件。具体操作步骤新建光学设置默认单位设为毫米波长输入1550 nm。在组件库中添加两个球面反射镜组件分别命名为M1和M2。设置M1曲率半径R 100 mm凹面朝向正z孔径半径12.7 mm反射率99.5%。设置M2R 100 mm位于z 100 mm处凹面朝向负z方向其余参数同M1。添加高斯光源束腰半径0.2 mm束腰位置在M1后方10 mm处波长1550 nm。在M1镜面上定义入射小孔x 2 mmy 0孔径半径0.5 mm。设置入射束方向向M2方向倾斜x方向倾斜角15 mrady方向倾斜角5 mrad。这里解释一下为什么入射角要同时给x和y两个方向分量。x方向的倾斜角决定光斑在水平方向上的铺开范围y方向倾斜角则让光斑轨迹在垂直方向上也产生位移两者合成后光斑才能形成完整的椭圆轨迹。如果只有一个方向的倾斜角光斑只在一条直线上来回移动反射次数虽然多但光斑会挤在一起出射位置和入射位置重叠实际很难分离也不利于后续探测器接收。设置入射小孔时孔径不能太大否则M1镜面的有效反射区域变小光容易从小孔漏出去也不能太小否则入射光束被硬切掉一部分产生额外衍射。0.5 mm半径的圆孔对0.2 mm束腰的高斯光束来说基本只影响远翼对追迹结果的干扰很小。3.2 运行场追迹与结果分析搭建完成后先跑一轮几何追迹看光路是否闭合。我用上述参数跑出来的结果光在M1镜面上形成了44个光斑M2镜面同样44个光斑整体呈椭圆排列椭圆长轴横向分布在x方向。总反射次数约88次两块镜面各44次池物理长度100 mm等效光程约8.8 m。这个结果和用旋转角近似公式算出的数量基本吻合差距在3%以内。物理光学追迹的结果要区别看待。场追迹下光斑不再是“几何点”而是有尺寸有强度分布的亮斑光斑中心位置与几何追迹一致但光斑直径会随着反射次数增加发生周期性变化。这个现象来自高斯光束在池内的自再现演化——每次反射相当于一次带有波前曲率半径变化的变换束腰位置在M1和M2附近周期性地收缩和扩张。如果只关心路径长度看几何追迹就够如果关心出射光功率或模式质量必须看物理光学结果。追迹结束后我会放三个探测器M1镜面探测器、M2镜面探测器、出射小孔探测器。前两个统计光斑分布第三个统计能量透过率。在反射率99.5%、反射次数88次的情况下理论反射总损耗约(1-0.995)^88看起来很小但实际因为光束发散和衍射损耗出射能量通常比入射能量低一到两个数量级。仿真里如果出射能量出现了“跳崖式”下跌多半是某个反射点上的光斑已经超出镜面口径光直接漏掉了而不是反射膜损耗造成的。3.3 参数扫描优化反射次数与光斑分离度Herriott池设计最花时间的就是参数扫描。我用VirtualLab Fusion的Parameter Run功能分别扫描镜间距d和入射角。先固定R 100 mm扫描d从90 mm到110 mm步长1 mm观察反射次数变化规律d/R旋转角估算光斑排列特征反射次数趋势0.90约65°光斑密集曲线偏窄反射次数偏多容易超出口径0.95约76°椭圆略扁反射次数适中1.0090°规则椭圆分布均匀典型设计点1.05约106°光斑分离度增大反射次数减少1.10约115°椭圆拉长出射容易分离适合中短光程扫描入射角时我固定d 100 mm从10 mrad逐步加到30 mrad每步1 mrad。一个很明显的趋势是入射角增大时反射次数总体增加但到某个角度后会出现反射次数“跳变”下降——这是因为光斑椭圆的长轴超出了镜面边缘大量光斑丢失追迹算法判定传播结束。这个拐点就是工程上的极限入射角再往上加角度的意义不大反而会造成光斑外围拥挤、能量泄漏。实际调整时没必要追求最大反射次数我通常把入射角设定在拐点下方10%左右这样等效光程足够长又保留了一些机械装配余量。参数扫描结果可以导成表格直接用于后续的结构设计。4. 常见问题与排查技巧实录4.1 光路发散、光斑逃逸的排查建模过程中最容易遇到的问题是“光路跑飞”——几何追迹里光只反射了几次就从镜面侧面跑了根本没有形成椭圆图案。我排查这类问题的顺序是先查镜间距d是否在稳定区间内。Herriott池要求0 d 2R也就是两个反射镜之间的间距不能超过两倍曲率半径否则光路在几何上就是发散的。d/R越接近1稳定性越好偏离1太多追迹必然发散。再查初始入射角。如果倾斜角设置过大光线经过几次反射后横向位移迅速累计很快就超出镜面孔径。解决办法是先设一个很小角度比如5 mrad跑通模型确认光路闭合后再逐步增加角度。确认反射方向设置正确。凹面镜的反射方向是向内还是向外软件里通常通过面法线方向控制。我自己就踩过这个坑M2的凹面方向设反了光线到达M2后直接反射回光源方向而不是形成往返振荡。4.2 仿真反射次数与理论估算对不上几何追迹得到88次反射理论估算却是90次这种偏差大概率来自追迹终止条件和入射点偏心位置的设置。VirtualLab Fusion在光斑位置到达孔径边界时会判定反射结束而理论估算假设镜面无限大没有边界限制。因此仿真反射次数略低于理论值是正常的工程上只要偏差在5%以内就可用。另一种情况是反射次数突然比预期少一半。这时检查入射小孔或探测器的尺寸它们如果被放在光路上作为挡光板会把本该继续反射的光提前截断。我在早期版本里曾在出射探测器上设置了大口径接收面结果它把M2镜面的一部分反射光也挡住了反射次数直接从44次降到17次。4.3 实用避坑清单最后整理一份我反复用到的避坑清单每一条都是实际调试中踩出来的反射镜的曲率半径和间距必须作为参数单独管理不要在模型里写死数字否则参数扫描时会乱套。入射光束的束腰位置最好放在入射小孔外侧不要放在池内否则场追迹时的初始波前曲率会影响反射后的光斑形态。追迹引擎的采样密度要足够。物理光学追迹时网格过大光斑边缘平滑度差网格过小运算时间剧增。一般先粗后细确认结果趋势稳定再加密。反射率不要设置为100%实用仿真里至少保留0.5%左右的损耗。完全无损耗模型不仅不符合实际还会让光斑强度分布失真。每次调整参数后先跑几何追迹快速验收再跑物理光学。几何追迹失败的情况下物理光学结果再漂亮也没有意义。记录每一组参数对应的反射次数和等效光程不要只盯着屏幕上的光斑图看。做过几十组扫描之后就明白了表格比截图可靠得多。写在后面这套建模流程我陆续跑了快两周最深的体会是Herriott池的仿真难点不在软件操作而在参数间的耦合关系。入射角、镜间距、镜面孔径这三者从来不是独立变量只调其中一个参数很难得到预期效果。我的个人习惯是先固定d R做基准模型把入射角作为主变量让光斑铺开之后再回头看镜面利用率最后才回过来调整d/R比值。你在跑模型的时候如果发现光斑分布不理想也可以试着倒过来先定入射角再反推d/R值。 VirtualLab Fusion里参数扫描本身不复杂真正花时间的其实是判断每一组参数为什么会出现某个结果这部分只能靠多跑多对比慢慢积累感觉。
返回列表