PI-Regler in C

Von: , Frage gestellt am Di, 10. Apr 2007

Hallo Leute,

ich habe folgenden Quellcode für einen PI-Regler verwendet:

int druck_regler(void)
{
kp=0.890909;
ki=1.15888;
ta=0.25; //soll 0.25 ms entsprechen
esum=esum+regdiffp;
if (esum < -20) {esum = -20;} //Begrenzung des I-Anteils
if (esum > 2.75) {esum= 2.75;}
// printf("\n esum hat folgenden Wert: %3.3f", esum);
regaus=kp*regdiffp + ki*ta*esum; //Reglergleichung
if (regaus < -regausbegrenz) {regaus=-regausbegrenz;} //Begrenzung Reglerausgang (Stellgrösse)
if (regaus > regausbegrenz) {regaus=regausbegrenz;}
// printf("\n Der Regler gibt folgenden Wert aus: %3.3f", regaus);
return 0;
}

Die Regelung tut auch das was sie soll, nun aber meine Frage:
Hat jemand ne Ahnung wie das mit dem ta ist und ob das wirklich so 0,25ms entspricht??? Hab nicht so die Ahnung von Regelungstechnik, soll aber eine Regelung programmieren (Vorlage ist ein fertiges Labview-Programm). Der erste Teil der Regelung steht und funktioniert, auch sind mir alle Programmdurchlaufzeiten (meines C-Codes) bekannt. Nur das ta macht mir Kopfzerbrechen, da ich nicht weiss ob dies so stimmt und funktioniert oder ich das mit dem ta völlig falsch verstehe.
(Abtastzeit???)

Danke

MfG
Ronny

1 Antworten zu dieser Frage

  1. Antwort von nach 40 Minuten 2 hilfreich
    Re: PI-Regler in C

    Hallo Leute,

    ich habe folgenden Quellcode für einen PI-Regler verwendet:

    ...
    Die Regelung tut auch das was sie soll, nun aber meine Frage:
    Hat jemand ne Ahnung wie das mit dem ta ist und ob das
    wirklich so 0,25ms entspricht??? Hab nicht so die Ahnung von
    Regelungstechnik, soll aber eine Regelung programmieren
    (Vorlage ist ein fertiges Labview-Programm). Der erste Teil
    der Regelung steht und funktioniert, auch sind mir alle
    Programmdurchlaufzeiten (meines C-Codes) bekannt. Nur das ta
    macht mir Kopfzerbrechen, da ich nicht weiss ob dies so stimmt
    und funktioniert oder ich das mit dem ta völlig falsch
    verstehe.
    (Abtastzeit???)

    Danke
    Hallo,

    Abtastzeit wird schon stimmen, bloss hat dein Programm ja bisher überhaupt keinen Bezug zu irgendeiner Zeit. Ein Programm regelt auch nicht kontinuierlich, weil das garnicht geht, sondern in bestimmten Zeitabständen, was du geschrieben hast, ist die Befehlsfolge für 1 solche "Abtastung". Du müsstest jetzt noch dafür sorgen, dass diese Routine alle ta Millisekunden ausgeführt wird, z.B. mit einem Windows-Timer.

    Und wenn du aus irgendwelchen Gründen stattdessen 10 ms brauchst, must du eben dein Programm alle 10 ms ausführen UND ta auf diesen Wert ändern.

    In Labview gibt es sicher eine einfache Möglichkeit, eine solche Regelroutine zyklisch auszuführen, das ist ja der Normalfall für solche Software.

    Gruss Reinhard

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!