From 73d18ede662d4a3727d90efba86facd3c72e904d Mon Sep 17 00:00:00 2001 From: mikeller Date: Wed, 30 Jan 2019 00:05:41 +1300 Subject: [PATCH] Halved motor_output_limit for 3D modes. --- src/main/flight/mixer.c | 11 ++++++----- src/main/flight/pid.c | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/main/flight/mixer.c b/src/main/flight/mixer.c index b9790049b..aace0fe4c 100644 --- a/src/main/flight/mixer.c +++ b/src/main/flight/mixer.c @@ -381,23 +381,24 @@ void initEscEndpoints(void) case PWM_TYPE_DSHOT300: case PWM_TYPE_DSHOT150: { - float outputLimitOffset = ((DSHOT_MAX_THROTTLE - DSHOT_MIN_THROTTLE) * (1 - motorOutputLimit)); + float outputLimitOffset = (DSHOT_MAX_THROTTLE - DSHOT_MIN_THROTTLE) * (1 - motorOutputLimit); disarmMotorOutput = DSHOT_CMD_MOTOR_STOP; if (featureIsEnabled(FEATURE_3D)) { motorOutputLow = DSHOT_MIN_THROTTLE + ((DSHOT_3D_FORWARD_MIN_THROTTLE - 1 - DSHOT_MIN_THROTTLE) / 100.0f) * CONVERT_PARAMETER_TO_PERCENT(motorConfig()->digitalIdleOffsetValue); + motorOutputHigh = DSHOT_MAX_THROTTLE - outputLimitOffset / 2; + deadbandMotor3dHigh = DSHOT_3D_FORWARD_MIN_THROTTLE + ((DSHOT_MAX_THROTTLE - DSHOT_3D_FORWARD_MIN_THROTTLE) / 100.0f) * CONVERT_PARAMETER_TO_PERCENT(motorConfig()->digitalIdleOffsetValue); + deadbandMotor3dLow = DSHOT_3D_FORWARD_MIN_THROTTLE - 1 - outputLimitOffset / 2; } else { motorOutputLow = DSHOT_MIN_THROTTLE + ((DSHOT_MAX_THROTTLE - DSHOT_MIN_THROTTLE) / 100.0f) * CONVERT_PARAMETER_TO_PERCENT(motorConfig()->digitalIdleOffsetValue); + motorOutputHigh = DSHOT_MAX_THROTTLE - outputLimitOffset; } - motorOutputHigh = DSHOT_MAX_THROTTLE - outputLimitOffset; - deadbandMotor3dHigh = DSHOT_3D_FORWARD_MIN_THROTTLE + ((DSHOT_MAX_THROTTLE - DSHOT_3D_FORWARD_MIN_THROTTLE) / 100.0f) * CONVERT_PARAMETER_TO_PERCENT(motorConfig()->digitalIdleOffsetValue); - deadbandMotor3dLow = DSHOT_3D_FORWARD_MIN_THROTTLE - 1 - outputLimitOffset; } break; #endif default: if (featureIsEnabled(FEATURE_3D)) { - float outputLimitOffset = ((flight3DConfig()->limit3d_high - flight3DConfig()->limit3d_low) * (1 - motorOutputLimit)); + float outputLimitOffset = (flight3DConfig()->limit3d_high - flight3DConfig()->limit3d_low) * (1 - motorOutputLimit) / 2; disarmMotorOutput = flight3DConfig()->neutral3d; motorOutputLow = flight3DConfig()->limit3d_low + outputLimitOffset; motorOutputHigh = flight3DConfig()->limit3d_high - outputLimitOffset; diff --git a/src/main/flight/pid.c b/src/main/flight/pid.c index cfa09575f..09ef8955b 100644 --- a/src/main/flight/pid.c +++ b/src/main/flight/pid.c @@ -191,6 +191,7 @@ void resetPidProfile(pidProfile_t *pidProfile) .dterm_cut_gain = 15, .dterm_cut_range_hz = 40, .dterm_cut_lowpass_hz = 7, + .motor_output_limit = 100, ); #ifdef USE_DYN_LPF pidProfile->dterm_lowpass_hz = 150; @@ -202,7 +203,6 @@ void resetPidProfile(pidProfile_t *pidProfile) pidProfile->pid[PID_ROLL].D = 30; pidProfile->pid[PID_PITCH].D = 32; #endif - pidProfile->motor_output_limit = 100; } void pgResetFn_pidProfiles(pidProfile_t *pidProfiles) -- 2.11.4.GIT