mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-20 23:05:19 +03:00
Use constant dT for ITerm calcualtion to avoid windup caused by jitter
This commit is contained in:
parent
664f69ce8a
commit
9c9f02f550
1 changed files with 2 additions and 1 deletions
|
@ -497,7 +497,8 @@ void pidController(const pidProfile_t *pidProfile, const rollAndPitchTrims_t *an
|
||||||
|
|
||||||
// -----calculate I component
|
// -----calculate I component
|
||||||
const float ITerm = axisPID_I[axis];
|
const float ITerm = axisPID_I[axis];
|
||||||
const float ITermNew = constrainf(ITerm + Ki[axis] * errorRate * deltaT * dynKi * itermAccelerator, -itermLimit, itermLimit);
|
// use dT (not deltaT) for ITerm calculation to avoid wind-up caused by jitter
|
||||||
|
const float ITermNew = constrainf(ITerm + Ki[axis] * errorRate * dT * dynKi * itermAccelerator, -itermLimit, itermLimit);
|
||||||
const bool outputSaturated = mixerIsOutputSaturated(axis, errorRate);
|
const bool outputSaturated = mixerIsOutputSaturated(axis, errorRate);
|
||||||
if (outputSaturated == false || ABS(ITermNew) < ABS(ITerm)) {
|
if (outputSaturated == false || ABS(ITermNew) < ABS(ITerm)) {
|
||||||
// Only increase ITerm if output is not saturated
|
// Only increase ITerm if output is not saturated
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue