Temperaturregelung (ja, sry, schon wieder ;o) mit PIC

OP (Firma: ATM GmbH) #1011350
Lesenswert?

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!
Angehängte Dateien:
OP (Firma: ATM GmbH) #1011428
Lesenswert?

Hallo!

Ach so, der Timer wird alle 100ms aufgerufen, deshalb muss er bis 10*Ta 
laufen um auf die Einheit Sek. zu kommen.

Das, was ich ansteuere ist eine Heizung. Die Regelung gibt mir eine 
Ausgangsleistung von 0 bis 100% raus, was per PWM an die Heizung gegeben 
wird. Das hat also an dieser Stelle mit der Regelung nichts zu tun.

Gruß

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren