资讯详情

资讯详情

Zemax扫描镜仿真指南:坐标断点与多重结构核心方法

玩Zemax的人迟早会遇到扫描镜仿真振镜扫描头、激光雷达、共聚焦显微镜里都有它的身影。所谓“模拟扫描镜”核心就三件事用坐标断点把光轴掰弯让反射面按反射定律转角度再用多重结构把一系列扫描角度排成参数表逐项评估。这篇文章就把这套流程完整拆开从反射定律到坐标断点参数再到像面分析和常见坑适合刚接触Zemax序列模式、准备做振镜或扫描反射镜系统的人直接照着操作。1. 扫描镜模拟的核心思路先从反射定律和坐标断点说起1.1 扫描镜在光学上到底做了什么扫描镜本质上是一面可以绕轴旋转的平面反射镜。镜面转一个小角度反射光束会转一个更大的角度这个翻倍关系来自最基础的反射定律入射光线、反射光线和法线都在同一平面内且入射角等于反射角。当反射镜绕某个旋转轴转过角度θ时法线也跟着转θ反射光线相对入射光线的偏转角就是2θ。举个例子打标机里的振镜转动1度激光束在工件上的扫动角度是2度激光雷达里那个快速摆动的反射镜镜面摆10度视场就能扫到20度。把这个倍数关系记住后面所有建模和验证都离不开它。在Zemax里模拟扫描镜本质上就是控制一个反射面的法线方向然后让像面或者下游光学系统接收不同方向射出的光束。难点在于序列模式下光轴默认是沿一条直线传播的而反射镜会把光轴“折叠”到另一个方向。要让软件知道光轴在某个表面处拐弯了需要用坐标断点面告诉它坐标系从这个位置开始旋转一个角度后续光线按新的局部坐标继续追迹。1.2 为什么选坐标断点加多重结构而不是直接改面模拟扫描镜有不少路径但最稳妥的是“坐标断点反射面多重结构”的组合。拆开看坐标断点Coordinate Break负责定义反射镜的安装姿态比如45度入射让光轴在镜面处折转。反射面用标准面加Mirror镀膜来实现它负责真正改变光线方向。多重结构Multi-Configuration把不同的扫描镜转角写成一组配置比如0度、正5度、负5度这样一次追迹就能同时评估所有扫描位置。为什么不直接在反射面的表面属性里倾斜一个角度那种做法适合快速验证当只有一片镜子、后面没有复杂光路时没问题。但一旦要在扫描镜后面接聚焦透镜、分光镜或者其他光学组件局部坐标和全局坐标的对应关系就会变得混乱后续像差分析也不方便。坐标断点把“坐标系的旋转”单独拎出来管理后加的任何表面都自动跟着旋转后的光轴走逻辑清晰得多。多重结构则解决了“扫描是一个过程”的问题。扫描镜不是只在一个角度工作而是一系列角度。把每个扫描位置当成一个配置Zemax会在一次光线追迹里把所有配置全部算完像质、光斑、畸变全部可以按配置横向对比这比手动改一个角度截一张图高效太多。1.3 各方案优劣对比建模方案上手难度灵活性适用场景典型问题坐标断点反射面多重结构中等高扫描头系统设计、像质评估、后续接透镜组需要理解坐标断点参数反射面直接设置倾斜低低快速算单个角度的光路走向多镜片和复杂路径容易乱非序列模式三维对象旋转中等偏高高杂散光分析、真实机械结构、与光源追迹配合序列像差分析不方便我个人的习惯是凡是超过一片反射镜或者准备认真分析扫描像质的场景一定用坐标断点加多重结构。非序列模式我一般只在评估杂散光和机械遮挡时才用比如镜架会不会挡光、壳体反射会不会干扰那才是它的强项。2. 动手前必须搞懂的参数坐标断点、扫描角与镜面转角2.1 新建系统时基本参数怎么给新建文件时不用想太复杂先把单位、波长和孔径定下来。单位一般选毫米激光扫描系统常用波长是0.532微米绿光或1.064微米红外打标和激光雷达大多用这两个波段。孔径方面扫描系统通常是准直光束入射不需要复杂的物方视场直接在光阑面定义入瞳直径就行。比如入射光束口径10毫米光阑直径就填10毫米并把光阑面设在扫描镜前方50毫米处。物体类型保持无穷远Infinity这样进入系统的就是平行光接近实际激光准直后的状态。这些基础参数看着不起眼但后面扫描范围和镜面尺寸的校核都依赖它们。光束口径越大扫描镜就要做越大否则角度一偏光就被切掉了。2.2 坐标断点参数速查六个参数各管什么坐标断点面在Lens Data Editor里是一行特殊表面它本身不改变光线方向只改变后续表面的局部坐标系。它有几个关键参数厚度指坐标断点面与下一个表面之间的间隔。通常设为0表示坐标断点紧贴着下一个表面只负责旋转坐标系。X偏心、Y偏心让后续表面的坐标原点偏移。扫描镜模拟一般用不到保持0即可。X倾斜、Y倾斜、Z倾斜真正影响光轴方向的参数。扫描镜最常用的是绕Y轴倾斜即Tilt About Y。在多重结构里这些参数可以通过PRAM操作数来设置。注意参数编号从0开始0是厚度1是X偏心2是Y偏心3是X倾斜4是Y倾斜5是Z倾斜。所以要让坐标断点绕Y轴倾斜45度在多重结构里就用PRAM 4指向该面的面序号配置值填45。不同版本Zemax对参数编号的显示略有差异最保险的做法是打开该面的“表面属性”对话框看参数列表里Y倾斜对应第几个编号照着填。2.3 扫描角与镜面转角的2倍关系这是整个模拟里最需要刻在脑子里的公式出射光束偏转角等于镜面转角的两倍。假设我们把坐标断点的Y倾斜设为45度也就是反射镜法线与入射光轴成45度反射光路会折转90度。现在想让光束扫描±10度镜面转角只需要±5度多重结构里坐标断点的Y倾斜角度就是45±5度。光束偏转角是2倍像面上的光斑位移则还要乘上像距的三角函数关系当像面垂直于出射光轴时光斑偏移量d L × tan(扫描角)L是扫描镜到像面的距离。按扫描角±10度、镜面转角±5度、像距100毫米来算光斑会在像面上扫过大约±17.6毫米的范围。这个数字先手算出来后面在Zemax里验证一眼就能看出模型有没有建对。2.4 口径与镜面尺寸留多少余量才不切光很多人建模时忽略镜面尺寸结果扫描角一大光线全被镜面边缘切掉追迹出来的光斑畸形甚至消失。反射镜是斜着放在光路里的光束有效投影面积会被拉长。如果入射光束直径是d镜面法线与光轴的夹角是45度那镜面的实际口径至少要d / cos45度大约是1.414倍。别忘了扫描过程中镜面还会再偏转入射角变化后投影面积还会继续增大所以我习惯在理论值基础上再加20%到30%的余量。Zemax里每个表面都有半直径Semi-Diameter属性。给反射镜设置半直径时可以直接填一个比光线足迹更大的值再手动固定半直径避免系统自动计算的光束口径把边缘切掉。扫描镜的半直径我建议至少放大到理论光束口径的1.3倍以上特别是模拟大角度扫描时。3. 实操从零搭一个单轴扫描镜并让它扫起来3.1 建立光路坐标断点反射面像面在Lens Data Editor里按顺序建立几个表面表面序号表面类型关键参数说明OBJ无穷远物体物距无穷远模拟准直激光1 (STO)标准面半直径5mm厚度50mm入瞳/光阑限制光束口径2坐标断点Y倾斜45度厚度0将光轴折向反射镜法线方向3标准面镀膜Mirror厚度100mm平面反射镜反射光折转90度4 (IMA)像面半直径30mm接收扫描光束操作上要留意几点。坐标断点放在光阑和反射镜之间厚度必须为0表示它只在位置点旋转坐标系不引入实际距离。反射镜面要用标准面类型在镀膜Coating列填Mirror让它成为反射面而不是用透镜面型去假装反射镜。反射镜的厚度100mm指的是反射后光线传播的距离因为反射光已经在坐标断点作用下折转了方向所以这个厚度沿反射后的光轴方向计算像面会出现在反射光束的路径上。建完后打开3D视图应该能看到光线从Z方向过来在反射镜处拐弯沿X方向射向像面。如果光线没有拐弯或者像面位置不对大概率是坐标断点角度或镀膜设置出了问题。3.2 多重结构实操让扫描角度变成一组数据接下来打开多重结构编辑器Multi-Configuration Editor把扫描角度变成一组配置。先插入三行配置分别代表中心位置、正负两个扫描位置。然后插入操作数操作数类型选PRAM参数里填入坐标断点的面序号和参数编号。这里需要操作的是面2的Y倾斜即第4个参数所以操作数写成PRAM 4面序号填2。三个配置里分别填45、40、50。对应关系是镜面转角0度时出射光束方向为基准方向扫描角0度镜面转角-5度时扫描角-10度镜面转角5度时扫描角10度。注意Zemax角度正负号会影响扫描方向可以先填一组正负数看3D视图里的光线往哪边偏再调整符号物理方向正确比符号好看重要。设置完成后在任意分析窗口里选择“所有配置”或者逐配置切换就能看到三种扫描状态下光束的位置差异。这一步是让“静态镜片”变成“扫描镜”的关键。3.3 像面分析验证扫描范围与位移公式现在验证模型是否正确。打开点列图分析或者直接查看像面上的几何光斑坐标记录三个配置下光斑质心的X方向位置。用之前手算的结果对照像距100毫米扫描角±10度理论光斑位移是±17.6毫米。如果Zemax算出来的光斑位置和这个数值吻合说明坐标断点角度、2倍关系、像距设置全部正确。如果差了一倍检查是不是把镜面转角当成了扫描角如果差的量不成比例检查像面位置和距离。更严谨的做法是在评价函数编辑器里加一个CENX操作数或CENY取决于扫描方向它会返回像面上光斑质心的X坐标。配合多重结构可以一次性读出所有配置的光斑坐标方便后续做线性度分析或自动校验。3.4 单轴扩展双轴再加一片镜很多真实系统是双轴振镜两片镜子分别负责X和Y方向扫描。在刚才的单轴光路上继续扩展即可。第一片镜让光沿X方向传播。此时在反射光路上再插入一组坐标断点和反射镜面新坐标断点绕X轴倾斜45度把光轴从X方向折向Z方向新反射镜是第二片扫描镜多重结构里再增加一组PRAM操作数来控制它的倾斜角。如果把第二片镜的倾斜角也做成多重结构配置就得到了X/Y两个方向的独立扫描控制。此时光斑在像面上的轨迹会形成一个矩形区域两个方向互不干扰前提是两片镜子的转轴和光路折叠方向正确配对。用3D视图逐配置检查可以让整个双轴系统一路追迹下来光序清晰可见。4. 常见问题与排查技巧实录4.1 光线被镜面切掉或根本出不去表现随着扫描角增大像面上光斑逐渐变暗、残缺甚至某个配置完全看不到光线。原因十有八九是镜面口径不够或者光阑位置太靠后。扫描镜偏转后光束在镜面上的投影面积变大如果半直径还是按静态光束口径设置的边缘光线就会溢出。处理方法是在反射镜表面属性里手动把半直径调大比如初始光束半径5毫米镜面半直径给到10到15毫米并且把“自动计算”选项关掉。另外确认光阑面没有限制到反射后的光束。入射光路上的光阑只应约束入射光束反射后的光束如果也被某个孔径限制就需要单独检查后续表面的孔径设置。这方面我踩过不少次坑最终的经验是每加一个表面都看一眼3D视图里光线是否贴边不要等到点列图才发现光斑已经缺了一块。4.2 改了扫描角但光斑纹丝不动表现多重结构里角度值改了但点列图里三个配置的光斑位置完全重合。基本可以断定是多重结构操作数没真正作用到坐标断点上。最常见的问题是PRAM操作数的参数编号填错。改Y倾斜时参数编号填成了3而不是4结果改的是X倾斜镜面绕另一个轴转了自然不会产生预期的扫描效果。另一类问题是指向的面序号填错比如坐标断点的面序号是2结果操作数指向了面1的光阑。解决方法是打开表面属性面板确认坐标断点的序号和参数编号然后在多重结构里逐项核对。还有一种少见情况镜面镀膜没设置成Mirror反射镜变成了普通透射面无论怎么转都不反射光线方向当然不会变。4.3 扫描距离和理论值对不上表现实测光斑位移和手算的公式差很多尤其是扫描范围越大偏离越明显。先检查是不是把镜面转角当成了扫描角。设计扫描角±10度时镜面应该只转±5度多重结构里填的坐标断点角度变化也是±5度。填成±10度光斑位移会变成理论的将近一倍。再检查像面距离是否正确。坐标断点旋转后反射镜到像面的距离是沿反射光轴方向测量的不是沿原来的Z轴。如果误把100毫米当成了纵向距离而实际光路在X方向那像距和光斑尺寸就都对不上。大角度扫描时像面上的光斑位移用tan函数计算会有明显的非线性。这是正常现象不要以为是建模错误。要追求扫描角和光斑位移的线性关系需要在后面接f-theta镜头这是下一章的内容。4.4 多重结构追迹报错表现增加配置后某些配置下追迹报错或者完全没有光线到达像面。多重结构里每个配置都是一套独立的系统参数。报错通常发生在某个配置下镜面偏角过大导致光线打不到下一个表面或者镜面口径不够把所有光线漏掉了。逐个配置检查追迹结果哪个配置报错就单独看哪个配置的3D视图能快速定位是口径问题还是角度超出范围。另一种可能是坐标断点的角度设置导致反射光方向与后续表面法线夹角过小光线发生了全反射以外的异常传播。此时回到坐标断点参数检查各配置的角度是否都处于合理的扫描范围内避免出现镜面角度过大导致光路折叠方向反了的情况。5. 进阶扫描镜后接系统、双轴扩展与评估方法5.1 扫描后接f-theta镜头的设计思路实际扫描系统很少让光束直接打在平面上通常会在扫描镜后面加聚焦镜头让不同扫描角度的光束聚焦到同一个平面上比如激光打标机的加工面。普通透镜的聚焦位置服从y f × tan(扫描角)扫描角越大光斑在像面上的间距越不均匀边缘扫描速度会变快。f-theta镜头则通过专门的畸变设计让光斑位置服从y f × 扫描角实现等速扫描。Zemax里设计f-theta镜头时可以把扫描角设成多重结构的不同配置然后在评价函数里优化各配置下像面上的光斑位置让它们严格等于f×θ。具体做法是在扫描镜后按实际光路方向插入透镜组多重结构里继续沿用镜面转角配置。优化时同时约束所有配置的焦距和光斑大小这样设计出来的镜头从中心到边缘都能保持近似均匀的聚焦质量。5.2 动态扫描与批量评估ZOS-API扩展静态的多重结构能覆盖有限个扫描角度但真实扫描过程是连续运动的需要看到扫描轨迹、速度变化或与探测器画面同步的状态。这时可以借助ZOS-API用Python或MATLAB调用Zemax进行批量参数扫描。思路很简单把坐标断点的Y倾斜角作为变量通过外部脚本循环改变角度值并更新系统然后逐个提取像面上的光斑坐标拼出完整的扫描轨迹。相比手动设置几十个多重结构脚本方式更灵活还能顺便做数据拟合、非线性校正等后处理。写API脚本时需要注意每次更新参数后要调用更新系统UpdateSystem再执行光线追迹否则取到的还是上一次的结果。实际做批量扫描时建议先跑一个最小角度步长验证脚本逻辑确认无误后再放大循环次数。5.3 参数速查表与后续玩法项目设置/建议备注坐标断点Y倾斜45度决定入射角扫描角与镜面转角扫描角 2 × 镜面转角最容易搞错多重结构操作数PRAM 4指坐标断点参数编号以表面属性为准反射镜镀膜Mirror必须设置否则不反射镜面半直径光束口径×1.414×1.3留余量防切光像面距离沿反射后光轴方向不是原始Z轴距离做完单轴和三轴扫描可以继续往几个方向扩展把反射镜从平面镜换成带曲率的反射镜即扫描反射镜本身就是一面聚焦镜或者把两片振镜组合成完整的扫描头再或者把光源换成非序列光源模拟实际的激光能量分布。每一步扩展都不会推翻现在这套坐标断点加多重结构的基础框架只会在这个框架上叠加新的分析需求。我个人在实际操作中的体会是扫描镜模拟最忌讳的就是“只调参数不看光路”。无论参数设置看起来多合理先跑一遍3D视图确认光路方向再对照手算结果验证数值最后才去做像差分析和优化。这三步走完基本能把扫描镜模拟里的一大半坑都绕过去。最近一次做双轴振镜系统时我用这套流程从建模到验证只花了一个下午误差控制在千分之一以内和手算结果完全吻合。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →