diff --git a/src/main/config/config.c b/src/main/config/config.c index 14672d032d..8a51f60b67 100755 --- a/src/main/config/config.c +++ b/src/main/config/config.c @@ -147,13 +147,13 @@ static void resetPidProfile(pidProfile_t *pidProfile) pidProfile->P8[ROLL] = 40; pidProfile->I8[ROLL] = 30; - pidProfile->D8[ROLL] = 50; + pidProfile->D8[ROLL] = 20; pidProfile->P8[PITCH] = 40; pidProfile->I8[PITCH] = 30; - pidProfile->D8[PITCH] = 50; + pidProfile->D8[PITCH] = 20; pidProfile->P8[YAW] = 95; pidProfile->I8[YAW] = 50; - pidProfile->D8[YAW] = 20; + pidProfile->D8[YAW] = 10; pidProfile->P8[PIDALT] = 50; pidProfile->I8[PIDALT] = 0; pidProfile->D8[PIDALT] = 0; diff --git a/src/main/flight/pid.c b/src/main/flight/pid.c index bbaf052085..970ba33900 100644 --- a/src/main/flight/pid.c +++ b/src/main/flight/pid.c @@ -289,7 +289,7 @@ static void pidMultiWii(pidProfile_t *pidProfile, controlRateConfig_t *controlRa delta = filterApplyPt1(delta, &DTermState[axis], pidProfile->dterm_cut_hz, dT); } - DTerm = (delta * dynD8[axis]) / 32; + DTerm = (delta * 3 * dynD8[axis]) / 32; // Multiplied by 3 to match old scaling axisPID[axis] = PTerm + ITerm - DTerm; #ifdef GTUNE @@ -374,7 +374,7 @@ static void pidMultiWii23(pidProfile_t *pidProfile, controlRateConfig_t *control delta = filterApplyPt1(delta, &DTermState[axis], pidProfile->dterm_cut_hz, dT); } - DTerm = ((int32_t)delta * dynD8[axis]) >> 5; // 32 bits is needed for calculation + DTerm = ((int32_t)delta * 3 * dynD8[axis]) >> 5; // 32 bits is needed for calculation. Multiplied by 3 to match old scaling axisPID[axis] = PTerm + ITerm - DTerm; @@ -498,7 +498,7 @@ static void pidMultiWiiHybrid(pidProfile_t *pidProfile, controlRateConfig_t *con delta = filterApplyPt1(delta, &DTermState[axis], pidProfile->dterm_cut_hz, dT); } - DTerm = (delta * dynD8[axis]) / 32; + DTerm = (delta * 3 * dynD8[axis]) / 32; // Multiplied by 3 to match old scaling axisPID[axis] = PTerm + ITerm - DTerm; #ifdef GTUNE @@ -785,7 +785,7 @@ static void pidRewrite(pidProfile_t *pidProfile, controlRateConfig_t *controlRat delta = filterApplyPt1(delta, &DTermState[axis], pidProfile->dterm_cut_hz, dT); } - DTerm = (delta * pidProfile->D8[axis] * PIDweight[axis] / 100) >> 8; // Multiplied by 3 to match old scaling + DTerm = (delta * 3 * pidProfile->D8[axis] * PIDweight[axis] / 100) >> 8; // Multiplied by 3 to match old scaling // -----calculate total PID output axisPID[axis] = PTerm + ITerm + DTerm;