ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Zemax双胶合透镜优化实战:从单透镜到评价函数与玻璃替换

Zemax双胶合透镜优化实战:从单透镜到评价函数与玻璃替换 Zemax装好之后新建一个系统、加几个面、设个波长当然不难真正的分水岭在“优化”这一步。上一篇基础操作我已经把界面、光线追迹和像差概念理了一遍这一篇直接进入正题用单透镜和双胶合透镜把优化的整套流程走通。单透镜是理解“自由度”的极简模型而双胶合透镜是第一次真正用到“材料组合”来校正像差这两个案例吃透之后后面再看三片式、望远镜、目镜系统你会觉得套路都差不多。这篇文章适合两类人一类是刚学完Zemax基本操作、还没搞懂评价函数和优化器在干嘛的初学者另一类是已经能跑优化但总感觉结果不可控、动不动就跑出奇怪形状的进阶用户。我会把评价函数设置、变量选择、优化算法切换、玻璃替换这些关键环节全部拆开讲用的都是Zemax经典界面下的操作路径版本差异不大18版以后基本通用。1. 单透镜优化只有一个曲率半径能动怎么把像质压下去单透镜是整个光学设计里最容易被低估的东西。它结构最简单但优化逻辑恰恰是后面所有复杂系统的基础。很多人上来就把两个曲率半径全部设为变量点一下优化发现结果变化不大然后就开始怀疑软件有问题。其实不是软件的问题是你没搞清楚单透镜到底有几个有效自由度。1.1 先把评价函数立起来单透镜的优化流程和复杂镜头没有本质区别第一步永远是设置系统第二步永远是评价函数。系统设置里有一个容易被忽略的点光阑位置。单透镜做轴上成像时如果光阑离透镜很远视场光线会打得很偏产生大量彗差和像散但如果你只是练手做轴上点建议把光阑直接设在透镜前表面或者紧贴透镜这样主要像差就是球差优化过程非常干净。评价函数要从“默认评价函数”开始。路径是Editor → Merit Function Editor在编辑器的空白区域右键选择Insert Default Merit Function。这里有几个选项需要重点讲一下Optimization Function选RMS均方根还是PTW峰谷值。我的习惯是初期一律用RMS因为RMS对整体像差的统计性更好优化过程稳定PTW只盯最大误差点容易把优化带偏。Data选Spot Radius点列图半径还是Wavefront波前。我建议第一次做Zemax优化的朋友直接选Spot Radius直观而且在像差比较大的时候波前误差会出现相位卷绕优化器反而不好处理。Pupil Integration选Gaussian Quadrature然后设置Rings和Arms。默认给的3环6臂能用但如果你要更精确地压制球差这种轴对称像差我会把Rings加到6Arms加到8。注意环数越多评价函数里光线数量越多优化速度会变慢单透镜无所谓到了复杂系统要平衡一下。评价函数生成之后里面会有一堆操作数主要结构是一个权重操作数、若干光线追迹操作数比如TRAC、REAY这类、以及一个评价函数值操作数。初学者看到这一大堆数字很容易慌其实你不用管细节只需要知道一个核心逻辑评价函数的值越小像质越好。优化前看一眼右下角或者评价函数顶部显示的Merit Function值记下来优化完对比用。1.2 看清单透镜的极限在哪接下来设变量。单透镜的典型结构是面1曲率半径、面2曲率半径、厚度、后焦距。我的建议是第一次优化只把面1和面2的曲率半径设为变量具体操作是双击面1的曲率半径单元格在弹出的属性里把Solves改为Variable或者直接按快捷键CtrlZ。Zemax里变量列会变成V一眼就能看到。厚度先不设为变量是因为单透镜的厚度对像差的贡献远没有曲率半径大它更多影响的是透镜口径和中心厚度是否合理。如果你一开始就把厚度扔进变量池优化器很可能会为了补偿边缘光线高度把厚度压到1mm以下加工出来脆得一碰就碎。后焦距可以设为变量但要小心如果评价函数里没有控制焦距的操作数优化器会通过疯狂拉长或压缩后焦距来“作弊”造成点列图看起来好了但实际焦距根本不是你要的值。在Zemax里约束焦距最常用的操作数是EFFL。你可以在评价函数编辑器里插入一行EFFLTarget填50假设你要做50mm焦距Weight填1或者更大。注意权重不是越大越好过大之后优化器会优先满足焦距而牺牲像质。一般把焦距权重设在1~10之间和默认像差操作数的权重量级匹配就行。跑一轮Local Optimization点击Optimize按钮选择Local Optimization你会发现单透镜的RMS确实能降下去一点但很快卡住。原因很简单单透镜两个曲率半径的自由度本质上只够确定一个“弯曲量”和一个“焦距”。换句话说当你把焦距固定后其实只剩一个弯曲量能用来优化球差这个量再怎么调也只在某一弯曲形态下达到最优和“完美”差得远。更关键的是单透镜的色差是由材料本身决定的两个曲率半径完全管不到色差。所以单透镜的归宿永远是“勉强能用”当你发现点列图上红绿蓝三个波长的光斑错开一个明显的距离那就是色差在提示你该上双胶合了。2. 双胶合透镜优化第一次用两种玻璃互相“补课”双胶合透镜是经典光学系统里最常见的起始结构。它的最大功劳不是把球差压得更好而是同时搞定球差和色差这两件单透镜搞不定的事。原因不复杂一个正透镜加一个负透镜正透镜产生的色差是正的负透镜产生的色差是负的选对阿贝数组合两种色差直接抵消而光焦度因为正负相加仍可以保持为正。这就是双胶合最核心的“消色差条件”。2.1 双胶合消色差的底层逻辑在Zemax里做双胶合优化之前先把理论公式过一遍这样你在输入初始结构的时候心里才不虚。假设两个透镜的光焦度分别是φa和φb阿贝数分别是Va和Vb总光焦度φφaφb。要同时满足总光焦度要求和色差为零可以用这两个式子近似解出光焦度分配φa φ × Va / (Va - Vb)φb -φ × Vb / (Va - Vb)我实际算一个例子。假设总焦距50mm正透镜用BK7阿贝数约64.2负透镜用F2阿贝数约36.4那么Va减Vb大约是27.8。算出来正透镜的光焦度大约是总光焦度的2.3倍负透镜的光焦度大约是总光焦度的负1.3倍。转换成焦距正透镜焦距大约21.7mm负透镜焦距大约-38.5mm。这个结果说明一个规律双胶合里正透镜承担的光焦度明显高于系统总光焦度负透镜则是“帮倒忙”再拉回来。这也是为什么胶合透镜对玻璃折射率、面型加工误差都比较敏感。这个公式只给出光焦度分配不给出具体半径。从光焦度换算到半径就得依赖薄透镜公式φ(n-1)(c1-c2)其中c1、c2是两个面的曲率。设计者可以手动按薄透镜公式算出第一组半径也可以直接拍一个经验值再让Zemax去优化。我自己的习惯是初始半径不用太精细只要光焦度符号对数量级对优化器都能救回来真正决定成败的是后续的变量顺序和评价函数。2.2 初始结构从哪来实际操作时双胶合初始结构有三个常用来源。第一个是手算按上面的公式解光焦度再用薄透镜公式转换成半径。第二个是找现成专利或者Zemax示例文件改口径和焦距。第三个是用Zemax里的焦距缩放工具直接在系统孔径和后焦距上做Scale再到评价函数里用EFFL把焦距约束到目标值。我需要提醒一点手算初值的时候胶合面半径不要算成完全相等的正负关系也就是说正透镜后表面和负透镜前表面虽然胶合在一起半径数值是一样的但两个面在系统里其实是同一个面。在Zemax建模时通常是三条面记录正透镜前表面、胶合面正透镜后表面同时也是负透镜前表面、负透镜后表面。中间那个面的厚度设为两块玻璃之间的胶合厚度一般就是0。这一点很多人第一次会弄错在表面上输了两遍半径做成两个空气间隙的透镜那就不是胶合透镜了。选玻璃也值得多说一句。理论上只要Va和Vb差得够大色差校正能力就强这也是火石玻璃和冕牌玻璃组合流行的原因。但实际选择要看可见光还是红外、成本、加工性。可见光谱段里BK7配F2、BK7配SF2、H-K9L配ZF系列都是常见组合。Zemax的玻璃库里有大量Schott、CDGM、Ohara等厂家牌号但新手一开始不要被玻璃库的丰富程度迷惑先固定用一两对最常见的组合把优化流程走通再谈玻璃替换。2.3 变量、评价函数和优化器怎么组合双胶合在Zemax里的建模大概是这样的入瞳光阑面、正透镜前表面、胶合面、负透镜后表面、像面。波长建议设三条比如F486.1nm、d587.6nm、C656.3nm这样才能在评价函数里体现色差。视场的话做一个简单的轴上练习可以只设0视场但这样测不出彗差和场曲不太完整。我建议至少设置三个视场比如0、0.7倍、1倍也就是0、1.06°、1.5°这样的分布。变量设置的顺序比我一开始想象的重要得多。第一次优化曲率半径全部设为变量后焦距设为变量厚度暂时锁住。跑完看RMS是否还有明显色差结构如果有说明光焦度分配还不对这时候可以做两件事一是手动微调某个半径的初始值二是让玻璃进入优化。玻璃进入优化有两种方式。一种是把玻璃的折射率nd和阿贝数vd直接设为变量让局部优化器去“连续化”地调但这样得到的玻璃参数往往落到玻璃库之外只能作为参考不能直接加工。更实用的方式是Zemax自带的玻璃替换工具Tools → Optimization → Glass Substitution。它会在你指定的候选玻璃库里穷举可能的替换然后用替换后的结构重新优化。跑完之后会给出一个替换列表按优化后的评价函数值排序。这个工具太适合双胶合了因为候选玻璃就那么几片穷举速度极快。优化算法方面我建议双胶合先用Local Optimization跑几轮等评价函数值稳定了再切换到Hammer Optimization锤形优化继续压。锤形优化的特点是允许接受一些暂时变差的解用来跳出局部极小值对双胶合这种变量少、评价函数曲面相对简单的问题非常有效几秒钟就能跑很多次迭代。但注意锤形优化不是万能的如果评价函数里没有正确的约束它很可能给你找到一片厚度为负的“纸片”所以约束不能省。3. 评价函数里的门道操作数、权重和算法的配合Zemax的优化本质上是在做一件事调整你设为变量的参数让评价函数里的加权残差平方和最小。评价函数不是越小越好而是在你关心的指标上小在你不关心的指标上无所谓。所以评价函数的构造就是你作为设计者的“价值观”。3.1 操作数选择与权重技巧默认评价函数生成之后一般会在文件头部加一个权重操作数相当于是总开关。后面跟着大量光线追迹操作数比如REAY负责某一视线在某一面上的Y坐标TRAC负责某条光线的追迹数据。你需要自己追加的操作数通常包括这么几类焦距类EFFL、EFLX、EFLY。用来钉死有效焦距。总长类TTHI、OPLT、OPGT。用来限制系统总长或者某一段空气间隔。畸变类DIMX。控制视场畸变百分比双胶合阶段可以不用管但如果你做广角系统就一定要加。像差系数类SPHA、COMA、ASTI。直接约束赛德尔像差系数适合做“针对某项像差”的教学实验。色差类AXCL、LCHC。轴向色差和横向色差双胶合优化很值得把AXCL放进评价函数。权重怎么给才合理我的经验是约束焦距的一两个操作数权重给到1到10就足够了如果是公差类约束比如总长上限权重可以给到100以上因为这类硬约束一旦违反系统很难实际可用。千万不要每个操作数都给100那会直接把默认像差优化的效果冲掉。一个相对稳妥的流程是先不加任何额外约束跑一遍默认评价函数的优化看清系统自然收敛到什么状态然后把焦距约束加上去再跑一遍观察评价函数值增大了多少如果增大太多再考虑要不要换玻璃或者调整初始弯曲量。实际操作里我会在评价函数编辑器里用ControlInsert插入一行然后在Type列输入操作数名Target列输入目标值Weight列输入权重。Zemax对操作数名称的联想支持做得不错输入前几个字母会弹出候选列表这对不常背操作数名的用户非常友好。但也要知道有些老版本里插入操作数需要手动把求解类型从“Min”改成“Target”否则优化器只会做单边约束这里容易出“看似设了目标实际没生效”的坑。3.2 局部优化、锤形优化、玻璃替换的执行顺序执行优化的顺序可以总结成一句话先局部再锤形最后玻璃替换。从局部优化开始的原因是局部优化最快能迅速告诉你当前初始结构的“局部潜力”到底有多大。如果局部优化只跑了几步就收敛说明初始结构离最优解不远如果跑了很多步还在慢慢爬说明局部极值点离你很远这时候再用锤形优化去大范围搜索。锤形优化在Zemax里的按钮位置和局部优化相邻点开之后会弹出一个界面上面有一些选项。我一般把Maximum Number of Cycles设成几千实际上由于变量少它很快就能跑完。跑锤形的时候画面会不停刷新评价函数值持续往下掉这个过程相当解压但你要把注意力放在结果合理性上打开2D Layout看看镜片是不是变成了一片“新月形”中心厚度是不是为负光线是不是在某两个面之间来回反射。优化器不会替你判断结构是否可加工所有工程约束都必须你自己想办法加到评价函数里。玻璃替换一定要放在最后。原因很明显玻璃一旦换掉折射率和阿贝数同时变化相当于重新开始一次优化如果前面结构没收敛好替换之后会一团乱麻。玻璃替换工具的用法是先把你要换的那块玻璃设为变量在玻璃型号那一列双击选择Variable然后打开玻璃替换窗口指定候选玻璃库范围和替换后要执行的优化轮数。Zemax会对每个候选玻璃做一轮局部优化再把结果排序。我通常会选择前三个结果复制出三个新文件再分别跑一遍锤形优化最后看哪个组合同时满足像质和加工性。4. 实操案例做一个焦距50mm、F/5的双胶合透镜空谈太多不如直接走一遍完整流程。下面这个案例是我带初学者必做的“牛刀小试”所有参数都可以复现你跟着做一遍就知道整个优化链路长什么样了。4.1 设置系统参数打开Zemax新建一个空白系统。系统孔径选“Entrance Pupil Diameter”入瞳直径填10mm这样F数就是50/105。波长在System Options或者Wavelength标签页里选F、d、C三条可见光波长权重默认1比1比1。视场类型选Angle设置三个视场0度、1.06度、1.5度。1.5度的全视场对应像高大约1.3mm虽然不大但足够让优化器感受到“离轴像差”的存在。在面设置界面把光阑面STO放在最前面后面依次是表面1正透镜前表面、表面2胶合面、表面3负透镜后表面、表面4像面。注意Zemax里物体面和光阑面可以重合STO面本身可以设成厚度0这样入瞳就直接落在第一块透镜的前表面上实际系统里很多镜头也会这样设计。4.2 输入初始结构按前面公式计算BK7正透镜焦距约21.7mmF2负透镜焦距约-38.5mm。取BK7折射率1.517F2折射率1.620。为了省掉复杂的符号推导初始半径我给一组凑好的值正透镜前表面半径22mm胶合面半径-18mm负透镜后表面半径-48mm。这三个半径的光焦度分配是“正-负-小负”色差方向大致正确剩下交给优化器。厚度方面正透镜中心厚度3mm负透镜中心厚度2mm胶合面厚度0mm。后焦距先填40mm但要在评价函数里把这个位置设为变量因为优化过程中像面一定会移动。初始2D图出来之后看一眼光路有没有明显穿帮边缘光线有没有在某个面之前就聚焦。这一步虽然粗糙但能避免很多后期调试。4.3 两轮优化与结果判读打开评价函数编辑器插入默认评价函数RMS Spot Radius、Gaussian Quadrature、Rings6、Arms8。然后在评价函数末尾插入一行EFFLTarget50Weight5。把三个曲率半径和像面厚度设为变量局部优化跑一轮。初始Merit Function值不用紧张几十甚至上百都正常跑完之后看看RMS半径能不能压到100μm以内。第一次到这一步点列图通常会有明显改善但红蓝光斑还是分开的。这时候打开Longitudinal Aberration轴向像差图看纵轴上有没有典型“S形曲线”色差会呈现出不同波长曲线在近轴区域的分离。这说明光焦度分配还需要细调进入第二轮把三个曲率半径继续当变量把两块玻璃的厚度也设为变量但分别设置最小厚度2mm和最大厚度8mm防止优化器做出不切实际的薄片。这一步跑锤形优化一般跑几百个周期就够了评价函数值会再往下掉一截。最后做玻璃替换。我用Schott玻璃库把BK7替换候选换成N-BK7、H-K9L、N-SK16这样低色散的把F2的候选换成N-SF5、N-F2、SF2这样高色散的。替换之后跑一轮局部优化你会看到评价函数值可能又降一点这时候看最终点列图三个波长的光斑基本重合RMS半径如果到20μm以下对F/5的系统来说已经不错了。再顺手看一眼MTF曲线如果截止频率30线对处的MTF还在0.3以上这个双胶合设计就拿得出手了。5. 常见问题与排查技巧实录优化不收敛、结果奇怪、玻璃替换无效这些问题我几乎每隔几天就会在初学者群里看到一次。下面按概率从高到低整理方便你直接对照排查。5.1 优化不收敛和光线出界最典型的现象是点列图突然炸开光线在某一面之后完全散掉。这通常不是算法问题而是你在评价函数里没有限制“光线必须按预定路线穿过镜片”。优化器很“功利”它只关心评价函数数值如果某个变量调整让边缘光线打到镜筒上而你没设置遮挡它就会一路狂奔最后得到一套完全不可用的结构。解决办法有两个。第一个是把每个面都设置合理的半口径Semi-DiameterZemax默认是“自动”这个选项会让口径跟随光线自动变化可能掩盖边缘光线出界。你可以在每个面的口径属性里改成固定值或者“Solve To Marginal Ray”然后放大一点余量。第二个办法是在评价函数里加入边缘光线的高度约束比如用操作数REAY控制边缘光线在某个面上的Y坐标不小于某个正数保障通光孔径不悬空。还有一个很常见的坑系统焦距没有约束好。局部优化跑完点列图看起来不错但一查EFFL变了比如你明明要做50mm焦距结果优化成48.7mm。原因通常就是EFFL操作数没有插入或者插入后权重被设成了0。这个概率比我预想的要高很多。5.2 玻璃、色差与工具使用色差没消干净的情况我总结下来有三个原因一是玻璃组合阿贝数差不够大光焦度分配算出来是“弱消色差”的色差压不下去二是评价函数里根本没人管色差Spot Radius这个指标虽然间接包含色差但权重分散效果不如直接在评价函数里加一个AXCL操作数Target0Weight设为0.5到1让优化器专门去压轴向色差三是波长权重设置有问题三条波长如果权重不均优化器会优先保证权重最高的波长另外两个波长就“放飞”了。玻璃替换工具用的时候有一个细节候选玻璃库选得太大工具会跑很久而且经常推荐出一些价格离谱或加工困难的玻璃。我一般会先按折射率区间比如1.5到1.8和阿贝数区间比如25到65过滤一遍再把厂家限定在1到2家。如果是教学练手只选Schott的BK系列和SF系列就够了。另外替换完成之后务必再跑一轮锤形优化因为玻璃替换工具自身只做局部优化找到的未必是新玻璃组合下的最优结构。5.3 写在最后的一点经验做了这些年光学设计我用Zemax优化过的系统从单片透镜到十片以上的鱼眼镜头都有回头看单透镜和双胶合这一关过得是否扎实直接决定了后面能不能理解“自由度”这个概念。很多人一上来就想用全局优化去找结构结果找出来的东西既不能加工又看不懂原理就是因为缺少“把每个自由度意义搞清楚”的训练。我自己的习惯是先固定玻璃只优化曲率看像差类型怎么变化再把厚度放开看像差和总长怎么平衡最后才做玻璃替换。每放开一个自由度都要打开点列图和轴向像差图观察它到底改变了什么。这样做虽然慢但你对系统的理解会深很多而不是像黑盒一样乱撞。再补一句优化过程中记得随时保存副本特别是锤形优化之前一定要存一版锤形优化虽然大概率更好但偶尔也会把你原来一个挺不错的结构带偏留个后手总没错。
返回列表