diff --git a/src/main/config/config.c b/src/main/config/config.c index 5f0cf31eae..f74bf867f2 100755 --- a/src/main/config/config.c +++ b/src/main/config/config.c @@ -243,8 +243,8 @@ static void resetPidProfile(pidProfile_t *pidProfile) pidProfile->pidAtMinThrottle = PID_STABILISATION_ON; // Betaflight PID controller parameters - pidProfile->ptermSetpointWeight = 75; - pidProfile->dtermSetpointWeight = 120; + pidProfile->ptermSetpointWeight = 80; + pidProfile->dtermSetpointWeight = 150; pidProfile->yawRateAccelLimit = 220; pidProfile->rateAccelLimit = 0; pidProfile->toleranceBand = 0; diff --git a/src/main/io/serial_cli.c b/src/main/io/serial_cli.c index e3546636f6..ff524656e9 100644 --- a/src/main/io/serial_cli.c +++ b/src/main/io/serial_cli.c @@ -853,7 +853,7 @@ const clivalue_t valueTable[] = { { "zero_cross_allowance", VAR_UINT8 | PROFILE_VALUE, &masterConfig.profile[0].pidProfile.zeroCrossAllowanceCount, .config.minmax = {0, 50 } }, { "iterm_throttle_gain", VAR_UINT8 | PROFILE_VALUE, &masterConfig.profile[0].pidProfile.itermThrottleGain, .config.minmax = {0, 200 } }, { "pterm_setpoint_weight", VAR_UINT8 | PROFILE_VALUE, &masterConfig.profile[0].pidProfile.ptermSetpointWeight, .config.minmax = {30, 100 } }, - { "dterm_setpoint_weight", VAR_UINT8 | PROFILE_VALUE, &masterConfig.profile[0].pidProfile.dtermSetpointWeight, .config.minmax = {0, 200 } }, + { "dterm_setpoint_weight", VAR_UINT8 | PROFILE_VALUE, &masterConfig.profile[0].pidProfile.dtermSetpointWeight, .config.minmax = {0, 300 } }, { "yaw_rate_accel_limit", VAR_UINT16 | PROFILE_VALUE, &masterConfig.profile[0].pidProfile.yawRateAccelLimit, .config.minmax = {0, 1000 } }, { "rate_accel_limit", VAR_UINT16 | PROFILE_VALUE, &masterConfig.profile[0].pidProfile.rateAccelLimit, .config.minmax = {0, 1000 } }, diff --git a/src/main/main.c b/src/main/main.c index 7949e1a560..5495856e18 100644 --- a/src/main/main.c +++ b/src/main/main.c @@ -106,8 +106,6 @@ #include "config/config_profile.h" #include "config/config_master.h" -#define LOOPTIME_SUSPEND_TIME 3 // Prevent too long busy wait times - #ifdef USE_HARDWARE_REVISION_DETECTION #include "hardware_revision.h" #endif @@ -599,8 +597,7 @@ void init(void) masterConfig.gyro_sync_denom = 1; } - setTargetPidLooptime((gyro.targetLooptime + LOOPTIME_SUSPEND_TIME) * masterConfig.pid_process_denom); // Initialize pid looptime - + setTargetPidLooptime(gyro.targetLooptime * masterConfig.pid_process_denom); // Initialize pid looptime #ifdef BLACKBOX initBlackbox(); @@ -677,7 +674,7 @@ void main_init(void) /* Setup scheduler */ schedulerInit(); - rescheduleTask(TASK_GYROPID, gyro.targetLooptime + LOOPTIME_SUSPEND_TIME); // Add a littlebit of extra time to reduce busy wait + rescheduleTask(TASK_GYROPID, gyro.targetLooptime); // Add a littlebit of extra time to reduce busy wait setTaskEnabled(TASK_GYROPID, true); if (sensors(SENSOR_ACC)) { diff --git a/src/main/mw.c b/src/main/mw.c index fd4f970447..d616015285 100644 --- a/src/main/mw.c +++ b/src/main/mw.c @@ -813,12 +813,10 @@ uint8_t setPidUpdateCountDown(void) { // Function for loop trigger void taskMainPidLoopCheck(void) { - static uint32_t previousTime; static bool runTaskMainSubprocesses; static uint8_t pidUpdateCountdown; - cycleTime = micros() - previousTime; - previousTime = micros(); + cycleTime = getTaskDeltaTime(TASK_SELF); if (debugMode == DEBUG_CYCLETIME) { debug[0] = cycleTime;