轉載地址:http://yitongfan.blog.sohu.com/109500958.html
咱搞機械設計的,爲了設備的合理使用和技術完善,不得不開始熱系統設計和進行拉晶試驗。既然要拉晶,必然需要根據不同規格熱場來設置參數。跟進了一段時間,試驗不同規格的熱場,老是要驗算堝跟比啦,堝位啦,有點煩。開始考慮藉助電腦來自動滴、即時滴完成。感謝Gtofish給了個XLS格式的小表格可以用。仔細研究了一下,發現這個原始計算方法有點問題,還得自立更生,在跟進拉晶過程的漫漫長夜中完成了這個東東的優化。
堝跟比的計算是比較簡單的:假設晶體每生長了1mm,那麼液體硅則減少了這1mm的質量。如果晶圓直徑爲8",那麼1mm 8"的晶圓質量應該爲直徑8"大,高度1mm的圓柱體體積乘以固體硅的密度。而這個時候堝裏的液體硅液麪會降低多少呢?當然是以液體硅的密度除以這個質量可以得到減少的液體硅的體積,然後再用體積除以堝的截面積就得到了。 得到的這個數就是堝跟比了。
但是,堝可不是一個圓柱體,它的截面積到了鍋底圓弧部分就開始不斷變化了,也就是說當液體降低到底部圓弧部分的時候,堝跟比就開始變化了,那麼這個該咋算呢?
我們把堝可以看做由三部分體積組成:(如圖)
體積一(V1):液體硅的體積小於或等於綠色部分,根據半圓球體的計算方法:
sinθ = (R2 - H1) / R2
V1= (R2 - W3) ^ 3 * Pi * (1 - sinθ) - (R2 - W3) ^ 3 * Pi * (1 - sinθ ^ 3) / 3
體積二(V2):液體硅的體積大於綠色部分,但小於或等於綠色和藍色部分的總和
sinθ = (H2 - H1) / R1
A = D1 / 2 - R1
B = R1 - W2
V2 = (A ^ 2 * B * Pi * sinθ + A * B ^ 2 * Pi * Sin(2 * Asin) / 2 + A * B ^ 2 * Pi * Asin + B ^ 3 * Pi * sinθ - B ^ 3 * Pi * sinθ ^ 3 / 3) + V1
體積三(V3):液體硅的體積大於綠色和藍色部分的總和
V3 = (D1 / 2 - W1) ^ 2 * Pi * (H3 - H2) + V2
用公式分別判斷當前液體硅體積屬於那個階段,然後分別用公式計算堝跟就可以了。
最終優化完成的表格如下圖:
根據堝位清零的習慣,拉晶準備時都會將石墨坩堝上沿與加熱器上沿平齊後作爲零堝位。以這個爲依據,我們可以實時計算晶體長度拉制到多少時當前的堝位是多少:
當前堝位 = 石墨坩堝的深度 - 石英坩堝底部圓弧壁厚 - 剩餘液體硅高度 - 導流筒伸入加熱器尺寸 - 導流筒底面距離硅液表面距離
表格中用到的宏程序如下:
Option Explicit
Function V_1(BR As Double, BT As Double, ST As Double)
Dim M, Pi, A
Pi = Application.Pi()
A = BR - BT
M = A ^ 3 * Pi * (1 - ST) - A ^ 3 * Pi * (1 - ST ^ 3) / 3
V_1 = M
End Function
Function V_2(ID As Double, TR As Double, TT As Double, ST As Double)
Dim M, Pi, Asin, A, B
Pi = Application.Pi()
Asin = Application.Asin(ST)
A = ID / 2 - TR
B = TR - TT
M = A ^ 2 * B * Pi * ST + A * B ^ 2 * Pi * Sin(2 * Asin) / 2 + _
A * B ^ 2 * Pi * Asin + B ^ 3 * Pi * ST - B ^ 3 * Pi * ST ^ 3 / 3
V_2 = M
End Function
Function V_3(ID As Double, WT As Double, H3 As Double, H2 As Double)
Dim M, Pi, A, B
Pi = Application.Pi()
A = ID / 2 - WT
B = H3 - H2
M = A ^ 2 * Pi * B
V_3 = M
End Function
Function Height_Volume_1()
Dim BR As Double
Dim BT As Double
Dim ST As Double
Dim V As Double
Dim LowerLimit As Double
Dim UpperLimit As Double
Dim Delta_V As Double
Dim Volume_Const As Double
Dim Height As Double
BR = Worksheets("Program").Range("H4")
BT = Worksheets("Program").Range("H10")
LowerLimit = 1#
UpperLimit = (BR - Worksheets("Program").Range("H5")) / BR
Volume_Const = Worksheets("Program").Range("C8") * 1000
Do
ST = (LowerLimit + UpperLimit) / 2#
With Application
V = V_1(BR, BT, ST)
Delta_V = Volume_Const - V
If V <= Volume_Const Then
LowerLimit = ST
ST = (LowerLimit + UpperLimit) / 2#
End If
If V > Volume_Const Then
UpperLimit = ST
ST = (UpperLimit + LowerLimit) / 2#
End If
End With
Loop Until Abs(Delta_V) < 0.1
Height = (1 - ST) * BR
Height_Volume_1 = Height
End Function
Function Height_Volume_2()
Dim ID As Double
Dim TR As Double
Dim TT As Double
Dim ST As Double
Dim V
Dim LowerLimit As Double
Dim UpperLimit As Double
Dim Delta_V, Volume_Const
Dim Height
ID = Worksheets("Program").Range("H2")
TR = Worksheets("Program").Range("H3")
TT = Worksheets("Program").Range("H9")
LowerLimit = (Worksheets("Program").Range("H6") - Worksheets("Program").Range("H5")) / TR
UpperLimit = 0#
Volume_Const = Worksheets("Program").Range("C8") * 1000
Do
ST = (LowerLimit + UpperLimit) / 2#
With Application
V = Worksheets("Program").Range("K14") - V_2(ID, TR, TT, ST)
Delta_V = Volume_Const - V
If V <= Volume_Const Then
LowerLimit = ST
ST = (LowerLimit + UpperLimit) / 2#
End If
If V > Volume_Const Then
UpperLimit = ST
ST = (UpperLimit + LowerLimit) / 2#
End If
End With
Loop Until Abs(Delta_V) < 0.1
Height = Worksheets("program").Range("H6") - TR * ST
Height_Volume_2 = Height
End Function
Function CLR_1()
Dim BR As Double
Dim BT As Double
Dim ST As Double
Dim V As Double
Dim LowerLimit As Double
Dim UpperLimit As Double
Dim Delta_V As Double
Dim Volume_Const As Double
Dim Radius As Double
Dim Asin As Double
BR = Worksheets("Program").Range("H4")
BT = Worksheets("Program").Range("H10")
LowerLimit = 1#
UpperLimit = (BR - Worksheets("Program").Range("H5")) / BR
Volume_Const = Worksheets("Program").Range("C8") * 1000
Do
ST = (LowerLimit + UpperLimit) / 2#
With Application
V = V_1(BR, BT, ST)
Delta_V = Volume_Const - V
If V <= Volume_Const Then
LowerLimit = ST
ST = (LowerLimit + UpperLimit) / 2#
End If
If V > Volume_Const Then
UpperLimit = ST
ST = (UpperLimit + LowerLimit) / 2#
End If
End With
Loop Until Abs(Delta_V) < 0.1
Asin = Application.Asin(ST)
Radius = (BR - BT) * Cos(Asin)
CLR_1 = (Worksheets("Program").Range("L20") / 2) ^ 2 / (Radius ^ 2) * (2.3 / 2.51)
End Function
Function CLR_2()
Dim ID As Double
Dim TR As Double
Dim TT As Double
Dim ST As Double
Dim V
Dim LowerLimit As Double
Dim UpperLimit As Double
Dim Delta_V, Volume_Const
Dim Asin As Double
Dim Radius As Double
ID = Worksheets("Program").Range("H2")
TR = Worksheets("Program").Range("H3")
TT = Worksheets("Program").Range("H9")
LowerLimit = (Worksheets("Program").Range("H6") - Worksheets("Program").Range("H5")) / TR
UpperLimit = 0#
Volume_Const = Worksheets("Program").Range("C8") * 1000
Do
ST = (LowerLimit + UpperLimit) / 2#
With Application
V = Worksheets("Program").Range("K14") - V_2(ID, TR, TT, ST)
Delta_V = Volume_Const - V
If V <= Volume_Const Then
LowerLimit = ST
ST = (LowerLimit + UpperLimit) / 2#
End If
If V > Volume_Const Then
UpperLimit = ST
ST = (UpperLimit + LowerLimit) / 2#
End If
End With
Loop Until Abs(Delta_V) < 0.1
Asin = Application.Asin(ST)
Radius = (TR - TT) * Cos(Asin) + (ID / 2 - TR)
CLR_2 = (Worksheets("Program").Range("L20") / 2) ^ 2 / (Radius ^ 2) * (2.3 / 2.51)
End Function
Sub SheetPrint()
Dim ChargeWeight As Double
Dim Radius As Double
Dim MaxLength As Double
Dim SeedWeight As Double
Dim CrystalWeight As Double
Dim MeltWeight As Double
Dim MeltVolume As Double
Dim CrystalLength As Double
Dim Volume_1 As Double
Dim Volume_2 As Double
Dim Volume_3 As Double
Dim GraphiteInnerDia As Double
Dim GraphiteHeight_2 As Double
Dim QuartzWallTHickness As Double
Dim MeltHeight As Double
Dim CLR As Double
Dim Pi As Double
Dim LengthStep As Double
Dim Temp As String
Dim i As Integer
Pi = Application.Pi()
i = 2
Temp = InputBox("請輸入堝跟比每段多長?" _
& Chr(13) & Chr(10) & Chr(13) & Chr(10) & "即每拉多少mm單晶就計算一次堝跟比")
If Temp = "" Then
MsgBox "輸入數據不匹配"
Exit Sub
End If
LengthStep = CDbl(Temp)
Worksheets("Sheet1").Columns("J:L").ClearContents
With Worksheets("Program")
ChargeWeight = .Range("C3")
SeedWeight = .Range("L21")
Radius = .Range("L20")
CrystalLength = .Range("C4")
Volume_1 = .Range("K13")
Volume_2 = .Range("K14")
GraphiteInnerDia = .Range("H2")
GraphiteHeight_2 = .Range("H6")
QuartzWallTHickness = .Range("H8")
End With
MaxLength = (ChargeWeight - SeedWeight) / (0.00000233 * (Radius / 2) ^ 2 * Pi)
With Worksheets("Sheet1")
.Range("J1") = "Ingot Length"
.Range("K1") = "Melt Height"
.Range("L1") = "CLR"
End With
For CrystalLength = 0 To MaxLength Step LengthStep
CrystalWeight = SeedWeight + (Radius / 2) ^ 2 * Pi * CrystalLength * 0.00000233
MeltWeight = ChargeWeight - CrystalWeight
MeltVolume = MeltWeight / 2.51 * 1000
If MeltVolume * 1000 < Volume_1 Then
MeltHeight = Sub_Height_Volume_1(MeltVolume)
ElseIf MeltVolume * 1000 < Volume_2 Then
MeltHeight = Sub_Height_Volume_2(MeltVolume)
Else
MeltHeight = GraphiteHeight_2 + (MeltVolume * 1000 - Volume_2) _
/ (Pi * (GraphiteInnerDia / 2 - QuartzWallTHickness) ^ 2)
End If
If MeltWeight <= 0 Then
CLR = 0#
ElseIf MeltVolume * 1000 < Volume_1 Then
CLR = Sub_CLR_1(MeltVolume)
ElseIf MeltVolume * 1000 < Volume_2 Then
CLR = Sub_CLR_2(MeltVolume)
Else
CLR = (Radius / 2) ^ 2 / (GraphiteInnerDia / 2 - QuartzWallTHickness) ^ 2 * _
(2.33 / 2.51)
End If
With Worksheets("Sheet1")
.Cells(i, 10) = CrystalLength
.Cells(i, 11) = MeltHeight
.Cells(i, 12) = CLR
End With
i = i + 1
Next CrystalLength
Worksheets("Sheet1").Activate
End Sub
Function Sub_Height_Volume_1(MeltVolume As Double)
Dim BR As Double
Dim BT As Double
Dim ST As Double
Dim V As Double
Dim LowerLimit As Double
Dim UpperLimit As Double
Dim Delta_V As Double
Dim Volume_Const As Double
Dim Height As Double
With Worksheets("Program")
BR = .Range("H4")
BT = .Range("H10")
LowerLimit = 1#
UpperLimit = (BR - .Range("H5")) / BR
End With
Volume_Const = MeltVolume * 1000
Do
ST = (LowerLimit + UpperLimit) / 2#
V = V_1(BR, BT, ST)
Delta_V = Volume_Const - V
If V <= Volume_Const Then
LowerLimit = ST
ST = (LowerLimit + UpperLimit) / 2#
End If
If V > Volume_Const Then
UpperLimit = ST
ST = (UpperLimit + LowerLimit) / 2#
End If
Loop Until Abs(Delta_V) < 0.1
Height = (1 - ST) * BR
Sub_Height_Volume_1 = Height
End Function
Function Sub_Height_Volume_2(MeltVolume As Double)
Dim ID As Double
Dim TR As Double
Dim TT As Double
Dim ST As Double
Dim V
Dim LowerLimit As Double
Dim UpperLimit As Double
Dim Delta_V, Volume_Const
Dim Height
With Worksheets("Program")
ID = .Range("H2")
TR = .Range("H3")
TT = .Range("H9")
LowerLimit = (.Range("H6") - .Range("H5")) / TR
End With
UpperLimit = 0#
Volume_Const = MeltVolume * 1000
Do
ST = (LowerLimit + UpperLimit) / 2#
'With Application
V = Worksheets("Program").Range("K14") - V_2(ID, TR, TT, ST)
Delta_V = Volume_Const - V
If V <= Volume_Const Then
LowerLimit = ST
ST = (LowerLimit + UpperLimit) / 2#
End If
If V > Volume_Const Then
UpperLimit = ST
ST = (UpperLimit + LowerLimit) / 2#
End If
'End With
Loop Until Abs(Delta_V) < 0.1
Height = Worksheets("Program").Range("H6") - TR * ST
Sub_Height_Volume_2 = Height
End Function
Function Sub_CLR_1(MeltVolume As Double)
Dim BR As Double
Dim BT As Double
Dim ST As Double
Dim V As Double
Dim LowerLimit As Double
Dim UpperLimit As Double
Dim Delta_V As Double
Dim Volume_Const As Double
Dim Radius As Double
Dim Asin As Double
With Worksheets("Program")
BR = .Range("H4")
BT = .Range("H10")
LowerLimit = 1#
UpperLimit = (BR - .Range("H5")) / BR
End With
Volume_Const = MeltVolume * 1000
Do
ST = (LowerLimit + UpperLimit) / 2#
'With Application
V = V_1(BR, BT, ST)
Delta_V = Volume_Const - V
If V <= Volume_Const Then
LowerLimit = ST
ST = (LowerLimit + UpperLimit) / 2#
End If
If V > Volume_Const Then
UpperLimit = ST
ST = (UpperLimit + LowerLimit) / 2#
End If
'End With
Loop Until Abs(Delta_V) < 0.1
Asin = Application.Asin(ST)
Radius = (BR - BT) * Cos(Asin)
Sub_CLR_1 = (Worksheets("Program").Range("L20") / 2) ^ 2 / (Radius ^ 2) * (2.3 / 2.51)
End Function
Function Sub_CLR_2(MeltVolume As Double)
Dim ID As Double
Dim TR As Double
Dim TT As Double
Dim ST As Double
Dim V
Dim LowerLimit As Double
Dim UpperLimit As Double
Dim Delta_V, Volume_Const
Dim Asin As Double
Dim Radius As Double
With Worksheets("Program")
ID = .Range("H2")
TR = .Range("H3")
TT = .Range("H9")
LowerLimit = (.Range("H6") - .Range("H5")) / TR
End With
UpperLimit = 0#
Volume_Const = MeltVolume * 1000
Do
ST = (LowerLimit + UpperLimit) / 2#
'With Application
V = Worksheets("Program").Range("K14") - V_2(ID, TR, TT, ST)
Delta_V = Volume_Const - V
If V <= Volume_Const Then
LowerLimit = ST
ST = (LowerLimit + UpperLimit) / 2#
End If
If V > Volume_Const Then
UpperLimit = ST
ST = (UpperLimit + LowerLimit) / 2#
End If
'End With
Loop Until Abs(Delta_V) < 0.1
Asin = Application.Asin(ST)
Radius = (TR - TT) * Cos(Asin) + (ID / 2 - TR)
Sub_CLR_2 = (Worksheets("Program").Range("L20") / 2) ^ 2 / (Radius ^ 2) * (2.3 / 2.51)
End Function
|