hallo,
man findet immer so schönen code im netz für einen PID regler der form
1 | esum = esum + e
|
2 | y = Kp * e + Ki * Ta * esum + Kd * (e – ealt)/Ta
|
3 | ealt = e
|
hier wird der I anteil in esum aufkummuliert. sprich die messwerte
werden addiert, was ja eine treppenfunktion ergibt. wenn man nun bessere
integratoren verwenden möchte, z.B. mithilfe der Trapezregel, würde man
ja eine verbesserung der integrationsschätzung erreichen, bei kaum
merkbarer erhöhung des rechenaufwands (gehen wir mal von einem 32bitter
mit FPU aus und nicht von einer 8bitter gurke).
das gleiche beim D anteil. hier wird über den differenzenquotienten die
steigung ermittelt. will man diese schätzung verbessern z.b. mit finite
difference (https://en.wikipedia.org/wiki/Finite_difference), hat man
auch keinen merkbar höheren aufwand.
Allerdings beruhen beide methoden darauf, dass man sich mindestens einen
vorhergehenden bzw. einen nachfolgenden messwert anschauen muss. der I
bzw. D anteil würde also ein ergebnis immer um einen Takt versetzt
ausspucken, da dieser immer auf den nachfolgenden wert warten muss.
müsste man dann auch den P anteil um einen takt verzögern, damit sich
alle drei PID werte auf denselben zeitpunkt beziehen?
spielt eine verzögerung von einem Takt keine rolle (also P eilt ID immer
einen Takt voraus, wäre nicht schlimm)?
wird mit der besseren schätzung kein merkbarer vorteil erbracht? ist es
gar viel schlechter wegen der verzögerung?
bin mir nicht sicher ob man überhaupt pauschal antworten geben kann auf
meine fragen, aber wenn ja würds mich freuen. Fragen zielen eigentlich
insgesamt darauf ab, ob man den code oben so belassen kann ohne lange
drueber nachdenken zu muessen, weil doch eh kaum optimierungen erreicht
werden an dieser stelle.
danke schonmal fürs lesen
thx