前言

這篇是上一篇的延續啦!上一篇著重於推導公式,交代這些公式的來龍去脈,到底是怎麼從馬克士威爾這四個這麼簡單優美的方程式,最後變成這麼複雜的反射率公式的!因為已經花了不少篇幅了,再把一些應用結果跟 R 程式放進來就會太戎長了!所以最後決定分成兩篇,一些應用放這篇部落格文囉!所有這篇的光學反射率公式都源自於上篇,所以想對三層薄膜反射率公式的推導來龍去脈搞清楚的話,請參考我的這一篇三層薄膜反射率公式的推導

應用的例子有三個:單層光學薄膜的特性,比色測厚儀器的原理,抗反射鍍膜的原理

 

單層光學薄膜的特性

光學鍍膜是非常普遍的被使用在半導體或光學產業的,這裡來介紹一下在鍍單層光學薄膜於矽基材 (n=3.4) 上,在不同的折射率跟厚度下,它們的光學特性會是怎樣,會怎麼改變。

首先,大家可以先用普通物理的知識來預估。上一篇我們有看到,光在不同介質裡面的速度,完全由介質的導磁率及電容率來決定的。非真空下,介質的這兩個數值會變大,所以速度會變慢。另外一個重要性質,跟光源有關,光的波動它的角速度(或是頻率)不會因為不同介質而改變。所以速度變慢的結果只會造成波數k數值增加,或亦即就是波長變短。所以也有人這樣定義,折射率就是光的波長在介質中跟在真空中的一個縮減率。 

現在光進入一個折射率n,膜厚d 的一個薄膜,波長變短,波數改變了變成 k'。當光穿透從薄膜的一端跑到薄膜的另一端反射回來,所以以新的k' 總共跑了2d的距離。當這樣的距離所造成的相位改變是剛好等於 (2m+1)*pi  (m為包含零的整數, 所以總是會有180度的相位差)時,這時候弦波會完全反向,剛好跟入射波完全抵消形成破壞性干涉,所以這時候反射率最小啦!

波數

 wavelength.png

光波的行進方程式如下,當 cos 函數裡面相位差為pi (180度) 時,會變成大小符號完全相反的 sin 函數。這時候兩個相加會為零。(相消性干涉)

wave w wavelength.png

光進入一個折射率n 膜厚d 的一個薄膜,行進方程式會變成

wave in film.png

光進入一個折射率n 膜厚d 的一個薄膜,從一端到另一端回來走 2d 的距離所造成的相位差,假如滿足是 pi (180度) 的 (2m+1) 倍的話會有相消性干涉。所以,

condition for destructive interference3.png

所以,滿足下面條件會有最低的反射率 (相消性干涉)

nd eq to quad wavelength2.png

 

所以單層光學薄膜的第一個特性,每當 n*d 滿足上面的那個 (2*m+1) 四分之一波長的整數倍時,所們會看到一個反射率的極小值的存在。所以整個反射率會是一個滿足上面週期性條件的一個函數。

第二個特性就是,假如我們改變薄膜的厚度,反射率函數的形狀不會改變,但是會隨之平移。厚度越厚,越往長波長平移。而整個反射率曲線會像一個很大的打勾勾曲線

底下就是用我們的三層膜公式,透過 R 語言程式對折射率 n=1.5 的薄膜,以 70nm/ 90nm/ 120nm 不同厚度所計算出來的結果!

single film vs d Result2.png

有沒有看到,是不是很像學校老師批改考卷時的打勾勾曲線啊! XDDD

可以注意到,當厚度是 70nm 時,這時候長波長的色光(紅澄)反射的訊號比較強,短波長的色光(紫藍)反射的訊號幾乎沒有。所以整體而言,這時候薄膜會呈現強黃紅色。

當厚度是 90nm 時,這時候打勾勾曲線開始往右邊長波長的方向移動,所以長波長的色光(紅澄)反射的訊號變弱了,短波長的色光(紫藍)反射的訊號比較強,整體反射率下降了。所以薄膜的顏色開始轉向暗紫紅色。

當厚度再更厚些,到 120nm時,這時候打勾勾曲線繼續往右邊長波長的方向移動,所以長波長的色光(紅澄)反射的訊號幾乎沒有,短波長的色光(紫藍)反射的訊號非常的強,所以會呈現漂亮的紫藍色。

所以可以注意到,膜厚越厚,打勾勾曲線會越往右邊方向長波長移動,所以透過控制膜厚,可以控制反射率曲線的平移。而這個例子,色系的變化會是: 黃紅色 -> 暗紫紅色 -> 紫藍色 -> 藍色 ...

 

第三個特性就是,薄膜的折射率會控制反射率曲線的平坦度,當薄膜折射率越高,反射率曲線就越平。全部的色光所佔的比例就會越平均。這結果就會讓顏色變得更白些。

底下的結果是用 n=1.5, 及 n=2.0, n=2.5 三個不同折射率下所繪製的反射率曲線圖。為了方便比較,刻意調整每個薄膜的厚度d,透過 nd = (2m+1) 1/4 波長 的公式,讓它們最低點相消性干涉的波長位置都一模一樣。 (原始程式列於blog後)

single film vs different n Result.png

 

可以當 n 從 1.5 / 2.0 / 2.5 越變越大時,反射率打勾曲線會慢慢往上跑,中間波長的色光比例會逐漸增加,所以這個薄膜本來的結果是很暗的紫紅色,隨著n的變大,會慢慢變得有點白白的比較亮的紫紅色!

 

比色測厚儀器的原理

上面我們已經看到,薄膜厚度d 的改變,可以控制反射率打勾曲線的左右平移。那逆向思考,是不是我們只要透過反射率曲線的量測,就可以反過來決定薄膜的厚度呢?

當然可以呀!假如你有全光譜反射率量測的儀器,透過量測在不同波長下的反射率曲線,只要找到相消性干涉反射率最低的那個波長位置,假如已經大約知道薄膜的折射率,套上相消干涉的公式 n*d = (2*m+1) *波長/4 ,就可以立刻知道薄膜的厚度囉。

除了這樣外,實際上我們還有更神奇的方式,速度更快,不用花大量的時間來量測全光譜的反射率曲線。這種儀器通常放在製程鍍膜的機器後面,有人叫它做比色測厚儀。它可以透過瞬間的量測,快速的告訴你整個樣品的厚度分佈,來做即時鍍膜的監控。

來介紹它的原理囉!原理其實跟上面一樣呀!只是不量測全光譜,而是改量測固定波長下的反射率改變來確認反射率打勾曲線的左右平移程度,進而決定厚度。

下面是示意圖,通常會選擇兩個波長,一個紅光,一個藍光來監控樣品反射率的改變。方法很簡單,就一個灰階相機前面放上波長650nm的紅光濾光片,能通過的就是 650nm 的反射光,假如相機是 256 灰階的,每個像素的 256 灰階就代表了波長 650nm 下的反射率。

紅光反射率量測

red eye.png

 

另一個灰階相機前面放上波長 475nm的紅光濾光片,能通過的就是 475nm 的反射光,假如相機是 256 灰階的,每個像素的 256 灰階就代表了波長 475nm 下的反射率。

藍光反射率量測

blue eye.png

 

量測的原理是,

第一,做了個很重要的假設,假設我們的製程鍍膜機器是很穩定的,所以每個樣品所鍍出來的薄膜它們的折射率都差不多。

因為折射率都差不多,所以現在反射率打勾曲線完全由薄膜厚度 d 來決定(左右平移的程度),所以我們只要把薄膜厚度 d 跟在波長 650nm 及 475nm 這兩個位置的反射率關係找出來就可以囉,這樣我們就可以倒推回去,利用這個關係透過反射率倒推薄膜的膜厚囉。

底下就是利用我們的反射率公式,利用 R 語言所計算出來的,折射率 1.5 的薄膜,不同厚度下在波長 650nm 及 475nm 這兩個位置的理想的反射率關係。(就很簡單,波長固定在 475nm跟 650nm,然後將不同的 d 帶入反射率公式,求出反射率後對 反射率 - d 做圖! 原始程式列於blog後。)

blue red eyes Result.png

 

來舉例囉,假設現在紅色濾光片的相機,已經校正好 反射率 0.25 的時候,相機灰階讀值會是 255。現在有個樣品讀值是 127,所以真實紅光650nm反射率會是0.125。根據上圖的紅色曲線,這時候對應到,馬上知道被量測的薄膜厚度會是 75nm 左右。這個技術很威的地方是,這個量測基本上是瞬間的,相機拍完照後再利用上面的曲線,瞬間照片就變成薄膜厚度的分佈照片囉。然後整片樣品的各種數值,如薄膜平均厚度,片內薄膜厚度均勻度,... etc. 各種薄膜成膜製程結果就可以立刻被算出來。

紅色 650nm 的反射率對薄的薄膜厚度(40nm - 90nm) 量測比較靈敏。藍色475nm 的反射率對厚的薄膜厚度(90nm - 120nm) 量測比較靈敏,所以兩者相互輔助,讓膜厚的量測可以涵蓋 40nm - 120nm

實際上為了精確,這兩個曲線會根據使用者的需求利用一系列相同折射率,但已經知道其精確厚度的不同厚度下的標準樣品來建立。最後標準片量測數據再透過多項式曲線配適的方式將關係曲線建立起來,就變成可以瞬間量測薄膜厚度的重要製程儀器囉。

 

抗反射膜的原理

我們的 R 程式可以計算到三層薄膜,不好好利用一下就太可惜囉!來簡介一下光學的抗反射膜的設計吧!

我們一般玻璃的折射率大概是  n=1.5,這種假如你沒有處理的話,光直接穿透大概會有 4%的反射。如果直接拿來做相機的透鏡,假設你的相機裡面有五片透鏡,光每通過透鏡一次就會有4%的反射損失。五片透鏡,光因反射損失最後會剩下 (1-0.04)^5 = 81.5% 只剩下 8成的光囉。對照相術而言,這樣的損失真的太大了,會讓底片更難感光。為了抑制這個現象,光學上會利用抗反射鍍膜,來讓可見光的損失從 4% 再近一步下修接近零。

抗反射鍍膜利用的就是物理上的相消性干涉,來讓反射光因為相消性干涉而消失,而得到更低的反射率。

單層抗反射膜

I. 根據光學的理論,單層薄膜假如想要有最低的反射率,最佳的薄膜折射率會是 n = sqrt( n0*nt) 所以對 nt=1.5 的玻璃, n = sqrt( 1*1.5) = 1.224

II. 接下來用相消性干涉的公式,假如我們希望500nm的波長有最低反射率,這時薄膜的厚度 d = 波長 /(4*n) = 500 /(4*1.224) = 102.12nm 

 

雙層膜抗反射膜 (阻抗極小理論法)

這個常用的是個被稱之為 1/4-1/4 波長鍍膜的方法。就利用兩個不同 n 值的薄膜,對相同波長做兩次的相消性干涉,讓反射率曲線能更平,更低。

I. 根據光學1/4-1/4 波長鍍膜的理論,假如想要有最低的反射率,薄膜1 的折射率 = (n0^2*nt)^(1/3)薄膜2 的折射率 = (n0*nt^2)^(1/3)

    所以對 nt=1.5 的玻璃而言, 薄膜1 的折射率 n1 = (1^2*1.5)^(1/3) = 1.145 , 薄膜2 的折射率 n2 = (1*1.5^2)^(1/3) = 1.310

II. 接下來用相消性干涉的公式,假如我們希望500nm的波長有最低反射率,

    所以 薄膜1 的厚度 d1 = 波長 /(4*n1) = 500 /(4*1.145) = 109.17nm, 薄膜2 的厚度 d2 = 波長 /(4*n2) = 500 /(4*1.31) = 95.42nm

 

