☰
Zemax模拟扫描镜:坐标断点与多重结构实操指南
2026/10/9 3:40:28 网站建设 项目流程

1. 内容整体设计与思路拆解

1.1 扫描镜模拟的本质是什么

做光学设计的人,迟早会遇到扫描镜这个家伙。激光打标、激光雷达、激光投影、共聚焦显微镜,甚至医疗美容设备的振镜系统,都需要一片能转动的反射镜把光束扫到不同位置。项目标题里说的"模拟扫描镜",核心是想在Ansys Zemax里把这片镜子的动态工作过程变成可量化的静态数据序列,从而在图纸还没落地之前,就看清光路是否靠谱。

扫描镜的作用很简单:入射光固定,镜面绕某个轴旋转,反射光方向随之改变。问题是,很多新手第一次接触这个场景时,拿着Zemax却不知道从哪里下手。有的直接给镜子加了Tilt参数,扫描一会儿发现光斑跑偏;有的用多重结构设置角度,却发现评价函数里没法关联视场坐标。这里面的坑,不是因为原理有多深,而是Zemax处理"运动光学元件"的方式跟直觉不太一样。

1.2 模拟扫描镜要解决的三类问题

具体来说,在Zemax中模拟扫描镜,本质上需要回答三个问题。

第一个问题是镜面姿态怎么建。扫描镜在工作过程中,镜面法线方向是随时间变化的。在Zemax的序列模式里,所有面都是严格有序的,每个面都有固定的局部坐标系。要让一个面"动"起来,必须借助坐标断点面(Coordinate Break)来改变光线传播的参考坐标系。坐标断点并不会真正让镜面做连续旋转,它只是把一个静态旋转角度写进系统里——所以,要模拟一个扫描过程,本质上是模拟一系列不同角度的静态系统。

第二个问题是扫描过程怎么表达。一个完整扫描通常包含几十上百个角度采样点。如果在Zemax里手动改一次角度、看一次结果,效率太低。标准做法是用多重结构(Multi-Configuration),把扫描角度设为一个在结构间变化的参数。这样可以在一个文件中同时保存多个"扫描帧",用同一套评价函数批量评估每个扫描位置的像质、光斑位置和能量集中度。可以说,多重结构就是Zemax里的"动画播放器",只不过每一帧都是静态的、精确的。

第三个问题是扫描效果怎么评价。评价扫描镜系统好坏,不只是看某个角度下的光斑是否小,还要看整个扫描范围内光斑是否一致、扫描角与目标偏移是否线性、有没有畸变或离焦。这需要把评价函数、视场定义和多重结构操作数联动起来,才能得到一张完整的"扫描特性表"。

理解了这三件事,后面所有操作步骤就都顺理成章了。Zemax模拟扫描镜不是某个单一功能,而是一组能力的组合:坐标断点负责姿态、多重结构负责序列、评价函数负责质量。这个思路串起来之后,剩下的就是具体怎么点鼠标的问题了。

2. 核心细节解析与实操要点

2.1 坐标断点是扫描镜建模的基石

先说说扫描镜建模最基本的工具:坐标断点面。很多教程提过它,但真正理解的人不多。

在序列模式下,Zemax用局部坐标系来描述每个光学表面。光线从上表面出射后,沿着某个方向传到下一个表面。如果你希望一面镜子既能偏转光束,又不影响后续面的位置定义,就需要一个"坐标系转换器"。坐标断点面正是干这个的:它可以设置相对于前一个面的偏心(Decenter)和倾斜(Tilt),作用是在光路中插入一个姿态变换。

扫描镜的工作原理决定了它的坐标断点很有特点。多数扫描镜是一面镜子绕固定轴旋转,旋转轴通常垂直于入射面,且位于镜面中心。在Zemax里,这个结构对应的是:

  • 一个坐标断点面,用于定义镜子的位置和初始姿态;
  • 一个反射面(Mirror),用于改变光束传播方向;
  • (可选)另一个坐标断点面,用于抵消坐标系的改变,让后面的元件继续沿着原光轴排列。

关键点在于,坐标断点面的旋转轴位置必须对准镜面中心。如果旋转中心偏了,扫描过程中光斑轨迹会出现平移偏差——这个错误在静态设计里完全看不出来,但一旦扫描角度变化,问题就暴露了。实际操作中,我习惯把坐标断点的厚度设成0,旋转中心固定在坐标断点所在面,这样最直观。

镜面的偏转量和光束偏转量之间有一个二倍关系:镜面旋转θ度,反射光束旋转2θ度。这个关系看起来简单,但设置扫描角度时经常被忽略。举例来说,如果想实现±20°的扫描角,镜面实际只需旋转±10°。在设置多重结构参数时,一定要区分你要控制的是"镜面转角"还是"光束转角",否则最终扫描范围会差一倍。

2.2 多重结构:一个文件,多帧画面

静态的坐标断点只能表达一个扫描位置,而扫描过程的模拟需要一系列连续位置。Zemax的多重结构设计为解决这个问题提供了标准路径。

多重结构的本质是:在同一个镜头文件中维护多套参数版本,每套称为一个"结构"(Configuration)。不同结构之间可以有不同的曲率半径、厚度、材料、倾斜偏心甚至视场定义。分析时,Zemax会分别对各结构进行光线追迹,你可以在同一张图/同一组数据里看到所有扫描状态的对比。

对于扫描镜模拟,通常的做法是:

结构编号扫描角度(镜面倾角)对应光束偏转角典型用途
1-10°-20°扫描起始边缘
2-5°-10°中间采样
30°0°中心视场
4+5°+10°中间采样
5+10°+20°扫描终止边缘

结构数量的选择需要平衡信息量和计算量。如果只做初步验证,5~7个结构足够;如果需要对扫描均匀性做精细评估,可以加到几十个,Zemax在多重结构上的计算效率是比较高的。

2.3 参数化驱动:让角度"活"起来

在多重结构编辑器(Multi-Configuration Editor)里,要控制某个面的倾斜角,依靠的是操作数(Operand)。最常用的是PARAM操作数——它可以直接访问表面的参数值,包括坐标断点的Tilt X / Tilt Y / Tilt Z。使用PARAM时,需要指定表面序号和参数编号。Zemax里坐标断点的倾斜参数编号有固定规律:参数3对应Tilt X,参数4对应Tilt Y,参数5对应Tilt Z(不同版本略有差异,建议在帮助文档里确认)。

参数化驱动的优势在于:你不需要为每个扫描角度单独做一个文件,只需在多重结构编辑器里填入角度序列即可。而且后续如果想优化扫描镜的工作距离、入射角度,只需联动优化变量和评价函数,手动调整参数时也可以实时看到光路变化。

2.4 别忽略坐标系的"复位"

这是很多新人最容易卡住的地方。

在序列模式中,光线遇到反射面后方向改变,局部坐标系也跟着变。如果扫描镜后面还跟着透镜组、探测器等其他元件,这些后续元件是按什么坐标系排布的?如果不做处理,后续元件会继续沿反射后的光轴排列——这在有些设计里是合理的,但更多情况下,我们希望后续光路仍沿全局光轴方向延伸(例如投影镜头的光轴是固定的)。

遇到这种需求,就需在反射面后再插入一个坐标断点面,用来把坐标系"掰回"原来的方向。这个面的Tilt需要精确等于反射面造成的坐标系旋转量,实际操作中常用的方法是设成与之前坐标断点的旋转量相反。这也是为什么扫描系统里经常出现"坐标断点-反射镜-坐标断点"三段式结构:第一个坐标断点让坐标系倾斜以匹配镜面法线,反射面改变光路方向,第二个坐标断点补偿坐标系,让后面的透镜组继续"平躺"在全局坐标系里。

3. 实操过程与核心环节实现

3.1 基础建模:搭建一个扫描系统雏形

下面以一个典型的激光扫描投影系统为例,说一下完整操作步骤。这个例子包含激光光源、聚焦透镜、扫描镜和接收面,是最常见也最能说明问题的结构。

打开Zemax OpticStudio,选择序列模式,从系统选项里设置波长。比如模拟常见的532nm绿光激光器,在System Explorer里把波长设为0.532μm。孔径设置也很重要——扫描镜系统的入瞳直径通常取决于激光光束直径。假设光束直径是2mm,在Aperture里设入瞳直径为2mm,并把口径类型改为"Object Space NA"或"Entrance Pupil Diameter",根据需要来选择。

接着插入表面。典型的系统结构如下:

  • 面0:物面(激光出射端);
  • 面1:标准透镜前表面(聚焦透镜);
  • 面2:标准透镜后表面;
  • 面3:坐标断点(定义扫描镜位置与方向);
  • 面4:标准反射面(镜面);
  • 面5:坐标断点(复位坐标系);
  • 面6:像面(接收屏)。

这个结构里,透镜将激光聚焦到扫描镜附近,扫描镜把光束扫向接收面的不同位置。坐标断点面3控制镜面倾斜,面5起到复位坐标系的作用。初始状态下,可以把面3的Tilt X设为0°,即镜面法线与光轴重合,光线经反射后沿原光路反向或垂直方向传播(取决于你设的反射角)。

3.2 用坐标断点设定镜面初始姿态

在编辑面3时,将面类型选为Coordinate Break。设置Tilt X、Tilt Y、Tilt Z值。拿常见二维振镜来说,如果镜子只绕X轴转动,则只需修改Tilt X;如果扫描是两个方向的,就要同时使用X与Y倾斜。

需要注意的是,Zemax的反射镜并不"自动"出现在坐标断点的位置,反射效果来自表面的Mirror属性。我在面4的Surface Type中选择Standard,并在表面属性里将"Reflect"设置为Mirror(或直接使用"Mirror"面类型)。这样面4就等效于物理世界里的反射镜,光线在这里改变方向。

每当修改了坐标断点的Tilt值,立即用3D Viewer观察光路是否合理。一个特别有用的习惯:把"Show Local Coordinates"打开,这样可以看到每个表面的坐标系方向,一旦发现某个面坐标系跑偏,可以立刻定位是哪个坐标断点造成的。

3.3 手动验证:单角度扫描是否正确

在配置多重结构之前,先在单结构模式下验证模型是否正确。把面3的Tilt X设为5°,查看像面上的光斑中心坐标。根据二倍角关系,入射光束经5°镜面倾角偏转后,出射角应为10°。配合接收距离(比如100mm),光斑应该从中心位置偏移约100 * tan(10°) ≈ 17.63mm。如果光斑偏移量与这个估算严重不符,基本可以确认坐标断点设置或反射方向计算有问题。

手动验证是建立信心的过程——多重结构说到底只是把这种单角度验证批量复制,如果单角度就不对,多结构只会把错误放大。

3.4 配置多重结构:录入扫描序列

打开Multi-Configuration Editor(在Editor菜单下),把结构数设为需要的数量。光标放在操作数位置,点击右键,从常见操作数列表中选择PARAM。

操作数参数设置:

  • Surface:输入坐标断点所在的面序号(例如3);
  • Parameter:输入需要控制的参数编号(坐标断点的Tilt X为参数3,Tilt Y为参数4);
  • 在对应结构下方填入角度值。

例如,5个结构对应的Tilt X值可以分别填入:-10°、-5°、0°、+5°、+10°。然后逐个结构追迹光线,查看像面上的光斑位置和光斑大小。此时,你就已经拿Zemax完成了一次扫描过程的离散化模拟——每一帧结构对应扫描过程中的一个时刻。

如果扫描镜还伴随偏心运动(比如镜面在旋转的同时还有线性位移),可以在多重结构里同时控制坐标断点的偏心参数,例如PARAM 1对应X偏心、PARAM 2对应Y偏心。对于更复杂的运动轨迹,可以通过多个坐标断点组合来实现,这里不展开。

3.5 添加评价函数:自动评估扫描质量

单看光斑位置还不够,还要量化扫描质量。在Analyze菜单里打开评价函数编辑器(Merit Function Editor),设置默认评价函数,一般选RMS Wavefront(波前)或RMS Spot Size(光斑尺寸),目标设为中心视场最优。

但扫描镜系统的特点是,不同扫描角度对应的"有效焦距"可能略有不同,边缘视场的像质往往比中心差。所以,合理的评价思路是把每个结构都纳入评估:在评价函数里插入多重结构相关的操作数,让Zemax在优化时同时考虑所有扫描位置。

常用的搭配是:

  • CONF:指定当前评价函数针对哪个结构;
  • RMS Spot Size:评估光斑尺寸;
  • REAY或REAX:控制光束在像面的坐标,确保扫描角度与偏移量对应。

