第二章 薄膜光学基础理论:光的干涉原理、单层膜与多层膜的光学特性、特征矩阵法
2.1 光的干涉原理——薄膜的灵魂
做薄膜光学,说白了就是在玩光。光是一种电磁波,这个大家都知道。但真正让我觉得妙不可言的,是它居然能在那么薄的膜层里「折腾」出那么多花样。
光的干涉,简单讲就是两束或多束光波相遇,叠加后有的地方变亮、有的地方变暗。为什么会这样?因为光波有相位。波峰对波峰,振幅相加,变亮;波峰对波谷,相互抵消,变暗。这就是干涉。
在薄膜里,干涉是怎么发生的?你想想看,一束光打到薄膜上,一部分在薄膜上表面反射,另一部分穿过薄膜,在薄膜下表面反射,然后再穿出来。这两束反射光,走过的路程不一样,就有了光程差。光程差刚好是半波长的整数倍时,干涉相消;是波长的整数倍时,干涉相长。
核心公式: 2nd cosθ = mλ (干涉相长)
2nd cosθ = (m+1/2)λ (干涉相消)
其中 n 是薄膜折射率,d 是薄膜厚度,θ 是光在薄膜内的折射角,m 是整数。
我记得刚入行那会儿,有个项目要做 8~12μm 的红外增透膜。当时我按公式算好了厚度,结果镀出来透过率死活上不去。后来一查,是薄膜的折射率随波长变化了,我用的还是固定值。嗯,这里要注意:实际材料都有色散,n 是 λ 的函数。
2.2 单层膜的光学特性——从简单入手
单层膜是最基础的结构。别看它简单,很多设计思路都是从它延伸出来的。
单层膜能干什么?最常见的就是增透膜。比如在锗(Ge)基底上镀一层 ZnS,就能把反射率从 36% 降到 10% 以下。原理就是利用干涉相消,让上下表面的反射光互相抵消。
单层膜的反射率公式是这样的:
R = (n0 - n1^2/ns)^2 / (n0 + n1^2/ns)^2
其中 n0 是入射介质(通常是空气,n0=1),n1 是薄膜折射率,ns 是基底折射率。
当 n1 = √(n0·ns) 时,反射率 R = 0,这就是理想增透条件。但现实中,哪有那么巧的材料?
我的经验: 单层膜虽然简单,但实际镀膜时,膜厚控制是最容易出问题的。我曾经因为晶振片老化,厚度监控偏差了 5%,结果整批产品报废。后来我养成了一个习惯:每次镀膜前先做一次「空白试镀」,校准厚度。
单层膜还有一个特点:它的光学特性是波长相关的。在中心波长处效果最好,偏离中心波长,增透效果就会下降。这也是为什么单层膜只能用在窄波段,宽波段必须上多层膜。
2.3 多层膜的光学特性——组合的艺术
单层膜搞不定的事,多层膜来办。多层膜就是把不同折射率、不同厚度的薄膜一层层叠起来,让每一层的光学行为相互配合,实现更复杂的光学功能。
多层膜能做什么?我随便列几个:
- 宽带增透膜: 在 3~5μm 或 8~12μm 波段实现低反射
- 带通滤光片: 只让特定波段的光通过,其他波段全部反射
- 分光镜: 把一束光分成两束,比例可调
- 高反膜: 反射率做到 99.9% 以上,用于激光腔镜
多层膜的设计,说白了就是找一组膜层参数(厚度、折射率、层数),让整个膜系的光学性能满足要求。这可不是拍脑袋能搞定的,得靠计算。
注意: 多层膜不是层数越多越好。层数多了,工艺难度指数级上升,膜层之间的应力匹配、附着力、环境稳定性都会成为问题。我见过有人设计 40 层的膜系,结果镀出来全裂了。有时候,8 层能搞定的事,别硬上 10 层。
2.4 特征矩阵法——计算多层膜的利器
好了,前面说了那么多,怎么算?总不能一层层用手算吧?当然不行。特征矩阵法就是干这个的。
特征矩阵法的思路是这样的:把每一层薄膜看作一个「光学变换器」,用 2×2 的矩阵来描述它对光波的作用。然后,把各层的矩阵乘起来,就得到整个膜系的矩阵。最后,从总矩阵里提取出反射率、透过率。
每一层的特征矩阵长这样:
M = [cosδ, (i sinδ)/η]
[i η sinδ, cosδ]
其中 δ = 2π n d cosθ / λ 是相位厚度,η 是光学导纳(对于 s 偏振,η = n cosθ;对于 p 偏振,η = n/cosθ)。
整个膜系的矩阵就是各层矩阵的乘积:
M_total = M1 × M2 × M3 × ... × Mk
然后,反射率和透过率就可以从总矩阵的元素里算出来:
R = |(η0 B - C)/(η0 B + C)|^2
T = (4 η0 ηs) / |η0 B + C|^2
其中 B 和 C 是总矩阵的导出量,η0 和 ηs 分别是入射介质和基底的导纳。
我个人习惯: 写代码实现特征矩阵法时,我会把矩阵乘法单独写成一个函数,方便调试。另外,一定要考虑偏振态,s 和 p 的导纳不同,结果也不同。很多初学者在这里栽跟头。
下面是我用 Python 实现的一个简单版本,供参考:
import numpy as np
def layer_matrix(n, d, theta, lam, polarization='s'):
"""计算单层膜的特征矩阵"""
delta = 2 * np.pi * n * d * np.cos(theta) / lam
if polarization == 's':
eta = n * np.cos(theta)
else:
eta = n / np.cos(theta)
M = np.array([
[np.cos(delta), 1j * np.sin(delta) / eta],
[1j * eta * np.sin(delta), np.cos(delta)]
])
return M
def total_matrix(layers, theta, lam, polarization='s'):
"""计算多层膜的总特征矩阵"""
M_total = np.eye(2, dtype=complex)
for n, d in layers:
M = layer_matrix(n, d, theta, lam, polarization)
M_total = M_total @ M
return M_total
def reflectance(M_total, eta0, etas):
"""从总矩阵计算反射率"""
B = M_total[0, 0]
C = M_total[1, 0]
R = abs((eta0 * B - C) / (eta0 * B + C))**2
return R
这段代码虽然简单,但已经能处理大部分常规问题了。实际项目中,我会再加上角度扫描、波长扫描、偏振平均等功能。
避坑指南: 我曾经在计算大角度入射时,忘了考虑折射角的变化。结果算出来的反射率曲线跟实测对不上。后来发现,θ 在每一层都不一样,得用斯涅尔定律逐层计算。这个坑,我替你们踩过了。
2.5 本章知识体系
为了让大家更直观地理解本章的知识结构,我画了一张图:
这张图把本章的核心逻辑串起来了:从干涉原理出发,到单层膜和多层膜的特性,再到特征矩阵法这个计算工具,最后落到实际应用和注意事项。做薄膜设计,脑子里得有这张图。
好了,这一章的内容就到这里。光干涉是基础,单层膜是入门,多层膜是进阶,特征矩阵法是工具。把这些吃透了,后面讲膜系设计、工艺控制,你才能跟得上。
公众号:蓝海资料掘金营,微信deep3321