From 90a20571794006134ab99e72224eb5b1fcdd79e9 Mon Sep 17 00:00:00 2001 From: ctzsnooze Date: Sun, 26 Sep 2021 15:05:05 +1000 Subject: [PATCH] pid slider support with changed defaults --- src/main/cli/settings.c | 13 +++++++------ src/main/cms/cms_menu_imu.c | 38 ++++++++++++++++++++++--------------- src/main/config/config.c | 2 +- src/main/config/simplified_tuning.c | 28 ++++++++++++--------------- src/main/config/simplified_tuning.h | 5 +++++ src/main/flight/pid.c | 18 +++++++++++------- src/main/flight/pid.h | 22 ++++++++++----------- src/main/msp/msp.c | 10 ++++++---- src/main/sensors/gyro.c | 4 ++-- src/main/sensors/gyro.h | 4 ++-- 10 files changed, 80 insertions(+), 64 deletions(-) diff --git a/src/main/cli/settings.c b/src/main/cli/settings.c index e61768a83..a82757aaf 100644 --- a/src/main/cli/settings.c +++ b/src/main/cli/settings.c @@ -1170,15 +1170,16 @@ const clivalue_t valueTable[] = { #ifdef USE_SIMPLIFIED_TUNING { "simplified_pids_mode", VAR_UINT8 | PROFILE_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_SIMPLIFIED_TUNING_PIDS_MODE }, PG_PID_PROFILE, offsetof(pidProfile_t, simplified_pids_mode) }, { "simplified_master_multiplier", VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned = { SIMPLIFIED_TUNING_MIN, SIMPLIFIED_TUNING_MAX }, PG_PID_PROFILE, offsetof(pidProfile_t, simplified_master_multiplier) }, - { "simplified_roll_pitch_ratio", VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned = { SIMPLIFIED_TUNING_MIN, SIMPLIFIED_TUNING_MAX }, PG_PID_PROFILE, offsetof(pidProfile_t, simplified_roll_pitch_ratio) }, { "simplified_i_gain", VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned = { SIMPLIFIED_TUNING_MIN, SIMPLIFIED_TUNING_MAX }, PG_PID_PROFILE, offsetof(pidProfile_t, simplified_i_gain) }, - { "simplified_pd_ratio", VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned = { SIMPLIFIED_TUNING_MIN, SIMPLIFIED_TUNING_MAX }, PG_PID_PROFILE, offsetof(pidProfile_t, simplified_pd_ratio) }, - { "simplified_pd_gain", VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned = { SIMPLIFIED_TUNING_MIN, SIMPLIFIED_TUNING_MAX }, PG_PID_PROFILE, offsetof(pidProfile_t, simplified_pd_gain) }, - { "simplified_dmin_ratio", VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned = { SIMPLIFIED_TUNING_MIN, SIMPLIFIED_TUNING_MAX }, PG_PID_PROFILE, offsetof(pidProfile_t, simplified_dmin_ratio) }, - { "simplified_feedforward_gain", VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned = { SIMPLIFIED_TUNING_MIN, SIMPLIFIED_TUNING_MAX }, PG_PID_PROFILE, offsetof(pidProfile_t, simplified_feedforward_gain) }, + { "simplified_d_gain", VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned = { SIMPLIFIED_TUNING_MIN, SIMPLIFIED_TUNING_MAX }, PG_PID_PROFILE, offsetof(pidProfile_t, simplified_d_gain) }, + { "simplified_pi_gain", VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned = { SIMPLIFIED_TUNING_MIN, SIMPLIFIED_TUNING_MAX }, PG_PID_PROFILE, offsetof(pidProfile_t, simplified_pi_gain) }, + { "simplified_dmax_gain", VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned = { 0, SIMPLIFIED_TUNING_MAX }, PG_PID_PROFILE, offsetof(pidProfile_t, simplified_dmin_ratio) }, + { "simplified_feedforward_gain", VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned = { 0, SIMPLIFIED_TUNING_MAX }, PG_PID_PROFILE, offsetof(pidProfile_t, simplified_feedforward_gain) }, + { "simplified_pitch_d_gain", VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned = { SIMPLIFIED_TUNING_MIN, SIMPLIFIED_TUNING_MAX }, PG_PID_PROFILE, offsetof(pidProfile_t, simplified_roll_pitch_ratio) }, + { "simplified_pitch_pi_gain", VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned = { SIMPLIFIED_TUNING_MIN, SIMPLIFIED_TUNING_MAX }, PG_PID_PROFILE, offsetof(pidProfile_t, simplified_pitch_pi_gain) }, { "simplified_dterm_filter", VAR_UINT8 | PROFILE_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_OFF_ON }, PG_PID_PROFILE, offsetof(pidProfile_t, simplified_dterm_filter) }, - { "simplified_dterm_filter_multiplier", VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned = { SIMPLIFIED_TUNING_MIN, SIMPLIFIED_TUNING_MAX }, PG_PID_PROFILE, offsetof(pidProfile_t, simplified_dterm_filter_multiplier) }, + { "simplified_dterm_filter_multiplier", VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned = { SIMPLIFIED_TUNING_DTERM_MIN, SIMPLIFIED_TUNING_DTERM_MAX }, PG_PID_PROFILE, offsetof(pidProfile_t, simplified_dterm_filter_multiplier) }, { "simplified_gyro_filter", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_OFF_ON }, PG_GYRO_CONFIG, offsetof(gyroConfig_t, simplified_gyro_filter) }, { "simplified_gyro_filter_multiplier", VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned = { SIMPLIFIED_TUNING_MIN, SIMPLIFIED_TUNING_MAX }, PG_GYRO_CONFIG, offsetof(gyroConfig_t, simplified_gyro_filter_multiplier) }, diff --git a/src/main/cms/cms_menu_imu.c b/src/main/cms/cms_menu_imu.c index d4b52fa9b..f6fecf034 100644 --- a/src/main/cms/cms_menu_imu.c +++ b/src/main/cms/cms_menu_imu.c @@ -234,12 +234,13 @@ static uint8_t cmsx_simplified_pids_mode; static uint8_t cmsx_simplified_master_multiplier; static uint8_t cmsx_simplified_roll_pitch_ratio; static uint8_t cmsx_simplified_i_gain; -static uint8_t cmsx_simplified_pd_ratio; -static uint8_t cmsx_simplified_pd_gain; +static uint8_t cmsx_simplified_d_gain; +static uint8_t cmsx_simplified_pi_gain; #ifdef USE_D_MIN static uint8_t cmsx_simplified_dmin_ratio; #endif static uint8_t cmsx_simplified_feedforward_gain; +static uint8_t cmsx_simplified_pitch_pi_gain; static uint8_t cmsx_simplified_dterm_filter; static uint8_t cmsx_simplified_dterm_filter_multiplier; @@ -256,12 +257,13 @@ static const void *cmsx_simplifiedTuningOnEnter(displayPort_t *pDisp) cmsx_simplified_master_multiplier = pidProfile->simplified_master_multiplier; cmsx_simplified_roll_pitch_ratio = pidProfile->simplified_roll_pitch_ratio; cmsx_simplified_i_gain = pidProfile->simplified_i_gain; - cmsx_simplified_pd_ratio = pidProfile->simplified_pd_ratio; - cmsx_simplified_pd_gain = pidProfile->simplified_pd_gain; + cmsx_simplified_d_gain = pidProfile->simplified_d_gain; + cmsx_simplified_pi_gain = pidProfile->simplified_pi_gain; #ifdef USE_D_MIN cmsx_simplified_dmin_ratio = pidProfile->simplified_dmin_ratio; #endif cmsx_simplified_feedforward_gain = pidProfile->simplified_feedforward_gain; + cmsx_simplified_pitch_pi_gain = pidProfile->simplified_pitch_pi_gain; cmsx_simplified_dterm_filter = pidProfile->simplified_dterm_filter; cmsx_simplified_dterm_filter_multiplier = pidProfile->simplified_dterm_filter_multiplier; @@ -282,12 +284,13 @@ static const void *cmsx_simplifiedTuningOnExit(displayPort_t *pDisp, const OSD_E pidProfile->simplified_master_multiplier = cmsx_simplified_master_multiplier; pidProfile->simplified_roll_pitch_ratio = cmsx_simplified_roll_pitch_ratio; pidProfile->simplified_i_gain = cmsx_simplified_i_gain; - pidProfile->simplified_pd_ratio = cmsx_simplified_pd_ratio; - pidProfile->simplified_pd_gain = cmsx_simplified_pd_gain; + pidProfile->simplified_d_gain = cmsx_simplified_d_gain; + pidProfile->simplified_pi_gain = cmsx_simplified_pi_gain; #ifdef USE_D_MIN pidProfile->simplified_dmin_ratio = cmsx_simplified_dmin_ratio; #endif pidProfile->simplified_feedforward_gain = cmsx_simplified_feedforward_gain; + pidProfile->simplified_pitch_pi_gain = cmsx_simplified_pitch_pi_gain; pidProfile->simplified_dterm_filter = cmsx_simplified_dterm_filter; pidProfile->simplified_dterm_filter_multiplier = cmsx_simplified_dterm_filter_multiplier; @@ -303,17 +306,17 @@ static const void *cmsx_applySimplifiedTuning(displayPort_t *pDisp, const void * UNUSED(self); pidProfile_t *pidProfile = currentPidProfile; - - pidProfile->simplified_pids_mode = cmsx_simplified_pids_mode; pidProfile->simplified_master_multiplier = cmsx_simplified_master_multiplier; + pidProfile->simplified_pids_mode = cmsx_simplified_pids_mode; pidProfile->simplified_roll_pitch_ratio = cmsx_simplified_roll_pitch_ratio; pidProfile->simplified_i_gain = cmsx_simplified_i_gain; - pidProfile->simplified_pd_ratio = cmsx_simplified_pd_ratio; - pidProfile->simplified_pd_gain = cmsx_simplified_pd_gain; + pidProfile->simplified_d_gain = cmsx_simplified_d_gain; + pidProfile->simplified_pi_gain = cmsx_simplified_pi_gain; #ifdef USE_D_MIN pidProfile->simplified_dmin_ratio = cmsx_simplified_dmin_ratio; #endif pidProfile->simplified_feedforward_gain = cmsx_simplified_feedforward_gain; + pidProfile->simplified_pitch_pi_gain = cmsx_simplified_pitch_pi_gain; pidProfile->simplified_dterm_filter = cmsx_simplified_dterm_filter; pidProfile->simplified_dterm_filter_multiplier = cmsx_simplified_dterm_filter_multiplier; @@ -330,14 +333,19 @@ static const OSD_Entry cmsx_menuSimplifiedTuningEntries[] = { "-- SIMPLIFIED PID --", OME_Label, NULL, NULL, 0}, { "PID TUNING", OME_TAB, NULL, &(OSD_TAB_t) { &cmsx_simplified_pids_mode, PID_SIMPLIFIED_TUNING_MODE_COUNT - 1, lookupTableSimplifiedTuningPidsMode }, 0 }, { "MASTER MULT", OME_FLOAT, NULL, &(OSD_FLOAT_t) { &cmsx_simplified_master_multiplier, SIMPLIFIED_TUNING_MIN, SIMPLIFIED_TUNING_MAX, 5, 10 }, 0 }, - { "R/P RATIO", OME_FLOAT, NULL, &(OSD_FLOAT_t) { &cmsx_simplified_roll_pitch_ratio, SIMPLIFIED_TUNING_MIN, SIMPLIFIED_TUNING_MAX, 5, 10 }, 0 }, + + { "-- BASIC --", OME_Label, NULL, NULL, 0}, + { "PI GAIN", OME_FLOAT, NULL, &(OSD_FLOAT_t) { &cmsx_simplified_pi_gain, SIMPLIFIED_TUNING_MIN, SIMPLIFIED_TUNING_MAX, 5, 10 }, 0 }, + { "D GAIN", OME_FLOAT, NULL, &(OSD_FLOAT_t) { &cmsx_simplified_d_gain, SIMPLIFIED_TUNING_MIN, SIMPLIFIED_TUNING_MAX, 5, 10 }, 0 }, + { "FF GAIN", OME_FLOAT, NULL, &(OSD_FLOAT_t) { &cmsx_simplified_feedforward_gain, SIMPLIFIED_TUNING_MIN, SIMPLIFIED_TUNING_MAX, 5, 10 }, 0 }, + + { "-- EXPERT --", OME_Label, NULL, NULL, 0}, { "I GAIN", OME_FLOAT, NULL, &(OSD_FLOAT_t) { &cmsx_simplified_i_gain, SIMPLIFIED_TUNING_MIN, SIMPLIFIED_TUNING_MAX, 5, 10 }, 0 }, - { "PD RATIO", OME_FLOAT, NULL, &(OSD_FLOAT_t) { &cmsx_simplified_pd_ratio, SIMPLIFIED_TUNING_MIN, SIMPLIFIED_TUNING_MAX, 5, 10 }, 0 }, - { "PD GAIN", OME_FLOAT, NULL, &(OSD_FLOAT_t) { &cmsx_simplified_pd_gain, SIMPLIFIED_TUNING_MIN, SIMPLIFIED_TUNING_MAX, 5, 10 }, 0 }, #ifdef USE_D_MIN - { "DMIN RATIO", OME_FLOAT, NULL, &(OSD_FLOAT_t) { &cmsx_simplified_dmin_ratio, SIMPLIFIED_TUNING_MIN, SIMPLIFIED_TUNING_MAX, 5, 10 }, 0 }, + { "D_MAX GAIN", OME_FLOAT, NULL, &(OSD_FLOAT_t) { &cmsx_simplified_dmin_ratio, SIMPLIFIED_TUNING_MIN, SIMPLIFIED_TUNING_MAX, 5, 10 }, 0 }, #endif - { "FF GAIN", OME_FLOAT, NULL, &(OSD_FLOAT_t) { &cmsx_simplified_feedforward_gain, SIMPLIFIED_TUNING_MIN, SIMPLIFIED_TUNING_MAX, 5, 10 }, 0 }, + { "PITCH D GAIN", OME_FLOAT, NULL, &(OSD_FLOAT_t) { &cmsx_simplified_roll_pitch_ratio, SIMPLIFIED_TUNING_MIN, SIMPLIFIED_TUNING_MAX, 5, 10 }, 0 }, + { "PITCH PI GAIN", OME_FLOAT, NULL, &(OSD_FLOAT_t) { &cmsx_simplified_pitch_pi_gain, SIMPLIFIED_TUNING_MIN, SIMPLIFIED_TUNING_MAX, 5, 10 }, 0 }, { "-- SIMPLIFIED FILTER --", OME_Label, NULL, NULL, 0}, { "GYRO TUNING", OME_TAB, NULL, &(OSD_TAB_t) { &cmsx_simplified_gyro_filter, 1, lookupTableOffOn }, 0 }, diff --git a/src/main/config/config.c b/src/main/config/config.c index fcb473778..25fbb4fcb 100644 --- a/src/main/config/config.c +++ b/src/main/config/config.c @@ -272,7 +272,7 @@ static void validateAndFixConfig(void) // If the d_min value for any axis is >= the D gain then reset d_min to 0 for consistent Configurator behavior for (unsigned axis = 0; axis <= FD_YAW; axis++) { - if (pidProfilesMutable(i)->d_min[axis] >= pidProfilesMutable(i)->pid[axis].D) { + if (pidProfilesMutable(i)->d_min[axis] > pidProfilesMutable(i)->pid[axis].D) { pidProfilesMutable(i)->d_min[axis] = 0; } } diff --git a/src/main/config/simplified_tuning.c b/src/main/config/simplified_tuning.c index 3ee3ed065..40062a5ae 100644 --- a/src/main/config/simplified_tuning.c +++ b/src/main/config/simplified_tuning.c @@ -41,29 +41,25 @@ static void calculateNewPidValues(pidProfile_t *pidProfile) #ifdef USE_D_MIN const int dMinDefaults[FLIGHT_DYNAMICS_INDEX_COUNT] = D_MIN_DEFAULT; #endif - const float masterMultiplier = pidProfile->simplified_master_multiplier / 100.0f; + const float piGain = pidProfile->simplified_pi_gain / 100.0f; + const float dGain = pidProfile->simplified_d_gain / 100.0f; const float feedforwardGain = pidProfile->simplified_feedforward_gain / 100.0f; - const float pdGain = pidProfile->simplified_pd_gain / 100.0f; const float iGain = pidProfile->simplified_i_gain / 100.0f; - const float pdRatio = pidProfile->simplified_pd_ratio / 100.0f; for (int axis = FD_ROLL; axis <= pidProfile->simplified_pids_mode; ++axis) { - const float rpRatio = (axis == FD_PITCH) ? pidProfile->simplified_roll_pitch_ratio / 100.0f : 1.0f; - pidProfile->pid[axis].P = constrain(pidDefaults[axis].P * masterMultiplier * pdGain * pdRatio * rpRatio, 0, PID_GAIN_MAX); - pidProfile->pid[axis].I = constrain(pidDefaults[axis].I * masterMultiplier * iGain * rpRatio, 0, PID_GAIN_MAX); - pidProfile->pid[axis].D = constrain(pidDefaults[axis].D * masterMultiplier * pdGain * rpRatio, 0, PID_GAIN_MAX); - + const float pitchDGain = (axis == FD_PITCH) ? pidProfile->simplified_roll_pitch_ratio / 100.0f : 1.0f; + const float pitchPiGain = (axis == FD_PITCH) ? pidProfile->simplified_pitch_pi_gain / 100.0f : 1.0f; + pidProfile->pid[axis].P = constrain(pidDefaults[axis].P * masterMultiplier * piGain * pitchPiGain, 0, PID_GAIN_MAX); + pidProfile->pid[axis].I = constrain(pidDefaults[axis].I * masterMultiplier * piGain * iGain * pitchPiGain, 0, PID_GAIN_MAX); #ifdef USE_D_MIN - const float dminRatio = 1.0f + (((float)pidDefaults[axis].D / dMinDefaults[axis] - 1.0f) * (pidProfile->simplified_dmin_ratio / 100.0f - 1.0f)); - - if (pidProfile->simplified_dmin_ratio == SIMPLIFIED_TUNING_MAX) { - pidProfile->d_min[axis] = 0; - } else { - pidProfile->d_min[axis] = constrain(dMinDefaults[axis] * masterMultiplier * pdGain * rpRatio * dminRatio, 0, D_MIN_GAIN_MAX); - } + const float dminRatio = (dMinDefaults[axis] > 0) ? 1.0f + (((float)pidDefaults[axis].D - dMinDefaults[axis]) / dMinDefaults[axis]) * (pidProfile->simplified_dmin_ratio / 100.0f) : 1.0f; + pidProfile->pid[axis].D = constrain(dMinDefaults[axis] * masterMultiplier * dGain * pitchDGain * dminRatio, 0, PID_GAIN_MAX); + pidProfile->d_min[axis] = constrain(dMinDefaults[axis] * masterMultiplier * dGain * pitchDGain, 0, PID_GAIN_MAX); +#else + pidProfile->pid[axis].D = constrain(dMinDefaults[axis] * masterMultiplier * dGain * pitchDGain, 0, PID_GAIN_MAX); #endif - pidProfile->pid[axis].F = constrain(pidDefaults[axis].F * masterMultiplier * feedforwardGain * rpRatio, 0, F_GAIN_MAX); + pidProfile->pid[axis].F = constrain(pidDefaults[axis].F * masterMultiplier * pitchPiGain * feedforwardGain, 0, F_GAIN_MAX); } } diff --git a/src/main/config/simplified_tuning.h b/src/main/config/simplified_tuning.h index 3a01d7e6b..a52c682f4 100644 --- a/src/main/config/simplified_tuning.h +++ b/src/main/config/simplified_tuning.h @@ -24,7 +24,12 @@ #define SIMPLIFIED_TUNING_MIN 50 #define SIMPLIFIED_TUNING_MAX 200 +#define SIMPLIFIED_TUNING_DTERM_MIN 80 +#define SIMPLIFIED_TUNING_DTERM_MAX 120 #define SIMPLIFIED_TUNING_DEFAULT 100 +#define SIMPLIFIED_TUNING_PITCH_P_DEFAULT 105 +#define SIMPLIFIED_TUNING_PITCH_D_DEFAULT 115 +#define SIMPLIFIED_TUNING_D_DEFAULT 100 typedef enum { PID_SIMPLIFIED_TUNING_OFF = 0, diff --git a/src/main/flight/pid.c b/src/main/flight/pid.c index 57ccbf30d..10c04e3b9 100644 --- a/src/main/flight/pid.c +++ b/src/main/flight/pid.c @@ -121,7 +121,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, 2); +PG_REGISTER_ARRAY_WITH_RESET_FN(pidProfile_t, PID_PROFILE_COUNT, pidProfiles, PG_PID_PROFILE, 3); void resetPidProfile(pidProfile_t *pidProfile) { @@ -210,21 +210,25 @@ void resetPidProfile(pidProfile_t *pidProfile) .dyn_lpf_curve_expo = 5, .level_race_mode = false, .vbat_sag_compensation = 0, - .simplified_pids_mode = PID_SIMPLIFIED_TUNING_OFF, + .simplified_pids_mode = PID_SIMPLIFIED_TUNING_RPY, .simplified_master_multiplier = SIMPLIFIED_TUNING_DEFAULT, - .simplified_roll_pitch_ratio = SIMPLIFIED_TUNING_DEFAULT, + .simplified_roll_pitch_ratio = SIMPLIFIED_TUNING_PITCH_D_DEFAULT, .simplified_i_gain = SIMPLIFIED_TUNING_DEFAULT, - .simplified_pd_ratio = SIMPLIFIED_TUNING_DEFAULT, - .simplified_pd_gain = SIMPLIFIED_TUNING_DEFAULT, - .simplified_dmin_ratio = SIMPLIFIED_TUNING_DEFAULT, + .simplified_d_gain = SIMPLIFIED_TUNING_D_DEFAULT, + .simplified_pi_gain = SIMPLIFIED_TUNING_DEFAULT, + .simplified_dmin_ratio = SIMPLIFIED_TUNING_D_DEFAULT, .simplified_feedforward_gain = SIMPLIFIED_TUNING_DEFAULT, - .simplified_dterm_filter = false, + .simplified_pitch_pi_gain = SIMPLIFIED_TUNING_PITCH_P_DEFAULT, + .simplified_dterm_filter = true, .simplified_dterm_filter_multiplier = SIMPLIFIED_TUNING_DEFAULT, ); #ifndef USE_D_MIN pidProfile->pid[PID_ROLL].D = 30; pidProfile->pid[PID_PITCH].D = 32; #endif +#ifdef USE_SIMPLIFIED_TUNING + applySimplifiedTuning(pidProfile); +#endif } void pgResetFn_pidProfiles(pidProfile_t *pidProfiles) diff --git a/src/main/flight/pid.h b/src/main/flight/pid.h index 3f2866d34..253b87724 100644 --- a/src/main/flight/pid.h +++ b/src/main/flight/pid.h @@ -36,9 +36,9 @@ #define PIDSUM_LIMIT_MIN 100 #define PIDSUM_LIMIT_MAX 1000 -#define PID_GAIN_MAX 200 +#define PID_GAIN_MAX 250 #define F_GAIN_MAX 2000 -#define D_MIN_GAIN_MAX 100 +#define D_MIN_GAIN_MAX 250 // Scaling factors for Pids for better tunable range in configurator for betaflight pid controller. The scaling is based on legacy pid controller or previous float #define PTERM_SCALE 0.032029f @@ -58,13 +58,13 @@ #define ITERM_ACCELERATOR_GAIN_OFF 0 #define ITERM_ACCELERATOR_GAIN_MAX 30000 -#define PID_ROLL_DEFAULT { 42, 85, 35, 90 } -#define PID_PITCH_DEFAULT { 46, 90, 38, 95 } -#define PID_YAW_DEFAULT { 45, 90, 0, 90 } -#define D_MIN_DEFAULT { 23, 25, 0 } +#define PID_ROLL_DEFAULT { 45, 80, 40, 120 } +#define PID_PITCH_DEFAULT { 45, 80, 40, 120 } +#define PID_YAW_DEFAULT { 45, 80, 0, 120 } +#define D_MIN_DEFAULT { 30, 30, 0 } -#define DYN_LPF_DTERM_MIN_HZ_DEFAULT 70 -#define DYN_LPF_DTERM_MAX_HZ_DEFAULT 170 +#define DYN_LPF_DTERM_MIN_HZ_DEFAULT 75 +#define DYN_LPF_DTERM_MAX_HZ_DEFAULT 150 #define DTERM_LOWPASS_2_HZ_DEFAULT 150 typedef enum { @@ -219,13 +219,13 @@ typedef struct pidProfile_s { uint8_t simplified_master_multiplier; uint8_t simplified_roll_pitch_ratio; uint8_t simplified_i_gain; - uint8_t simplified_pd_ratio; - uint8_t simplified_pd_gain; + uint8_t simplified_d_gain; + uint8_t simplified_pi_gain; uint8_t simplified_dmin_ratio; uint8_t simplified_feedforward_gain; - uint8_t simplified_dterm_filter; uint8_t simplified_dterm_filter_multiplier; + uint8_t simplified_pitch_pi_gain; } pidProfile_t; PG_DECLARE_ARRAY(pidProfile_t, PID_PROFILE_COUNT, pidProfiles); diff --git a/src/main/msp/msp.c b/src/main/msp/msp.c index cd4f7c5e3..ae58c1020 100644 --- a/src/main/msp/msp.c +++ b/src/main/msp/msp.c @@ -2149,14 +2149,15 @@ static mspResult_e mspFcProcessOutCommandWithArg(mspDescriptor_t srcDesc, int16_ sbufWriteU8(dst, currentPidProfile->simplified_master_multiplier); sbufWriteU8(dst, currentPidProfile->simplified_roll_pitch_ratio); sbufWriteU8(dst, currentPidProfile->simplified_i_gain); - sbufWriteU8(dst, currentPidProfile->simplified_pd_ratio); - sbufWriteU8(dst, currentPidProfile->simplified_pd_gain); + sbufWriteU8(dst, currentPidProfile->simplified_d_gain); + sbufWriteU8(dst, currentPidProfile->simplified_pi_gain); #ifdef USE_D_MIN sbufWriteU8(dst, currentPidProfile->simplified_dmin_ratio); #else sbufWriteU8(dst, 0); #endif sbufWriteU8(dst, currentPidProfile->simplified_feedforward_gain); + sbufWriteU8(dst, currentPidProfile->simplified_pitch_pi_gain); sbufWriteU8(dst, currentPidProfile->simplified_dterm_filter); sbufWriteU8(dst, currentPidProfile->simplified_dterm_filter_multiplier); @@ -3132,14 +3133,15 @@ static mspResult_e mspProcessInCommand(mspDescriptor_t srcDesc, int16_t cmdMSP, currentPidProfile->simplified_master_multiplier = sbufReadU8(src); currentPidProfile->simplified_roll_pitch_ratio = sbufReadU8(src); currentPidProfile->simplified_i_gain = sbufReadU8(src); - currentPidProfile->simplified_pd_ratio = sbufReadU8(src); - currentPidProfile->simplified_pd_gain = sbufReadU8(src); + currentPidProfile->simplified_d_gain = sbufReadU8(src); + currentPidProfile->simplified_pi_gain = sbufReadU8(src); #ifdef USE_D_MIN currentPidProfile->simplified_dmin_ratio = sbufReadU8(src); #else sbufReadU8(src); #endif currentPidProfile->simplified_feedforward_gain = sbufReadU8(src); + currentPidProfile->simplified_pitch_pi_gain = sbufReadU8(src); currentPidProfile->simplified_dterm_filter = sbufReadU8(src); currentPidProfile->simplified_dterm_filter_multiplier = sbufReadU8(src); diff --git a/src/main/sensors/gyro.c b/src/main/sensors/gyro.c index aa3be4661..36f8896fe 100644 --- a/src/main/sensors/gyro.c +++ b/src/main/sensors/gyro.c @@ -110,7 +110,7 @@ void pgResetFn_gyroConfig(gyroConfig_t *gyroConfig) gyroConfig->gyroMovementCalibrationThreshold = 48; gyroConfig->gyro_hardware_lpf = GYRO_HARDWARE_LPF_NORMAL; gyroConfig->gyro_lowpass_type = FILTER_PT1; - gyroConfig->gyro_lowpass_hz = 200; // NOTE: dynamic lpf is enabled by default so this setting is actually + gyroConfig->gyro_lowpass_hz = 250; // NOTE: dynamic lpf is enabled by default so this setting is actually // overridden and the static lowpass 1 is disabled. We can't set this // value to 0 otherwise Configurator versions 10.4 and earlier will also // reset the lowpass filter type to PT1 overriding the desired BIQUAD setting. @@ -130,7 +130,7 @@ void pgResetFn_gyroConfig(gyroConfig_t *gyroConfig) gyroConfig->dyn_lpf_gyro_max_hz = DYN_LPF_GYRO_MAX_HZ_DEFAULT; gyroConfig->gyro_filter_debug_axis = FD_ROLL; gyroConfig->dyn_lpf_curve_expo = 5; - gyroConfig->simplified_gyro_filter = false; + gyroConfig->simplified_gyro_filter = true; gyroConfig->simplified_gyro_filter_multiplier = SIMPLIFIED_TUNING_DEFAULT; } diff --git a/src/main/sensors/gyro.h b/src/main/sensors/gyro.h index b9a9f8978..1536afaab 100644 --- a/src/main/sensors/gyro.h +++ b/src/main/sensors/gyro.h @@ -39,9 +39,9 @@ #define FILTER_FREQUENCY_MAX 1000 // so little filtering above 1000hz that if the user wants less delay, they must disable the filter #define DYN_LPF_FILTER_FREQUENCY_MAX 1000 -#define DYN_LPF_GYRO_MIN_HZ_DEFAULT 200 +#define DYN_LPF_GYRO_MIN_HZ_DEFAULT 250 #define DYN_LPF_GYRO_MAX_HZ_DEFAULT 500 -#define GYRO_LOWPASS_2_HZ_DEFAULT 250 +#define GYRO_LOWPASS_2_HZ_DEFAULT 500 #ifdef USE_YAW_SPIN_RECOVERY #define YAW_SPIN_RECOVERY_THRESHOLD_MIN 500 -- 2.11.4.GIT