Hallo!
Ich bin ein ziemlicher Neuling auf dem Gebiet der dig. Regelungstechnik,
habe mich aber trotzdem an einer Temperaturregelung eines sehr langsamen
Systems versucht.
Folgendes Stück Code ist dabei raugekommen:
1 | #define I_BEGR 30
|
2 | #define TA 1
|
3 |
|
4 | float Kp = 0.4;
|
5 | float Ki = 0.85;
|
6 | float pAnteil = 0;
|
7 | static float iAnteil = 0;
|
8 | float e = 0;
|
9 | static float esum = 0;
|
10 | char outputPower = 0; // in %
|
11 | float Ta = TA; // In Sek.
|
12 |
|
13 | e = (float) (presetTemp - currentTemp);
|
14 |
|
15 | // P-Anteil
|
16 | pAnteil = (e * Kp);
|
17 |
|
18 | if (pAnteil > 100) { pAnteil = 100; }
|
19 | else if (pAnteil < 0) { pAnteil = 0; }
|
20 |
|
21 | if (TIMER_REGLER >= (char) (10*Ta))
|
22 | {
|
23 | // I-Anteil
|
24 | esum = esum + (e * Ta);
|
25 | if (esum > I_BEGR) { esum = I_BEGR; }
|
26 | else if (esum < 0) { esum = 0; }
|
27 |
|
28 | iAnteil = esum * Ki;
|
29 |
|
30 | TIMER_REGLER = 0;
|
31 | }
|
32 |
|
33 | outputPower = (int) (pAnteil + iAnteil);
|
Heraus kommt die geregelte Temp.kurve im Anhang.
Die Einheit der X-Achse ist Minuten.
Meine Frage jetzt: Wie bekomme ich das Schwingen weg?
Vielleicht sind die Parameter jenseits von Gut und Böse dimensioniert.
Vielleicht ist auch im Code ein grundlegender Fehler...
Vielen Dank schonmal im Voraus!