From 38171cd2bd1b09091ae9915ad0c57c0b6293e026 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sun, 28 May 2017 13:44:26 -0400 Subject: [PATCH] #4 idle min/max --- firmware/controllers/algo/engine_configuration.cpp | 8 ++++++++ firmware/controllers/idle_thread.cpp | 13 ++++++++++++- firmware/controllers/idle_thread.h | 1 + 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/firmware/controllers/algo/engine_configuration.cpp b/firmware/controllers/algo/engine_configuration.cpp index 243f9b53fd..0f6154fdf2 100644 --- a/firmware/controllers/algo/engine_configuration.cpp +++ b/firmware/controllers/algo/engine_configuration.cpp @@ -166,6 +166,10 @@ void incrementGlobalConfigurationVersion(DECLARE_ENGINE_PARAMETER_SIGNATURE) { onConfigurationChangeElectronicThrottleCallback(&activeConfiguration); #endif /* EFI_ELECTRONIC_THROTTLE_BODY */ +#if EFI_IDLE_CONTROL || defined(__DOXYGEN__) + onConfigurationChangeIdleCallback(&activeConfiguration); +#endif /* EFI_IDLE_CONTROL */ + rememberCurrentConfiguration(); } @@ -657,6 +661,10 @@ void setDefaultConfiguration(DECLARE_ENGINE_PARAMETER_SIGNATURE) { engineConfiguration->cranking.baseFuel = 5; + engineConfiguration->idleValvePidMin = 5; + engineConfiguration->idleValvePidMax = 95; + boardConfiguration->idlePidDeactivationTpsThreshold = 2; + engineConfiguration->analogInputDividerCoefficient = 2; engineConfiguration->crankingChargeAngle = 70; diff --git a/firmware/controllers/idle_thread.cpp b/firmware/controllers/idle_thread.cpp index 54eb021b23..5ab8139d83 100644 --- a/firmware/controllers/idle_thread.cpp +++ b/firmware/controllers/idle_thread.cpp @@ -43,6 +43,7 @@ extern TunerStudioOutputChannels tsOutputChannels; EXTERN_ENGINE ; +static bool shouldResetPid = false; static Pid idlePid(&engineConfiguration->idleRpmPid, 1, 99); @@ -184,6 +185,14 @@ static msg_t ivThread(int param) { // todo: in auto mode, speel should be taken from idleDTe chThdSleepMilliseconds(boardConfiguration->idleThreadPeriod); + if (shouldResetPid) { + idlePid.reset(); +// alternatorPidResetCounter++; + shouldResetPid = false; + } + + + // this value is not used yet if (boardConfiguration->clutchDownPin != GPIO_UNASSIGNED) { engine->clutchDownState = efiReadPin(boardConfiguration->clutchDownPin); @@ -283,7 +292,9 @@ void setIdleDT(int value) { } void onConfigurationChangeIdleCallback(engine_configuration_s *previousConfiguration) { - + shouldResetPid = !idlePid.isSame(&previousConfiguration->idleRpmPid); + idlePid.minResult = engineConfiguration->idleValvePidMin; + idlePid.maxResult = engineConfiguration->idleValvePidMax; } void startIdleBench(void) { diff --git a/firmware/controllers/idle_thread.h b/firmware/controllers/idle_thread.h index e3d6063927..5272125dfc 100644 --- a/firmware/controllers/idle_thread.h +++ b/firmware/controllers/idle_thread.h @@ -24,5 +24,6 @@ void setIdleDFactor(float value); void setIdleMode(idle_mode_e value); void setTargetIdleRpm(int value); void setIdleDT(int value); +void onConfigurationChangeIdleCallback(engine_configuration_s *previousConfiguration); #endif /* IDLE_THREAD_H_ */