Hallo!
Ich bin ein ziemlicher Neuling auf dem Gebiet der dig. Regelungstechnik, habe mich aber trotzdem an einer Temperaturregelung versucht.
Folgendes Stück Code ist dabei raugekommen:
Code:#define I_BEGR 3000 // I-Anteil begrenzen #define TA 4 // Sek. float pAnteil = 0; static float iAnteil = 0; float e = 0; // Regelabweichung static float esum = I_BEGR; // Integral (Summe der Regelabweigungen) char outputPower = 0; // Leistung, die auf die Heizung gegeben wird (per PWM) float Ta = TA; // Abtastrate (Zeit in Sek.) e = (float) (presetTemp - currentTemp); // P-Anteil pAnteil = (e * Kp); if (pAnteil > 100) { pAnteil = 100; } if (TIMER_REGLER >= (char) (10*Ta)) // Der Timer wird alle 100ms aufgerufen { // I-Anteil esum = esum + (e * Ta); if (esum > I_BEGR) { esum = I_BEGR; } else if (esum < 0) { esum = 0; } iAnteil = esum * Ki; TIMER_REGLER = 0; } outputPower = (int) (pAnteil + iAnteil);
Das zu regelnde System ist ziemlich langsam. Die Einheit der X-Achse ist Minuten.
Meine Frage jetzt: Wie bekomme ich den Unterschwinger weg? (Siehe Anhang) Der Überschwinger ist sogar gewollt.
Vielen Dank schonmal im Voraus!







Zitieren

Lesezeichen