diff --git a/src/main/config/config.c b/src/main/config/config.c index f8b053d0b7..c65c613393 100644 --- a/src/main/config/config.c +++ b/src/main/config/config.c @@ -673,15 +673,19 @@ void validateAndFixGyroConfig(void) // check for looptime restrictions based on motor protocol. Motor times have safety margin float motorUpdateRestriction; -#if defined(STM32F4) || defined(STM32G4) +#if defined(USE_DSHOT) && defined(USE_PID_DENOM_CHECK) /* If bidirectional DSHOT is being used on an F4 or G4 then force DSHOT300. The motor update restrictions then applied * will automatically consider the loop time and adjust pid_process_denom appropriately */ - if (motorConfig()->dev.useDshotTelemetry && (motorConfig()->dev.motorPwmProtocol == PWM_TYPE_DSHOT600)) { - motorConfigMutable()->dev.motorPwmProtocol = PWM_TYPE_DSHOT300; + if (motorConfig()->dev.useDshotTelemetry) { + if (motorConfig()->dev.motorPwmProtocol == PWM_TYPE_DSHOT600) { + motorConfigMutable()->dev.motorPwmProtocol = PWM_TYPE_DSHOT300; + } + if (gyro.sampleRateHz > 4000) { + pidConfigMutable()->pid_process_denom = 2; + } } -#endif - +#endif // USE_DSHOT && USE_PID_DENOM_CHECK switch (motorConfig()->dev.motorPwmProtocol) { case PWM_TYPE_STANDARD: motorUpdateRestriction = 1.0f / BRUSHLESS_MOTORS_PWM_RATE; diff --git a/src/main/flight/pid.c b/src/main/flight/pid.c index aca7865f7b..a46b0ecd3d 100644 --- a/src/main/flight/pid.c +++ b/src/main/flight/pid.c @@ -90,13 +90,9 @@ pt1Filter_t throttleLpf; PG_REGISTER_WITH_RESET_TEMPLATE(pidConfig_t, pidConfig, PG_PID_CONFIG, 3); -#if !defined(DEFAULT_PID_PROCESS_DENOM) -#if defined(STM32F411xE) -#define DEFAULT_PID_PROCESS_DENOM 2 -#else +#ifndef DEFAULT_PID_PROCESS_DENOM #define DEFAULT_PID_PROCESS_DENOM 1 #endif -#endif #ifdef USE_RUNAWAY_TAKEOFF PG_RESET_TEMPLATE(pidConfig_t, pidConfig, diff --git a/src/main/target/STM32F405/target.h b/src/main/target/STM32F405/target.h index 8125fd308b..23857b3776 100644 --- a/src/main/target/STM32F405/target.h +++ b/src/main/target/STM32F405/target.h @@ -79,4 +79,6 @@ #define USE_EXTI +#define USE_PID_DENOM_CHECK + #define FLASH_PAGE_SIZE ((uint32_t)0x4000) // 16K sectors diff --git a/src/main/target/STM32F411/target.h b/src/main/target/STM32F411/target.h index d190f1c7ee..a19a58d15b 100644 --- a/src/main/target/STM32F411/target.h +++ b/src/main/target/STM32F411/target.h @@ -78,4 +78,6 @@ #define USE_EXTI +#define USE_PID_DENOM_CHECK + #define FLASH_PAGE_SIZE ((uint32_t)0x4000) // 16K sectors diff --git a/src/main/target/STM32G47X/target.h b/src/main/target/STM32G47X/target.h index 6302ee08ef..a073daf3c8 100644 --- a/src/main/target/STM32G47X/target.h +++ b/src/main/target/STM32G47X/target.h @@ -72,5 +72,9 @@ #define USE_ESCSERIAL #define USE_ADC + #define USE_EXTI + +#define USE_PID_DENOM_CHECK + #define USE_TIMER_UP_CONFIG