杂散光分析的过程
LightTools分析杂散光的案例
之前的文章一直在重复一些基础的操作,本次将前文的东西进行整合,做一次杂散光的分析,还是以LightTools中的例子作为此次的实验对象。
一、打开LightTools中自带的例子
具体过程参照一下的示例:
打开例子后会出现下图中的内容,点击application并找到staylight(杂散光)选项,里面存在三个文件,有两个是lts文件,一个PDF文件,打开它们。
其中pdf详细讲解3片式镜头ghost的产生原理,以及光源,滤光片的设置。下面展示其中的基础部分,需要详细部分可以自行查看。
注意查看镜片 结构件 的光学特性(此处的设置仅对本例子有效),以后的仿真过程将尽量按照实际的光学特性设置(例:结构的反射和吸收设置多少为标准,并没有规范,如果供应商提供的话最好,不能提供,也可以用积分球进行测试)。
首先可以肯定,光学吸收体一定是透镜的外圈,机械吸收肯定是结构件,但实际使用机械吸收,黑色结构件也不是完全吸收。全投射三处使用在光源处,不予理会,最重要的是平滑光学,此处的光学特性必须选择分光,不然不会出现多的光学路径,此处例子中直接给的是菲涅尔损耗,也就是说其中的6个光学面全部没有镀膜(在实际的设计中肯定会镀膜,镀膜曲线也可以直接加载进去,至于后续在实际的例子中进行分析)。
第二步是光源的设置,具体看例子截图,直接在物体表面建立光源即可
第三步,产生光学路径的一步,即在探测器中增加光学路径 滤光片,具体看例子如下
第四步,仿真后得到各个到达sensor的光路径
第五步,分析光路径,找到最大的光路径,并判断杂散光,这一步的分析是比较麻烦的,因为在一个系统出来时,根本不知道光线的相对强度即光线的阈值是多大,而且在分析主强度时需要根据探测器的灵敏度,以及flare的接收程度来判断是否需要拦光,但是ghost是一定要消除的。
此处例子中直接给0,在设计过程中是不合理的,这个可以根据拍摄以及sensor的情况给具体的值,这是一个经验值,所以手机镜头需要长期拍flare,并找到相应的flare位置。
总共发射137万光线,总能量0.99W,总共接收18万光线,0.38W能量。
其中最大的肯定是主光斑,那么其余的都是杂散光,至于杂散光的取舍,还是得看相对值,一般相差10000倍肯定可以忽略,就算遇见最大得太阳光,出现flare应该也能接受。
为此本次代码先只仿真多个不同角度的平行光入射,并输出主光斑的能量值和图片,进行代码演示,原因主要是简化工作,想深入了解,后续会继续更新一些操作,将所有的路径全部输出,光线数据以及能量值,这是一个繁杂的过程。
二、代码部分
代码如下(示例):
Sub GETPARM()
'循环将每次仿真的结果粘贴入excel
'****************************
'定义接口
Dim lt As LightTools.LTAPI
Set lt = New LightTools.LTAPI
k=1
p=1
For l = 1 To 15 Step 1
'设置偏转角度
SOURCEAlpha = lt.DbSet("LENS_MANAGER[1].ILLUM_MANAGER[Illumination_Manager].SOURCES[Source_List].CYLINDER_SURFACE_SOURCE[CylinderSource_7]", "Alpha", l)
'开始仿真光线
lt.Cmd "BeginAllSimulation"
'在命令行输入 需要观察的视图,此处需要注意将正向照度提前打开(不然会报错),如果需要光栅图表,可以
'自行尝试,因为光栅图标没有粘贴到剪切板这一个命令
lt.Cmd "\VChart_Receiver_7_正向_照度 "
'粘贴至剪切板
lt.Cmd "CopyToClipboard "
' with 语句 VBA特有?不再需要写前面的worksheets对象
With Worksheets("Sheet1")
' range(D1,D1)开始,excel需要xy两个方向定位到一个单元格和matlab类似,并执行选择性粘贴
.Range(Cells(k, 4), Cells(k, 4)).PasteSpecial _
' 选择粘贴所有
Operation:=xlPasteAll
End With
'选中图片并更改图片的 高度和宽度
Selection.ShapeRange.Height = 160
Selection.ShapeRange.Width = 128
'放置数据
mainspotpower = lt.DbGet("LENS_MANAGER[1].ILLUM_MANAGER[Illumination_Manager].RECEIVERS[Receiver_List].SURFACE_RECEIVER[receiver_9].FORWARD_SIM_FUNCTION[Forward_Simulation]", "RayPathPowerAt", "1", "1")
mainspotraynum=
lt.DbGet("LENS_MANAGER[1].ILLUM_MANAGER[Illumination_Manager].RECEIVERS[Receiver_List].SURFACE_RECEIVER[receiver_9].FORWARD_SIM_FUNCTION[Forward_Simulation]", "RayPathNumRaysAt", "1", "1")
Worksheets("Sheet1").Range(Cells(p, 2), Cells(p, 2)) = mainspotpower
Worksheets("Sheet1").Range(Cells(p, 3), Cells(p, 3)) = mainspotraynum
'这一句主要防止错误对话框弹出
Application.DisplayAlerts = False
k=k+7
p=p+1
Next l
End Sub
补充说明
当然上述的代码和设计过程中,光源尽量放置于入瞳位置,而且光源只倾斜角度是不太对,还需要改变光源的高度,这个需要根据光学系统进行详细的计算,此过程只提供了杂散光分析的主要思路,后续的实际结合,还是要大家多思考。