diff --git a/src/main/blackbox/blackbox.c b/src/main/blackbox/blackbox.c index ced6cc07c5..ae8fed99c6 100644 --- a/src/main/blackbox/blackbox.c +++ b/src/main/blackbox/blackbox.c @@ -1632,7 +1632,6 @@ static bool blackboxWriteSysinfo(void) BLACKBOX_PRINT_HEADER_LINE(PARAM_NAME_DYN_IDLE_I_GAIN, "%d", currentPidProfile->dyn_idle_i_gain); BLACKBOX_PRINT_HEADER_LINE(PARAM_NAME_DYN_IDLE_D_GAIN, "%d", currentPidProfile->dyn_idle_d_gain); BLACKBOX_PRINT_HEADER_LINE(PARAM_NAME_DYN_IDLE_MAX_INCREASE, "%d", currentPidProfile->dyn_idle_max_increase); - BLACKBOX_PRINT_HEADER_LINE(PARAM_NAME_DYN_IDLE_START_INCREASE, "%d", currentPidProfile->dyn_idle_start_increase); #endif #ifdef USE_SIMPLIFIED_TUNING diff --git a/src/main/cli/settings.c b/src/main/cli/settings.c index 831af85b2c..dea0b41d6d 100644 --- a/src/main/cli/settings.c +++ b/src/main/cli/settings.c @@ -1258,7 +1258,6 @@ const clivalue_t valueTable[] = { { PARAM_NAME_DYN_IDLE_I_GAIN, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned = { 1, 250 }, PG_PID_PROFILE, offsetof(pidProfile_t, dyn_idle_i_gain) }, { PARAM_NAME_DYN_IDLE_D_GAIN, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned = { 0, 250 }, PG_PID_PROFILE, offsetof(pidProfile_t, dyn_idle_d_gain) }, { PARAM_NAME_DYN_IDLE_MAX_INCREASE, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned = { 10, 255 }, PG_PID_PROFILE, offsetof(pidProfile_t, dyn_idle_max_increase) }, - { PARAM_NAME_DYN_IDLE_START_INCREASE, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned = { 10, 255 }, PG_PID_PROFILE, offsetof(pidProfile_t, dyn_idle_start_increase) }, #endif { "level_race_mode", VAR_UINT8 | PROFILE_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_OFF_ON }, PG_PID_PROFILE, offsetof(pidProfile_t, level_race_mode) }, diff --git a/src/main/fc/parameter_names.h b/src/main/fc/parameter_names.h index 720d006057..c8629e4f0c 100644 --- a/src/main/fc/parameter_names.h +++ b/src/main/fc/parameter_names.h @@ -127,7 +127,6 @@ #define PARAM_NAME_DYN_IDLE_I_GAIN "dyn_idle_i_gain" #define PARAM_NAME_DYN_IDLE_D_GAIN "dyn_idle_d_gain" #define PARAM_NAME_DYN_IDLE_MAX_INCREASE "dyn_idle_max_increase" -#define PARAM_NAME_DYN_IDLE_START_INCREASE "dyn_idle_start_increase" #define PARAM_NAME_SIMPLIFIED_PIDS_MODE "simplified_pids_mode" #define PARAM_NAME_SIMPLIFIED_MASTER_MULTIPLIER "simplified_master_multiplier" #define PARAM_NAME_SIMPLIFIED_I_GAIN "simplified_i_gain" diff --git a/src/main/flight/mixer_init.c b/src/main/flight/mixer_init.c index 8946d1856c..22fef63fce 100644 --- a/src/main/flight/mixer_init.c +++ b/src/main/flight/mixer_init.c @@ -337,7 +337,9 @@ void mixerInitProfile(void) mixerRuntime.dynIdleIGain = currentPidProfile->dyn_idle_i_gain * 0.01f * pidGetDT(); mixerRuntime.dynIdleDGain = currentPidProfile->dyn_idle_d_gain * 0.0000003f * pidGetPidFrequency(); mixerRuntime.dynIdleMaxIncrease = currentPidProfile->dyn_idle_max_increase * 0.001f; - mixerRuntime.dynIdleStartIncrease = currentPidProfile->dyn_idle_start_increase * 0.001f; + // before takeoff, use the static idle value as the dynamic idle limit. + // whoop users should first adjust static idle to ensure reliable motor start before enabling dynamic idle + mixerRuntime.dynIdleStartIncrease = motorConfig()->digitalIdleOffsetValue * 0.0001f; mixerRuntime.minRpsDelayK = 800 * pidGetDT() / 20.0f; //approx 20ms D delay, arbitrarily suits many motors if (!mixerRuntime.feature3dEnabled && mixerRuntime.dynIdleMinRps) { mixerRuntime.motorOutputLow = DSHOT_MIN_THROTTLE; // Override value set by initEscEndpoints to allow zero motor drive diff --git a/src/main/flight/pid.c b/src/main/flight/pid.c index 4c272e86d5..83350d17ee 100644 --- a/src/main/flight/pid.c +++ b/src/main/flight/pid.c @@ -118,7 +118,7 @@ PG_RESET_TEMPLATE(pidConfig_t, pidConfig, #define LAUNCH_CONTROL_YAW_ITERM_LIMIT 50 // yaw iterm windup limit when launch mode is "FULL" (all axes) -PG_REGISTER_ARRAY_WITH_RESET_FN(pidProfile_t, PID_PROFILE_COUNT, pidProfiles, PG_PID_PROFILE, 10); +PG_REGISTER_ARRAY_WITH_RESET_FN(pidProfile_t, PID_PROFILE_COUNT, pidProfiles, PG_PID_PROFILE, 11); void resetPidProfile(pidProfile_t *pidProfile) { @@ -198,7 +198,6 @@ void resetPidProfile(pidProfile_t *pidProfile) .dyn_idle_i_gain = 50, .dyn_idle_d_gain = 50, .dyn_idle_max_increase = 150, - .dyn_idle_start_increase = 50, .feedforward_averaging = FEEDFORWARD_AVERAGING_OFF, .feedforward_max_rate_limit = 90, .feedforward_smooth_factor = 25, diff --git a/src/main/flight/pid.h b/src/main/flight/pid.h index ce6f530518..4d1b4a9129 100644 --- a/src/main/flight/pid.h +++ b/src/main/flight/pid.h @@ -234,7 +234,6 @@ typedef struct pidProfile_s { uint8_t dyn_idle_i_gain; // I gain during active control of rpm uint8_t dyn_idle_d_gain; // D gain for corrections around rapid changes in rpm uint8_t dyn_idle_max_increase; // limit on maximum possible increase in motor idle drive during active control - uint8_t dyn_idle_start_increase; // limit on maximum possible increase in motor idle drive with airmode not activated uint8_t feedforward_transition; // Feedforward attenuation around centre sticks uint8_t feedforward_averaging; // Number of packets to average when averaging is on