激光准直镜设计是 ZEMAX 光学设计里最容易被低估的一类题目。外行看,就是一个镜片对着一束光,把发散的光拧成平行光;真动手做一遍才知道,从光源怎么建、准直到什么程度算合格,到公差给多少工厂才做得出来,每一步都能卡住人。我前前后后做过几十套不同波段的准直方案,从 650nm 的激光模组,到 1064nm 的固体激光器出光耦合,再到 1550nm 的通信模块,每一次最后的结论都一样:准直镜的难点从来不在镜片本身,而在于你有没有把"准直"这两个字量化清楚。这篇就把 ZEMAX 光学设计里激光准直镜这一类的完整链路摊开讲,从指标拆解、初始结构计算,到建模、优化、公差和实测验证,适合刚上手 OpticStudio 的在校生,也适合做了几年但一直靠试错调参数的工程师。
1. 准直这件事,ZEMAX 里到底在优化什么
1.1 几何光学的"无穷远成像"只是个起点
中学物理告诉我们,物在透镜前焦面,像在无穷远,出射光就是平行光。这句话没错,但它只描述了理想薄透镜在单色、点光源、近轴条件下的行为。真实的激光器不是点光源,透镜也不是薄透镜,光也不是近轴的。
先说光源尺寸。准直镜输出的平行光并不是数学意义上的平行,它有一个残余的发散半角,近轴近似下可以写成:
θ_out ≈ r_source / f
其中 r_source 是光源束腰半径,f 是准直镜焦距。这个公式太好用了,好用到我几乎每次报价前都会先心算一遍。它直接告诉你两件事:想让光更直,要么把光源做小,要么把焦距拉长。想把 3μm 束腰的光压到 0.05mrad 以内,焦距至少得 60mm,这不是设计水平问题,是物理极限问题,换谁来都绕不过去。
再说透镜厚度。ZEMAX 里如果把透镜当成近轴面来算,得到的结果和真实厚透镜差得不是一点半点——尤其当透镜厚度接近焦距的 10% 以上时,实际后焦距会明显短于名义焦距。所以我的习惯是:初始结构的三角计算用近轴公式快速估,所有精确值一律以 ZEMAX 里的 EFFL(有效焦距)和求解出来的后焦距为准,绝不用手算值去下加工单。
1.2 高斯光束的准直判据:束腰、发散角和瑞利长度
激光和普通光源最大的区别是它得用高斯光束描述,这就引出了"准直度"到底该怎么定义的问题。工程上有三套常用的口径,混用会出大问题。
第一套是远场发散半角 θ,单位 mrad,这是最本质的指标,描述光束在远处的张角。第二套是束腰半径 w0,单位 mm,描述光最细的地方有多细。第三套是瑞利长度 z_R = πw0²/λ,描述"光斑面积翻倍之前能走多远",工程上把 2z_R 近似当作准直作用距离。
这三者是绑死的:θ = λ/(πw0),w0 越大,θ 越小,但瑞利长度越长——也就是说,光斑粗一点,反而能射得更远还保持直。反过来,你想要一个又细又直的光束,物理上不存在。
举个具体数:1064nm 单模光纤输出,模场直径 6.6μm,也就是束腰半径 w0 = 3.3μm,配一片 f = 100mm 的准直镜。
- 出射束腰半径 w0' = λf/(πw0) = 1.064e-3 × 100 / (π × 3.3e-3) ≈10.3mm
- 出射发散半角 θ = λ/(πw0') ≈0.033mrad
- 瑞利长度 z_R = πw0'²/λ ≈311m
也就是说,这套组合在三百米范围内都能算"准直良好",代价是光斑有 20mm 粗。如果你的探测器只有 5mm,这套方案直接不成立,得反过来把焦距缩到 20mm 左右,发散角增大到 0.17mrad,瑞利长度掉到 12m。设计的第一件事永远是问清楚:你要的是"光斑小"还是"射得远",两个都要的前提是口径和距离都留够余量。
提示:客户嘴上说的"准直",九成情况下指的是"在我关心的那个距离上光斑别太大"。拿到需求先追问一句"测量距离多少、允许光斑多大",再动手算,能省掉一轮返工。
2. 指标到手先别开软件,把焦距和口径算出来
2.1 从光源发散角反推焦距与通光口径
打开 ZEMAX 之前,先把焦距和口径定下来,这一步算清楚了,后面优化能省一半时间。
口径的算法很直白:透镜通光口径必须能吃下光源的全部发散角,否则边缘光线被截断,能量损失加上衍射效应,输出光斑会出现明显的旁瓣。对于发散半角 θ_s 的光源,最小口径:
D_min ≈ 2 f tanθ_s
再乘 1.2~1.3 的余量,用来容纳装配偏差和光线边缘的畸变。我用过的两个典型场景差别极大:
| 场景 | 光源发散半角 | 焦距 | 理论口径 | 取用口径 | 相对孔径 |
|---|---|---|---|---|---|
| 半导体激光器快轴 | 约 30° | 6mm | 6.9mm | 8mm | f/0.75 |
| 单模光纤输出 | 约 0.09rad | 20mm | 3.6mm | 5mm | f/4 |
看这张表就明白为什么半导体激光器的快轴准直几乎一定要上非球面了。f/0.75 的相对孔径,数值孔径接近 0.5,单片球面平凸镜的球差能大到 RMS 波前几个波长,光斑里全是环。而光纤输出那边 f/4,球差小到可以忽略,一片普通平凸镜就能把波前做到 λ/8 以内。同样叫"激光准直镜",这两种情况根本不是一个难度等级,别用一个方案去套。
2.2 后焦距、中心厚度与镜筒的配合尺寸
设计图上标的焦距,跟镜筒加工要用的后焦距,是两个数。薄透镜焦距用 f ≈ 1/[(n-1)(1/R1 − 1/R2)] 估算,但真实透镜有厚度,后焦距 BFL 会短于 f,短多少取决于中心厚度和第一面的曲率半径。计算方式在 ZEMAX 里最简单:把最后一个面的厚度设成边缘变量,用求解(Marginal Ray Height = 0)让近轴边缘光线聚焦,读出来的厚度就是后焦距。
我养成的习惯是:中心厚度按口径的 1/8~1/10 先估一个。口径 8mm 的镜子,中心厚度 1mm 起步,太薄了装夹时容易变形,太厚了球差和色差都会恶化,而且成本上去了。这一条在非球面模压玻璃镜上尤其重要,因为模压工艺对厚度和边缘厚度的比例有硬性要求,边缘太薄根本压不出来,ZEMAX 里优化得再漂亮也是废图。
另外后焦距和镜筒的配合必须留调节量。我吃过一次教训:设计时后焦距标的是 4.82mm,镜筒直接按 4.82mm 加工,结果装配时发现公差叠加之后距离偏差 80μm,出射发散角直接从 0.1mrad 涨到 0.6mrad。后来统一改成留 0.3~0.5mm 的螺纹调焦量,一边测远场光斑一边锁紧,问题就没了。小焦距的准直系统,后焦距必须可调,这不是可选项。
2.3 材料与面型的初选逻辑
材料这块,先看波长,再看功率,最后看成本。
| 材料 | 适用波段 | 选它的理由 | 需要注意 |
|---|---|---|---|
| N-BK7 | 350–2000nm | 便宜、均匀性好、加工成熟 | 高功率下有热透镜效应 |
| 熔融石英 | 185–2500nm | 热膨胀系数极低、抗热冲击 | 价格是 BK7 的三到五倍 |
| N-SF11 | 可见–近红外 | 高折射率,短焦距时曲率半径更平缓 | 色散大,单色场景才划算 |
| CaF2 | 0.13–10μm | 紫外到中红外都透 | 软、易潮解、加工费高 |
| 蓝宝石 | 0.17–5.5μm | 硬度高、导热好 | 双折射要处理,贵 |
面型选择上,我的判断链是这样的:数值孔径小于 0.15,单片球面平凸镜;0.15 到 0.3,双胶合或者加一片弯月;超过 0.3,直接上偶次非球面。偶次非球面在 ZEMAX 里就是把标准面改成偶次非球面,放开圆锥常数和高阶项系数,变量不多但效果立竿见影——一个 f/0.75 的快轴准直镜,用单面偶次非球面就能把波前做到 λ/10 量级,比折腾三片球面组合省事得多。
如果遇到需要快慢轴同时处理、还想把光路折叠一下的场景,可以看看 ZEMAX 的扩展多项式面型,它属于自由曲面范畴,能在一个面上同时完成准直和整形。但这东西加工和检测成本高,除非有明确的体积或装调约束,否则我一般不会主动往这个方向走。
3. 光源建模:准直设计里最容易埋雷的一步
3.1 点光源、椭圆光源和二极管光源的取舍
我见过最多的返工原因,就是在序列模式里把一个半导体激光器当成了点光源。点光源没有尺寸,准直出来的残余发散角理论上是零,ZEMAX 给你的评价函数漂亮得不像话,实测才发现光斑大了一圈。这不是软件骗你,是你没告诉它真相。
光源建模三选一:
- 点光源:只适合光纤输出这种束腰远小于波长的近似场景,或者用来快速估初始结构。别拿它做最终评价。
- 椭圆光源:非序列模式下的选择,可以分别定义 X 和 Y 方向的高斯束腰,天然表达快慢轴不等。缺点是追迹速度慢,适合做最终验证。
- 二极管光源:非序列模式里内置的模型,能直接填快轴和慢轴的发散角、像散量、发光面尺寸,最贴近真实器件。做杂散光和耦合效率分析时用它。
序列模式里表达光源尺寸,标准做法是用物高视场。比如发光面 1μm × 3μm,就在视场里设 (0, 0)、(0, 1μm)、(0, 3μm) 三个点,优化时保证每个视场的光线都准直。同时用角度视场覆盖光源的发散角范围,比如快轴 ±30°。两套视场叠加起来,才能保证整个发光面、整个发散角范围内的光都被照顾到。这一步不做,优化出来的镜子只能准直中心那一条光线,边缘全是散的。
3.2 视场、孔径和波长的设定细节
波长的设定有个坑必须提:半导体激光器的中心波长随温度漂移,典型系数 0.3nm/K。工业环境温度从 10℃ 到 45℃,35K 的温差意味着波长要漂 10nm 左右。单波长优化出来的镜子,在这个漂移范围内焦距会变,准直度跟着变。正确做法是用多重结构,把 25℃ 和 45℃ 两组波长各建一个配置,在评价函数里同时约束。
孔径设置上,入瞳直径直接填透镜的机械口径,同时在每个面上加"孔径(Aperture)"设定,让光线追迹停留在实际通光区域内。这一步不做,优化器可能找到一条边缘光线打在透镜外面的"虚假最优解",你在光路图上看不出来,跑实体模型才发现。
还有一个容易被忽略的参数是光瞳采样密度。准直镜的残余发散角很小,光斑尺寸是微米到毫米量级,默认的 6 环 8 臂采样在这种高精度场景下精度不够。我的习惯是评估阶段至少开到 12 环 24 臂,做公差分析时再往上加。
3.3 序列模式还是非序列模式
这个问题我被问过无数次。简单的判断标准:只要你的光路是同轴的、不关心机械件遮挡和杂散光,就用序列模式。序列模式快、优化器友好、操作数齐全、公差向导直接可用。
什么时候必须换非序列?一是要做机械件遮挡分析,比如镜筒内壁的反射光会不会打到探测器上;二是光源本身要用二极管模型;三是需要统计能量收集效率,而不是只看几何光线。这三件事序列模式做不了,硬做出来的结果没有参考价值。
实操里我常走的流程是:序列模式做优化和公差,非序列模式做最后的光路验证和杂散光核查,两套模型之间用 ZEMAX 的转换功能迁一次结构参数,比在两个模式里分别重建省事得多。
4. 评价函数怎么配,才能让优化朝着"更直"走
4.1 RAID、RANG 与 TRAY 的分工
ZEMAX 默认的评价函数是 RMS 光斑半径,直接拿它去优化准直镜,方向是错的。因为准直系统的"像面"在无穷远,光斑半径这个量本身没有明确物理意义,优化器会把你带到一个局部最优,比如把球差压下去但残余发散角没变。
准直优化真正该用的核心操作数,我认为就三个:
| 操作数 | 含义 | 在准直设计里的作用 |
|---|---|---|
| RAID | 指定面上光线的入射角 | 约束光线打到透镜时的角度,防止超出有效孔径或触发全反射 |
| RANG | 光线在像面上的出射角(全局坐标) | 直接约束出射平行度,是准直设计的核心目标 |
| TRAY | 光线在像面上的 Y 坐标 | 配合一个远处的虚拟像面,间接反映远场光斑大小 |
用法的关键是建一个虚拟远场像面。在透镜后面 10m(或 100m,看系统长度允许)的位置插一个面,把 TRAY 在这个面上的目标值设成 0,权重给高。这比只约束 RANG 更稳,因为它是从几何光线落点倒推发散角,对高阶像差也敏感。虚拟像面的距离不用真的建 10m 长的模型,ZEMAX 的厚度参数可以填 10000mm,光路图上会被压缩显示,不影响追迹。
具体配置我一般是这样:RAID 在透镜两个面上的目标值是光源边缘角,权重 1;RANG 在虚拟像面上的目标值 0,权重 5;TRAY 在虚拟像面上的目标值 0,权重 3;再加一个 EFFL 把焦距锁死在设计值上,权重拉满。这套组合跑下来,收敛路径很明确,不会乱飘。
4.2 非球面的变量放开顺序与扩展多项式
非球面优化的最大陷阱是一次性把所有变量放开。圆锥常数、二阶到十阶系数,十几个变量一起动,优化器大概率会跳到一个曲率怪异的解上——矢高突变、边缘厚度不足、加工根本做不出来。
我的做法是分三步放变量:
第一步,只放圆锥常数(CONI)和第一面曲率半径,评价函数用纯几何光线(RANG + TRAY)。圆锥常数是解决球差的主力,单独放开就能把大部分误差压下去。
第二步,放开偶次非球面的四阶、六阶系数,同时加上 SSAG(面矢高)的上下限约束,防止非球面偏离最佳拟合球面太多。矢高偏离量超过 50μm 的话,加工成本会陡增,能压住就压住。
第三步,加入中心厚度、后焦距、材料,做整体微调。这一步通常只改小数点后第二位,但能再压掉 20% 的残余误差。
另外有个细节值得提醒:ZEMAX 里的扩展多项式优化,变量数量比偶次非球面多得多,容易过拟合。如果非必要,我不会在准直镜这种单面承担全部光焦度的结构上用它。真要用,务必加矢高和斜率约束,做出来的面型才不是给加工厂出难题。
4.3 优化不收敛时的几种自救办法
优化器卡住不动,一般就四种原因,我按排查顺序列一下。
一是变量被边界卡死。打开评价函数的约束项看看,是不是中心厚度已经顶到下限、边缘厚度已经到零。这种情况把边界放宽一点,或者把约束项权重调低,让优化器有空间走。
二是评价函数目标不自洽。比如你用 RAID 约束入射角的同时又用 RANG 要求出射严格平行,两者在某个特定面型下会互相打架。这时候要分清主次,把次要指标的权重降一个量级。
三是采样密度不够。光瞳采样太粗,评价函数"看不到"边缘光线的误差,优化器认为已经收敛了。加到 12 环以上再跑一遍,往往还能再降一截。
四是初始结构太离谱。别指望优化器能从一片随机曲率的镜子上救回来。老老实实回去用近轴公式重算曲率半径,把初始结构做合理。
顺便说一个跟 ZPL 宏相关的经验。有时候需要批量读镜筒里各个面的厚度去算装配尺寸,或者写脚本自动跑扫描,就得上 ZPL。宏里的函数调用特别容易踩坑,报 unknown symbol 这种错,八成不是语法问题,而是函数名在当前版本里改过,或者参数个数对不上。这种事别靠猜,直接打开帮助文档的函数索引按字母顺序核对一遍,比反复改了跑、跑了改快得多。
5. 能设计出来不等于能做出来:公差与装配的现实约束
5.1 敏感度排序:偏心、倾斜、离焦到底谁最要命
设计跑完,评价函数很漂亮,这只是开始。真正决定项目成败的是公差分析——同样的设计,公差放得合理,良率 95%;放得不合理,良率 20%,全在装配线上报废。
准直镜的公差敏感度是有规律的,我按经验排个序:
| 误差源 | 常规可做到的值 | 敏感度 | 为什么 |
|---|---|---|---|
| 元件倾斜 | 0.05–0.2° | 高 | 直接引入同量级的出射角偏差 |
| 元件偏心 | 10–50μm | 高 | 小焦距系统里被放大成明显的角度偏 |
| 后焦距偏差 | 20–50μm | 中 | 只要能调焦,就能补偿掉 |
| 曲率半径 | 0.1–0.5% | 中低 | 主要影响焦距,可被调焦吸收 |
| 中心厚度 | ±0.02mm | 低 | 厚透镜效应有限 |
| 折射率 | ±0.0005 | 低 | 对焦距的影响在毫米级 |
| 非球面面型误差 | PV λ/4 / RMS 20nm | 中 | 影响波前和远场旁瓣 |
倾斜为什么这么敏感?因为准直系统本质上是个角度放大器。光源在焦点附近,一点点倾斜就会让出射光整体偏一个角度,角度偏差大致等于倾斜角本身,没法通过调焦补救。所以镜筒的定位方式、压圈的贴合面,这些机械细节在准直系统里的重要性,一点不比光学设计本身低。
5.2 用补偿器和蒙特卡洛把良率拉回来
公差分析不是算完就完了,关键是要用补偿器把良率拉回来。准直系统里最有效的补偿器其实就是后焦距,也就是轴向调焦。ZEMAX 公差向导里勾上"补偿器"选项,把最后一面的厚度设为补偿变量,跑出来的良率通常能从 60% 出头直接拉到 95% 以上。
再往上一步是主动对准。装配时一边点亮激光器,一边用红外相机在几米外看远场光斑,调整镜片位置直到光斑最小、最圆,再紫外固化胶固定。这套工艺能把偏心容忍度从几十微米放松到上百微米,代价是装配节拍慢、设备投入高。批量小的项目我一般不做,几十片以内的样品用手动调就够了。
蒙特卡洛跑多少次合适?我的经验是至少 50 次,理想 200 次。20 次以内的结果波动太大,看到 90% 良率别高兴太早,重跑一遍可能就掉到 75%。跑完看累积概率曲线的 90% 分位点对应的 RMS 值,拿这个值去判断能不能满足指标,而不是看平均值。
还有一个做法值得推荐:把公差敏感度分析的结果直接反馈到图纸上。哪一片镜子对倾斜敏感,就在图纸上标注更严的倾斜要求,同时让机械设计那边把这个镜片做成带台阶的定位结构。光学和机械各画各的图,最后装不到一起,这种事我见过太多。
6. 实测验证:远场光斑法和几个反复踩到的坑
6.1 发散角的实测方法与对不上号的排查顺序
镜片做出来,怎么验证?实验室没有 M² 仪的话,远场光斑法最实用。
做法是:把准直镜固定在光源前面,在远场放一台相机或 CCD,分别在距离 L1 和 L2 两个位置测光斑直径 D1、D2,发散全角就是:
θ_full = (D2 − D1) / (L2 − L1)
注意两个位置的距离差要拉够,至少十米量级,否则光斑直径的测量误差会被放大成巨大的发散角误差。另外光斑直径的定义必须统一,是用 1/e² 宽度还是用 86.5% 能量宽度,两者差得很多。我跟供应商沟通时一定要在图纸上写清楚用哪个定义,不然对不上号是必然的。
如果实测发散角比设计值大,排查顺序我是这么走的:
- 先确认光源本身的参数和设计输入一致。很多情况下是拿错了激光器型号,慢轴的发光面尺寸跟设计假设完全不同。
- 再确认后焦距。拿掉准直镜,用一片已知焦距的镜子测光源的束腰位置,反推光源到准直镜的实际距离,跟设计值比。
- 然后排查装配倾斜。把准直镜绕光轴转 180° 看光斑有没有变化,有变化说明存在偏心。
- 最后才怀疑镜片面型。这需要用干涉仪测波前,成本最高,放在最后做。
6.2 几个我踩过不止一次的坑
第一个坑是把"最小光斑"当成"最好准直"。有一次我在两米的位置调焦,调到光斑最小就锁死了,结果拿到十米外一测,发散角大得离谱。原因是光斑最小的地方是束腰位置,不一定是准直位置。这两个位置在近场测的时候差别很小,到远场才暴露。正确做法是在远场距离测量,或者干脆在两个不同远近同时看,取折中。
第二个坑是忽略了应力和热变形。高功率激光器下,镜片吸收的功率虽然只有百分之几,但熔石英的热膨胀系数低不代表没有热透镜效应,温度梯度会让曲率半径变,准直度跟着变。解决办法是用无热化设计,镜筒材料选跟镜片热膨胀系数匹配的,比如镜片用熔石英、镜筒用殷钢,或者干脆用膨胀系数相反的两种材料组合做被动补偿。
第三个坑是镀膜和边缘截断。准直镜的镀膜反射率再高也有吸收,边缘的膜层均匀性还差,会导致光斑边缘出现不对称的衍射环。设计阶段如果 ZEMAX 里没给反射率设实际值,光斑能量分布会好看得多。做高精度能量耦合的场景,一定要在非序列模式里把镀膜透过率填进去,跑一次真实的光线追迹。
第四个坑是忘了考虑波长温漂。前面提过,半导体激光器的波长随温度漂 0.3nm/K。我做过一个模块,实验室 25℃ 测的时候准直度 0.15mrad,客户装到设备里工作温度升到 50℃,实测发散角变成 0.4mrad。最后靠矫回镜筒上的一个热补偿垫片解决。这个教训之后,凡是工业环境用的准直模块,我一定要求把温度范围写进设计输入。
第五个坑是透镜装反。平凸镜的凸面朝向直接决定球差大小。我通常的取向是让凸面承担主要光焦度,但不同结构的最优朝向不一样,别照搬经验。最好的办法是设计完成后在 ZEMAX 里把元件整体反转一下,对比两面朝向的波前评价,谁的 RMS 小用谁。这个操作两分钟就能做完,能省掉一整轮的返工。
最后分享一个我自己一直在用的小习惯:设计做完,把镜筒、压圈、胶层的厚度也建到 ZEMAX 的模型里,用一个简单的多重结构跑一遍"实际装配尺寸",而不是停留在理想光学面上。这一步花不了多少时间,但能提前发现很多尺寸干涉和焦距偏差的问题。光学设计和机械设计之间那条缝,往往是项目延期的主要来源。