6mm VGA定焦物镜CODE V设计:规格换算与MTF体检 简介CODE V 建立镜头、缩放镜头与像差曲线分析是光学设计从入门到实操的关键环节。这份实例文档面向光学工程初学者与刚上手 CODE V 的工程师以一个低价位定焦 VGA 数码相机物镜为完整案例从规格输入讲到起始点选取与结果评估。内容围绕新镜头向导展开按 F/#、半视场角与元件数在专利镜头库中筛选起点设定孔径光阑、波长权重与视场再用一阶近轴属性窗口核对有效焦距是否为 6mm并通过表面缩放操作完成镜头缩放随后结合畸变、相对照度、透过率与 MTF 像差曲线判断成像质量给出优化方向。案例规格涵盖 640×480 解析度、7.4μm 像素、3.55×4.74mm 像面、F/3.5 孔径与 IR 滤光片选型等。包内为 1 个 doc 文档约 45KB篇幅紧凑、便于随查随用已有 1346 人学习适合作为 CODE V 建模流程与像质评价的对照参考。1. 拿到「6mm 定焦、F/3.5、640×480」这份规格先别急着点优化一个低价位 VGA 数码相机的定焦物镜规格摊开其实就几行焦距 6mm、F/3.5 定孔径、对角线 6mm 的传感器、畸变小于 4%、17 lp/mm 处 MTF 过 85%。很多人拿到这种单子第一反应是随便导一个专利镜头、把焦距缩到 6mm然后挂上变量让它自己跑跑完发现 51 lp/mm 那条曲线糊成一片回头连是哪一步埋的雷都找不到。这个 CODE V 设计实例走的顺序刚好相反先把规格翻译成半视场角、截止频率、F/# 这几个硬数再用新镜头向导挑一个像样的起始点缩放到 6mm最后用光线像差曲线、点列图、畸变网格和衍射 MTF 给这个起始点做一次完整体检。适合手里装着 CODE V、想把「建立镜头—缩放镜头—看像差曲线」这条链路一次跑通的人也适合已经会点按钮但说不清每个数从哪来的人。2. 把规格翻译成输入参数半视场角 26.5° 和 67.6 lp/mm 是怎么算出来的规格表是给采购和项目看CODE V 认的是另一套语言。这一章做的事只有一件把「640×480、6mm、F/3.5」翻译成可以往对话框里敲的数字。翻译错了后面缩放到 6mm 也是白缩。2.1 用 h f·tanθ 把像面尺寸换成视场角传感器的有效成像面对角线是 6mm半对角线就是 3mm。有效焦距定在 6mm无穷远物距下的近轴关系是 h f·tanθ代进去 tanθ 3/6 0.5解出半视场角 26.5°。这就是后面填进视场设定页的最大视场角也是过滤器里那个「20~33」区间的由来。这里有个容易混淆的点CODE V 里的视场可以按角度定义也可以按像高定义两种方式的数值不是一回事。这个案例从专利库起步专利镜头的像高尺度跟 6mm 焦距对不上所以统一用角度定义视场更稳——角度在缩放前后不变像高会跟着焦距一起变。等你缩放到 6mm 再回头看近轴像高应该落在 2.99~3.0mm这个数就是半对角线 3mm 的验证。顺带做个规格自洽性校验我一般会花十秒算一下4.74mm 除以 7.4μm 等于 640.53.55mm 除以 7.4μm 等于 479.7跟标称的 640×480 对得上说明这份规格里的像面尺寸和像素尺寸是一套的不是抄错的。这一步省不得规格本身矛盾的情况在真实项目里并不罕见等到优化不收敛才回头查成本高得多。2.2 像素 7.4μm 决定 67.6 lp/mm 的截止频率CCD 阵列由一个个有限大小的像素构成设计阶段把它当成单个采样单元看就行。采样能分辨的最高空间频率取像素尺寸倒数的二分之一也就是 1/(2×0.0074) 67.6 lp/mm。超过这个频率的细节传感器本身分辨不出来光学系统做得再好也送不到后端。这条结论对设计的约束是光学 MTF 在 67.6 lp/mm 处不能已经掉到零否则合成 MTF 在这段频率上完全没有余量。规格里给的 17 lp/mm 和 51 lp/mm 两个采样点大约就是截止频率的四分之一和四分之三——一个盯大轮廓的对比度一个盯细节。低频低了一般是渐晕、杂散光或者面型精度的问题高频低了多半是残余像差没收干净。知道每个采样点归哪类问题后面看曲线才不会瞎猜。提示67.6 lp/mm 是这块传感器的死线不是设计目标。真正的设计目标要往回退让 51 lp/mm 处还有 25% 以上的余量给公差和装配留空间。2.3 一张能直接填进向导的清单把上面几步算完得到的就是下面这张表。我在做类似项目时会把它贴在工程文件旁边后面每一步操作都对着这张表核。项目数值填在哪 / 怎么验有效焦距 EFL6mmEdit Scale勾 Scale EFL 后填 6.0相对孔径F/3.5 定孔径孔径光阑页选 Image F/Number填 3.5最大半视场角26.5°视场设定页 Y 方向角度视场采样0 / 11 / 19 / 26.5视场设定页中间补两档波长与权重可见光波段589nm 权重 2波长设定页元件数1~3 片专利过滤器 Element Number几何畸变 4%畸变网格X 21.55° / Y 16.48°中心 MTF17 lp/mm 85%51 lp/mm 25%衍射 MTF上限 68、步进 17角落相对照度 60%相对照度分析渐晕透过率400~700nm 单镜片 80%透过率分析物距范围0.75m ~ 无穷远离焦 MTF 或按物距扫 MTFIR 滤光片1mm 厚红外截止片建模时作为平行平板加入表里最后两行是这个案例里最容易被跳过的物距从 0.75m 到无穷远意味着焦深必须够靠单一的 MTF 曲线看不出这件事IR 滤光片是块 1mm 厚的平板它会引入球差和轴向位移建模时漏掉仿真结果和实物就是两回事。3. 建立起始点并缩放到 6mm向导、LDM 与 Scale 的完整动作从零手搓一个三片式物镜是熟练工的活从专利库挑一个接近的再改是大多数人的路子。这一章把「挑—建—读表—缩放—复核」串成一条线每一步都落一个可核对的数。3.1 专利库过滤器范围一定要放宽走 File New在欢迎页点 Next选 Patent Lens。这个库里有一批年代久远的轴对称专利镜头用新镜头向导或者独立的专利搜索都能访问关键在过滤器怎么填。目标是 F/3.5、半视场 26.5°、元件数越少越好但填条件时我一般会松一档F/# 填 1~4半视场填 20~33元件数填 1~3。放宽的理由很实在——视场角从大变小的路好走从小变大的路很难走。想扩大视场往往要加元件、加非球面或者换玻璃等于重做而把大视场镜头的边缘裁掉一点或者把相对孔径收小代价小得多。同理起始点的 F/# 比目标更小更快是好事收光圈通常让像质变好反过来就难。按这组条件筛下来剩十几个候选。列表里那个半视场 27.5°、F/2.4 的镜头是比较有潜力的一类视场比我们要的略大光圈比 F/3.5 快接近一档两样都有往下调的余地。选中它点 Next 进下一步。3.2 三个页面的填法孔径、波长、视场孔径光阑页。下拉列表里选 Image F/Number填 3.5。为什么不填入瞳直径这里有个关键区别F/# 是个比值镜头缩放时它不变入瞳直径是绝对长度缩放时会跟着一起放大。你要是填了 EPD缩放到 6mm 焦距之后 F/# 就跑到别处去了得重新算一遍光圈纯粹给自己添麻烦。波长设定页。把 589.0nm 那一行的权重改成 2其余可见光权重留 1。权重只在优化里参与误差函数的加权对单次光线追迹没有影响——也就是说改权重不会让当前镜头变好或变坏它只决定后面优化时谁说了算。把主波长权重抬高是因为可见光中心波段的成像质量对这个应用最关键色差也主要靠它压。参考波长页。默认值别动。这个波长用来做近轴计算和参考光线追迹是整套一阶数据的基准改了它后面 First Order Data 里的数就跟你以为的不是一回事。视场设定页。选中第二视场右键菜单 INSERT 插入新行把 Y 方向角度依次填成 0、11、19、26.5。四档视场里0 是轴上26.5 是最大视场中间补 11 和 19 两档。常规做法至少要有 0、0.7 倍和全视场三档这里额外加一档中间值是为了控制像散这类与视场强相关的带状像差——只给三档采样像散在中间视场鼓起来的那个包很容易被漏掉等到看场曲曲线才发现就得回头重建评价函数。填完点 Next 走到最后一页点 Done模型正式进 LDM 表格。3.3 LDM 表格怎么读灰色格子、STOP 和带 S 的求解CODE V 里绝大部分操作的本质都是光线追迹而光线追迹靠的就是这张镜头数据管理表。表里一行是一个表面从物面开始到像面结束中间必然有一行被标了 STOP那就是孔径光阑限制轴上光束的那一面。只要没启用主光线对准任何视场的主光线都会穿过光阑中心。几个字段值得单独说Y Radius曲率半径是曲率的倒数。旋转对称面只有一个曲率用 Y 方向表示。Edit Use Radius Mode 勾不勾决定你输入的是半径还是曲率输错这一项后面全乱。厚度定义到下一表面的距离沿当前表面 Z 轴测量。注意某个面的厚度是灰的、旁边还带个小 S那是 Paraxial Image solve——程序自动调这个厚度让近轴边缘光线在下一面的高度为 0。它定的是近轴像位置不是最佳焦点。真正的像面位置是这一面厚度加上像面那一面的厚度通常的做法是把 PIM 求解和像面偏移离焦变量配合用前者定基准后者在优化里找最佳焦。Glass空白代表空气。填的名字可以是实际玻璃牌号也可以是虚拟玻璃——虚拟玻璃的折射率和阿贝数都能设成变量参与优化后面再用宏把它拟合回可采购的实际牌号。这个案例里先用虚拟玻璃把形状做出来是常见做法。Y Semi-Aperture默认由程序按所有视场、所有变焦位置的参考光线算出通光口径。起始阶段接受默认值就行等做相对照度分析时再回头调。还有一个提交机制上的坑值得提前知道带 OK / Cancel 的对话框不点 OK 就什么都不提交点了 Cancel 就是彻底没改而表面属性窗口和系统数据窗口没有 OK改动是即时提交的。所以你在表面属性里调完一堆参数随手点了个 Cancel 想放弃其实早就生效了。想确认到底提交了什么看命令窗口里滚出来的命令。3.4 Scale 对话框从 0.9528mm 缩到 6.0mm先看一阶数据。Display List Lens Data First Order Data输出的窗口里 EFL 大概率是 0.9528mm 这种量级——专利镜头是按它自己的尺度存档的不是错是没缩放到你的应用。缩放的动作是六步在 LDM 里点表面 1 的编号按住拖到像面那一行选中 1 至像面的全部表面Edit Scale 打开对话框确认范围显示的是 1 到 Image勾选 Scale Effective Focal LengthScale Value 里填 6.0点 OK回到 First Order Data 窗口点重算。缩放是等比例操作所有半径、厚度、半孔径一次性乘以 6/0.9528 ≈ 6.297。缩完 EFL 应该是 6.0mm近轴像高 2.99mm 左右跟期望的 3.0mm 差一点点属于正常。顺手 File Save Lens As存成 DigCamStart.len——这个文件是后面所有优化的基线命名带版本号我在类似项目里吃过没存基线的亏。复核项期望值对不上先查哪有效焦距 EFL6.0mm缩放时是否包含像面是否真的勾了 Scale EFL近轴像高2.99~3.0mm视场设定是否为 26.5°波长是否为参考波长相对孔径仍为 F/3.5孔径类型是不是 Image F/Number填了 EPD 的话这里一定跑偏元件口径与厚度不出现过小、过薄片缩放比例是否正确原专利镜头本身是否太紧凑总长与焦距量级匹配有无异常厚度或负厚度最后一行不是走形式。缩放到 6mm 之后某个镜片的中心厚度可能只剩零点几毫米口径也小到难以夹持——这种设计在软件里跑得通在车间里做不出来。判断标准要靠经验或者找做过类似系统的人确认太小、太薄、太弯的片子加工和装配成本都会往上跳。这一步花十分钟能省掉后面一轮返工。4. 像差曲线和 MTF给起始方案做一次体检报告缩放完成只是把尺度调对了跟规格还差多远完全不知道。这一章的分析动作目的不是把像质做好而是搞清楚「现在差在哪、往哪个方向优化」。4.1 光线像差曲线0.023mm 的自动比例在骗你Analysis Diagnostics Ray Aberration Curve选项名 RIM。横轴是瞳坐标纵轴是横向光线像差——同一视场点发出的某条光线与参考光线在像面上的交点距离理想透镜这条曲线应该贴着横轴。第一眼看的不是曲线形状是比例。工具自动定的纵向比例是 0.023mm也就是 23μm。拿它跟艾利斑比一下艾利斑直径约 2.44·λ·F/#取 λ 0.5μm、F/# 3.5算出来大约 4.3μm按原文的记法约 0.004mm。23μm 差不多是艾利斑的六倍说明这个起始方案的像差远没到衍射极限同时也说明曲线看上去「还行」很大程度上是因为比例被压扁了。判读的顺序是先看横向——哪个视场的曲线张得最开再看纵向——不同波长是不是分开成几束分开了就是色差最后看形状中间交叉、两端翘起这类特征对应球差一头大一头小是彗差两个视场的最佳焦点位置不一致就是场曲加像散。这些判断不需要精确计算看一眼就知道该往哪个方向加东西色差大就换玻璃或者加一片单色像差大就考虑非球面。注意快速像差曲线是宏实现的比例自动适配。任何时候拿两张图做对比先确认比例尺是不是同一个否则比较出来的结论全是错的。4.2 点列图与畸变网格先看比例条再看形状Analysis Geometrical Spot DiagramSPOT给出的是每个视场一簇光线在像面上的散布。这个镜头跑出来的结果是各视场点的大小大致相近、形状不同——大小相近说明各视场的像差量级差不多形状不同说明主导像差类型随视场在变。比例条显示 0.050mm也就是 50μm跟艾利斑再比一次同样是一个量级偏大的结果。有个现成的宏很好用spotdet.seq可以在点列图上叠一个方块或圆圈代表像元尺寸或艾利斑一眼就能看出光斑是铺满一个像素还是一小坨。位置的调用方式是在宏菜单的示例宏里找几何分析那组。场曲和畸变一起看Analysis Diagnostics Field Curves纵轴视场、横轴畸变百分比这一项在规格里限的是 4% 以内。这个起始方案跑下来全视场畸变小于 ±1%中间视场有一小段残留的带状起伏属于可以接受但值得盯一眼的量级。想看更直观的用 Analysis Diagnostics Distortion Grid。这里必须先把传感器的物理尺寸换算成视场角这块阵列是 4.74mm × 3.55mm横向长边对应 X半宽 2.37mm 和 1.775mm 分别除以 6mm 再取反正切得到 X 半视场 21.55°、Y 半视场 16.48°。在对话框里把这两个数填进去参考网格选 Fiducial Marks Only执行。因为畸变本来就小于 1%网格上的偏移很小得放大局部才看得清——这种「看不出问题」本身就是好消息但也意味着靠肉眼判断会漏还是以曲线上的百分比为准。4.3 衍射 MTF68 lp/mm 上限、17 的步进怎么填Analysis Diffraction MTF工具栏上那个快速 MTF 按钮不支持指定频率要看细节得走完整对话框。在 Frequency / Calculation 选项卡里Maximum frequency 填 68Increment 填 17这样算出来正好落在 17、34、51、68 四个频率点前两个之后正好覆盖规格里的 17 lp/mm 和 51 lp/mm。填完之后选项卡标题旁边会冒出一个红色星号那是改动指示器提醒这个页里参数改过、还没重新执行。这个小标记别忽略我见过有人改完频率直接看旧图对着上一版数据下了半天结论。曲线出来怎么读横轴空间频率纵轴 MTF1.0 是完全的黑白对比0 是彻底糊平。规格要求 17 lp/mm 处中心视场高于 85%、51 lp/mm 处中心高于 25%。起始方案在这两个点大概率都不达标这是正常的——起始点的作用是提供一个形状合理、可以优化的工作模型不是直接交货。真正要看的是曲线的走向如果高频段掉得特别快说明残余像差没收如果低频段一开始就低那多半是渐晕或者孔径设置有问题得回头查 LDM 里的半孔径和渐晕因子。同一批体检里还有两件事不能漏。一是相对照度规格要求角落照度高于 60%这一项由渐晕和孔径共同决定MTF 达标但角落暗一截的设计在相机上是不能用的。二是透过率400~700nm 波段单镜片要求 80% 以上镀膜方案和玻璃吸收都要算进去加上那块 1mm 厚的红外截止片实际到传感器的能量还得再打折。这三项一起过了才谈得上「起始方案可用」。5. 避坑排查这五处翻车最费时间这些坑大多不是软件不会用而是操作顺序和默认行为上栽的。每一条我都按「现象—原因—解决」写对着查就行。第一条缩放完发现 F/# 跟着变了。现象是缩放到 6mm 之后一阶数据里 F/# 不再是 3.5而是个奇怪的数重新设回去之后像质分析又全变了。原因几乎都是孔径类型填成了入瞳直径EPD——EPD 是绝对长度等比例缩放时跟着放大 6.3 倍而 F/# 是比值概念上不该变。解决方式是把孔径光阑页的类型改成 Image F/Number 再重填 3.5如果镜头已经缩过了改完孔径后记得重新看一眼近轴像高确认没有连带改动。第二条灰色厚度单元格里输入不进去改完又弹回去。现象是某个面的厚度是灰的、旁边带 S双击改数字没反应或者改完过一会儿又回到原值。原因是这个厚度上挂着 Paraxial Image solve程序在算「让近轴边缘光线在下一面高度为 0」的那个值你手动填的数会被求解覆盖。解决是右键该单元格先取消求解状态再改成变量或固定值。但取消之前想清楚这个求解放在那儿是有原因的它定了近轴像面位置取消掉之后像面会飘所有 MTF 结果都不可比。常规做法是保留 PIM另加像面偏移作为离焦变量两者配合用。第三条畸变网格怎么画都对不上传感器的边。现象是网格填了视场角画出来发现边缘视场和实际像面范围不一致或者横竖方向搞反了。原因是视场定义用的是角度而传感器给的是毫米中间必须过一遍 h f·tanθ 的换算而且 X 和 Y 要分别算4.74mm 那条长边对应 21.55°3.55mm 那条短边对应 16.48°。解决是把这两个数各自填进对应的半视场格子里别拿一个数凑两个方向换传感器的话这两个数必须重算不能沿用。第四条MTF 达标了角落却暗得没法用。现象是中心视场 17 lp/mm 过得挺轻松一出相对照度分析角落只有 40% 出头离规格的 60% 差一截。原因是把注意力全放在 MTF 上忽略了 Y 半孔径是程序自动算的而自动口径不考虑你想要的渐晕水平。解决是先跑一遍相对照度分析定位是哪个面在拦光再回头手动设定关键面的通光孔径或加渐晕因子。这里要提醒的是渐晕和 MTF 是互相拉扯的放宽口径照度上来、像差跟着上来收紧口径像质好、角落变暗优化时两个指标要放在一起看不能分两轮各调各的。第五条改崩了想回退发现 Undo 是灰的。现象是调了一堆参数想按 Undo 退回去菜单项点不动。原因是 Undo 只在数据表或命令窗口处于当前状态时可用图形窗口或对话框窗口一激活这个功能就失效了。这个设计很容易理解——图形窗口有自己的缩放历史跟数据修改不是一条线。解决是养成节点保存的习惯每完成一个有意义的状态缩放完、视场改完、优化跑完一轮就 File Save Lens As 存一份带版本号的文件。这是唯一可靠的后悔药Undo 顶多救你一两步。6. 进阶验证用离焦 MTF 把「0.75m 到无穷远」这件事验掉前面所有分析都是在无穷远物距、单一像面上做的而这份规格里写着物距从 0.75m 到无穷远都要能用。这一条如果只用单张 MTF 曲线验证等于没验。我在类似项目里的做法是把离焦 MTF 当成交付前的必过关卡在 MTF 对话框里把物距或像面偏移设成一组扫描值看 17 lp/mm 那条曲线随离焦衰减的宽度宽度就是这个系统实际可用的焦深。衰减太快说明焦深不够0.75m 处已经糊了衰减平缓但整体水平低那是像差限制不是焦深限制得回去优化而不是调焦。具体操作上有两个参数要拿捏。一是扫描步长别一上来就铺满整个范围先用粗步长比如 0.02mm 像面偏移看趋势找到 MTF 掉到规格线附近的区间再在这个区间里用细步长加密。二是判据频率看 51 lp/mm 还是 17 lp/mm 得出的焦深结论可能差一倍工程上一般用规格里那个较高的采样频率当判据因为低频在离焦下太耐打了用它算出来的焦深会虚高。验证阶段还有三件事值得一起做。其一把红外截止片作为 1mm 平行平板加进模型后重跑一遍 MTF平板引入的球差和焦点位移在 F/3.5 这种相对孔径下不算小漏掉它仿真和实拍的差距会集中在高频段。其二跑一遍透过率分析确认 400~700nm 波段单镜片透过率在 80% 以上镀膜方案定下来之后再用实际膜系数据替换。其三如果这个设计要往下走公差分析应该在优化收敛之后、而不是之前做因为像差本身很大的系统公差分析给出的结果会好看得没有意义——像差把公差的影响盖住了。有件事我印象很深早些年做一个类似的小视场物镜前面几步都规规矩矩唯独缩放的时候图省事只选了中间几片没把像面框进去结果 EFL 是对的、F/# 也是对的只有近轴像高差了 0.3mm怎么优化畸变都压不下去。查了大半天才回到 Scale 对话框看范围那一行。从那以后我每次做 Scale 都强制走一遍「拖全选—看范围—勾 EFL—填数—重算一阶」这五步一步不省而且缩完立刻存一个基线文件。这套动作看着笨但它把最容易出错的一环变成了不会出错的一环。希望帮到你。本文还有配套的精品资源点击获取