diff --git a/src/main/config/config.c b/src/main/config/config.c index f5e2b62874..614923e87a 100755 --- a/src/main/config/config.c +++ b/src/main/config/config.c @@ -134,7 +134,7 @@ static uint32_t activeFeaturesLatch = 0; static uint8_t currentControlRateProfileIndex = 0; controlRateConfig_t *currentControlRateProfile; -static const uint8_t EEPROM_CONF_VERSION = 125; +static const uint8_t EEPROM_CONF_VERSION = 126; static void resetAccelerometerTrims(flightDynamicsTrims_t *accelerometerTrims) { @@ -402,6 +402,8 @@ static void resetConf(void) masterConfig.gyro_sync_denom = 4; masterConfig.gyro_soft_lpf_hz = 60; + masterConfig.pid_jitter_buffer = 20; + resetAccelerometerTrims(&masterConfig.accZero); resetSensorAlignment(&masterConfig.sensorAlignmentConfig); diff --git a/src/main/config/config_master.h b/src/main/config/config_master.h index eb52cb4663..b70d1687c7 100644 --- a/src/main/config/config_master.h +++ b/src/main/config/config_master.h @@ -63,6 +63,8 @@ typedef struct master_t { uint16_t dcm_kp; // DCM filter proportional gain ( x 10000) uint16_t dcm_ki; // DCM filter integral gain ( x 10000) + uint8_t pid_jitter_buffer; // Jitter buffer time in us for pid controller for smoother motor output + gyroConfig_t gyroConfig; uint8_t mag_hardware; // Which mag hardware to use on boards with more than one device diff --git a/src/main/io/serial_cli.c b/src/main/io/serial_cli.c index a2f4257ee0..b5fe24da90 100644 --- a/src/main/io/serial_cli.c +++ b/src/main/io/serial_cli.c @@ -671,6 +671,7 @@ const clivalue_t valueTable[] = { { "pid_delta_method", VAR_UINT8 | PROFILE_VALUE | MODE_LOOKUP, &masterConfig.profile[0].pidProfile.deltaMethod, .config.lookup = { TABLE_DELTA_METHOD } }, { "dterm_lpf_hz", VAR_FLOAT | PROFILE_VALUE, &masterConfig.profile[0].pidProfile.dterm_lpf_hz, .config.minmax = {0, 500 } }, { "dterm_average_count", VAR_UINT8 | PROFILE_VALUE, &masterConfig.profile[0].pidProfile.dterm_average_count, .config.minmax = {2, 12 } }, + { "pid_jitter_buffer", VAR_UINT8 | MASTER_VALUE, &masterConfig.pid_jitter_buffer, .config.minmax = { 0, 100 } }, { "pid_controller", VAR_UINT8 | PROFILE_VALUE | MODE_LOOKUP, &masterConfig.profile[0].pidProfile.pidController, .config.lookup = { TABLE_PID_CONTROLLER } }, diff --git a/src/main/mw.c b/src/main/mw.c index dd935d4752..38d280466d 100644 --- a/src/main/mw.c +++ b/src/main/mw.c @@ -101,7 +101,6 @@ enum { #define IBATINTERVAL (6 * 3500) #define GYRO_WATCHDOG_DELAY 80 // delay for gyro sync -#define JITTER_BUFFER_TIME 20 // cycleTime jitter buffer time uint16_t cycleTime = 0; // this is the number in micro second to achieve a full loop, it can differ a little and is taken into account in the PID loop @@ -720,7 +719,7 @@ void taskMainPidLoopCheck(void) { while (1) { if (gyroSyncCheckUpdate() || ((cycleTime + (micros() - previousTime)) >= (targetLooptime + GYRO_WATCHDOG_DELAY))) { while (1) { - if (micros() >= JITTER_BUFFER_TIME + previousTime) break; + if (micros() >= masterConfig.pid_jitter_buffer + previousTime) break; } break; }