Zitat von
makani
Ok, dann mal etwas konkreter:
Ks = MONmax/DACmax = 1,7V/1023
Ta = 5s
-> Tu = Ta/2 = 2,5s
-> Tg = ??? (testweise auf 0,1s eingestellt)
Kp = (0,35*Tg)/(Ks*Tu) = 0,0056
Ki = Kp/(Tg*1,2) = 0,046667
Damit läuft es mittlerweile stabil. Da ich den Arbeitspunkt ja fest eingestellt habe, habe ich gut Erfahrungen damit gemacht, den I-Anteil gleich vorzuintialiseren. Damit gibt es nahezu kein Einschwingen mehr.
Ki[0] = (DACap * Ks) / (Ki * Ta)
Meine ursprüngliche Frage war, wie ich Tg für diesen Fall richtig bestimmen kann. Es wird weit unter meiner Abtastrate liegen und ich habe etwas mit dem Wert herum gespielt und bin bei aktuell bei 0,1.
in die P(ID)-Regelung geht laut Formel nur die Abtastrate ein, daher ist immer Ta=Tg=5 sec einzusetzen.
Oder Ta=Tg=0,1s,
oder was auch immer.
aber niemals verschiedene Werte!
https://wikimedia.org/api/rest_v1/me...ea74cc273e3abd
oder als Algorithmus:
Code:
double pid_ctrl(double e) {
static double esum;
static double ealt;
double y;
esum = esum + e;
y = Kp * e + Ki * Ta * esum + Kd * (e – ealt)/Ta;
ealt = e;
return y;
}
mit e = Zielwert-IstWert
und Ta = Zeitabstand zum vorherigen Durchlauf, also in Arduinisch: millis()-oldmillis
Lesezeichen