mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-27 02:05:31 +03:00
added adjustable k-factor
This commit is contained in:
parent
19e8bc498f
commit
0aa21dfdc5
6 changed files with 15 additions and 8 deletions
|
@ -1,2 +1 @@
|
|||
HOBBYWING_XROTORF7CONV
|
||||
|
||||
BetafpvF411RX
|
||||
|
|
|
|
@ -946,7 +946,9 @@ const clivalue_t valueTable[] = {
|
|||
{ "rpm_limiter_afterburner_hold_to_use", VAR_INT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_OFF_ON }, PG_MIXER_CONFIG, offsetof(mixerConfig_t, govenor_rpm_afterburner_hold_to_use) },
|
||||
{ "rpm_limiter_afterburner_tank_count", VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned = { 0, 255 }, PG_MIXER_CONFIG, offsetof(mixerConfig_t, govenor_rpm_afterburner_tank_count) },
|
||||
{ "rpm_limiter_afterburner_reset", VAR_INT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_OFF_ON }, PG_MIXER_CONFIG, offsetof(mixerConfig_t, govenor_rpm_afterburner_reset) },
|
||||
{ "rpm_limiter_acceleration_limit", VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned = { 0, 1000 }, PG_MIXER_CONFIG, offsetof(mixerConfig_t, govenor_acceleration_limit) },
|
||||
{ "rpm_limiter_acceleration_limit", VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned = { 0, 10000 }, PG_MIXER_CONFIG, offsetof(mixerConfig_t, govenor_acceleration_limit) },
|
||||
{ "rpm_limiter_deceleration_limit", VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned = { 0, 10000 }, PG_MIXER_CONFIG, offsetof(mixerConfig_t, govenor_deceleration_limit) },
|
||||
{ "rpm_limiter_k_factor", VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned = { 1, 3000 }, PG_MIXER_CONFIG, offsetof(mixerConfig_t, govenor_k_factor) },
|
||||
//Street League customization
|
||||
{ "rpm_limiter_idle_rpm", VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned = { 0, 999 }, PG_MIXER_CONFIG, offsetof(mixerConfig_t, govenor_idle_rpm) },
|
||||
{ "rpm_limiter_full_linearization", VAR_INT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_OFF_ON }, PG_MIXER_CONFIG, offsetof(mixerConfig_t, govenor_rpm_linearization) },
|
||||
|
|
|
@ -527,10 +527,11 @@ static void applyRPMLimiter(void)
|
|||
mixerRuntime.govenorPreviousSmoothedRPMError = smoothedRPMError;
|
||||
mixerRuntime.govenorPreviousRPMLimit = RPM_GOVENOR_LIMIT;
|
||||
|
||||
DEBUG_SET(DEBUG_RPM_LIMITER, 0, averageRPM);
|
||||
DEBUG_SET(DEBUG_RPM_LIMITER, 1, smoothedRPMError);
|
||||
DEBUG_SET(DEBUG_RPM_LIMITER, 2, mixerRuntime.govenorI*100.0f);
|
||||
DEBUG_SET(DEBUG_RPM_LIMITER, 3, govenorD*10000.0f);
|
||||
DEBUG_SET(DEBUG_RPM_LIMITER, 0, averageRPM);//unfiltered average rpm
|
||||
DEBUG_SET(DEBUG_RPM_LIMITER, 1, averageRPM_smoothed); //filtered average rpm
|
||||
DEBUG_SET(DEBUG_RPM_LIMITER, 2, smoothedRPMError); //P term
|
||||
DEBUG_SET(DEBUG_RPM_LIMITER, 3, mixerRuntime.govenorI*100.0f); // I term
|
||||
DEBUG_SET(DEBUG_RPM_LIMITER, 4, govenorD*10000.0f); // D term
|
||||
|
||||
/*DEBUG_SET(DEBUG_RPM_LIMITER, 0, mixerRuntime.afterburnerInitiated);
|
||||
DEBUG_SET(DEBUG_RPM_LIMITER, 1, mixerRuntime.afterburnerTankPercent);
|
||||
|
|
|
@ -101,6 +101,7 @@ typedef struct mixerConfig_s {
|
|||
uint8_t govenor_rpm_afterburner_tank_count;
|
||||
uint16_t govenor_acceleration_limit;
|
||||
uint16_t govenor_deceleration_limit;
|
||||
uint16_t govenor_k_factor;
|
||||
bool govenor_rpm_linearization;
|
||||
uint16_t govenorThrottleLimitLearningTimeMS;
|
||||
uint16_t govenor_idle_rpm;
|
||||
|
|
|
@ -59,6 +59,7 @@ PG_RESET_TEMPLATE(mixerConfig_t, mixerConfig,
|
|||
.govenor_idle_rpm = 17,
|
||||
.govenor_acceleration_limit = 60,
|
||||
.govenor_deceleration_limit = 60,
|
||||
.govenor_k_factor = 800,
|
||||
.govenor_rpm_limit = 130.0f,
|
||||
.govenor_rpm_afterburner = 16,
|
||||
.govenor_rpm_afterburner_duration = 5,
|
||||
|
@ -332,6 +333,7 @@ mixerRuntime.govenorIGain = 15.0f * 0.0001f * pidGetDT();
|
|||
mixerRuntime.govenorDGain = 10.0f * 0.00000003f * pidGetPidFrequency();
|
||||
mixerRuntime.govenorAccelerationLimit = 60.0f * 1000.0f * pidGetDT();
|
||||
mixerRuntime.govenorDecelerationLimit = 60.0f * 1000.0f * pidGetDT();
|
||||
mixerRuntime.govenorKFactor = 800;
|
||||
mixerRuntime.afterburnerRPM = 16;
|
||||
mixerRuntime.afterburnerReset = false;
|
||||
mixerRuntime.afterburnerDuration = 5;
|
||||
|
@ -348,6 +350,7 @@ mixerRuntime.govenorIGain = mixerConfig()->govenor_i * 0.0001f * pidGetDT();
|
|||
mixerRuntime.govenorDGain = mixerConfig()->govenor_d * 0.00000003f * pidGetPidFrequency();
|
||||
mixerRuntime.govenorAccelerationLimit = mixerConfig()->govenor_acceleration_limit * 1000.0f * pidGetDT();
|
||||
mixerRuntime.govenorDecelerationLimit = mixerConfig()->govenor_deceleration_limit * 1000.0f * pidGetDT();
|
||||
mixerRuntime.govenorKFactor = mixerConfig()->govenor_k_factor;
|
||||
mixerRuntime.afterburnerRPM = mixerConfig()->govenor_rpm_afterburner;
|
||||
mixerRuntime.afterburnerReset = mixerConfig()->govenor_rpm_afterburner_reset;
|
||||
mixerRuntime.afterburnerDuration = mixerConfig()->govenor_rpm_afterburner_duration;
|
||||
|
@ -368,7 +371,7 @@ mixerRuntime.afterburnerInitiated = false;
|
|||
// mixerRuntime.govenorAverageStickThrottle = 0;
|
||||
mixerRuntime.govenorPreviousSmoothedRPMError = 0;
|
||||
// mixerRuntime.govenorIterationStep = 1.0f/(pidGetPidFrequency() * mixerConfig()->govenor_learning_threshold_window); // 3 is the averaging
|
||||
mixerRuntime.govenorDelayK = 800 * pidGetDT() / 20.0f;
|
||||
mixerRuntime.govenorDelayK = mixerRuntime.govenorKFactor * pidGetDT() / 20.0f;
|
||||
mixerRuntime.govenorLearningThrottleK = 0.5 / (pidGetPidFrequency() * mixerConfig()->govenorThrottleLimitLearningTimeMS / 1000); // 0.5 = value ^ (4000 * time) 0.99^(4000*(20/1000))
|
||||
mixerRuntime.govenor_init = false;
|
||||
|
||||
|
|
|
@ -56,6 +56,7 @@ typedef struct mixerRuntime_s {
|
|||
float govenorExpectedThrottleLimit;
|
||||
float govenorAccelerationLimit;
|
||||
float govenorDecelerationLimit;
|
||||
float govenorKFactor;
|
||||
float prevAverageRPM;
|
||||
float govenorPreviousSmoothedRPMError;
|
||||
float minRPMDelayK;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue