Merge pull request #7432 from etracer65/zero_throttle_anti_windup_in_pidloop

Move anti-windup iterm reset from rx loop to pid loop
This commit is contained in:
Michael Keller 2019-01-21 11:33:58 +13:00 committed by GitHub
commit f72bc436f8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 13 additions and 2 deletions

View File

@ -676,12 +676,13 @@ bool processRx(timeUs_t currentTimeUs)
/* In airmode iterm should be prevented to grow when Low thottle and Roll + Pitch Centered.
This is needed to prevent iterm winding on the ground, but keep full stabilisation on 0 throttle while in air */
if (throttleStatus == THROTTLE_LOW && !airmodeIsActivated && !launchControlActive) {
pidResetIterm();
pidSetItermReset(true);
if (currentPidProfile->pidAtMinThrottle)
pidStabilisationState(PID_STABILISATION_ON);
else
pidStabilisationState(PID_STABILISATION_OFF);
} else {
pidSetItermReset(false);
pidStabilisationState(PID_STABILISATION_ON);
}

View File

@ -80,6 +80,7 @@ static FAST_RAM_ZERO_INIT float antiGravityThrottleHpf;
static FAST_RAM_ZERO_INIT uint16_t itermAcceleratorGain;
static FAST_RAM float antiGravityOsdCutoff = 1.0f;
static FAST_RAM_ZERO_INIT bool antiGravityEnabled;
static FAST_RAM_ZERO_INIT bool zeroThrottleItermReset;
PG_REGISTER_WITH_RESET_TEMPLATE(pidConfig_t, pidConfig, PG_PID_CONFIG, 2);
@ -1398,6 +1399,8 @@ void FAST_CODE pidController(const pidProfile_t *pidProfile, const rollAndPitchT
pidData[axis].Sum = 0;
}
} else if (zeroThrottleItermReset) {
pidResetIterm();
}
}
@ -1450,3 +1453,8 @@ void dynLpfDTermUpdate(float throttle)
}
}
#endif
void pidSetItermReset(bool enabled)
{
zeroThrottleItermReset = enabled;
}

View File

@ -232,4 +232,4 @@ float pidLevel(int axis, const pidProfile_t *pidProfile,
float calcHorizonLevelStrength(void);
#endif
void dynLpfDTermUpdate(float throttle);
void pidSetItermReset(bool enabled);

View File

@ -1088,4 +1088,5 @@ extern "C" {
bool gpsIsHealthy() { return false; }
bool isAltitudeOffset(void) { return false; }
float getCosTiltAngle(void) { return 0.0f; }
void pidSetItermReset(bool) {}
}

View File

@ -174,4 +174,5 @@ extern "C" {
bool usbVcpIsConnected(void) { return false; }
void pidSetAntiGravityState(bool newState) { UNUSED(newState); }
void osdSuppressStats(bool) {}
void pidSetItermReset(bool) {}
}