diff --git a/firmware/controllers/actuators/alternator_controller.cpp b/firmware/controllers/actuators/alternator_controller.cpp index f7255480cd..6309d1a087 100644 --- a/firmware/controllers/actuators/alternator_controller.cpp +++ b/firmware/controllers/actuators/alternator_controller.cpp @@ -49,7 +49,7 @@ public: private: void PeriodicTask(efitime_t nowNt) override { UNUSED(nowNt); - setPeriod(NOT_TOO_OFTEN(10 /* ms */, engineConfiguration->alternatorControl.periodMs)); + setPeriod(GET_PERIOD_LIMITED(&engineConfiguration->alternatorControl)); #if ! EFI_UNIT_TEST if (shouldResetPid) { diff --git a/firmware/controllers/actuators/aux_pid.cpp b/firmware/controllers/actuators/aux_pid.cpp index 3b01eb91aa..653209896c 100644 --- a/firmware/controllers/actuators/aux_pid.cpp +++ b/firmware/controllers/actuators/aux_pid.cpp @@ -62,7 +62,7 @@ public: private: void PeriodicTask(efitime_t nowNt) override { UNUSED(nowNt); - setPeriod(NOT_TOO_OFTEN(10 /* ms */, engineConfiguration->auxPid[0].periodMs)); + setPeriod(GET_PERIOD_LIMITED(&engineConfiguration->auxPid[0])); if (engine->auxParametersVersion.isOld(engine->getGlobalConfigurationVersion())) { pidReset(); diff --git a/firmware/controllers/actuators/electronic_throttle.cpp b/firmware/controllers/actuators/electronic_throttle.cpp index ae6c2bca91..e13299923e 100644 --- a/firmware/controllers/actuators/electronic_throttle.cpp +++ b/firmware/controllers/actuators/electronic_throttle.cpp @@ -167,7 +167,7 @@ private: void PeriodicTask(efitime_t nowNt) override { UNUSED(nowNt); - setPeriod(NOT_TOO_OFTEN(10 /* ms */, engineConfiguration->etb.periodMs)); + setPeriod(GET_PERIOD_LIMITED(&engineConfiguration->etb)); // set debug_mode 17 diff --git a/firmware/controllers/actuators/idle_thread.cpp b/firmware/controllers/actuators/idle_thread.cpp index 2e1273c82f..277f74659f 100644 --- a/firmware/controllers/actuators/idle_thread.cpp +++ b/firmware/controllers/actuators/idle_thread.cpp @@ -265,7 +265,7 @@ public: private: void PeriodicTask(efitime_t nowNt) override { UNUSED(nowNt); - setPeriod(NOT_TOO_OFTEN(10 /* ms */, engineConfiguration->idleRpmPid.periodMs)); + setPeriod(GET_PERIOD_LIMITED(&engineConfiguration->idleRpmPid)); /* * Here we have idle logic thread - actual stepper movement is implemented in a separate diff --git a/firmware/controllers/injector_central.cpp b/firmware/controllers/injector_central.cpp index 263f560bd0..75c103040d 100644 --- a/firmware/controllers/injector_central.cpp +++ b/firmware/controllers/injector_central.cpp @@ -222,7 +222,7 @@ public: private: void PeriodicTask(efitime_t nowNt) override { UNUSED(nowNt); - setPeriod(NOT_TOO_OFTEN(10 /* ms */, engineConfiguration->auxPid[0].periodMs)); + setPeriod(50 /* ms */); // naive inter-thread communication - waiting for a flag if (isBenchTestPending) { diff --git a/firmware/util/math/pid.h b/firmware/util/math/pid.h index 7ea73ef038..a1cf800d19 100644 --- a/firmware/util/math/pid.h +++ b/firmware/util/math/pid.h @@ -19,6 +19,13 @@ #define PID_AVG_BUF_SIZE_SHIFT 5 #define PID_AVG_BUF_SIZE (1<periodMs)) + +#define MS2SEC(x) (x * 0.001) + class Pid { public: