news 2026/9/17 4:50:15

LED准直光学实战:TIR透镜的全内反射设计、仿真与调校

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LED准直光学实战:TIR透镜的全内反射设计、仿真与调校

简介:一份基于MATLAB的TIR(全内反射)准直透镜仿真脚本,面向LED照明设计、光学工程初学者及光学爱好者。利用全内反射原理,通过编程模拟LED发散光束经TIR透镜后的准直效果,可直观观察光路变化并分析透镜几何参数对出光效率的影响,帮助理解非成像光学设计与照明系统优化的核心思路。压缩包共1个文件,即TIR.m脚本,大小约1KB,轻量易用,适合在MATLAB环境中直接运行和二次修改学习。目前已有1727人学习下载。脚本虽简短,但完整展现了从光源设置、透镜轮廓计算到光线追迹与结果可视化的基本流程,既可用于课程演示,也可作为光学仿真入门的练手项目。通过阅读和调试代码,读者能掌握MATLAB绘图与数值计算在光学模拟中的具体应用,为后续设计更复杂的LED准直系统打下基础。

1. TIR准直透镜:LED光路里的“隐形收光斗”

看到“TIR.rar_LED准直”这种命名,做照明结构设计的人第一反应往往是:又来了一个从项目现场或供应商手里转出来的压缩包。里面装的十有八九是一份TIR透镜的3D模型、光学仿真文件或加工图纸,但文件名没有任何版本信息。TIR透镜,即全内反射透镜,是LED二次光学中最常见的一类。它利用光从高折射率介质射向低折射率介质时的全内反射现象,把LED朝四面八方发射的朗伯体光束“拐弯”成一束近乎平行的出射光。相比反光杯,TIR透镜整体厚度更薄、侧壁可以做成任意收光角度,还能同时兼顾中央折射区和边缘全反射区,因此在射灯、轨道灯、汽车日行灯、机器视觉光源里大量使用。这篇文章不讲空泛的概念,直接带你从零算曲面、建模、仿真、打样再到快速验证。新手可以照着步骤跑通一个最小设计,熟手可以在参数边界和加工误差上找到新信息。

2. 从朗伯体到平行光:TIR准直透镜的曲面计算与关键参数

2.1 全内反射的临界角与TIR透镜的收光结构

先明确一个光路模型。LED芯片通常贴在基板上,发光面近似为朗伯体,光强按余弦分布,半强角约60°。TIR透镜的中心轴对准LED发光面中心,透镜底部有一个半球形或锥形的空气腔,LED伸入这个腔内。光线先从空气穿过入光面进入透镜材料,到达透镜外部侧壁,侧壁设计成旋转对称的反射面。当光线在侧壁上的入射角大于临界角时,发生全内反射,反射后光轴方向射出。也就是说,TIR透镜的反射面实际上是把“侧面漏光”变成“正面出光”。

临界角的计算非常直观:全内反射要求入射角θ满足 sin(θ) > n2/n1。以PMMA(n=1.49)和空气界面为例,临界角约42°;换成PC(n=1.586),临界角约39°。这里的角度是光线与界面法线的夹角,不是与光轴的夹角。很多新手画草图的时候直接把反射面的切线角度算成45°,导致边缘光线入射角不足40°,结果一部分光透射出透镜,形成杂散光。我一般会在设计约束里给反射面留2°~5°的余量,确保所有需要反射的光线都处于全反射状态。

TIR透镜的收光结构可以分成两段:中央区(折射区)和边缘区(全反射区)。中央区通常是一个球面或椭球面,负责把LED正上方小角度光线折射到出光面;边缘区是一段抛物线或样条曲线绕光轴旋转的曲面,负责把LED大角度光线反射回光轴方向。中央区和边缘区的分界点取决于LED发光面尺寸和透镜厚度,一般取光源半角在30°~45°之间的位置。这个比例决定了透镜的整体高度,是后面所有计算的起点。

2.2 用Python解TIR透镜的轮廓曲线

设计TIR透镜的核心问题是求解边缘反射面的母线坐标。常见做法是使用等光程法:要求LED边缘光线从光源发出后,经过反射面反射到同一出光参考面的光程是定值。当出射光为平行光时,这个条件等价于把反射面母线设计成以光源为焦点的抛物线。这里给出一个最小可运行脚本,输出反射面的离散点坐标,供后续导入CAD。

import numpy as np def parabola_profile(A, r_start, r_end, dr=0.05): """ 等光程法生成TIR反射面母线坐标 抛物面方程: z = (r^2 - A^2) / (2*A) A: 抛物线焦距参数,单位mm r_start/r_end: 反射面径向范围 dr: 采样间隔(mm) 返回: rs, zs 两个一维数组 """ rs = np.arange(r_start, r_end, dr) zs = (rs**2 - A**2) / (2.0 * A) return rs, zs # 一组典型设计参数:PMMA材料,焦距A=10mm,反射面半径12~25mm rs, zs = parabola_profile(A=10.0, r_start=12.0, r_end=25.0) for r, z in zip(rs[::10], zs[::10]): print(f"r={r:6.2f} mm, z={z:6.2f} mm")

这段代码的逻辑说明:A 是抛物面焦距参数,光源位于焦点处,光线经过抛物面反射后变成平行光;方程 z = (r² - A²)/(2A) 由等光程条件推导而来。执行后会得到从12 mm到25 mm,每隔0.05 mm采样的母线坐标。注意这个模型把光源视为理想点光源,且忽略了光线在入光面的折射;实际工程中还需要把LED芯片尺寸带入,用光线追迹做一次迭代修正,但抛物线母线作为初值已经非常接近最终形状。

参数说明:A 取10 mm时,反射面起始点半径必须大于10 mm,否则 z 为负,曲面会落到LED下方。r_start 是中央折射区和边缘反射区的分界点,由LED发光面的覆盖角决定;如果LED芯片变大,r_start 要相应增大,否则中央区无法覆盖光源视场,会出现中心暗斑。r_end 由透镜外径决定,外径越大,准直角度越小,但厚度随之增加。A 的典型取值在透镜直径的0.3~0.6倍之间,取小了透镜扁但反射面陡,取大了透镜厚但曲面平缓。

2.3 TIR透镜与反射杯、菲涅尔透镜的选型对比

设计选型时,工程师常把TIR透镜和反光杯、菲涅尔透镜放在一起比。这里给出一个比较表,按我自己的经验整理:

方案典型长度(口径1英寸时)出光效率光斑控制模具成本适用场景
反光杯15~25 mm85%~92%外围光晕明显手电筒、工矿灯
TIR透镜8~15 mm80%~90%边缘清晰,杂散光少射灯、轨道灯、车灯
菲涅尔透镜3~6 mm70%~85%沟槽衍射杂散光投影均匀照明

TIR透镜的优势不在效率,而在薄和光斑可控。反光杯需要一定深度才能收拢大角度光,TIR透镜则通过全反射把光线“折”回来,所以能做得更薄。菲涅尔透镜的沟槽结构容易在明暗交界处产生衍射条纹,TIR透镜是连续曲面,杂散光更容易被仿真预判。缺点是TIR透镜的曲面精度要求高,模具注塑时如果收缩率没控制好,反射面轮廓偏差超过0.02 mm,出光角度就会偏,这个在后面第4章会专门说。

3. 在CAD与光学软件里搭出可加工的TIR准直透镜

3.1 从点云到SolidWorks曲面:一套可复制的建模路径

拿到上一步计算的母线坐标后,最直接的做法是在SolidWorks中用“通过XYZ点的曲线”生成样条,再旋转成实体。为了减少手工录入,我一般会先用Python把点云写成CSV文件,CSV第一行是X、Y、Z三列,X 对应径向半径,Y 对应高度,Z 全部填0。这样导入SolidWorks后,曲线直接落在Front基准平面的草图坐标系里,不需要再调整轴向。下面的代码生成反射面和出光面两组点云。

import numpy as np import csv # 反射面母线,焦距A=10,半径12~25mm A = 10.0 rs = np.arange(12.0, 25.0, 0.1) zs = (rs**2 - A**2) / (2.0 * A) # 出光面为水平面,固定在最顶端高度 z_top = zs[-1] r_out = np.arange(0.0, 25.5, 0.5) z_out = np.full_like(r_out, z_top) with open('tir_profile.csv', 'w', newline='') as f: writer = csv.writer(f) writer.writerow(['X', 'Y', 'Z']) for r, z in zip(rs, zs): writer.writerow([f'{r:.4f}', f'{z:.4f}', '0']) for r, z in zip(r_out, z_out): writer.writerow([f'{r:.4f}', f'{z:.4f}', '0']) print(f"生成完成:反射面 {len(rs)} 点,出光面 {len(r_out)} 点")

代码运行后会生成tir_profile.csv。逻辑说明:反射面点沿径向从12 mm增长到25 mm,高度从约2.2 mm增长到约26.6 mm;出光面点是一条水平线,在SolidWorks中旋转后就是透镜顶面。导入时,在“插入 → 曲线 → 通过XYZ点的曲线”中打开CSV,会看到两条曲线:一条是反射面母线,一条是出光面半径线。再用“旋转曲面”让反射面母线绕Y轴旋转360°,就得到TIR透镜的实体轮廓;出光面不需要旋转,它只是辅助定位。

入光面不要在点云里做。常见做法是实体建模完成后,在底面画一个半径8 mm的圆,用“旋转切除”挖出一个半球形或锥形凹陷,深度到3 mm左右,这样LED就有足够的装配空间。如果入光面挖得太浅,LED的发光面包不进透镜,中央光线会直接撞到反射面内壁,产生明显的暗环。如果挖得太深,透镜底部壁厚不足1 mm,注塑时容易产生应力发白。

3.2 在TracePro/LightTools中设置光源、材料与追迹参数

实体建模完成后,下一步是导入光学软件。TracePro 和 LightTools 对SolidWorks模型都有原生接口,常见操作是直接“插入组件”或“链接到CAD文件”,这样改模型后光学文件会自动更新。导入后的设置顺序:先给实体指定材料属性,PMMA折射率1.49,阿贝数约58;然后把反射面表面属性设置为“光学平滑”,这是一个容易踩的坑——很多镜面反射属性默认是金属铝反射,会把全内反射的光直接吸收一部分,正确做法是让光学软件根据材料折射率自动计算界面处的菲涅尔反射与全内反射。也就是说,TIR透镜的反射面其实不需要设成反射面,只设“表面光洁度”为光学级即可。

光源设置方面,我一般使用格点光源或远场光源文件。LED厂家会提供Ray文件或IES文件,TracePro支持导入主流厂家的Ray数据;如果做初步验证,可以用软件内置的朗伯体光源,发光面设为方形或圆形,尺寸等于LED芯片尺寸,例如1 mm×1 mm,发射角度设为±90°。追迹光线数量,个人经验10万条起步,看均匀度趋势开30万条;少于10万条时光斑边缘容易出现明显的随机噪声,无法判断设计是否真的准直。

追迹参数还有一个不起眼但重要的选项“光线分裂阈值”。默认阈值通常在0.05左右,意味着单条光线能量低于入射光5%就终止分裂。对于TIR透镜,表面反射的杂散光往往只剩1%~3%能量,如果阈值太高,这些杂散光不会被记录,仿真结果会比实际更好看。我习惯把阈值降到0.001,代价是追迹时间增加了3~5倍,但能暴露边缘漏光的细节。

3.3 出光面面积与透镜厚度对配光的影响

出光面的大小直接决定准直角度。从几何光学看,一个理想的准直光学系统满足“光学扩展量守恒”:光源面积 × 光源立体角 ≈ 出光面积 × 出光立体角。因此LED芯片越大,想要达到同样的出光角度,出光面就必须越大。反之,如果透镜外径已经限定,增大出光面只能通过压缩反射面的径向尺寸来实现,这会导致边缘光线无法被完全反射,反而增加杂散光。

厚度的影响:透镜厚度主要影响中心暗斑和装配高度。厚度太小(小于8 mm)时,中央折射区与边缘反射区之间的过渡不连续,在光斑中心会出现暗环;太厚(大于20 mm)则注塑缩痕明显,冷却时反射面容易变形。下表是同一款口径50 mm透镜在不同厚度下的仿真半强角,供调参参考:

透镜厚度(mm)半强角(°)光斑均匀度(RMS)效率注塑风险
68.50.3191%
105.20.1887%
153.60.1282%
202.80.0976%

这个表是我在两个不同项目里积累的趋势,不是标准值。如果你发现自己的仿真数据和表里差很多,先检查LED芯片尺寸是不是比1 mm大很多。芯片越大,半强角越大,而效率会因为反射面被压缩而下降。

4. 仿真→打样→测试:TIR准直透镜落地中的坑与调参策略

4.1 光线追迹结果怎么看:光斑均匀度与效率的判据

很多人拿到TracePro的照度图,第一件事是看中心照度最大值,这其实是误解。对TIR准直透镜,最该看的是两件事:远场光强分布图中的半强角和光斑边缘跌落梯度。半强角也就是光强降到峰值一半时的角度,它决定了“准直”到底准不准;边缘跌落梯度反映了是否有未准直的杂散光泄漏。如果半强角内光强波动超过20%,说明反射面和折射面之间衔接有问题。

为了把均匀度量化,我常用一个Python脚本处理仿真导出的Excel照度数据。脚本计算目标区域内的归一化RMS均匀度,RMS值越小代表光斑越均匀。

import numpy as np def uniformity(raster_array, center_fraction=0.8): """ 计算光斑均匀度 raster_array: 二维数组,来自仿真远场/近场接收器 center_fraction: 取中心多大面积的区域来计算 """ h, w = raster_array.shape cy, cx = h // 2, w // 2 radius = int(min(cy, cx) * center_fraction) yy, xx = np.ogrid[:h, :w] mask = (xx - cx)**2 + (yy - cy)**2 <= radius**2 values = raster_array[mask] return float(values.std() / values.mean()) # 使用示例: # data = np.loadtxt('illumination.csv', delimiter=',') # print("RMS均匀度:", uniformity(data))

这段代码用圆域掩码取出中心80%范围,计算归一化标准差。为什么取80%而不用100%?因为光斑边缘是半强角定义的,边缘数据波动大,混入计算会让均匀度失真。若RMS值小于0.15,人眼基本看不出光斑有明暗纹;0.15~0.25之间只能靠对比照片才能分辨;超过0.3则必须回炉优化曲面。

效率的判断相对简单:接收器收集到的总光通量除以光源发出的总光通量。TIR透镜的效率通常定义在80%~90%,注意这里的效率和“光效”不是一回事,后者还包括LED本身的电光转换。如果仿真效率低于75%,第一反应不是去调曲面,而是去查反射面的入射角是否所有光线都大于临界角;最常出问题的是靠近中央折射区的那几个点。

4.2 3D打印与注塑工艺下的曲面精度差异

打样阶段,多数人用SLA或光敏树脂3D打印。这里必须提醒:透明树脂打印出来的TIR透镜,表面呈雾状,不是光学透明,直接测试会让效率下降20%甚至更多。原因不是材料透光率差,而是层纹形成了微观漫反射面。打印TIR透镜有几个实用技巧:一是把透镜侧立或倾斜30°~45°打印,让反射面层纹和光轴成一定角度,避免层纹变成同心圆衍射栅;二是打印完成后用细砂纸从1000目到3000目依次抛光,再涂一层透明UV胶固化成光滑表面;三是如果打印机支持,开启“抗锯齿”或“光滑曲面”模式。

注塑工艺的精度则取决于模具。PMMA注塑模具的收缩率约0.3%~0.5%,PC约0.5%~0.7%。对TIR透镜,反射面轮廓的星点偏差不能大于0.02 mm,否则远场光斑会产生明显的“猫耳”畸变。模具设计时,反射面进胶口应尽量远离功能面,浇口痕迹不能留在出光面中央。如果你的供应商没有专门做光学模具的经验,务必在模具图上标注“光学面粗糙度Ra 0.02 μm以下,无浇口痕、无缩痕”。

4.3 装配误差、热膨胀与防翘曲设计

LED和透镜本体的同轴度是系统精度的大变量。一个简单的计算:透镜焦距如果是15 mm,LED芯片相对光轴偏移0.5 mm,出射光方向就偏约1.9°;如果偏移1 mm,偏角超过3.8°,这对半强角要求5°的准直系统是致命的。所以装配定位结构不能省,TIR透镜外壳必须带止口或三槽卡扣,和LED基板上的定位孔配合。常见的公差配合:透镜定位孔和骨架导柱之间用H7/g6间隙,既能装配又不至于偏位。

热膨胀的影响容易被忽视。PMMA的热膨胀系数约70×10⁻⁶/°C,PC约65×10⁻⁶/°C,铝合金支架约23×10⁻⁶/°C。温度升高50°C,一个直径50 mm的PMMA透镜径向膨胀约0.175 mm,比装配定位间隙还大。如果透镜被金属环压死,膨胀应力会迫使反射面轻微变形,光斑在热机后变散。解决方法是让透镜和支架之间保留0.3~0.5 mm的弹性硅胶缓冲垫,或把透镜设计成三点支撑结构。这个细节在车灯里尤其重要,TIR透镜要工作在-40°C~105°C环境,不做翘曲校验证就到不了量产。

5. 用手机光斑法快速验证TIR准直透镜的配光一致性

