ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

20倍超高清变焦镜头设计:Zemax从初始结构到制造落地全解析

2026/10/3 5:20:09 拓冰建站 浏览量
20倍超高清变焦镜头设计:Zemax从初始结构到制造落地全解析 做光学设计这一行越做越会发现变焦镜头是光学设计里最“磨人”的一类活。20倍超高清变焦镜头更是把变焦比、像质、公差、制造这几件事全拧在了一起——方案阶段一个参数拍错后面优化三个月都救不回来。Zemax作为目前主流通用光学设计平台恰好是把“架构选型—像质优化—公差分析—与制造端衔接”整条链串起来最顺手的工具。这篇文章对着三类人写带项目的镜头光学工程师、准备用变焦课题做毕业设计或竞赛的光学专业学生以及需要和光学端做技术对接的结构、工艺工程师。我会按实际做过的20倍连续变焦项目套路来讲不绕理论推导重点讲每一步为什么这么做以及在Zemax里具体怎么操作顺带把宏脚本、自由曲面优化、非序列杂光分析上踩过的坑也交代清楚。等你看完至少能自己搭出一个能优化的起步结构并把它推到可以送交打样的状态。1. 项目概述20×超高清变焦镜头的第一性问题1.1 “20倍”和“超高清”到底意味着什么镜头设计一开始最容易犯的错就是拿到需求直接开Zemax。实际上在动手之前得先把“20倍”和“超高清”这两件事翻译成光学设计参数。“20倍”指的是变焦比也就是长焦端焦距除以短焦端焦距。常见的监控类20倍镜头焦距范围大约是8.5mm到170mm配合1/1.8英寸或1/2.5英寸的CMOS。如果配1/1.8英寸探测器短焦端要覆盖到广角视场半像高大约4.4mm到5.6mm短焦端焦距不能太长否则水平视场角不够用长焦端则受制于口径、入瞳直径和机械外径F数在长焦端往往会被推到F/4.5左右。“超高清”在工程上基本等于MTF要求。4K CMOS的像元尺寸通常在2.4µm到3.0µm之间对应的奈奎斯特频率大概在160lp/mm到200lp/mm。做设计时如果全视场在奈奎斯特频率处MTF还要高于0.3这已经是相当苛刻的要求。实际项目中我的经验是把设计目标定在“中心视场150lp/mm处MTF≥0.450.7视场≥0.35全视场≥0.25”留出公差和工艺的余量。毕竟设计做得再漂亮只要公差分析一过MTF掉个15%到20%是常态。很多人会把“20倍”简单理解成“长焦端把短焦端放大20倍”这没错但设计难点在于从8.5mm到170mm中间每一条焦距曲线上都要保持像质。这不是单个透镜的问题而是五个群组之间相对位置精确配合的问题。镜头在变焦时有一个群组往外走、另一个群组往里补的联动过程如果两个群组的位移曲线设计得不平滑像面会在中间焦段跑来跑去这就是所谓“变焦像面漂移”。Zemax的多重结构Multi-Configuration功能本质上就是在同时优化多个焦距下的系统状态。1.2 需求拆解像质、体积、成本三座山拿到需求之后不要急着做光学先把三个约束条件摆在桌面上像质目标、体积上限、成本敏感度。这三个东西相互撕扯变焦比越大撕扯越狠。镜头总长是第一个大矛盾。对于8.5mm-170mm的20倍变焦镜头如果你跟结构工程师说总长可以做到170mm那光学设计会轻松不少如果对方要求控制在130mm以内你就必须在变倍组和补偿组的焦距分配上动脑子甚至要上非球面来压镜片厚度。我的经验是总长和长焦端焦距之比最好别大于1.6一旦超过这个值像差校正会非常吃力。成本敏感度直接影响玻璃选型。监控类量产镜头对成本敏感设计时会回避昂贵的高折射率镧系玻璃尽量用常见的环保玻璃牌号比如H-K9L、H-ZF52、H-LAK系列。如果是做高端广播级镜头玻璃成本占比可以放宽能上低色散玻璃就上能上非球面就上因为客户对分辨率的要求更刚性。这里送一句话在项目启动会上把玻璃成本定下来比优化阶段反复换玻璃要省太多时间。还有一项经常被忽略的是后焦距和法兰距。如果是C接口法兰距17.526mm后焦还要留出滤光片和防护玻璃的位置如果是定制的方形接口也要和结构端商量好。Zemax里可以用后焦操作数TTHI或者主面位置来约束但别等到优化后期才加入这个约束否则会出现“像质极好但装不进相机”的悲剧。2. 架构骨架选型比优化更重要2.1 机械补偿为什么是连续变焦的主流变焦结构大体分两类光学补偿和机械补偿。光学补偿靠若干个可移动的群组按固定比例移动结构简单但像面补偿不彻底适合小变焦比机械补偿则用凸轮驱动多个群组产生非线性位移通过精确控制群组间隔来实现像面稳定是20倍以上连续变焦镜头的主流。机械补偿的标准形态是“四群组”或“五群组”结构前固定组负责把大视场光线收拢变倍组通过移动改变系统焦距补偿组做非线性移动来稳定像面后固定组负责中继成像并平衡像差。有些高倍率镜头还会加一片“对焦群组”也就是所谓的浮动对焦用来解决近距离对焦时像质劣化的问题。在Zemax里建立机械补偿结构并不是简单摆几片透镜就完事而是要在高斯光学层先把每个群组的焦距定出来。我喜欢先用旁轴透镜或者直接用理想面Paraxial搭建一个高斯结构验证变焦曲线平滑、像面位置稳定之后再把理想面替换成真实透镜。这个过程看起来多了一步实际能帮你在半小时内判断一套架构可行与否而不是在真实镜片上苦调三天。2.2 用Zemax镜头库和专利结构做初始起步初始结构可以从三个地方来公司过往相似项目的积累、Zemax自带的镜头库Lens Catalog、公开专利里的变焦结构。对新手来说最稳妥的是从Zemax镜头库里找到一个“倍率接近、F数接近、波长接近”的变焦镜头作为起点然后缩放。缩放不是把焦距乘个系数那么简单。Zemax里有两个常用方向一是保持F数不变把焦距按比例缩放所有空气间隔和曲率半径统一乘缩放因子二是如果靶面尺寸变了还要同步调整视场角设置。实际操作中我会将整个系统的所有面曲率半径保存为一个缩放组利用Zemax的“Scale Lens”功能或者自己写宏批量乘然后把像高设置为目标值再开始优化。对比项短焦端长焦端备注焦距8.5mm170mm20×F数F/2.8F/4.5长焦端受口径限制视场角约60°约3°按1/1.8英寸靶面估算MTF目标150lp/mm≥0.4150lp/mm≥0.35全视场≥0.25用专利结构起步时有个细节旧的专利数据往往用波长为587.6nm的d光优化现代CMOS的响应峰值在550nm附近但波长权重还是要覆盖可见光波段。Zemax的波长设置可以直接用F,d,C光或者按探测器量子效率曲线自定义波长和权重。我一般设三个波长486nm、587nm、656nm权重按0.5、1.0、0.5来色差校正目标以d光为主。3. Zemax里的系统搭建与第一轮优化3.1 坐标系、波长与像面设置的一次到位在Lens Data Editor里搭初始结构时最先要检查的是系统孔径System Aperture。变焦镜头建议用“Image Space F/#”作为孔径类型因为在变焦过程中F数会随焦距变化如果你设成“Entrance Pupil Diameter”长焦端会自动换算出一个很大的入瞳直径手动管理很麻烦。用像方F数配合多重结构里的F数控制能保证长焦端不至于跑到F/1.8这种不现实的状态。波长设置就用上一篇提到的F,d,C对应Zemax波长序号是0.486、0.587、0.656。视场设置建议用“Object Height”或者“Image Height”因为CMOS靶面是固定尺寸用视场角表示在长焦端会变成一个很小的角度操作上不方便。像面用1/1.8英寸半像高4.4mm典型视场点设为0、0.5、0.7、1.0权重按1、0.8、0.6、0.5来。这个权重不是随便拍的因为边缘视场天然难校正如果权重给太高优化器会牺牲中心视场去追边缘最后两边都做不好。玻璃材料在初始阶段先统一用模型玻璃Model Glass也就是先不管真实牌号用折射率和阿贝数先凑合等优化到局部收敛后再替换成真实玻璃。很多人一上来就用真实玻璃结果系统在优化中因为玻璃库限制卡死替换回去又发现像质反弹。先用模型玻璃跑通架构再逐步替换是更省力的做法。3.2 多重结构编辑器把“变焦”翻译成Zemax语言变焦镜头在Zemax里不是单一系统而是多个“结构”组成的集合。比如你要覆盖8.5mm到170mm至少建立5到7个变焦位置8.5mm、20mm、40mm、80mm、120mm、150mm、170mm。结构越多优化越慢但变焦曲线的控制越精准。我常用6个结构兼顾速度和曲线上关键节点的检查。在多重结构编辑器Multi-Configuration Editor里每个结构要独立控制变倍组和补偿组的厚度。举例来说如果第2片到第3片之间是变倍组间隔第4片到第5片是补偿组间隔那就在第一行添加THIC操作数对应“厚度随结构变化”然后逐结构填入不同的间距值。填完之后用Zemax的“Update”按钮看看每个结构下像面位置是否还在如果出现像面漂到天上那就说明间距值设错了。这里的核心技巧是用好“变量带”原则在初始阶段只把变倍组和补偿组的空气间隔设为变量其他群组内部间隔暂时冻结。等系统整体趋向合理再逐步放开其余间隔。如果一开始就全部放开优化器会在无数个局部极小值里乱撞最后出来的结构往往怪异很难加工装配。3.3 评价函数怎么搭才不容易把自己绕进去第一轮优化的评价函数不需要太复杂。我会用Zemax默认的RMS Wavefront作为优化目标因为变焦系统的像差校正最终要保MTF而波前差和MTF之间是傅里叶变换关系用波前差作为中间指标更平滑不容易出现局部极小。等系统收敛到一定水平再切到RMS Spot Radius去做能量集中度优化或者直接用FFT MTF操作数来针对特定频率做硬约束。在优化操作数里除了默认评价函数必须加四个硬约束EFFL操作数把短焦端焦距锁定到8.5mm长焦端锁定到170mm。变焦镜头的“变焦比”是靠群组移动实现的焦距本身不是变量但优化过程中焦距会跑偏所以要显式控制。TTHI操作数限制系统总长比如小于150mm。后焦约束用MNCA或MXCA控制最后一面到像面的距离保证法兰距和滤光片空间。边缘约束用MNCG和MXCG控制镜片中心厚度和边缘厚度的最小值防止优化出中心厚度为负、边缘厚度为0.1mm这种根本没法加工的结构。这一轮优化我习惯用阻尼最小二乘法DLS加锤击优化Hammer Optimization交替进行。Zemax的Optimize Optimization里先跑本地优化100到200次看变化曲线是否收敛如果收敛后像质还不错再开锤击优化让系统跳出局部极小。锤击优化是全局优化的一种适合用来搜更大的解空间但它不能替代本地优化的精修。实际项目中我的节奏是“锤击半小时本地精修两小时再锤击半小时”。4. 进阶阶段扩展多项式、衍射仿真与像质守住4.1 扩展多项式和自由曲面该用还是不该用20倍变焦镜头做到后面往往会遇到“球差、场曲、像散同时压不住”的时刻。这时候有人会把眼光投向非球面甚至自由曲面。Zemax里的扩展多项式Extended Polynomial表面是一种常用的自由曲面建模方式它把面形描述为一系列x、y的多项式项可以在近轴球面的基础上叠加高阶非球面偏差。但我要说的第一句话是自由曲面不是万能的能不用就不要用。变焦系统本身已经是一个高复杂度系统你再引入非球面自由度暴增优化时间变长、公差敏感度变高、加工成本上升。对于20倍变焦镜头我的经验是优先在口径较小的后固定组引入偶次非球面因为口径小非球面加工和检测相对可控前固定组和变倍组尽量保持球面否则凸轮加工和装配时对偏心太敏感很容易出现“设计MTF0.5、实测MTF0.2”的惨剧。如果确实要上扩展多项式建议做法是先用偶次非球面Even Asphere只加4阶和6阶项如果还不够再尝试扩展多项式但把高次项限制在10阶以内并把变量控制在两个面上。第十二项以上的自由曲面项对像质的提升极其有限但对制造工艺的杀伤力却是致命的。4.2 衍射干涉仿真从MTF到PSF的“最后一公里”超高清镜头只看几何MTF是不够的因为几何MTF在光学系统接近衍射极限时会失真还需要用衍射MTF来验证。Zemax的分析计算里FFT MTF是基于光瞳函数做傅里叶变换得到的它能把衍射效应考虑进去。我在设计中期会同时打开几何MTF和衍射MTF如果两条曲线偏离很大说明系统还有明显的像差没有被校正如果两者基本重合说明系统已经接近衍射极限再优化也没太大意义。这里还涉及到一个很多新手会问的问题Zemax怎么仿真衍射干涉其实在序列模式下用PSF点扩散函数分析就能看到衍射效应。PSF的截面形状能直观告诉你能量是怎么分布的中心如果是规则的艾里斑说明波前质量不错如果旁边出现明显的旁瓣或者拖尾那就可能是高阶像差或者渐晕导致的。干涉相关的分析在Zemax里通常用波前图Wavefront Map或者条纹图Interferogram来看Zemax的Interferogram分析能模拟出干涉仪的条纹方便你把设计结果和实测干涉条纹做对应。如果用衍射光学元件那就再复杂一点。衍射面在Zemax里可以用Binary Optic 2表面建模它的相位分布可以写成多项式。但我要提醒一点变焦镜头里加衍射面要慎重衍射效率随波长和入射角变化剧烈很容易在广角端产生色散杂斑。如果客户没有明确要求设计大部分时候用传统折射元件更稳。5. 宏脚本实战从报错到批量控制5.1 “unknown symbol getthickness”到底错在哪在Zemax里写宏脚本做批量操作是提升变焦设计效率的最大捷径。但有相当多人第一步就卡在报错上尤其是这句unknown symbol getthickness。这句话的字面意思是脚本里出现了一个Zemax宏语言不认识的符号。很多从其他语言转过来的工程师习惯性联想“获取厚度”应该叫 getthickness但Zemax的ZPLZemax Programming Language根本没有这个名字的内置函数。ZPL不是面向对象的语言它是一套类似BASIC的脚本语言所有函数都是固定命名的。在ZPL里获取某个面的厚度正确的函数是 THIC()。比如! 获取第3面的厚度 t3 THIC(3) PRINT Thickness of surface 3: , t3如果你想在很多个结构里批量读取THIC()可以直接和当前多重结构关联无论切换到哪个结构它读出来的都是当前结构的厚度。这一点很关键因为变焦镜头最常干的事情就是“在每个结构下提取间隔用来画凸轮曲线”。如果函数名敲对了还是报unknown symbol那大概率是版本问题。Zemax的不同版本ZPL函数名有细微差别老版本里没有的函数在新版本才有。检查一下你写的函数在对应版本的Zemax手册里是否存在或者干脆换用更通用的方式比如通过优化操作数接口OPTRETURN来间接获取厚度数值。5.2 用宏批量提取群组间隔和生成凸轮数据变焦镜头的凸轮曲线设计本质上是把变倍组和补偿组的位移随焦距的变化关系提取出来再交给结构工程师做凸轮槽。这个过程用Zemax界面手动一个个读数据既慢又容易错写成宏就一劳永逸。我经常用的宏逻辑是这样的先定义一个数组把6个结构的焦距值和关键群组间隔存下来然后循环遍历每个结构用THIC()读出变倍组间隔和补偿组间隔最后把结果写入外部文本文件。! 导出变倍组间隔与补偿组间隔 OUTPUT zoom_curve.txt count 5 FOR i 1 TO count SetCurrentConfig(i) ! 切换到第i个结构 PRINT Config , i PRINT Variator gap: , THIC(3) ! 第3面厚度是变倍组间隔 PRINT Compensator gap: , THIC(5) ! 第5面厚度是补偿组间隔 NEXT OUTPUT CLOSE这里要特别提醒SetCurrentConfig这个函数在不同版本里的用法不完全一致。有些版本用“SETCONFIG”有些版本用“SetCurrentConfig”写之前先查一下帮助文档。还有写完宏以后先用小规模数据测试比如只读取前两个结构确认输出正确再放开全部结构免得脚本跑完才发现厚度读错了面白费功夫。宏脚本更进阶的玩法是结合Zemax的优化操作数做自动约束控制。比如你希望变倍组的移动距离在每个相邻结构之间保持单调平滑可以在宏里计算相邻结构的厚度差值如果差值非正就输出报警。这样在设计阶段就能发现凸轮曲线有没有“回折”而不用等结构端加工完才发现运动卡顿。6. 公差、鬼像与制造落地6.1 公差分配设计再好看工艺过不了就是零很多项目死在最后一步设计优化得风生水起一到公差分析就崩。变焦镜头因为有多个可移动群组公差敏感度比定焦镜头高得多特别是变倍组的偏心、倾斜会直接转化为像面漂移和MTF下降。Zemax里的公差分析一般在Tolerance Sensitivity或Tolerance Inverse Limit里做。我习惯的流程是先用灵敏度分析评估每个公差项的贡献量找到前三名的敏感项然后针对敏感项做反极限分析算出允许的公差范围最后做蒙特卡洛模拟跑200到500个样本看MTF分布直方图。实际工程上光圈半径公差通常给3到5个圈λ/4到λ/8厚度公差±0.03mm到±0.05mm偏心公差0.02mm到0.05mm倾斜公差0.02°到0.05°。如果某一片镜片的公差特别敏感优先考虑换玻璃、改曲率半径、调整光焦度分配而不是强行把公差紧到±0.005mm——那会造成加工良率骤降成本成倍上升。还有一个常用补偿器是后焦或最后一枚镜片的轴向位置。在公差分析里添加一个补偿器Compensator例如后焦距离让装配时可以通过调焦环补偿一部分公差影响可以显著提高良率。6.2 非序列模式下的杂光分析分光棱镜、鬼像通通拉出来序列模式解决了成像光路的优化问题但制造阶段最怕的其实是杂散光和鬼像。Zemax的非序列模式Non-Sequential Mode就是用来干这个的。在变焦镜头设计里最容易出现鬼像的位置是镜片表面的残余反射。短焦端视场大、入射角大光线在透镜表面来回反射会在像面上形成缓慢移动的亮斑或者光晕。要检查这些鬼像可以把序列系统转换成非序列模式给镜片表面赋予反射率然后做光线追迹查看哪些表面组合形成了二次反射路径。分光棱镜在非序列模式里更是常客。比如激光雷达或者测量镜头里常需要把一部分光分出来建模时用两个矩形体拼成一个分光棱镜中间夹一层半透半反膜。要注意的是非序列模式下光线和膜层的相互作用比较复杂如果膜层设置不对追迹结果会严重失真。我的建议是分光膜用镀膜文件Coating File来定义而不是简单的透过率/反射率参数这样才能准确模拟偏振和角度依赖。鬼像分析的另一个实用工具是Zemax的“Path Analysis”它可以直接列出哪些光线路径从哪个表面反射后到达像面。做变焦镜头时我通常会针对长焦端和短焦端各看一遍鬼像路径重点排查镀膜反射率较高的球面镜片。发现鬼像能量过高的面就通过优化曲率半径或者改变镜片空气间隔让鬼像焦点落到像面之外。6.3 制造图纸、样件测试与指标对齐设计冻结之后要输出一份能指导生产的“光学制造规格书”。这份文档至少包含每片镜片的曲率半径、中心厚度、边缘厚度、口径、面形精度、光洁度以及装配后的各群组间距公差、偏心要求、镀膜波段和反射率指标。Zemax里可以用“Lens Data Editor”导出完整数据配合结构端的3D模型文件一起评审。样件测试阶段最常出现的问题是“设计MTF和实测MTF对不上”。不要慌逐个排查先看干涉仪测出的面形PV值和RMS值是否在公差范围内再看装配完成后的FLIR或传函仪测试环境是否统一了光圈和视场最后检查有没有杂散光把MTF低频拉低。这三点排查完80%的对不上都能定位。7. 常见问题与排查技巧速查表下面这表格是这几年我在Zemax实战中被问过最多、自己也踩过最多的问题合集直接抄作业就行。问题现象可能原因处理方式ZPL报错 unknown symbol getthickness函数名不存在改用THIC()或OPTRETURN()读取厚度优化后MTF上不去初始结构不合理或权重分配失衡回到高斯光学层调整光焦度分配减少高阶非球面权重变倍组移动时像面漂移补偿组移动曲线不平滑用宏检查相邻结构组间距重新设计补偿位移曲线公差敏感度极高某个群组光焦度过大将光焦度分散或引入非球面降低敏感度非序列模式分光棱镜光强不对膜层参数太简单用镀膜文件偏振选项精确建模衍射MTF明显低于几何MTF像差尚未校正到位继续优化波前差或检查有无大渐晕软件许可证无法连接环境配置或服务未启动检查正版授权配置、网络端口和服务状态按官方文档重新配置镜头实测MTF和设计差很远装配偏心或面形超差用干涉仪复测面形排查群组装配的倾斜偏心这里再啰嗦一句Zemax只是一个工具真正决定成败的还是对系统架构的判断。20倍超高清变焦镜头不是靠某一个魔法优化参数做出来的而是靠一次一次迭代、一步一步把公差和工艺的余量吃进去。做变焦镜头设计这几年我最明显的感受是光学设计从来不是“画一条漂亮的MTF曲线”就完了尤其是20倍这种高倍率变焦每一步都要为后面的制造留后路。纸上谈兵的自由曲面、不计成本的玻璃组合最后多半会在产线面前低头。用Zemax做项目就要习惯“优化数据和公差数据一起看”习惯把凸轮曲线导出来给结构工程师看习惯拿非序列模式把鬼像一个个揪出来。这些功夫花在前面后面打样和量产才能少踩坑。最后再分享一个小技巧每做完一个变焦项目把当时的初始结构、评价函数模板、宏脚本都归档好下个项目的起步速度会快很多——光学这行经验就是这么一点点攒下来的。