CODE V镜头设计:VGA定焦规格到可优化起始点

简介:这是一份面向光学设计初学者与镜头工程实践者的 CODE V 实例文档,围绕低价位定焦 VGA 数码相机镜头的建立、缩放与像差曲线分析展开。内容从设计规格入手,涉及元件数量、焦距 6mm、F/3.5、视场角、畸变、MTF、相对照度与 IR 滤光片等指标,并结合新镜头向导、专利镜头筛选和一阶近轴属性查看,说明如何确定起始点并完成镜头缩放。资源包为 1 个 doc 文件,约 45KB,篇幅紧凑,适合作为课堂案例或自学练习的配套材料。已有 1346 人学习,读者可据此理解镜头缩放与像差评价的基本流程,掌握从规格到初始结构再到性能检查的思路,并积累 CODE V 实际操作与结果判读经验。

1. 从一份 VGA 定焦规格开始:6mm 焦距限制后续所有操作的起点

拿一份 VGA 定焦相机物镜的规格去开 CODE V,很多人第一步就卡住:规格书写的是像素尺寸、像面大小、畸变百分比、相对照度,软件要你填的却是 F/#、半视场角、元件数。codev 设计实例里最经典的一条路径——建立镜头、缩放镜头、看像差曲线——从头到尾就是在做这种翻译。这份材料给的题目不复杂:2 到 3 片塑料或普通玻璃构成的居中折射镜头,EFL 6mm,F/3.5 定孔径,半视场 26.5°,全视场畸变小于 4%,角落相对照度高于 60%,最后要在一张 RIM 像差曲线上判断像差离衍射极限还差多远。它适合刚接触 CODE V、能看懂 h=f·tanθ 这类近轴关系的人,也适合手里有一个专利镜头、想把它快速改到自用规格的人。下面按我实际走的顺序拆,包括那些让我错过一次的地方。

2. 把规格翻译成检索条件:新镜头向导与 2400 个专利镜头

2.1 三个可检索量:F/#、半视场角、元件数

传感器对角线 6mm、EFL 6mm,这两个数一给定,视场角就定死了。像高取对角线的一半 3mm,代入 h = f·tanθ,tanθ = 3/6 = 0.5,解出半视场角 26.5°。这一步不要跳过,因为它同时决定了后面畸变网格要填的 X/Y 半视场,也决定了你在专利过滤器里该填多少。很多新手直接把规格里的“视场角”整角填进去,结果搜出来的镜头全是大广角,缩放完像质一塌糊涂。

锐度那一栏要换算成空间频率。像素 7.4μm,阵列能分辨的最高频率按 1/(2×0.0074mm) 算,得 67.6 LP/mm,超过这个频率的信息 CCD 本身就采不出来。所以规格里的 MTF 要求写成两组:17 LP/mm 时中心大于 85%、边缘也要有像样的值;51 LP/mm 时中心大于 25%。这个 67.6 不是拿来当设计目标的,它是上限,光学系统在截止频率处的 MTF 不能掉到零,否则合成 MTF 会提前塌掉。

规格原文CODE V 里对应的量数值用在哪
像面 3.55×4.74mm,对角 6mm像高 / 半视场角3mm / 26.5°过滤器、视场设定
像素 7.4×7.4μmCCD 截止频率67.6 LP/mmMTF 最大频率
定焦 6mmEFL6.0mmScale 缩放目标
F/3.5 定孔径Image F/Number3.5孔径光阑页
畸变 <4%畸变网格 / 场曲图判定线分析阶段
角落照度 >60%相对照度判定线分析阶段
单镜片透过率 >80%,400~700nm材料与镀膜假设—选玻璃时核对
IR 滤光片 1mm平行平板厚度 1.0mmLDM 里加一面

表格里最后两行是容易被忽略的。红外截止滤光片在模型里就是一块 1mm 厚的平行平板,材料牌号相当于 IR-638 或 CM500 这一档,它的存在会引入少量球差和轴向位移,1mm 厚度对 F/3.5 的系统不算小事。我一般会在起始点阶段就把它加进去,而不是等优化完了再补,补进去那一刻像质回退会让人很崩溃。

2.2 过滤器填宽还是填窄:20~33 与 1~4 的取舍

新镜头向导里选 Patent Lens,下一步就是过滤器。这里有一个反直觉的点:范围填得越精准,越容易搜出没法用的结果。原因很实在——专利库里的镜头是为别人的传感器、别人的靶面设计的,你拿到的只是一个接近的起点,后面必然要缩放、要改。范围卡太死,剩下的候选本来就贴着边界,一缩放就出界。

我一般的填法是三个条件都留余量:F/# 填 1 到 4,目标是 3.5;半视场角填 20 到 33,目标是 26.5;元件数填 1 到 3,越少越好,因为元件数直接对应成本和装配公差累积。搜出来 12 个候选,这个数量刚好,够你挑几个试,又不至于看花眼。

有一个判断优先级要提前想清楚:视场角和 F/# 哪个更难改。经验上视场角更难扩,把一个 20° 的镜头硬拽到 26.5°,边缘照度和畸变会一起恶化,怎么优化都别扭;而 F/# 相对好办,把 2.4 放到 3.5 是收小孔径,像质通常变好,只是进光量下降。所以候选里应该优先挑视场角略大于目标的,F/# 略小于目标的。

2.3 选中 or02248 之后先别急着往下点:它哪里不达标

实例里挑中的是 or02248,半视场 27.5°,F/2.4。这两个数都踩着上面那条原则:视场比 26.5 略大,F/# 比 3.5 小。但选中它的时候要清楚它有三处和最终规格不一样,不能糊里糊涂点 Next。

第一处是 EFL,专利镜头的焦距是按它自己的应用定的,和 6mm 差得可能很远,实例里后面读到的是 0.9528mm,差了六倍多。第二处是 F/#,2.4 收到 3.5,孔径光阑要改。第三处是视场定义方式,专利镜头常常只给一个最大视场角,中间的 11°、19° 得自己插。这三处正好对应后面三个动作:改孔径、改视场、缩放。心里有这张账,操作起来就不会乱。

2.4 系统数据四页:孔径光阑、波长权重、参考波长、视场

进入向导后的四页是系统数据(System Data),填错了后面全歪。

孔径光阑页,下拉列表选 Image F/Number,输入 3.5。这里选“像方 F 数”而不是直接填孔径直径,是因为 F/# 是个比值,镜头缩放时它不会跟着变,这正是你要的。要是填了绝对孔径,一缩放 F/# 就飞了。

波长页,把绿光 589.0nm 的权重改成 2。默认三个波长等权重,改权重等于告诉后面的优化“我更在意绿光下的表现”。数码相机是宽波段应用,但参考波长和优化权重是两件事,权重给绿光加倍能让优化先把这个波段压下去。

参考波长页不要动默认值。这一页控制的是近轴光线和参考光线追迹用哪个波长,默认那个就是系统里权重和位置最合适的,乱改会让后面的一阶数据和像差曲线对不上。

视场页是关键。选中第二个视场,右键 INSERT 插入新视场,然后依次键入 0、11、19、26.5 四个 Y 方向角度。为什么不只填 0 和 26.5?因为像散这类和视场强相关的像差,在中间视场往往最难看,只给两个点等于闭着眼睛优化。常见做法是至少 0、0.7、1.0 三个视场,这个系统比较广角,多加一个 19° 能明显改善带状像差的控制。

3. 缩放镜头:EFL 从 0.9528 改到 6.0 的三步与四个回读量

3.1 先读一阶数据,再决定缩放范围

专利镜头进来第一件事不是画图,是看一阶数据。菜单 Display > List Lens Data > First Order Data,把这个窗口拉出来摆在旁边。实例里 EFL 显示 0.9528mm,这个数和我们需要的 6mm 差了六倍多,说明必须缩放。

这里有个很实用的小设置:可以把 EFL、像高、F/# 这些量挂到界面底部状态栏,随时瞄一眼。路径是 Tools > Customize 打开用户定制对话框,进 Status Bar 选项卡把要监控的量加进去。优化过程中 EFL 会被其他约束拉扯,状态栏一直显示着,比反复开窗口高效得多。

另外,LDM 表格里显示的小数位数是可以调的。Tools > Customize 里 Format Cell 选项卡能改整体精度,实例里用的是小数点后五位。但是精度是按整列/整体设的,不能单独设某个单元格,所以别指望给某一个数开小灶。

3.2 Scale 对话框里那两个勾

缩放的操作路径是:在 LDM 里点中表面 1 的编号,按住拖到像面(Image),把整段表面选中;然后 Edit > Scale 打开缩放对话框,注意对话框里显示的表面范围应该是 1 到 Image,如果只显示了一部分,说明拖选没选全,这时候点 OK 会得到一个只有前几片被缩放的畸形系统。

对话框里勾上 Scale Effective Focal Length,在 Scale Value 里输入 6.0,点 OK。这一步的语义是“把所有半径和厚度按同一个比例因子缩放,使得 EFL 变成 6.0”,而不是“把 EFL 拉长到 6.0”。两者的区别在于前者保持系统形状相似,后者会破坏面形关系。缩放因子是 6.0/0.9528 ≈ 6.3,所有的半径、厚度都会乘上这个数,这也是为什么前面强调 F/# 要填比值——比值在这个操作下不变。

缩放本身也可以用命令窗口做,界面上的每次操作都会在命令窗口回显对应的命令,抄下来存成脚本,下次换镜头直接改数字,能省不少点击。LDM 里改单个数据的命令形式是这样:

! CODE V 命令窗口示例:改表面 5 的厚度为 2.3 THI S5 2.3 ! 回车后 LDM 对应单元格立即更新,命令窗口回显生效记录

逻辑很直白:THI 是厚度(Thickness)的缩写,S5 指表面编号,后面跟数值。这套命令语法值得花十分钟熟悉,因为它让你能把一串操作写成宏,尤其是那种“改厚度 → 重算 → 看一眼像差曲线”的循环,手点二十遍和跑一遍宏完全是两个体验。参数上要注意表面编号的基准,LDM 里物面是 0 还是 1 取决于系统设置,抄别人脚本前先在界面上确认一次,编号错一位改的就是另一片镜子。

3.3 缩放后的回读:EFL 6.0、像高 2.99、F/# 不变

点完 OK 不要以为就完事了,回到 First Order Data 窗口点重算按钮,读三个数。

第一个是 EFL,应该是 6.0mm,这个基本不会错,错了说明缩放没作用到全部表面。第二个是近轴像高(Paraxial Image Height),实例里读出来 2.99mm,目标是 3.0mm,差 0.01mm。这个差不是 bug,是近轴像高按 h=f·tanθ 算和实际半视场角取值之间的舍入,10 微米量级对 6mm 系统完全可以接受。第三个是 F/#,应该还是 3.5,如果它变了,说明孔径光阑那一页填的是绝对孔径而不是 Image F/Number。

读完这三个数就存盘,File > Save Lens As,文件名类似 DigCamStart.len。这个习惯很重要,后面的优化会反复推翻重来,有一个干净的起始点文件,相当于给自己留了后悔药。我自己习惯是每完成一个阶段存一个带序号的版本,起始点、加滤光片、优化第一轮、公差前,四个文件,回退的时候不用猜。

3.4 F/# 与像高的联动边界

缩放完成不等于系统就对了,有两个边界要心里有数。

一是缩放不改变 F/#,但它改变绝对孔径。缩放因子 6.3 意味着通光孔径也跟着放大 6.3 倍,如果原来镜头口径是 0.5mm,缩放后就是 3.15mm。这在纸面上没问题,但如果你后面要加渐晕或者考虑镜筒尺寸,得按缩放后的实际口径来。

二是像高和视场角的对应关系在缩放后依然成立,但真实传感器的长宽比和视场定义方式可能不匹配。规格里像面是 3.55×4.74mm,长宽比不是 1:1,而视场设定用的是 Y 方向角度,做畸变网格时要分别换算 X 和 Y 的半视场,这一步在 4.3 节展开。