这样,优化时Zemax会在所有扫描角度上同时控制像质和位置,这是实现"全扫描范围内均匀成像"的关键设置。如果你只优化中心视场,边缘扫描位置出现光斑变大或位置偏移,那是必然的。

3.6 从静态帧到扫描动画:查看全扫描过程

当多重结构设置完成后,可以在Analyze里打开Multi-Configuration 3D Viewer。它会把所有结构的3D光路重叠显示在同一张图中,扫描镜的姿态和光路的角度差异一目了然。再配合"footprint detector"之类功能,还能查看不同扫描角度下的光斑分布和能量密度是否均匀。

如果你需要的是更接近动画的效果,可以把结构的顺序调整成时间顺序,然后用Zemax的"Animate"功能逐帧播放。这一功能在项目汇报时非常有用,能让非光学专业的同事或客户直观理解扫描系统的工作过程。

4. 常见问题与排查技巧实录

4.1 怎么判断扫描角度设置对了

扫描角度设置是出问题最多的环节。前面提到镜面转角与光束偏转角的二倍关系,很多人设着设着就绕晕了。更隐蔽的是,坐标断点的Tilt正负方向也会影响扫描方向——Tilt X为正值时,镜面向哪个方向倾斜,需要结合局部坐标系确认。

最简单可靠的验证方法:在近轴状态下,用一束沿光轴的平行光入射到扫描镜中心,记录像面上的光斑坐标,然后用理论公式反推:

偏移量 = 反射距离 × tan(2 × 镜面倾角)

如果实测偏移量与理论值一致,说明角度设定无误。再改变镜面倾角符号,观察光斑是否朝反方向移动,这也是一次很好的"方向感"测试。

4.2 光斑位置正确但边缘像质很差

这是典型的"位置对,像质不对"问题,常见原因有三个。

第一,扫描镜距离聚焦透镜太远或太近,导致镜面转动时,入射光斑在镜面上的位置发生明显偏移。镜面反射的是大离轴光束的边缘部分,离轴像差自然增大。这种情况下,需要调整扫描镜与聚焦透镜的距离,尽量让镜面位于聚焦光束的束腰附近。

第二,后续复位坐标系不够精确。如果面5的坐标断点没有完全补偿面3造成的坐标系旋转,后续透镜会出现额外的偏心或倾斜,导致系统失去轴对称性,像质快速下降。这种情况在3D Layout里通常能看到光路歪斜,或者在Spot Diagram里看到明显的彗差形状。

第三,扫描角度过大超出了透镜的视场范围。任何系统都有视场限制,扫描角度过大时边缘视场的像差必然增加。这时需要考虑使用f-theta透镜或增大后续透镜口径。

现象排查顺序最可能的解决手段
光斑大小随扫描角增大①→②→③调整镜面位置至束腰;补偿坐标;换大视场镜头
光斑位置非线性偏移①→③确认二倍角关系;检查是否混用了镜头f-theta畸变
部分结构光线丢失①③增大透镜口径或扫描镜直径

4.3 边缘扫描时出现光线渐晕或丢失

光线追踪到一半"消失",通常是口径限制导致的。扫描角度增大时,光束在镜面上的投影面积变大,镜面尺寸不够就会产生渐晕。处理办法有两个方向:一是增大扫描镜口径(通常按最大扫描角时投影椭圆来估算),二是缩小入射光束直径。后者虽然简单,但会牺牲分辨率或能量密度,需要权衡。我一般建议用操作数OPLT/OPGT去约束扫描镜上的光斑尺寸,在优化时就把口径问题纳入控制,而不是事后补救。

4.4 扫描轨迹不是直线而是弧线

在二维扫描系统里,两面镜子分别负责X和Y方向,如果两面镜子的旋转中心距离入射光轴太远,扫描轨迹会出现枕形畸变或桶形畸变,有时是弧线。这在物理上是正常的几何效应。如果对扫描轨迹的线性度有严格要求(比如激光打标),需要在系统里加入一个专门的f-theta镜头来补偿畸变;如果扫描角度范围不大,也可以接受较小的几何畸变,不必上f-theta。判断标准取决于系统的精度需求,没有固定答案。

4.5 多重结构里明明改了角度,结果却不变

