Ah OK
Ich würde jedoch sowieso empfehlen das etwas aufzusplitten also P und I getrennt vom Reset berechnen in eigenen Variablen dann wäre das auch kein Problem. Den Integrierer separat limitieren.
So eine lange Rechnung hier in einer einzigen Zuweisung:
delta_y = speedKp * (180/267.0) * ((sclE - sclE1) + speedKi * sclE * speedControllTimer/10000.0 +
speedTv * (sclE - 2*sclE1 + sclE2)/(speedControllTimer/10000.0));
ist nicht optimal da der Compiler aus sowas oft ineffizienten Code produziert.
Bei 8 Bit Controllern immer alles schrittweise auseinanderbrechen und die Codegröße beim Übersetzen beachten.
Insbesondere auch: 180/267.0
ist böse weil große Teile der Rechnung ggf. mit Floatingpoint durchgeführt werden (auch da wo nicht notwendig).
Alles was nicht float sein muss auf int umstellen!
Divisionen sind auch böse, wenn möglich anders skalieren.
Das aber nur nebenbei![]()
MfG,
SlyD
Lesezeichen