From 6e72d5bd5bd73bffa86f80bbef71d59d04301bf3 Mon Sep 17 00:00:00 2001 From: Bruce Luckcuck Date: Sat, 4 May 2019 10:40:19 -0400 Subject: [PATCH] Reset d_min to 0 if >= D gain for a given axis Eliminates the dual-mode disabled logic for d_min for consistency. Previously d_min would logically be disabled if set to 0, or if >= the related D gain. This produces an inconsistent behavior with the Configurator in that it applies validation and will reset d_min to 0 in this case - causing an unexpected settings change just by saving on the PID Tuning tab. This change aligns the validation in the firmware and Configurator. --- src/main/fc/config.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/fc/config.c b/src/main/fc/config.c index f4bd394116..aca072abf5 100644 --- a/src/main/fc/config.c +++ b/src/main/fc/config.c @@ -214,6 +214,13 @@ static void validateAndFixConfig(void) if (pidProfilesMutable(i)->auto_profile_cell_count > MAX_AUTO_DETECT_CELL_COUNT || pidProfilesMutable(i)->auto_profile_cell_count < AUTO_PROFILE_CELL_COUNT_CHANGE) { pidProfilesMutable(i)->auto_profile_cell_count = AUTO_PROFILE_CELL_COUNT_STAY; } + + // 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) { + pidProfilesMutable(i)->d_min[axis] = 0; + } + } } if (motorConfig()->dev.motorPwmProtocol == PWM_TYPE_BRUSHED) {