
今天讲如何将光斑的能量由高斯分布转换成均匀分布,过程中透过原理分享lens的设计&优化方法。
开始之前先简单过下应用场景。
光器件的制作工艺中,激光焊接一直因其高可靠性都存在的,无论低速还是高速产品、无论何种封装方式。
常用的激光焊接设备都是3枪呈120°分布,通过lens将光点聚焦在待焊接的部位:

常见的焊斑状态:

因为激光的能量分布不是均匀的,所以焊斑也会呈现中间熔融深度比旁边大,因为此处激光焊接只需要靠熔融部分将两部分金属“固定”在一起,所以对激光的能量分布没有均匀性要求;

激光器的面板显示一般是这样的:

激光出射的能量波形是根据实际产品对焊接的要求定出来的;
然而在有些应用场景,如激光切割、激光清洗等,要求激光在待处理的物体表面能量均匀分布以保持切割边界的“锐利”(如刻字凹槽)、或局部温度的一致性(如切割塑料)。

所以需要将激光的高斯形态:

整形成均匀形态:

怎么实现呢?
答:通过设计lens整形来实现。
lens整形的结果需要达到物方的光斑能量分布:

整成像面上的光斑能量分布:

我们需要怎么做才能设计出满足要求的lens呢?
小熊先展示2个简单的模型:
模型1:LD光源发射200根光线,传输1mm后,被1*1mm的像面接收;

模型2:LD光源发射200根光线,传输1mm后,被1*1mm的像面接收;

上面两个模型,同样的200根光线,同样传1mm,同样被1*1mm的像面接收,然而像面上的光斑形态却不同,Why?
答案是:小熊将两个模型中光线发射的方向改变了。即同样的200根光线,在两个模型中每根光线到达像面的位置不同。
高斯匀光的原理也类似,将高斯光源发射的光,经透镜后,将每根光线到达像面的位置进行调节,使其不再是高斯分布,而是均匀分布。

有的,Zemax中有个操作数可以实现:REAY,其专门定义光线的投射高度。
画出基本光路示意图:

我们从这个光路示意图中,找出高斯光和均匀光的各自分布,即先明确输入和输出,再寻找输出与输入之间的关联关系,从而确定lens的设计方法。
先看输入:高斯分布;

再看输出:均匀分布,我们参照平顶高斯函数;

按照傅里叶的概念,平顶高斯函数可看成由不同频率的高斯函数合成得来:

N越大,平顶高斯函数越接近“矩形”;
想在高斯与平顶高斯函数之间建立函数关系来设计lens,看上去问题太过复杂;
简化之,我们将像面上的光power分布期望如下f(x)=1:
你可以理解为N取值无穷大....

输入与输出的函数形式有了,两个函数之间的通过哪个不变量建立联系呢?
答:光功率。
光功率,大家都懂的,我们常用的单位是mw,或者dBm,用光功率计可以测得的,代表的是光的能量。
根据能量守恒,忽略传输过程中的一切损失,如果光源发射100根光线,必然就有100根光线到达像面。
于是,高斯分布与均匀分布之间,光线总数是相等的,即光能量相等。
直观地看,就是函数曲线沿着各自中心轴线旋转360°后,“体积”相等。
下面就在高斯与平顶两个函数的“体积”之间建立函数相等关系,作为输入与输出之间的“桥梁”,即为lens设计找到参数优化的目标:
体积=底面积x高;
假设激光光源的power分布如下:

我们将曲线包络的面积、如上图颜色填充的部分为例,假设dx->0即dx无限小,为后面引入积分的概念做铺垫(此处x=0);
这时候,颜色填充部分的面积近似等于如下图的矩形的面积(因为dx无限小,包络的近似三角形部分面积忽略不计):

此时,填充部分的矩形沿着竖直方向轴线P旋转360°空间的体积为:

于是,对任意x位置,

其包络的曲面体积为:

有看不懂这个积分公式的举下手,o(∩_∩)o 哈哈~
把这个积分公式换种写法:

这下懂了吧
于是乎,对于任意已知的x,我们都知道其包络的“体积”是多少了。
再来看输出端:
对于任意已知的x,我们都知道其包络的“体积”:


对于任意给定的输入高斯光的坐标x,都能找到与之对应的均匀光的坐标x ,于是可以建立关系式:

将上式子积分求解,关系式整理如下:

来看下这个等式的参数:
P0 ---高斯光的峰值功率;
w ---高斯光的束腰半径;
x ---高斯光线的出射位置坐标;
x ---高斯光线在均匀光上投射的位置坐标;
P ---均匀光的平均功率;
lens的设计就是以这个关系式作为依据,已知每一根光线的x坐标,使其投射到像面上的x 坐标优化成满足上式,即可得到均匀分布;
根据能量守恒,输入光的总能量应该等于输出光;
于是,在x趋于无穷大,x 趋于均匀光的最大半径R时,通过上式得出:

