mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-26 01:35:41 +03:00
Use static idle value to set the initial dynamic idle limit before takeoff (#13906)
use static idle value in dynamic idle
This commit is contained in:
parent
908f9cc32d
commit
6b5b5cfbdb
6 changed files with 4 additions and 7 deletions
|
@ -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_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_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_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
|
#endif
|
||||||
|
|
||||||
#ifdef USE_SIMPLIFIED_TUNING
|
#ifdef USE_SIMPLIFIED_TUNING
|
||||||
|
|
|
@ -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_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_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_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
|
#endif
|
||||||
{ "level_race_mode", VAR_UINT8 | PROFILE_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_OFF_ON }, PG_PID_PROFILE, offsetof(pidProfile_t, level_race_mode) },
|
{ "level_race_mode", VAR_UINT8 | PROFILE_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_OFF_ON }, PG_PID_PROFILE, offsetof(pidProfile_t, level_race_mode) },
|
||||||
|
|
||||||
|
|
|
@ -127,7 +127,6 @@
|
||||||
#define PARAM_NAME_DYN_IDLE_I_GAIN "dyn_idle_i_gain"
|
#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_D_GAIN "dyn_idle_d_gain"
|
||||||
#define PARAM_NAME_DYN_IDLE_MAX_INCREASE "dyn_idle_max_increase"
|
#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_PIDS_MODE "simplified_pids_mode"
|
||||||
#define PARAM_NAME_SIMPLIFIED_MASTER_MULTIPLIER "simplified_master_multiplier"
|
#define PARAM_NAME_SIMPLIFIED_MASTER_MULTIPLIER "simplified_master_multiplier"
|
||||||
#define PARAM_NAME_SIMPLIFIED_I_GAIN "simplified_i_gain"
|
#define PARAM_NAME_SIMPLIFIED_I_GAIN "simplified_i_gain"
|
||||||
|
|
|
@ -337,7 +337,9 @@ void mixerInitProfile(void)
|
||||||
mixerRuntime.dynIdleIGain = currentPidProfile->dyn_idle_i_gain * 0.01f * pidGetDT();
|
mixerRuntime.dynIdleIGain = currentPidProfile->dyn_idle_i_gain * 0.01f * pidGetDT();
|
||||||
mixerRuntime.dynIdleDGain = currentPidProfile->dyn_idle_d_gain * 0.0000003f * pidGetPidFrequency();
|
mixerRuntime.dynIdleDGain = currentPidProfile->dyn_idle_d_gain * 0.0000003f * pidGetPidFrequency();
|
||||||
mixerRuntime.dynIdleMaxIncrease = currentPidProfile->dyn_idle_max_increase * 0.001f;
|
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
|
mixerRuntime.minRpsDelayK = 800 * pidGetDT() / 20.0f; //approx 20ms D delay, arbitrarily suits many motors
|
||||||
if (!mixerRuntime.feature3dEnabled && mixerRuntime.dynIdleMinRps) {
|
if (!mixerRuntime.feature3dEnabled && mixerRuntime.dynIdleMinRps) {
|
||||||
mixerRuntime.motorOutputLow = DSHOT_MIN_THROTTLE; // Override value set by initEscEndpoints to allow zero motor drive
|
mixerRuntime.motorOutputLow = DSHOT_MIN_THROTTLE; // Override value set by initEscEndpoints to allow zero motor drive
|
||||||
|
|
|
@ -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)
|
#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)
|
void resetPidProfile(pidProfile_t *pidProfile)
|
||||||
{
|
{
|
||||||
|
@ -198,7 +198,6 @@ void resetPidProfile(pidProfile_t *pidProfile)
|
||||||
.dyn_idle_i_gain = 50,
|
.dyn_idle_i_gain = 50,
|
||||||
.dyn_idle_d_gain = 50,
|
.dyn_idle_d_gain = 50,
|
||||||
.dyn_idle_max_increase = 150,
|
.dyn_idle_max_increase = 150,
|
||||||
.dyn_idle_start_increase = 50,
|
|
||||||
.feedforward_averaging = FEEDFORWARD_AVERAGING_OFF,
|
.feedforward_averaging = FEEDFORWARD_AVERAGING_OFF,
|
||||||
.feedforward_max_rate_limit = 90,
|
.feedforward_max_rate_limit = 90,
|
||||||
.feedforward_smooth_factor = 25,
|
.feedforward_smooth_factor = 25,
|
||||||
|
|
|
@ -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_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_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_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_transition; // Feedforward attenuation around centre sticks
|
||||||
uint8_t feedforward_averaging; // Number of packets to average when averaging is on
|
uint8_t feedforward_averaging; // Number of packets to average when averaging is on
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue