Identifizierung schneller thermischer Prozesse

    Kürzlich gelang es mir, einen Teil der Arbeit an einem sehr interessanten Projekt des nach ihm benannten Physikalisch-Technischen Instituts abzuschließen Joffe und bekomme genug experimentelle Daten um sie mit dir zu teilen.
    Physiker des St. Petersburger Physikalisch-Technischen Instituts benannt nach Ioffe befasst sich mit dem Wachstum von Galliumnitrid-Halbleiterstrukturen, die gute Indikatoren für die Geschwindigkeit von Ladungsträgern während des Übergangs und einen hohen Wärmeleitfähigkeitskoeffizienten aufweisen. Der Wachstumsprozess einer solchen Struktur findet bei einer Temperatur von 1000 ° C (1273 ° K) und Atmosphärendruck statt. Alles geschieht in einer speziellen Kammer, die sich im versiegelten Bereich befindet. Wenn die Struktur gewachsen ist, ist das gesamte Volumen des Reaktors und der abgedichteten Zone mit Stickstoff gefüllt. Während des Strukturwachstums dreht sich der Substrathalter mit einer Frequenz von einmal pro Sekunde. Solche Operationen beziehen sich auf schnelle thermische Prozesse, deren Temperaturänderungsrate von mehreren Einheiten bis zu Hunderten von Grad pro Sekunde variiert.

    Meine Aufgabe war es, die Temperatur des Graphitsubstrathalters mittels induktiver Erwärmung zu regeln.
    Die technischen Merkmale der Anlage sind wie folgt. Zur Messung der Temperatur wird ein Laserpyrometer verwendet, das Daten in der Mitte des Graphits erfasst. Die Häufigkeit des Informationsabrufs beträgt 10 Mal pro Sekunde, der Messschritt 1 Grad. Es wird angenommen, dass der Wert der auf Graphit übertragenen Leistung direkt proportional zur Leistung am Induktor ist. Der Generator, der die Induktivität steuert, verfügt über einen digitalen Ausgang, über den die Werte für Spannung, Strom und Leistung übertragen werden.

    Zunächst musste der Temperaturregler so eingestellt werden, dass keine starken Schwankungen während des Wachstumsprozesses auftreten. Sie haben diese Aufgabe schnell genug bewältigt, aber unsere Lösung lieferte nur bei hohen Temperaturen ein qualitativ hochwertiges Ergebnis. Für andere Prozesse mussten die Koeffizienten geändert werden.
    Da diese Arbeit zum Thema meines Kandidaten passte, wollte ich einen kniffligen Regelungsalgorithmus schreiben, der auf einer Analyse des thermischen Prozessmodells basiert. Zuerst habe ich das Stefan-Boltzmann-Gesetz kennengelernt , die Strahlungsleistung eines völlig schwarzen Körpers ist direkt proportional zur Oberfläche und zum vierten Grad der Temperatur. Unter Berücksichtigung der Konvektion können wir die Gleichung für thermische Prozesse zum Zeitpunkt der Temperaturentfernung aufstellen

    wobei T die Temperatur ist, P die Leistung ist, Tc die Temperatur der umgebenden Objekte ist, die Graphit mit ihrer eigenen Strahlung erwärmen, Ta die Temperatur des Gases in der Nähe des Datenaufnahmepunkts ist, der befördert, B, A1, A2 die zu identifizierenden Koeffizienten sind. Zur Vereinfachung ersetzen wir alle Komponenten der Gleichung, von denen wir annehmen können, dass sie im stationären Prozess konstant sind, und betrachten die folgende Gleichung:

    Jetzt verfügen wir über ein Modell, anhand dessen wir mit der weiteren Analyse der Daten fortfahren können. Im Experiment wurde ein Mäander als Signal angelegt.


    Wenn wir eine Schätzung der Temperaturgeschwindigkeit erhalten, können wir ein Regressionsmodell mit der bekannten Temperatur und Leistung des Regelinduktors erstellen und die Koeffizienten in der Gleichung berechnen.
    Ich benutze Scilab seit langer Zeit und dieses Mal habe ich beschlossen, mich nicht zu ändern. Für diese Aufgabe habe ich mich entschieden, die Ableitung im Fourier-Bild zu nehmen. Um jedoch mit echten Daten zu arbeiten, müssen Sie die Messungen interpolieren, um eine einheitliche Zeitachse zu erhalten.
    xx = linspace(0, round(time($)), round(time($))*fs+1)'; //New time axes'
    d=splin(time,temp,"monotone");
    [int_temp,int_temp_diff] = interp(xx, time, temp, d);
    

    Es ist erwähnenswert, dass die Variable "int_temp_diff" Geschwindigkeitsdaten enthält, diese jedoch sehr unangenehm aussehen.

    Fahren wir also mit der Arbeit mit Daten im Fourier-Bild fort. Wir müssen das zusätzliche Datenende vergrößern, damit am Ende keine Lücke entsteht, indem wir das Diagramm der Temperaturdaten spiegeln.

    Dann setzen wir die Frequenzachse und machen die diskrete Fourier-Transformation.

    fs = 10;           //Sample frequency
    in = [int_temp;int_temp($:-1:1)];
    N = length ( in );
    frequency = [0 : (N-1)] / N * fs;
    frequency (N/2+1 : $) = frequency (N/2+1 : $) -fs;
    frequency = frequency'; 
    sp = fft(in);    //Fast Fourier Transform
    


    Ein scheinbarer Peak ist bei einer Frequenz von 1 Hertz sichtbar, was darauf zurückzuführen ist, dass sich der Substrathalter bei dieser Frequenz dreht. Andere Frequenzen brachen aufgrund der ungleichmäßigen Erwärmung von Graphit durch, und während der Drehung kann die Temperatur um ein Vielfaches ansteigen und abfallen.
    Um die Ableitung im Fourier-Bild zu erhalten, müssen Sie nur mit multiplizieren . Danach führen wir die inverse Fourier-Transformation durch.
    omega = (2*%pi*%i*frequency);
    tmp = sp.*omega;
    out = real(fft(tmp,1));
    speed_temp = out(1:N/2);
    


    Dies ist natürlich ein wenig besser als die Ableitung der Funktion durch kubische Splines. Die Identifikation mit dieser Funktion führt jedoch zu Ergebnissen mit schlechter Qualität. Muss auf das Filtern des Signals zurückgreifen.
    Auf Anraten meines Freundes Jura, der an der Abstimmung von Schiffskontrollsystemen beteiligt ist, wurde beschlossen, das Blackman-Harris- Fenster zu verwenden, um überschüssige Frequenzen auszublenden. Da sich Graphit während des Wachstums mit einer Frequenz von 1 Mal pro Sekunde dreht, sind alle Vibrationen mit einer Frequenz darüber für uns nicht interessant. Daher ist es empfehlenswert, alle Vibrationen über 1 [Hz] auszuschalten:
    cf = 1; //Cutoff frequency
    k = round(cf*N/fs);
    L = 2*k+1;
    a0=0.35875;
    a1=0.48829;
    a2=0.14128;
    a3=0.01168;
    for j=0:L-1,
        w(j+1) = a0 - a1*cos(2*%pi*j/(L-1))+a2*cos(4*%pi*j/(L-1))-a3*cos(6*%pi*j/(L-1));
    end
    h = zeros(frequency);
    for j=1:1:k+1
        h(j) = w(k+j);
    end  
    h([$:-1:$-k]) = h([1:1:k+1]);
    omega = (2*%pi*%i*frequency);
    omega = omega.*h;
    tmp = sp.*omega;
    out = real(fft(tmp,1));
    speed_temp = out(1:N/2);
    


    Es ist viel besser geworden. Damit fahren wir mit der Berechnung der Regressionskoeffizienten fort.
    Um gute Daten zu erhalten, müssen Sie zuerst die Datenvektoren normalisieren. Für eine freie Konstante in der Gleichung müssen Sie einen mit Einheiten gefüllten Vektor angeben.
    constant (1:length(int_power)) = 1;
    norm_4_temp = norm( int_temp.^4 );
    norm_int_temp = norm( int_temp );
    norm_int_power = norm( int_power );
    norm_speed_temp = norm( speed_temp );
    norm_constant = norm( constant );
    

    Jetzt können Sie die Werte der Konstanten ermitteln. Wir stellen eine Matrix zusammen, die die Werte von drei Variablen und Konstanten enthält. In diesem Fall teilen wir jeden der Datenvektoren durch seine Länge. Um die Koeffizienten zu erhalten, müssen Sie die pseudoinverse Matrix mit dem normalisierten Datenvektor über die Änderungsrate der Temperatur multiplizieren.
    LSM = [ int_temp.^4/norm_4_temp , int_temp/norm_int_temp , int_power/norm_int_power , constant/norm_constant ] ;
    a0 = pinv(LSM) * speed_temp / norm_speed_temp ;
    

    Danach ist es notwendig, zu den ursprünglichen Werten des Koeffizientenvektors zurückzukehren.
    a0(1) = a0(1)*norm_speed_temp/norm_4_temp;
    a0(2) = a0(2)*norm_speed_temp/norm_int_temp;
    a0(3) = a0(3)*norm_speed_temp/norm_int_power;
    a0(4) = a0(4)*norm_speed_temp/norm_constant;
    

    Als Ergebnis haben wir die folgenden Werte erhalten: a0 = [- 1,073D-12, - 0,0029096, 0,0004617, 2,0969723], was dem Ergebnis unserer ausländischen Kollegen ziemlich nahe kommt , obwohl sie Lampenheizung verwenden.
    Jetzt können Sie die Ergebnisse des resultierenden Modells überprüfen. Wir werden dafür das virtuelle Simulationspaket Xcos Scilab verwenden. Da wir eine Differentialgleichung haben , die den thermischen Prozess im Reaktor und alle Koeffizienten dafür beschreibt, werden wir das folgende Schema sammeln.

    Der Block „From Workspace“ liefert experimentelle Leistungsdaten, wobei zunächst eine Struktur V für diesen Block erstellt wird. Im Block „Clock“ stellen wir die Abtastfrequenz und die Startzeit der Simulation ein. Die Länge der Ausgabedatenstruktur wird gleich der Eingabe gesetzt. Die endgültige Simulationszeit sollte der Versuchszeit entsprechen. Wir starten das kompilierte Modell im Programmtext und vergleichen die Grafiken des Experiments und der Simulation.
    V.time = xx;
    V.values = int_power;
    importXcosDiagram("D:\PhD\Term_model.zcos");
    xcos_simulate(scs_m,4);
    plot(time,temp);
    plot(A.time,A.values,"r--");
    



    Hier ist das Gleiche, aber für eine harmonische Störung mit wechselnder Frequenz.


    Vielen Dank an den Supervisor der Arastas für ihre unschätzbare Hilfe und Teilnahme an der Vorbereitung des Materials. Ich danke Evgeny Zavarin für die Bereitstellung des Zugangs zur Installation und Software-Implementierung aller Experimente.

    Jetzt auch beliebt: