Zemax热分析实战:多重结构优化全温区镜头像质

发布时间:2026/9/18 19:19:07
Zemax热分析实战:多重结构优化全温区镜头像质 做光学设计的朋友应该都有过这种经历镜头在20摄氏度的光学平台上测出来MTF曲线漂亮得能当壁纸一到高低温箱里就糊成一片。这不是装配问题也不是镜片加工问题而是温度对光学系统的三重打击——折射率漂移、镜片几何尺寸变化、机械结构件伸缩。Zemax里的热分析本质上不是把系统丢进一个“热力学求解器”而是利用多重结构编辑器Multi-Configuration Editor把不同温度状态模拟成多个结构再靠评价函数编辑器里的操作数去衡量和优化每个温度下的像质。这篇文章我就把自己在实际项目中跑通的流程、踩过的坑以及一些比较省事的操作数配置经验整理出来主要面向用Zemax做镜头设计、尤其是对全温区像质有要求的工程师。1. 热分析到底在分析什么1.1 温度影响光学系统的三个核心路径先说原理。一个光学系统放在高低温环境里性能变化主要来自三个层面。第一个是材料折射率变化。每种光学材料的折射率都随温度改变工程上习惯用折射率温度系数dn/dT来表示单位一般是10⁻⁶/°C。普通冕牌玻璃的dn/dT在2到5之间影响相对温和但到了红外波段像锗这种常用材料dn/dT高达396×10⁻⁶/°C几乎是可见光玻璃的一百倍。这就是为什么红外镜头对温度这么敏感一个40度的温差足以让焦点跑出去好几毫米。第二个是光学元件本身的几何变化。镜片的曲率半径、厚度都会随温度线性变化公式很简单R_new R * (1 α * ΔT)t_new t * (1 α * ΔT)其中α是镜片材料的线膨胀系数。这个变化量看起来不大比如直径50mm的镜片α7×10⁻⁶/°C温度变化60度半径变化才0.02mm量级但光学系统对毫米级的离焦都极其敏感所以不能忽略。第三个是机械结构件的伸缩。镜筒、隔圈、压圈这些结构件用的材料通常和镜片不同热膨胀系数也不同。最常见的情况是铝合金镜筒α约23×10⁻⁶/°C配合光学玻璃镜片镜筒膨胀得比镜片快导致空气间隔改变。这个空气间隔变化量恰恰是热离焦的主要来源之一。还有一个容易被忽略的点非球面镜片在温度变化下面型并不是简单按比例缩放。用扩展多项式或泽尼克面型描述的镜片高次项的热变形非常复杂除非有有限元分析FEA数据导入否则在Zemax里一般只能做近似处理。这个后面在第六章单独说。1.2 为什么用多重结构而不是新建几个文件很多初学者会问既然不同温度下参数不同那直接复制三个工程文件分别改参数不行吗技术上可行但工程上非常不推荐。原因很简单。用多重结构编辑器你可以在同一个文件里并列保存多个温度状态每个状态叫一个Configuration结构。这样做有三个直接好处第一优化时可以同时参考所有温度状态的像质评价Zemax会把各结构的评价函数值加权汇总成一个总评价值。你调整镜片曲率半径时能一眼看到它对高低温像质的影响不会顾此失彼。第二维护成本低。改一次镜片材料所有结构同步更新不用在三个文件里来回改。如果后续要调整镜筒材料、厚度也只需要在多重结构操作数里改一个值。第三方便对比分析。你可以在同一个分析窗口里叠加显示不同温度下的MTF曲线、点列图或波前图判断哪个温度是极限工况针对性地做优化。多重结构的本质是“同一光学系统在不同环境条件下的状态集合”。Zemax官方叫它Multi-Configuration老版本也叫Zoom因为最初是为了模拟变焦镜头的不同焦距状态。热分析只是它的一个经典应用场景。2. 多重结构编辑器实操2.1 建立温度结构列在Zemax的序列模式下打开多重结构编辑器的路径是Editor → Multi-Configuration Editor或者直接快捷键F6。里面默认只有一列Configuration 1代表当前系统状态。要做热分析先得添加几个结构列。我常用的做法是配三个结构低温、常温、高温例如-40°C、20°C、60°C。具体温度范围看产品指标车载镜头一般-40到85安防镜头-40到60实验室仪器可能只要10到40。别贪多三个结构足够覆盖大多数情况结构太多反而拖慢优化速度。添加结构列的方法是在多重结构编辑器菜单栏里选Insert Configuration或者右键选择添加配置。每个结构就是一行一行的操作数设置的组合。关键一步来了在每一列里插入TEMP和PRES操作数。具体操作是在多重结构编辑器的Editors菜单下选择Insert Operand输入TEMP然后分别在三个结构列里填入-40、20、60。同理插入PRES设置标准大气压101325Pa如果产品有高原使用要求可以改成对应气压值不过一般不用动。这里必须强调温度操作数和系统温度是有区别的。你如果在System Explorer里改了全局温度那是给材料折射率计算用的环境温度而多重结构里的TEMP操作数是针对特定结构的。两者最好保持一致否则会出现你明明建了热分析结构结果材料折射率根本没变的诡异情况。2.2 材料参数与镜筒间隔的更新设置好TEMP后Zemax会自动根据材料库里的折射率温度系数更新对应结构的材料折射率。但这里有个大坑Zemax并不会自动更新镜片的曲率半径、厚度和空气间隔。这些几何尺寸需要你手动通过操作数设置。先看镜片部分。在多重结构编辑器中每一行可以指定一个操作数类型。常用的有CRVT曲率半径倒数即曲率可以按面序号设置不同结构的曲率值。THIC厚度包括镜片厚度和空气间隔。TCE镜片材料的线膨胀系数需要在玻璃库中预设。实际操作时我一般会用Zemax自带的“TCE”功能配合玻璃库里的线膨胀系数。在Glass Catalog中很多玻璃都带有热膨胀数据。如果你的镜片材料没有TCE数据就得手动在多重结构里输入每个温度下对应的曲率半径和厚度。手动输入的公式就是前面说的R_new R * (1 α * ΔT)。再来看空气间隔。空气间隔的变化主要取决于镜筒材料因为镜片之间的间隔是隔圈或镜筒台阶决定的。比如一段空气间隔L10mm镜筒材料是铝合金α23×10⁻⁶/°C温度从20°C变到-40°C那么这段间隔的变化量是ΔL 10 × 23×10⁻⁶ × (-60) -0.0138mm也就是说低温下这段间隔会缩短0.0138mm。这个量级对普通成像镜头可能还能接受但对高倍显微物镜或红外系统来说已经是需要重点补偿的离焦量了。我习惯的做法是先把所有镜片厚度和曲率半径按材料TCE算好填入多重结构空气间隔按镜筒材料的CTE计算后填入。这个过程可以用Excel批量生成公式也不复杂注意区分哪些间隔是镜筒决定的哪些间隔是由镜片本身厚度变化连带影响的。2.3 用ZPL宏批量提取数据做热分析时经常需要批量读取不同结构的参数来分析趋势。比如我想知道每个温度下某个面的厚度变化量或者某个结构的后焦距是多少。手动一个个看太慢这时候可以写一段简单的Zemax编程语言ZPL宏。比如下面的代码可以循环打印所有面的厚度FOR i 1, NSUR(), 1 PRINT Surface , i, thickness, GETTHICKNESS(i) NEXT这里NSUR()是获取面总数GETTHICKNESS(i)是获取指定面的厚度。如果你在宏运行时报错“unknown symbol getthickness”大概率是函数名大小写写错了或者当前版本不支持该函数。Zemax的ZPL函数名很多都是全大写的比如GETTHICKNESS但也有部分需要带引号参数建议先查一下对应版本的帮助文档。我个人的体会是ZPL宏更适合做“参数提取”和“批量计算”不适合做复杂的优化控制。真正要精细控制优化过程还是要在评价函数编辑器里手动加操作数这样才能保证每个结构、每个面的权重都在你的掌控之中。3. 操作数选型与点列图优化3.1 热分析最常用的评价函数操作数多重结构建好了参数也对上了接下来就是优化环节。优化时首先要明确一件事用什么指标来衡量每个温度结构的像质好坏。在热分析场景下我最推荐用点列图类操作数主要原因有两个。第一热离焦最直观的表现就是弥散斑变大点列图RMS半径可以直接反映第二点列图操作数计算速度快MTF类操作数需要做FFT优化迭代时耗时长。常用的点列图操作数有这么几个操作数全称说明RSCERMS Spot Size Centroid以质心为参考的RMS半径对离焦敏感最常用RSRERMS Spot Size Chief Ray以主光线为参考的RMS半径RSCWRMS Spot Size Width针对矩形探测器水平和垂直方向分别计算GEOEGeometric Spot Size Centroid几何弥散斑半径按最外缘光线计算其中RSCE是我最常用的主操作数。它计算的是所有光线在像面上的RMS弥散半径以质心为参考。当系统存在离焦时RSCE会迅速增大所以它是判断热离焦的最好指标。除了点列图有时还需要辅助操作数配合使用。比如你需要控制系统的焦距不随温度变化太大就加EFFL操作数需要控制后焦位置加TTHI总长操作数需要控制波前像差加WAVF或OPDX。热分析优化的本质是一个多目标优化既要保证常温像质好又要保证高温和低温像质不恶化。操作数的搭配组合就是为了实现这个平衡。3.2 热离焦的判断与补偿策略在做热分析优化之前建议先做一个“热离焦趋势分析”。方法很简单在三个温度结构下分别查看系统当前的像面位置用操作数TTHI系统总长或者直接看后焦。如果发现低温下系统焦点偏前高温下焦点偏后这种趋势就叫热离焦。热离焦量大约可以用这个公式估算ΔL Σ(Δn_i / n_i × L_i) Σ(CTE_material × L_i × ΔT)其中前一项是折射率变化引起的等效光程变化后一项是几何尺寸变化引起的焦点移动。实际上Zemax会替你算好这些你只需要在评价函数编辑器里添加多重结构下的RSCE即可。补偿策略上我常用的思路有三种第一种是光学无热化通过选择不同dn/dT符号的材料组合让正负透镜的温度效应互相抵消。比如可见光系统里用冕牌玻璃低dn/dT搭配火石玻璃高dn/dT红外系统里用锗搭配硫系玻璃或硒化锌。这种方法的优势是不需要额外机械件缺点是材料选择受限且对宽温度范围的补偿效果有限。第二种是机械被动无热化用一个或多个特殊材料的热补偿组在温度变化时主动移动某个镜片或镜组。在Zemax里实现时我会把补偿组所在的空气间隔设为变量并在多重结构里给不同温度设定不同的间隔初始值。优化时Zemax会找到合适的间隔变化规律配合镜筒材料实现补偿。第三种是主动补偿也就是电子对焦像面位置不变但通过移动镜头或传感器来对焦。这种在Zemax里做热分析时比较简单只需要保证不同温度下镜头本身的像质足够好离焦量可以通过调焦机构吃掉。3.3 多重结构下操作数的权重分配优化时Zemax会对不同结构的评价函数分别计算然后按权重加权汇总。默认情况下所有结构权重都是1这意味着常温、低温、高温在优化时“地位平等”。但在实际项目中权重分配是有讲究的。如果产品在常温下使用时间最长或者常温性能是客户验收硬指标我会把常温权重设高一点比如常温设1低温设0.7高温设0.8。如果产品在极端温度下也必须保证严格性能比如红外热像仪那就应该把三个温度权重全部设为1甚至给最恶劣温度更高的权重。权重怎么调整在评价函数编辑器里找到对应的结构权重操作数MFWMulti-Configuration Weight修改数值即可。也可以在评价函数编辑器的“Additional”里添加一个权重系数表达式。这里有一个我踩过的坑权重设置过大会导致优化器把所有精力放在个别结构上其他结构像质崩掉。我现在的习惯是先把权重都设为1跑一遍优化看结果如果某个温度结构明显拖后腿再针对性地提高那个结构的权重或单独优化那个结构而不是一开始就搞复杂权重策略。4. 优化策略与实战流程4.1 先常温定基再全温区联调多次实战下来我觉得最稳妥的优化流程是分步走不要上来就直接开全部结构一起优化。第一步在常温单结构下把镜头基础像质优化好。这一步的目标是让系统在常温下达到设计指标包括焦距、F数、视场、MTF或点列图要求。这一步不做后面全温区优化的地基就是歪的。第二步复制出三个温度结构并按照第二章的方法填入各温度下的材料参数和结构参数。这时候先不要急着优化先查看每个结构的RSCE和离焦量摸清温度变化对系统的伤害程度。很有可能你会发现常温下RMS半径为3μm高温下变成了20μm低温下变成了25μm这就能判断系统的热敏感元件是哪个。第三步确定补偿方案。如果离焦量主要由某一个空气间隔变化引起就把这个间隔设为变量让优化器去调整如果需要光学无热化就要更换或调整部分镜片材料组合。这一阶段建议只对补偿相关变量进行优化不要全系统释放变量。第四步全温区联调。确认补偿变量合理后再把所有温度结构加入评价函数同时优化。联调时建议只开少数关键变量比如补偿组的曲率半径和间隔其他参数锁定。这样可以避免优化器在多个结构之间来回“打架”出现常温变好但高低温更差的恶性循环。4.2 补偿组的变量设置与约束补偿组的设计是实现无热化的核心。我举一个典型红外镜头的例子来说明。假设一个中波红外3~5μm定焦镜头由一片锗正透镜和一片硒化锌负透镜组成镜筒材料是铝合金。锗的dn/dT很大温度升高时焦点会明显后移。为了补偿这个后移需要让某个空气间隔随温度增大而减小或者让某个负透镜的曲率变化来抵消焦点位移。在Zemax里的实现方式是在多重结构编辑器里把补偿组两个镜片之间的空气间隔假设是第5面设为变量。具体操作是在表面数据编辑器里把第5面的Thickness列设为Variable变量然后在多重结构编辑器里给三个温度结构分别指定该间隔的初始值。优化时Zemax会在各结构内独立调整这个变量使得每个结构下的RSCE都尽可能小。注意这里有个关键区别如果你在表面属性里把厚度设为变量它在所有结构里是同一个变量还是各结构独立变量默认情况下Zemax的多重结构功能允许你为不同结构设置不同的变量初始值但变量状态是全局的。也就是说变量会在所有结构中被同时优化但每个结构中的该参数值可以不同。这个机制正是我们做热补偿想要的间隔在不同温度下有不同的最优值。实际操作中要给这个变量设定合理的范围。方法是在变量设置里输入最小值和最大值比如某间隔从10mm常温到9.6mm低温之间变化那么变量范围就设为9~11mm。范围太大会让优化器瞎跑范围太小可能找不到最优解。4.3 实战案例全温区点列图优化以我之前做过的一个长波红外非制冷镜头为例。系统F数1.0焦距25mm探测器像元尺寸17μm要求全温区-40°C到60°C80%能量集中在1个像元内。初始设计在常温下RMS半径为8μm表现不错。但建立热分析模型后发现60°C时RMS半径飙到22μm-40°C时更是到了28μm完全不合格。分析离焦趋势后确认主要贡献是锗镜片的dn/dT过大。我采取的补偿方案是在中部加入一片硫系玻璃负透镜并把后组一个空气间隔作为热补偿组。在多重结构里设置三个温度结构评价函数使用RSCE作为主要指标权重常温1、高低温各0.8同时用EFFL把三个结构的焦距约束在25mm±0.1mm。优化迭代了大约200次后结果如下温度结构优化前RMS半径优化后RMS半径-40°C28μm14μm20°C8μm7μm60°C22μm12μm虽然没达到最初常温8μm的完美水平但全温区最差值从28μm降到了14μm已经能满足17μm像元尺寸的要求。这个案例充分说明了多重结构优化对热分析的价值你不能只追求常温下的极致像质而是要让系统在全温区内保持可用的成像性能。5. 常见问题与排查技巧实录5.1 结构间数据不同步有次优化时我发现只改了常温结构的数据高温结构的数据纹丝不动。检查了半天发现原因是我在表面数据编辑器里直接改了曲率半径而没有在多重结构编辑器里同步更新对应操作数。如果你通过多重结构编辑器设置了某个面的CRVT或THIC那么你在表面数据编辑器里修改的数据可能会被多重结构覆盖。反过来如果多重结构里没有定义这个面的操作数那么表面数据编辑器里的修改就会对所有结构生效。搞清楚这两者的优先级很重要。我的经验是做热分析时凡是与温度相关的参数曲率、厚度、空气间隔全部统一在多重结构编辑器里管理表面数据编辑器只负责常温状态。这样能避免数据不同步的问题。5.2 高低温像质几乎没变化如果你建好了多重结构设置了TEMP跑了优化却发现不同温度下的像质几乎没有差别首先要检查玻璃库是否包含折射率温度数据。很多国产玻璃库或者自建材料库里dn/dT数据是空的Zemax自然算不出折射率变化。排查方法很简单在材料参数窗口里查看该玻璃的折射率温度系数是否非零。如果没有需要手动输入或者换用数据完整的玻璃库。另外还要检查镜片的TCE线膨胀系数是否设置正确如果镜片α0那曲率半径和厚度也不会随温度变化。5.3 优化陷入局部极小值多重结构优化时评价函数会在很高的维度空间里搜索非常容易陷入局部极小值。表现就是跑了半天评价函数值卡在某个数值下不去或者三个结构的RMS半径差距悬殊。我的排查方法是先把所有温度结构的变量数减少只保留补偿组的2到3个变量跑一遍看趋势。如果趋势正确再逐步增加变量。如果还是卡住就用Zemax的Hammer Optimization锤形优化或Global Search全局优化跳出局部极小值区间。注意全局优化非常耗时建议先用锤形优化配合合理的变量范围。5.4 ZPL宏报错“unknown symbol”之前调试ZPL宏时遇到一个很典型的报错unknown symbol getthickness。后来检查发现这个宏函数对大小写敏感正确写法是GETTHICKNESS()。还有一次是在旧版本Zemax里该函数根本不存在换成最新版才解决。做热分析时用宏提取数据的场景比较多我建议在使用GETTHICKNESS这类函数前先在宏编辑器里单独写一行测试代码确认函数可用再来写完整逻辑。否则一段长宏跑到一半报错排查起来非常浪费时间。6. 扩展反射式系统与衍射元件的热分析补充6.1 反射式系统的热分析特点折射式系统热分析主要看折射率和镜片尺寸反射式系统则完全不同。反射镜的曲率半径会随基底材料温度变化但因为反射不涉及折射所以没有dn/dT的问题。系统的热性能主要由反射镜基底材料、支撑结构材料和安装方式决定。在Zemax里做反射式系统热分析时我会重点关注两个方面一是反射镜曲率半径随温度的变化主要看基底材料如微晶玻璃、碳化硅、铝镜的CTE二是反射镜之间的间隔变化这和支撑结构密切相关。如果反射镜面型是泽尼克多项式描述的非球面温度引起的面型变化可以用Zernike系数扰动来近似更精确的做法是用有限元分析结果直接导入。6.2 非序列模式与分光棱镜的温度建模如果你的系统里包含分光棱镜、偏振分光棱镜或衍射光学元件温度的影响也会体现在不同层面。现在很多光电系统在Zemax非序列模式下做全系统仿真比如激光雷达的发射接收光路里有分光棱镜这时候温度变化会导致棱镜折射率变化进而改变光束偏转角度。在非序列模式下你可以为不同温度结构设置不同的材料折射率从而模拟棱镜角色散和偏转角的温度漂移。衍射光学元件的热效应比较特殊。衍射面的微结构周期和深度都会随温度变化但这在Zemax的序列模式里很难直接建模。我一般用二元面Binary 2或扩展多项式面型通过手动修改面型参数来模拟温度变化。精度要求高的项目最好结合衍射光学的热力学分析和FEA数据来做单纯靠Zemax操作数很难覆盖全部物理细节。最后分享一个我在实际项目中养成的习惯每次做热分析之前先把常温状态的最终设计另存一个版本作为备份然后另存一个新文件来做多重结构热分析。这样万一优化方向不对还能快速回退到原始设计不用痛苦地撤销几十步操作。另外多重结构优化往往需要反复试错建议每次调整权重或变量后都用RSCE快速看一眼三组温度下的点列图变化趋势再决定是否继续深挖。热分析这件事只要把几个结构的数据喂准了操作数权重摆平了优化器是能帮你找到那个全温区表现均衡的“甜点”的。