即,已知高斯光的峰值功率、束腰半径、均匀光的半径,那么均匀光的平均功率会是根据这三个参数相关的定值;
将这个带入上面关系式,得出:

好了,这个就是我们动用REAY操作数进行操作的终极关系式;
下面进入运用zemax软件进行lens设计的操作过程;
先设置光瞳直径与光的power分布:

再设置波长:

正常的切金属的YAG激光器以及我们光通信行业用于光器件焊接的光纤激光器波长都是1064nm,红外的哈,我这里因为lens的玻璃选的是N-BK7的,其在zemax中波长范围没覆盖到1064nm,因此会报错,懒得改玻璃参数了,所以就将波长暂且设置成红光(氦氖激光器的波长)。
Add lens,完成光路的初始状态:

以上参数,是小熊设置的假设已知值,在zemax中构建的初始光学结构;
查看输入光的状态:

更直观点:光斑中心“亮”,边缘“弱”,典型的高斯分布;

我们再来看像面上的光斑状态:

初始结构中的lens,使得输入高斯光束,输出依然是高斯光束,只是束腰和光斑尺寸发生了变化。
我们需要输出是均匀光分布的话,需要设置优化函数,利用操作数REAY,使得每一根光线按照前面推导的关系式,给定输入坐标,定位均匀分布的输出坐标。
设置操作数:

我们了解下REAY操作数每一栏设置值的涵义是什么?

REAY设置的是每一根光线的优化参数:
优化哪个面上的光线坐标?
目标坐标是多少?
权重多少?
实际结果是多少?
......
如果采样是100根光线,那么我们需要设置100行这样的操作数。
这个工程看上去太复杂了,有没有简单点的办法?
答:有,写代码,编程;
提到编程,Zemax并不强求你是很专业的程序猿,消除恐惧心里,我们step by step来化恐惧为不屑(切,原来这么简单!);
Zemax 编程语言(Zemax Programming Language)简称ZPL,是一个专为配合Zemax使用的编程语言,有特定的功能函数和固定的格式,可以自动show 出bug,引导用户自查以修改逻辑代码(只show逻辑错误,公式格式错误等是不报的哟),使用方法跟说明书一样简单明了。

废话不多说,上代码!

这些代码啥意思呢?
统一解读:

我们抽出一行代码来讲解,带大家了解下ZPL编程语言的特点:
SETOPERAND I,11,"REAY"
看下说明书中对这行代码的官方解释:

即SetOperand这个函数,后面的三个符号row,col,value,分别被定义了,特定的取值代表特定的意义。
譬如,我们设定I的取值从1到100,代表的是光线数量,对于每一个I,都设定对应的操作数REAY,就是要实现前面我们说的用编程来代替我们手动输入;
而SETOPERAND I,11,"REAY"这种格式是ZPL编程语言中已经规定好了的,并且实现这一功能的格式不一定唯一,我们换种格式也能实现相同的效果:
SETOPERAND I,1,ONUM(REAY)
即给每一行I,设定REAY操作数,这两行代码是等价的:
SETOPERAND I,11,"REAY"
SETOPERAND I,1,ONUM(REAY)
再看一行代码:
SETOPERAND I,8,-X
为何返回函数的负数解?
看下图红色光线在输入和像面上的坐标关系:
正坐标入射的光线,在像面上坐标为负;

代码知道咋写了,怎样将代码加入zemax中并执行呢?
随便一个ASCII码编辑器都能编辑ZPL,但文件扩展名必须是.ZPL;
推荐个简单的方法:
在Zemax安装文件的文件夹Macros下,随便找个现成的ZPL文件,复制,然后粘贴成副本,再重命名为你想要命名的新ZPL文件,譬如命名为“Gauss change to top flat.ZPL”


打开Zemax,沿着路径打开ZPL宏语言:


别忘了在右侧“记事本”中点保存哟~
在Zemax中运行代码:

程序第一次报错:
代码中没有定义W,虽然我们都知道是束腰半径的意思,but程序不知道!

于是,在代码中增加W的定义:

再次运行代码:

代码第二次报错:光线停止了追迹;
我们进行自动优化,试试看:

自动优化无法运行,Why?
说明:光路初始结构设置得有问题;
我们修正lens参数:

再运行代码:
小熊电脑浏览器问题,最上层窗口本该显示光路但没显示出来。

代码运行OK了,自动生成了100根光线的REAY操作数:

当然,这时的光路还不是最优的,还需要进一步优化(进入常规操作阶段);
最终的优化结果如下(这个结果因设计者而异,不唯一):

有些细节问题如参数的设置、操作按钮或实际操作中遇到的其他一些小问题,此处就不一一念叨了;
本文转载自:小熊之光
—END—
我们的微信矩阵
本文注明来源为其他媒体或网站的文/图等稿件均为转载,如涉及版权等问题,请作者在20个工作日之内联系我们,我们将协调给予处理。最终解释权归光电汇所有。
本文版权所有,
公众号如需转载
请联系oepn@siom.ac.cn

