單晶生長熱系統的堝跟比與堝位計算

轉載地址: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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章