4. 像差曲线与三张快速分析图:RIM、SPOT、场曲畸变怎么读

4.1 快速像差曲线 RIM:0.023mm 与 0.004mm 的对比

横向光线像差曲线的含义是:同一视场点发出的光线,经过系统后与参考光线在像面上的交点距离。理想透镜这个距离恒为零,实际系统的偏离量就是这个视场的像差。横轴是光瞳坐标,纵轴是偏离量。

快速版入口是工具栏上的快速像差曲线按钮,通用路径是 Analysis > Diagnostics > Ray Aberration Curve,选项名 RIM。快速版实际上是宏,会自动定比例,同时给一个 ANA 选项生成的文本页。实例里自动比例是 0.023mm,也就是 23 微米。

这个数字单看没感觉,要找个参照物。艾利斑直径按 2.44·λ·F/# 算,取 λ=0.55μm、F/#=3.5,得 2.44×0.55×3.5 ≈ 4.7μm,实例里说约 0.004mm。也就是说这个起始点的像差是衍射极限的六倍左右。这不是坏消息,起始点本来就不该是衍射极限,六倍意味着有明确的优化空间,而不是差到没救。

读这张图要看两件事。第一,不同波长的曲线是否分开得厉害,分开大说明色差主导,可能要换材料或者加一片。第二,曲线的形状,是抛物线状(球差)、关于光瞳中心不对称(彗差)、还是不同视场曲线斜率差异大(像散/场曲)。这些形状判断经验比公式管用,看多了就有直觉。

还有一个必须养成的习惯:不要相信自动比例。自动比例的目标是让图“好看”,把曲线撑满画面,一个像差很小的系统和一个像差很大的系统画出来长得差不多。每次都要看纵轴刻度,用图形工具的放大缩小手动改比例再看一遍。

4.2 快速点列图 SPOT:先看比例条再看形状

点列图不是规格的一部分,但它是最快能给成像质感的图。原理是每个视场点发出一束光线,在入瞳上排成网格,追迹到像面后这些光线的落点散开成一片,散开的大小和形状就是几何像差。

入口是工具栏的快速点列图按钮,通用路径 Analysis > Geometrical > Spot Diagram,选项名 SPOT。实例里比例条显示 0.050mm,50 微米,各视场的点大小大致接近但形状不同。形状不同这件事很有信息量:中心视场通常接近圆形(球差为主),边缘视场会被拉成彗星状或者椭圆,说明彗差和像散在起作用。

同样先看比例再看形状。另外有个小工具值得知道:宏 spotdet.seq 能在点列图上叠一个方形或圆形,代表接收器像素尺寸或者艾利斑大小。路径是 Tools > Macro > Sample Macros/Geometrical Analysis,运行前要点几个参数。把 7.4μm 的像素框叠上去,你立刻能看出这个系统的弥散斑是不是已经跨了好几个像素——这比看绝对微米数直观得多。

4.3 场曲与畸变网格:21.55 和 16.48 是怎么算出来的

理想近轴像高和视场角的关系是 h=f·tanθ,实际主光线落点偏离这个值就是畸变。畸变是视场相关像差,通常和像散画在一起,所以场曲图(Analysis > Diagnostics > Field Curves)能一次给两个信息:畸变随视场的变化,以及子午/弧矢场曲的分离量。

畸变网格更直观,但填参数时要动脑子。规格给的传感器尺寸是 3.55×4.74mm,视场是按角度定义的,所以要把这两个边长换算成半视场角。短边 3.55mm 的一半是 1.775mm,atan(1.775/6) = 16.48°;长边 4.74mm 的一半是 2.37mm,atan(2.37/6) = 21.55°。所以对话框里 X FOV Semi-field 填 21.55,Y FOV Semi-field 填 16.48,参考网格选 Fiducial Marks Only。

X 和 Y 别填反。X 方向对应传感器长边,半视场更大,填反了画出来的网格长宽比是拧的,畸变分布会看着很奇怪。实例里这个镜头的畸变在整个视场内小于 ±1%,远好于 4% 的规格,但中间视场有残留的带状畸变,这种非线性畸变在网格图上表现为格子间距不均匀,比单一百分比更能说明问题。因为畸变太小,图上基准标记和实际落点几乎重合,得放大局部才看得清,这是好事,但也意味着这张图在这个系统上不是主要矛盾。

