- Labornetzteil AliExpress         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: Regelalgorythmus zur Temperaturregelung

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    01.06.2006
    Ort
    Gernrode-Ilmenau
    Beiträge
    48

    Regelalgorythmus zur Temperaturregelung

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo, ich habe folgendes Problem:
    Hardware ist fertig und funktioniert:
    mit einem AVR wird ein Wert von 0..255 gesetzt dementsprechend eine Spannung von ca 2-12V folgt. Diese liegt an einem Peltierelement an das einseitig an einem Kühler montiert ist. Auf der anderen Seite ist ein Temperatursensor angebracht der die Temperatur digital an den AVR übergibt.
    Erhöht man nun den Digitalwert 0..255 kühlt das Peltierelement.

    Mir fehlt nun ein vernünftiger Regelalgorythmus, der mir die variable Solltemperatur(wird vorher eingestellt von ca 0-20°C) am Peltierelement einregelt.
    Größen wären also: tsoll, tmess, und Ausgangsgröße y
    Ich habe es schon mit einem PID Regler versucht, allering kriege ich den nicht stabil
    eingestelle Reglerparameter sind Kp,Ki,Kd,Ta,Überläufe sind abgefangen.

    e = tsoll - tmess;
    esum = esum + e;
    y = Kp*e + Ki*Ta*esum + Kd/Ta*(e – ealt);
    ealt = e;

    Hat jemand soetwas schoneinmal auf nem Atmel realisiert und Beispielcode?
    Für Anregungen wäre ich dankbar.

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    17.08.2004
    Beiträge
    1.065
    mh wie wärs mit nem einfachen Zweipunkt Regler mit Hysterese? Ist total einfach programmiert und kann auch sehr schön experimentell ermittelt werden.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    01.06.2006
    Ort
    Gernrode-Ilmenau
    Beiträge
    48
    ich werd morgen mal probieren, danke

  4. #4
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Der PID Code sieht schon mal nicht so falsch aus. Ein Problem könnte aber ein zu schneller Durchlauf der Schleife sein. Das Differentialglied wird dadurch ziehmlich verrauscht und könnte Probleme machen, wenn man irgendwo an die Grenzen stößt oder das System nichtlinear ist.

    Die eigentliche Schwieriegkeit bei einem PID Regler ist ja auch das bestimmen der Parameter. Dafür gibt es einige Anleitungen. Mit raten geht das oft nicht so einfach.

    Damit der Regler auch über einen größeren Wertebereich mit den gleichen Parametern funktioniert, sollte man das System wenigstens grob lineariesieren. Man sollte also für eine lineare Funktion sorgen von Steuergröße auf Heiz/Kühlleistung des Peltierelements.

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Karlsruhe
    Alter
    36
    Beiträge
    1.225
    Ich hab nen Tiny2313 mit zwei Temperatursensoren in meinem Rechner die Lüfter regeln, dort arbeitet ein modifizierter Integrator.
    Die Abweichung/der integrierte/addierte Wert ist dabei auf eine kleine Konstante fixiert, ferner wird die Regelung nur relativ langsam durchgeführt, da der Regelkreis recht träge ist.
    Ab einer Abweichung vom Zielwert über/unter eine gewisse Grenze wird die Regelgröße in die entsprechende Gegenrichtung verändert.

    Im folgenden Mal der "Kern" der Regelung:
    Code:
    int16_t target_temp_low_offset; // Zwischen Null und diesem Wert wird die Leistung heruntergeregelt
    int16_6 target_temp_high_offset; // Definiert die Breite des "neutralen" Bereichs zwischen TARGET_TEMP_LOW_OFFSET und diesem Wert
    
    uint16_t temp1_value; // Temperatur 1 bzw. Messwert
    uint16_t temp2_value; // Temperatur 2 bzw. Zieltemperatur
    uint8_t integrator; // Die Integrationsvariable
    
    void doSpeedControl(void) {
        int16_t delta = temp1_value - temp2_value + target_temp_low_offset;
    
            if (delta > 0) {
                delta += target_temp_high_offset;
                if (delta > 0) {
                    if (integrator != 0xFF) {
                        integrator++;
                    }
                }
            } else {
                asm volatile (
                    "subi %[integrator], 0x01"          "\n\t"
                    "brcc end_%="                       "\n\t"
                    "ldi %[integrator], 0x00"           "\n\t"
                    "end_%=:"
                    : /* Output */
                    [integrator] "+d" (integrator)
                );
            }
            setFanSpeed(integrator);
    }
    Meine Regelung arbeitet auf eine Zieldifferenz zwischen den beiden Werten temp1_value und temp2_value hin. Um das ganze zu einer normalen Temperaturregelung zu adaptieren, musst du temp2_value als Zielwert und temp1_value als Messwert verwenden.

    Zu den beiden Offset-Variablen:
    target_temp_low_offset ist typischerweise kleiner als Null und bestimmt die Schwelle, ab der die Regelung die Regelvariable reduzieren soll.
    target_temp_high_offset ist typischerweise größer als Null und bestimmt die Schwelle, ab der die Regelung die Regelvariable erhöhen soll.

    Damit ergibt sich folgendes Bild:

    -- ] temp2_value + target_temp_low_offset | temp2_value | temp2_value + target_temp_high_offset [ ++
    Außerhalb des Bereichs rund um temp2_value wird die Regelvariable angepasst, innerhalb wird sie nicht verändert.

    Die Regelgeschwindigkeit kann über die Aufruffrequenz beeinflusst werden, ist sie zu hoch, fährt der Ausgangswert Achterbahn.

    mfG
    Markus

    Edit: Ich rufe bei meiner Steuerung die Funktion ungefähr alle 20 Sekunden einmal auf ...

  6. #6
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.686
    Hi Geimel,

    Zitat Zitat von Besserwessi
    ... Code ... nicht so falsch ... Problem könnte aber ... zu schneller Durchlauf ... sein ...
    Der PID-Regler ist schon gut - aber die Einstellung ist auch vertrackt. Ich mühe mich derzeit damit, um bei meiner PID-Geschwindigkeitsregelung von zwei unabhängigen Motoren, Regelfrequenz rund 100 Hz, noch die allerletzten Feinheiten raus- neee reinzukriegen (siehe hier eine alte Testfahrt). Dazu nehme ich beispielsweise ne Reihe Messdaten und die Reglerwerte auf, um sie mir in Diagrammen anzusehen. Die Beurteilung dieser Diagramme hilft - jedenfalls bei mir. Im verlinkten Posting ist auch mein aktueller Code für einen Motor eingeklinkt.

    Vermutlich kennst Du dieses hübsche und ergiebige Tutorial. Danach habe ich meine Regelung geschrieben. Dort steht auch ein guter Abschnitt über die Dimensionierung durch Probieren oder durch Einstellregeln. Natürlich muss man dazu die Reglerverstärkung "irgendwie" messen, dazu die Verzögerungszeiten und die systemeigene Zeitkonstante und auch eine Sprungfunktion aufnehmen - hatte ich auch gemacht. Vermutlich hast Du das aber auch schon alles hinter Dir? Die Sprungfunktion ist bei einem Thermofühler ja einfach bereitzustellen: erst in kochendes Wasser - danach in ein volles Wasserglas mit 50% Eiswürfel ( ok, das gibt NICHT die allerletzten Mikroprozente an Genauigkeit *ggg* ).

    Dass bei einer so trägen Sache wie einer Heiz-/Kühlregelung ein 2-Punkt-Regler ausreichend funktioniert - hätte ich auch als erstes geraten . . .

    Viel Erfolg
    Ciao sagt der JoeamBerg

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    01.06.2006
    Ort
    Gernrode-Ilmenau
    Beiträge
    48
    2 Punkt Regler ist sehr ungenau, der Überschwingt ständig, Frequenz ca 0,1Hz. Das Problem wird warscheinlich sein, das ich je nach solltemperatur beide seiten des peltieelementes messen muss und schoneinma eine vorsteuerung nach peltierelementkurve vornehmen muss.
    Prost Mahlzeit, das gibt einen Mist

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    13.07.2004
    Ort
    bei Stuttgart
    Alter
    42
    Beiträge
    760
    hoi,
    bestimm doch mal die sprungantwort des peltierelements. schätz mal, des wird irgendwas pt1 mäßiges sein. sensor denke ich mal, ist deutlich schneller als das peltierelement und abtastzeit, kann man dann wahrscheinlich vernachlässigen.
    ich denke, da reicht sogar schon ein einfacher pi regler aus, um das vernünftig hin zu kriegen. und denk dran, du kannst nicht genauer regeln, als du messen kannst, kenn jetzt die auflösung von deinem sensor nicht.
    mfg jeffrey

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    01.06.2006
    Ort
    Gernrode-Ilmenau
    Beiträge
    48
    Danke ersteinmal für eure Anworten
    Auflösung ist etwa 0,1°C, regeln würde ich auf ca +-1°C genau.
    Momentan sind es 2,5Grad.
    Ich versuche ersteinmal den Sensor noch besser an das Peltierelement zu koppeln (thermisch).
    Das Problem was ich habe, ist ja das ich eine gewisse Grundspannung drauf geben muss, damit eine Temperatur gehalten wird. Wenn ich die aus der Peltierkurve errechne müsste das ganze doch schon wesentlich besser werden oder nicht? Ich würde dann quasi die Feineinstellung um die Grundspannung reglen.

  10. #10
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    13.07.2004
    Ort
    bei Stuttgart
    Alter
    42
    Beiträge
    760
    hoi,
    ne vorsteuerung kann helfen die regelung zu verbessern. allerdings musst du dann wieder die rückseitentemperatur des peletierelements messen, was den messaufwand erhöht. probier ews doch einfach aus.
    mfg jeffrey

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test