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!
Lesezeichen