雙層膜抗反射膜 (嘗試錯誤法)

最後一個是 1/4-1/4 波長鍍膜的變形,其實誰說折射率 n1, n2 的選擇一定得透過光學理論的? 我們現在已經有反射率曲線的公式可以快速計算各種狀況下的反射率啦!所以透過 trial and error 的嘗試錯誤法,很快的我們可以找出更佳的折射率組合。 經過不斷的測試,最後找到 n1 = 1.15 搭配 n2 = 1.40 這個組合是比上面所有都更好的結果。(反射率曲線在可見光區域更為平坦,跟更低)

三個範例,所設計出來對玻璃的抗反射膜反射率結果如下。 (原始程式列於blog後)

ARC Result.png

 

 

原始程式列表

第一個不同厚度的,因為太簡單了,就不列了!

程式一:不同折射率下單層薄膜厚度比較

#

# triple layers thin films

#   2010.1.28 Frank Lin

#

#  reflection curve for 3 layers thin-film system

#

#   2018.12.13 - some small modifications for the use of my blog

#                for showing film optical properties with different n

#

 

 

aa=function(k,n1,n2,n3,d1,d2,d3)

  aa=(cos(k*d1)*cos(k*d2)-(n2/n1)*sin(k*d1)*sin(k*d2))*cos(k*d3)-(cos(k*d1)*sin(k*d2)/n2+sin(k*d1)*cos(k*d2)/n1)*n3*sin(k*d3)

 

  return(aa)

}

 

bb=function(k,n1,n2,n3,d1,d2,d3)

  bb=-(cos(k*d1)*cos(k*d2)-(n2/n1)*sin(k*d1)*sin(k*d2))*sin(k*d3)/n3-(cos(k*d1)*sin(k*d2)/n2+sin(k*d1)*cos(k*d2)/n1)*cos(k*d3)

 

  return(bb)

}

 

cc=function(k,n1,n2,n3,d1,d2,d3)

  cc=-(n1*sin(k*d1)*cos(k*d2)+n2*cos(k*d1)*sin(k*d2))*cos(k*d3)-(-n1/n2*sin(k*d1)*sin(k*d2)+cos(k*d1)*cos(k*d2))*n3*sin(k*d3)

 

  return(cc)

}

 

dd=function(k,n1,n2,n3,d1,d2,d3)

  dd=-(n1*sin(k*d1)*cos(k*d2)+n2*cos(k*d1)*sin(k*d2))*sin(k*d3)/n3+(-n1/n2*sin(k*d1)*sin(k*d2)+cos(k*d1)*cos(k*d2))*cos(k*d3)

 

  return(dd)

}

 

reflection=function(len,n1,d1,n2,d2,n3,d3,n0,nt,rough)

{

  k=2*pi/len

  d1=d1*n1/n0

  d2=d2*n2/n0

  d3=d3*n3/n0

  

  a=aa(k,n1,n2,n3,d1,d2,d3)

  b=bb(k,n1,n2,n3,d1,d2,d3)

  c=cc(k,n1,n2,n3,d1,d2,d3)

  d=dd(k,n1,n2,n3,d1,d2,d3)

  

  ref=((a*n0-d*nt)^2+(b*nt*n0-c)^2)/((a*n0+d*nt)^2+(b*nt*n0+c)^2)

 

  return(ref^rough)

}

 

 

 

 

NN = 500

 

xmin=300

xmax=1200

 

ymin=0

ymax=0.5

 

# rough is a factor to represent the roughness level of the surface

# rough=1 is perfect smooth surface. for Si wafers, it's experimentally about 1.1 ~ 1.5

 

rough=1

 

n0=1

nt=3.4

 

 

#

# curve 1

#

 

n1=1.5

d1=85

n2=nt

d2=0

 

n3=nt

d3=0

 

leg1_n=round(n1,2)

leg1_d=round(d1,1)

 

x=seq(xmin,xmax, by=(xmax-xmin)/NN)

y=reflection(x,n1,d1,n2,d2,n3,d3,n0,nt,rough)

 

par(mfrow=c(1,1))

plot(y ~ x,type="l", col="blue", lwd=2, xlim=c(xmin,xmax), ylim=c(ymin,ymax), main="Reflection Curve vs different n / d",xlab=c("Wave Length(nm)"), ylab=c("Reflection"))

 

 

#

# curve 2

#

 

n1=2.0

d1=1.5*85/n1

 

n2=nt

d2=0

 

n3=nt

d3=0

 

leg2_n=round(n1,2)

leg2_d=round(d1,1)

 

x=seq(xmin,xmax, by=(xmax-xmin)/NN)

y=reflection(x,n1,d1,n2,d2,n3,d3,n0,nt,rough)

 

i <- seq(NN-1)

segments(x[i],y[i], x[i+1], y[i+1], col="purple", lwd=2)

 

 

#

# curve 3

#

 

n1=2.5

d1=1.5*85/n1

 

n2=nt

d2=0

 

n3=nt

d3=0

 

leg3_n=round(n1,2)

leg3_d=round(d1,1)

 

 

x=seq(xmin,xmax, by=(xmax-xmin)/NN)

y=reflection(x,n1,d1,n2,d2,n3,d3,n0,nt,rough)

 

i <- seq(NN-1)

segments(x[i],y[i], x[i+1], y[i+1], col="red", lwd=2)

 

 

# add legends

 

legend(xmin,ymax, legend=c(paste(leg1_n,"/",leg1_d,"nm"), paste(leg2_n,"/",leg2_d,"nm"), paste(leg3_n,"/",leg3_d,"nm")), col=c("blue", "purple", "red"), lty=1:1:1, cex=0.8)

 

 

#

# draw visible light bondary

#

 

lab_Y = (ymax-ymin)/2

 

lines(x=c(400,400),y=c(ymin,ymax*0.7), col="blue")

lines(x=c(400,700),y=c(lab_Y, lab_Y), col="blue")

lines(x=c(700,700),y=c(ymin,ymax*0.7), col="blue")

 

 

#

# draw color labels of visible light

#

 

 

# vilot 400 nm

 

arrow_len = (ymax-ymin)*0.1

 

xa=400

ya=reflection(xa,n1,d1,n2,d2,n3,d3,n0,nt,rough)

arrows(xa, ya+arrow_len, xa, ya, col= "purple", lwd=2)

 

# Indigo 445 nm

 

xa=445

ya=reflection(xa,n1,d1,n2,d2,n3,d3,n0,nt,rough)

arrows(xa, ya+arrow_len, xa, ya, col= "blueviolet", lwd=2)

 

# Blue 475 nm

 

xa=475

ya=reflection(xa,n1,d1,n2,d2,n3,d3,n0,nt,rough)

arrows(xa, ya+arrow_len, xa, ya, col= "blue", lwd=2)

 

# Green 510 nm

 

xa=510

ya=reflection(xa,n1,d1,n2,d2,n3,d3,n0,nt,rough)

arrows(xa, ya+arrow_len, xa, ya, col= "green", lwd=2)

 

# Yellow 570 nm

 

xa=570

ya=reflection(xa,n1,d1,n2,d2,n3,d3,n0,nt,rough)

arrows(xa, ya+arrow_len, xa, ya, col= "yellow", lwd=2)

 

# Orange 590 nm

 

xa=590

ya=reflection(xa,n1,d1,n2,d2,n3,d3,n0,nt,rough)

arrows(xa, ya+arrow_len, xa, ya, col= "orange", lwd=2)

 

# Red 650 nm

 

xa=650

ya=reflection(xa,n1,d1,n2,d2,n3,d3,n0,nt,rough)

arrows(xa, ya+arrow_len, xa, ya, col= "red", lwd=2)

 

 

 

 

程式二:比色測厚儀,厚度跟反射率關係曲線

 

#

# triple layers thin films

#   2010.1.28 Frank Lin

#

#  reflection curve for 3 layers thin-film system

#

#   2018.12.13

#   some modifications for showing calibration curve of blue/red eyes thickness measurement 

#

 

 

aa=function(k,n1,n2,n3,d1,d2,d3)

  aa=(cos(k*d1)*cos(k*d2)-(n2/n1)*sin(k*d1)*sin(k*d2))*cos(k*d3)-(cos(k*d1)*sin(k*d2)/n2+sin(k*d1)*cos(k*d2)/n1)*n3*sin(k*d3)

 

  return(aa)

}

 

bb=function(k,n1,n2,n3,d1,d2,d3)

  bb=-(cos(k*d1)*cos(k*d2)-(n2/n1)*sin(k*d1)*sin(k*d2))*sin(k*d3)/n3-(cos(k*d1)*sin(k*d2)/n2+sin(k*d1)*cos(k*d2)/n1)*cos(k*d3)

 

  return(bb)

}

 

cc=function(k,n1,n2,n3,d1,d2,d3)

  cc=-(n1*sin(k*d1)*cos(k*d2)+n2*cos(k*d1)*sin(k*d2))*cos(k*d3)-(-n1/n2*sin(k*d1)*sin(k*d2)+cos(k*d1)*cos(k*d2))*n3*sin(k*d3)

 

  return(cc)

}

 

dd=function(k,n1,n2,n3,d1,d2,d3)

  dd=-(n1*sin(k*d1)*cos(k*d2)+n2*cos(k*d1)*sin(k*d2))*sin(k*d3)/n3+(-n1/n2*sin(k*d1)*sin(k*d2)+cos(k*d1)*cos(k*d2))*cos(k*d3)

 

  return(dd)

}

 

reflection=function(len,n1,d1,n2,d2,n3,d3,n0,nt,rough)

{

  k=2*pi/len

  d1=d1*n1/n0

  d2=d2*n2/n0

  d3=d3*n3/n0

  

  a=aa(k,n1,n2,n3,d1,d2,d3)

  b=bb(k,n1,n2,n3,d1,d2,d3)

  c=cc(k,n1,n2,n3,d1,d2,d3)

  d=dd(k,n1,n2,n3,d1,d2,d3)

  

  ref=((a*n0-d*nt)^2+(b*nt*n0-c)^2)/((a*n0+d*nt)^2+(b*nt*n0+c)^2)

 

  return(ref^rough)

}

 

 

 

NN = 100

 

ymin=40

ymax=120

 

xmin=0

xmax=0.3

 

# rough is a factor to represent the roughness level of the surface

# rough=1 is perfect smooth surface. for Si wafers, it's experimentally about 1.1 ~ 1.5

 

rough=1

 

n0=1

nt=3.4

 

 

#

# curve 1

#

 

n1=1.5

d1=seq(85,ymax, by=(ymax-ymin)/NN)

 

n2=nt

d2=0

 

n3=nt

d3=0

 

 

rr=reflection(475,n1,d1,n2,d2,n3,d3,n0,nt,rough)

 

par(mfrow=c(1,1))

plot(d1 ~ rr,type="l", col="blue", lwd=2, xlim=c(xmin,xmax), ylim=c(ymin,ymax), main="Thickness measurement by red/blue signal",xlab=c("Reflection"), ylab=c("Thickness(nm)"))

 

 

#

# curve 2

#

 

d1=seq(ymin,100, by=(ymax-ymin)/NN)

 

rr=reflection(650,n1,d1,n2,d2,n3,d3,n0,nt,rough)

 

i <- seq(NN-1)

segments(rr[i], d1[i], rr[i+1], d1[i+1], col="red", lwd=2)

 

 

# add legends

 

legend(xmin,ymax, legend=c("475nm blue signal","650nm red signal"), col=c("blue", "red"), lty=1:1, cex=0.8)

 

 

 

程式三:光學抗反射層設計

 

#

# triple layers thin films

#   2010.1.28 Frank Lin

#

#  reflection curve for 3 layers thin-film system