如果修改了多重结构参数,但光路模拟结果完全没变化,先检查几个地方:

  • 操作数的Surface是否指向了正确的面序号;
  • 参数编号是否对应了正确的自由度(Tilt X还是Tilt Y,弄混了很常见);
  • 是否在优化或评价时,误把多重结构参数当成了变量但没有激活相应的结构;
  • 是否在Analysis设置里选择了"All Configurations"而系统只默认显示了当前结构。

这类问题90%以上都能通过这三步解决:查表面号、查参数编号、确认分析设置。

4.6 坐标断点导致的坐标系混乱如何快速排查

坐标系乱了是最让人头疼的,好在我有一个屡试不爽的排查方法。在3D Layout里打开局部坐标系显示,逐面检查坐标系方向是否与设计一致。具体来说:第一个坐标断点让坐标系倾斜以匹配镜面法线;反射面后坐标系方向被翻转;第二个坐标断点将坐标系复位。如果复位坐标断点的设置与第一次旋转不一致,后续透镜的局部Z轴就会是斜的,这下问题就非常直观了。只要沿着光路把每个面的坐标系方向看一遍,是哪个面的设置出了问题,一眼就能揪出来。

5. 进阶:让扫描模拟更接近真实系统的几个思路

5.1 镜面形状不是理想平面的情况

实际扫描镜在高速扫描时,镜面会因为惯性发生微量弯曲。频率高到一定程度,镜面可以看作一个轻微曲率的曲面。在Zemax里,可以把面4从Standard平面改成偶次非球面,给一个微小的曲率半径。虽然数量级很小,但在共聚焦或精密测量系统里,这种变形对成像质量的影响不可忽略。有兴趣的话,可以做一个对照仿真:把镜面曲率设为几个不同值,记录系统波前变化——你会看到很小一个曲率量级(如曲率半径几千毫米),就足以让光斑尺寸明显退化。

5.2 温度影响与热变形耦合

某些户外激光雷达应用,扫描镜在露天环境下工作,温度变化会让镜面基板发生热膨胀,改变反射面的平面度。在Zemax里做温度分析要走多重结构+温度相关的材料属性设置,把镜面基板材料的热膨胀系数和折射率温度系数都赋进去。对于反射镜来说,折射率温度系数不重要,但热膨胀会让曲率半径和厚度发生微小变化。虽然Zemax本身是光学仿真软件,不擅长结构热力学耦合,但通过合理设置温度参数,在光学层面评估热漂移的影响是完全可行的。

5.3 与机械运动信号的协同

很多时候,扫描镜不是匀速扫描,而是受正弦信号、三角波或自定义轨迹驱动。Zemax的多重结构本身不关心时间维度,它只关心"某个角度对应什么性能"。所以,如果你已经在Matlab或Python里计算好了扫描角度随时间的变化序列,直接把这一序列导入多重结构编辑器,就能在光学层面看到每个时间点的系统性能响应。我通常的做法是:先在外部把信号生成好,复制粘贴到多重结构编辑器里,再用Zemax批量计算各结构下的MTF或RMS,最后回到Matlab里把性能曲线和时间轴对应起来画图。这样得到的"时间-像质"曲线,几乎是真实系统的数字孪生。

6. 写在最后:一些实在的建议

做扫描镜模拟这几年,我最大的体会是:Zemax里90%的报错和异常结果,都源于建模时对坐标系和反射关系理解不透。坐标断点不是拿来"玩玩"的旋钮,它是光路描述里最需要精确控制的部分。每一对坐标断点都对应一个物理运动,参数从哪来、符号是正是负、旋转中心是否偏移,这些都是在建模型之前就应该想清楚的事。

另一个实用建议是:做任何设计验证,先手工估算再上仿真。比如扫描偏移量,先用tan关系算一个大概值,再去软件里看结果是否一致。很多错误如果建立这种"先估算、后仿真"的习惯,能在几分钟内就发现,而不是在多重结构、评价函数、优化器里绕半天才反应过来是方向反了。

最后,存储文件时,把多重结构的角度列表和物理运动信号的对应关系写进注释里。项目过几个月再回头来找,你很可能已经忘了当初某个结构是模拟的波形起始点还是终点。Zemax文件能存注释,多写两行字,后面能省不少事。扫描镜模拟这件事,说到底就是把空间和时间同时装进一个光学模型里,思路理顺了,整个流程其实并不复杂。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询