分享

单晶生长热系统的埚跟比与埚位计算-技术的脚步-搜狐博客

 apen 2009-12-30

2009-02-02 | 单晶生长热系统的埚跟比与埚位计算

分享
标签: 单晶炉  热系统  埚跟比 


咱搞机械设计的,为了设备的合理使用和技术完善,不得不开始热系统设计和进行拉晶试验。既然要拉晶,必然需要根据不同规格热场来设置参数。跟进了一段时间,试验不同规格的热场,老是要验算埚跟比啦,埚位啦,有点烦。开始考虑借助电脑来自动滴、即时滴完成。感谢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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多