#

#   2018.12.14 - some modifications for the use of my blog

#                demonstrate the theory of anti-reflection coating...

#

 

 

aa=function(k,n1,n2,n3,d1,d2,d3)

  aa=(cos(k*d1)*cos(k*d2)-(n2/n1)*sin(k*d1)*sin(k*d2))*cos(k*d3)-(cos(k*d1)*sin(k*d2)/n2+sin(k*d1)*cos(k*d2)/n1)*n3*sin(k*d3)

 

  return(aa)

}

 

bb=function(k,n1,n2,n3,d1,d2,d3)

  bb=-(cos(k*d1)*cos(k*d2)-(n2/n1)*sin(k*d1)*sin(k*d2))*sin(k*d3)/n3-(cos(k*d1)*sin(k*d2)/n2+sin(k*d1)*cos(k*d2)/n1)*cos(k*d3)

 

  return(bb)

}

 

cc=function(k,n1,n2,n3,d1,d2,d3)

  cc=-(n1*sin(k*d1)*cos(k*d2)+n2*cos(k*d1)*sin(k*d2))*cos(k*d3)-(-n1/n2*sin(k*d1)*sin(k*d2)+cos(k*d1)*cos(k*d2))*n3*sin(k*d3)

 

  return(cc)

}

 

dd=function(k,n1,n2,n3,d1,d2,d3)

  dd=-(n1*sin(k*d1)*cos(k*d2)+n2*cos(k*d1)*sin(k*d2))*sin(k*d3)/n3+(-n1/n2*sin(k*d1)*sin(k*d2)+cos(k*d1)*cos(k*d2))*cos(k*d3)

 

  return(dd)

}

 

reflection=function(len,n1,d1,n2,d2,n3,d3,n0,nt,rough)

{

  k=2*pi/len

  d1=d1*n1/n0

  d2=d2*n2/n0

  d3=d3*n3/n0

  

  a=aa(k,n1,n2,n3,d1,d2,d3)

  b=bb(k,n1,n2,n3,d1,d2,d3)

  c=cc(k,n1,n2,n3,d1,d2,d3)

  d=dd(k,n1,n2,n3,d1,d2,d3)

  

  ref=((a*n0-d*nt)^2+(b*nt*n0-c)^2)/((a*n0+d*nt)^2+(b*nt*n0+c)^2)

 

  return(ref^rough)

}

 

 

NN = 500

 

xmin=300

xmax=800

 

ymin=0

ymax=0.06

 

# rough is a factor to represent the roughness level of the surface

# rough=1 is perfect smooth surface. for Si wafers, it's experimentally about 1.1 ~ 1.5

 

rough=1

 

n0=1

nt=1.5

lowest=500

 

#

# curve 1 - single layer arc

#

 

n1=sqrt(n0*nt)

d1=lowest/(4*n1)

 

leg1_n1=round(n1,2)

leg1_d1=round(d1,1)

 

n2=nt

d2=0

 

n3=nt

d3=0

 

 

x=seq(xmin,xmax, by=(xmax-xmin)/NN)

y=reflection(x,n1,d1,n2,d2,n3,d3,n0,nt,rough)

 

par(mfrow=c(1,1))

plot(y ~ x,type="l", col="blue", lwd=2, xlim=c(xmin,xmax), ylim=c(ymin,ymax), main="Reflection Curve (Anti-Reflection Coating)",xlab=c("Wave Length(nm)"), ylab=c("Reflection"))

 

 

#

# curve 2 - double layers arc by 1/4-1/4 theory

#

 

lowest=500

n1=(n0^2*nt)^(1/3)

d1=lowest/(4*n1)

 

leg2_n1=round(n1,2)

leg2_d1=round(d1,1)

 

n2=(n0*nt^2)^(1/3)

d2=lowest/(4*n2)

 

leg2_n2=round(n2,2)

leg2_d2=round(d2,1)

 

 

n3=nt

d3=0

 

 

 

x=seq(xmin,xmax, by=(xmax-xmin)/NN)

