From 001fb8d4322ca32a41edfa91c0a314b56ad01d73 Mon Sep 17 00:00:00 2001 From: rav Date: Fri, 5 May 2017 17:04:27 +0200 Subject: [PATCH] make sure rxRefreshRate > 0 --- src/main/fc/fc_rc.c | 6 ++---- src/main/flight/pid.c | 6 +++--- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/main/fc/fc_rc.c b/src/main/fc/fc_rc.c index f4bbb04b2e..2511fcfd5c 100755 --- a/src/main/fc/fc_rc.c +++ b/src/main/fc/fc_rc.c @@ -204,7 +204,7 @@ void processRcCommand(void) rxRefreshRate = rxGetRefreshRate(); } - if (isRXDataNew) { + if (isRXDataNew && rxRefreshRate > 0) { rcInterpolationStepCount = rxRefreshRate / targetPidLooptime; for (int channel=ROLL; channel < interpolationChannels; channel++) { @@ -227,10 +227,8 @@ void processRcCommand(void) rcCommandInterp[channel] += rcStepSize[channel]; rcCommand[channel] = rcCommandInterp[channel]; readyToCalculateRateAxisCnt = MAX(channel, FD_YAW); // throttle channel doesn't require rate calculation - readyToCalculateRate = true; } - } else { - rcInterpolationStepCount = 0; + readyToCalculateRate = true; } } else { rcInterpolationStepCount = 0; // reset factor in case of level modes flip flopping diff --git a/src/main/flight/pid.c b/src/main/flight/pid.c index a36832c30a..9b4b7d47ea 100644 --- a/src/main/flight/pid.c +++ b/src/main/flight/pid.c @@ -438,14 +438,14 @@ void pidController(const pidProfile_t *pidProfile, const rollAndPitchTrims_t *an // -----calculate D component if (axis != FD_YAW) { // apply filters - float gyroRateD = dtermNotchFilterApplyFn(dtermFilterNotch[axis], gyroRate); - gyroRateD = dtermLpfApplyFn(dtermFilterLpf[axis], gyroRateD); + float gyroRateFiltered = dtermNotchFilterApplyFn(dtermFilterNotch[axis], gyroRate); + gyroRateFiltered = dtermLpfApplyFn(dtermFilterLpf[axis], gyroRateFiltered); float dynC = dtermSetpointWeight; if (pidProfile->setpointRelaxRatio < 100) { dynC *= MIN(getRcDeflectionAbs(axis) * relaxFactor, 1.0f); } - const float rD = dynC * currentPidSetpoint - gyroRateD; // cr - y + const float rD = dynC * currentPidSetpoint - gyroRateFiltered; // cr - y // Divide rate change by dT to get differential (ie dr/dt) float delta = (rD - previousRateError[axis]) / dT;