4.4 MTF 窗口:68 和 17 两个数字的来历

MTF 是锐度的量化表达,纵轴对比度从 0 到 1,横轴空间频率。低频段即使差镜头也有不错的对比度,高频段才见真章,因为亮暗细节会互相糊在一起。

入口是 Analysis > Diffraction > MTF。工具栏上有个快速 MTF 按钮,但它不支持自定义频率列表,要看细节必须走完整对话框。在 Frequency/Calculation 选项卡里,最大频率填 68,频率增量填 17,这样会算出 17、34、51、68 四个频点,正好覆盖规格里的 17 和 51 两个考核点,外加 CCD 截止频率 67.6 附近的 68。

填完注意选项卡标题旁边会出现一个红色星号,这是改变指示器,提示你这里的参数改过但可能还没重算。这个提示很容易被忽略,尤其是同时开了好几个分析窗口的时候,看着旧结果做判断是典型的翻车现场。养成习惯:改完参数先扫一眼标题有没有星号,有就点重算。

读 MTF 图时,除了看各视场曲线在 17 LP/mm 和 51 LP/mm 处的高度,还要看子午和弧矢两条曲线的分离量。分离大说明像散明显,这在广角镜头边缘视场很常见,而规格里并没有单独约束像散,它只能通过看 MTF 的边缘下降间接发现。

5. 避坑与排查:建立镜头到缩放这五处最容易翻车的地方

5.1 现象:LDM 里改了数值,图上看不出任何变化

原因有两个层次。浅层是窗口焦点问题:CODE V 的 Undo 只在数据表或命令窗口是当前窗口时可用,如果当前停在图形窗口或某个对话框上,你按 Ctrl+Z 什么都不会发生,于是你以为改成功了其实没改。深层是提交机制:带 OK 的对话框(比如表面属性、系统数据里的一部分)在点 OK 之前不会提交任何数据,点 CANCEL 等于什么都没发生;而 LDM 表格和部分属性窗口是改完即提交,还提供 Commit Changes 按钮做显式确认。

解决方式很土但有效:每次改完看命令窗口有没有出现对应的命令回显,回显在就说明提交了。数据量大的一轮修改之后,点一次 Commit Changes,再重算。发现自己改错了就用 Edit > Undo 回退,但先确认当前窗口是数据表。

5.2 现象:缩放后 EFL 是 6.0 了,像高却是 2.6mm 或 3.4mm

原因几乎一定是缩放范围选错。Edit > Scale 对话框里会显示当前作用的表面范围,如果拖选时没从表面 1 拖到 Image,而是只选中了中间几片,那么只有那几片被缩放,前后两段的间隔没动,形状关系被破坏,EFL 可能靠着某一片的半径凑到 6.0,但整体成像关系已经歪了。

解决:重新在 LDM 里点表面 1 的编号,拖到像面那一行,确认整段高亮,再打开 Scale 对话框核对范围文字。做完之后不要只看 EFL,一定同时看近轴像高和 F/#,三个数一起对才说明缩放成功。实例里正确的结果是 EFL 6.0、像高 2.99、F/# 3.5。

5.3 现象:优化跑了很多轮,边缘视场 MTF 始终上不去,畸变也不听话

原因通常是视场点给太少。只填 0 和最大视场,优化器只在这两个点上评估,中间视场的像散完全没人管,而像散这类像差恰恰在 0.7 视场附近最难压。规格里对“中心区域 CCD 内 3mm”的 MTF 有要求,这个区域对应的是一个视场范围,不是两个点。

解决:视场表至少给 0、0.7、1.0 三个,广角系统多加一个中间点(实例里的 0、11、19、26.5 就是四点的做法)。加视场会让优化变慢,但省下来的返工时间远比这点计算时间值钱。

5.4 现象:某个厚度单元格是灰的,改不动,旁边还有个小符号

灰底加小符号说明这个单元格处于求解状态。实例里表面 6 的空气间隔是灰色的,旁边有个 S,它挂的是 Paraxial Image 求解(PIM),作用是通过调整这个厚度,让近轴边缘光线在下一表面的高度为 0,也就是把近轴像面钉在焦点位置。

这个求解不是不能改,是改之前得明白代价。要改数值必须先取消求解状态,右键菜单里操作;取消之后像面位置需要靠别的方式确定,通常做法是把 PIM 求解和一个离焦变量配合用,优化阶段让离焦量自己去最优位置。血泪经验是:不要为了“先把数填进去”随手取消求解,取消之后整个系统的像面位置基准就飘了,后面所有像差分析都是对着一个错误像面做的,图形看着还行其实全错。

5.5 现象:像差曲线看着挺平,以为系统接近衍射极限

原因基本是自动比例的误导。快速像差曲线自动把纵轴撑到能看清曲线的程度,一个像差 23 微米的系统和一个像差 2 微米的系统,画出来视觉上差不多。

解决:每次都读纵轴刻度,并且和艾利斑直径对比。F/3.5 下艾利斑约 4 微米量级,像差曲线峰峰值 23 微米就是六倍衍射极限,这个结论跟“曲线看着平不平”毫无关系。同样的坑在点列图上:比例条 50 微米和 5 微米画出来的图一样热闹,一定要先把像素尺寸 7.4μm 或者艾利斑框叠上去再判断。

6. 把起始点变成可优化模型:一份四项验证基线与 MTF 目标表

起始点做完不是立刻开优化,我一般会先跑一遍四项基线,把数字记下来存成对照表。这四张表的意义在于:优化跑完之后,如果像质没变好或者某一项莫名其妙变差,你有地方查是因为优化方向错了,还是因为某个基线本身就没建对。

基线项入口关键参数起始点实读值判定线
一阶数据Display > List Lens Data > First Order Data—EFL 6.0mm、像高 2.99mm、F/# 3.5EFL 误差 <0.5%,像高≈3.0mm
畸变Analysis > Diagnostics > Distortion GridX 21.55、Y 16.48、Fiducial Marks Only全场 <±1%,中间视场有带状残留规格 <4%
像差曲线Analysis > Diagnostics > Ray Aberration Curve(RIM)手动改比例后读数约 0.023mm与艾利斑 0.004mm 比倍数
MTFAnalysis > Diffraction > MTF最大频率 68、增量 17待优化17 LP/mm 中心 >85%,51 LP/mm 中心 >25%

跑 MTF 那条时有个细节值得单独说:规格里写的是“离焦范围(中心区域为 CCD 内 3mm)”,意思是要求在一定离焦量下仍然满足锐度,这本质上是在约束焦深。做法是把像面厚度做成一个变量,或者手动改离焦量,在不同物距(0.75m 到无穷远)下各跑一次 MTF,看峰值下降多少。这一步很多人在起始点阶段跳过,结果优化收敛到一个焦点极佳但焦深极浅的解,实际装配出来稍微有点偏心就糊。

四项基线跑完,我会把结果和规格并排贴在一个文件里,然后才开始设变量和误差函数。优化的目标不是把 MTF 拉到 1.0,那不现实,而是让 17 LP/mm 和 51 LP/mm 两个频点在中心和边缘都过线,同时畸变、相对照度、透过率三项不越界。误差函数里给权重时,绿光已经加了倍权,MTF 相关的约束优先级高于点列图这类几何指标,因为最终交付时客户拿的是 MTF 曲线,不是点列图。

从那以后我每次开一个新镜头,哪怕只是改个专利做练习,都会强制走一遍“一阶数据 → 畸变网格 → RIM → MTF 四频点”这个顺序,一张都不跳。不是为了流程好看,是因为我在一次练习里跳过畸变网格直接看 MTF,优化跑了两天才发现最大视场的实际像高和视场角定义差了 2°,所有边缘视场的评价都是对着错误位置做的,等于白跑。把起始点验证养成肌肉记忆,比事后排查省钱得多。希望帮到你。

本文还有配套的精品资源,点击获取