拿到样品后,没有积分球也没关系,用一面白墙、一台手机和几行Python代码就能验证透镜的基本配光行为。具体做法:在暗室中把透镜固定在距白墙2 m的位置,让LED点亮,用手机在三脚架上对焦光斑拍摄,注意照片不能过曝,光斑中心灰度值最好控制在200附近(8位灰度)。拍完用以下脚本分析光斑的一维剖面和半高全宽。

from PIL import Image import numpy as np img = Image.open('spot.jpg').convert('L') data = np.array(img, dtype=np.float64) # 找到光斑质心 cy, cx = np.unravel_index(np.argmax(data), data.shape) # 取通过质心的水平剖面 row = data[cy] # 计算半高全宽FWHM half_max = (row.max() + data.min()) / 2 above = np.where(row >= half_max)[0] fwhm_pixels = above[-1] - above[0] print(f"质心: ({cx:.0f}, {cy:.0f}), FWHM: {fwhm_pixels} px")

逻辑说明:脚本先把图片转灰度,再找灰度最大点作为光斑质心,然后沿质心切一行,用半高阈值计算光斑宽度。配合已知的投影距离和像素尺寸,就能算出实际光束发散角:θ ≈ arctan(光斑半径 / 距离)。比如某次测试FWHM为200像素,相机像素对应距离为0.5 mm/px,距离2 m,半角约 arctan(50 mm / 2000 mm)≈1.43°。

这个方法最关键的陷阱是过曝和背景。过曝后灰度达到255,质心位置和FWHM都失去意义;背景如果有散射光,半高阈值会被抬高,导致FWHM偏小。我的习惯是拍三张不同曝光时间,选光斑峰值在180~220之间的那张分析。如果手头没有Python环境,也可以用ImageJ直接画线剖面,效果一样,但代码方式可以一次性批量处理多张照片,更适合对比不同装配位置下的光斑变化。测得发散角比仿真大0.5°~1°很正常,超过1.5°则优先检查反射面的打印层纹和LED芯片与透镜的光轴对中。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/17 4:50:07

用CMD命令查询电脑硬件信息与WiFi密码,无需第三方软件

你肯定遇到过这种情况&#xff1a;朋友找你问某台电脑的配置&#xff0c;你不想装鲁大师&#xff1b;或者是自己忘了 WiFi 密码&#xff0c;又不想进路由器后台翻&#xff1b;再或者是笔记本要送去售后&#xff0c;急需一串序列号来登记。其实这些乱七八糟的需求&#xff0c;Wi…

作者头像 李华
网站建设 2026/9/17 4:49:48

calibre 一站式指南:4 步搞定 30 种电子书格式互转

calibre 一站式指南&#xff1a;4 步搞定 30 种电子书格式互转 【免费下载链接】calibre The official source code repository for the calibre ebook manager 项目地址: https://gitcode.com/GitHub_Trending/ca/calibre 手里的 EPUB 塞不进 Kindle&#xff0c;PDF 又…

作者头像 李华
网站建设 2026/9/17 4:48:56

从案例集到落地:制造业数字化设备数据采集与云迁移指南

简介&#xff1a;阿里云研究中心联合多个业务部门出品的《制造业数字化转型案例集》&#xff0c;面向制造企业管理者、数字化转型负责人及行业研究人员&#xff0c;系统总结了阿里云在制造业数字化领域的实践路径与方法论。资源以1个PDF文件呈现&#xff0c;压缩包大小约100.92…

作者头像 李华
网站建设 2026/9/17 4:48:14

iPad绘画全攻略:从压感、手势到图层混合模式的效率指南

身边总有朋友来问我&#xff0c;画画到底该买数位板还是 iPad。我一般先反问一句&#xff1a;你是老老实实坐在书桌前画&#xff0c;还是想窝在沙发、咖啡馆、高铁上随时掏出来画&#xff1f;这个问题想清楚了&#xff0c;答案基本就出来一大半。我自己是从数位板一路用到 iPad…

作者头像 李华
网站建设 2026/9/17 4:48:10

Axure平替实测:七款原型工具交互、数据与协作对比

做原型这一行十年&#xff0c;Axure 这个名字我几乎是脱口而出的。从早期的 RP 8 到后来的 RP 9&#xff0c;再到近两年新版本陆续推进&#xff0c;我电脑里那份 .rp 文件从来没删过。可这两年我带团队做项目&#xff0c;越来越频繁地遇到同一个问题&#xff1a;新人第一周装不…

作者头像 李华
网站建设 2026/9/17 4:45:48

Retinex图像增强算法:SSR/MSR/MSRCR/MSRCP原理与MATLAB实现对比

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华