y=reflection(x,n1,d1,n2,d2,n3,d3,n0,nt,rough)

 

i <- seq(NN-1)

segments(x[i],y[i], x[i+1], y[i+1], col="purple", lwd=2)

 

#

# curve 3 - double layers arc by trial & error method for n1, n2

#

 

n1=1.15

d1=lowest/(4*n1)

 

leg3_n1=round(n1,2)

leg3_d1=round(d1,1)

 

n2=1.4

d2=lowest/(4*n2)

 

leg3_n2=round(n2,2)

leg3_d2=round(d2,1)

 

 

n3=nt

d3=0

 

 

x=seq(xmin,xmax, by=(xmax-xmin)/NN)

y=reflection(x,n1,d1,n2,d2,n3,d3,n0,nt,rough)

 

i <- seq(NN-1)

segments(x[i],y[i], x[i+1], y[i+1], col="red", lwd=2)

 

 

#

# curve 4 - no film

#

 

n1=nt

d1=0

 

n2=nt

d2=0

 

n3=nt

d3=0

 

 

x=seq(xmin,xmax, by=(xmax-xmin)/NN)

y=reflection(x,n1,d1,n2,d2,n3,d3,n0,nt,rough)

 

i <- seq(NN-1)

segments(x[i],y[i], x[i+1], y[i+1], col="green", lwd=2)

 

 

 

# add legends

 

legend(xmin,ymax, legend=c(paste(leg1_n1,"/",leg1_d1,"nm"), paste(leg2_n1,"/",leg2_d1,"nm,",leg2_n2,"/",leg2_d2,"nm"), paste(leg3_n1,"/",leg3_d1,"nm,",leg3_n2,"/",leg3_d2,"nm")," no film"), col=c("blue", "purple", "red","green"), lty=1:1:1:1, cex=0.8)

 

 

#

# draw visible light bondary

#

 

lab_Y = (ymax-ymin)/2

 

lines(x=c(400,400),y=c(ymin,ymax*0.7), col="blue")

lines(x=c(400,700),y=c(lab_Y,lab_Y), col="blue")

lines(x=c(700,700),y=c(ymin,ymax*0.7), col="blue")

 

 

#

# draw color labels of visible light

#

 

 

# vilot 400 nm

 

arrow_len = (ymax-ymin)*0.1

 

xa=400

ya=reflection(xa,n1,d1,n2,d2,n3,d3,n0,nt,rough)

arrows(xa, ya+arrow_len, xa, ya, col= "purple", lwd=2)

 

# Indigo 445 nm

 

xa=445

ya=reflection(xa,n1,d1,n2,d2,n3,d3,n0,nt,rough)

arrows(xa, ya+arrow_len, xa, ya, col= "blueviolet", lwd=2)

 

# Blue 475 nm

 

xa=475

ya=reflection(xa,n1,d1,n2,d2,n3,d3,n0,nt,rough)

arrows(xa, ya+arrow_len, xa, ya, col= "blue", lwd=2)

 

# Green 510 nm

 

xa=510

ya=reflection(xa,n1,d1,n2,d2,n3,d3,n0,nt,rough)

arrows(xa, ya+arrow_len, xa, ya, col= "green", lwd=2)

 

# Yellow 570 nm

 

xa=570

ya=reflection(xa,n1,d1,n2,d2,n3,d3,n0,nt,rough)

arrows(xa, ya+arrow_len, xa, ya, col= "yellow", lwd=2)

 

# Orange 590 nm

 

xa=590

ya=reflection(xa,n1,d1,n2,d2,n3,d3,n0,nt,rough)

arrows(xa, ya+arrow_len, xa, ya, col= "orange", lwd=2)

 

# Red 650 nm

 

xa=650

ya=reflection(xa,n1,d1,n2,d2,n3,d3,n0,nt,rough)

arrows(xa, ya+arrow_len, xa, ya, col= "red", lwd=2)

 

 

 

xxx

查看原文 >>
相关文章