diff --git a/speeduino/idle.h b/speeduino/idle.h index 5e1eb8e9..c6cae02b 100644 --- a/speeduino/idle.h +++ b/speeduino/idle.h @@ -69,7 +69,7 @@ uint8_t idleTaper; byte idleUpOutputHIGH = HIGH; // Used to invert the idle Up Output byte idleUpOutputLOW = LOW; // Used to invert the idle Up Output -void initialiseIdle(); +void initialiseIdle(bool forcehoming); void initialiseIdleUpOutput(); void disableIdle(); void idleInterrupt(); diff --git a/speeduino/idle.ino b/speeduino/idle.ino index 5fa33b92..febcde77 100644 --- a/speeduino/idle.ino +++ b/speeduino/idle.ino @@ -32,7 +32,7 @@ static inline void enableIdle() } } -void initialiseIdle() +void initialiseIdle(bool forcehoming) { //By default, turn off the PWM interrupt (It gets turned on below if needed) IDLE_TIMER_DISABLE(); @@ -154,7 +154,7 @@ void initialiseIdle() iacStepTime_uS = configPage6.iacStepTime * 1000; iacCoolTime_uS = configPage9.iacCoolTime * 1000; - if( completedHomeSteps < (configPage6.iacStepHome * 3) ) + if (forcehoming) { //Change between modes running make engine stall completedHomeSteps = 0; @@ -185,7 +185,7 @@ void initialiseIdle() iacStepTime_uS = configPage6.iacStepTime * 1000; iacCoolTime_uS = configPage9.iacCoolTime * 1000; - if( completedHomeSteps < (configPage6.iacStepHome * 3) ) + if (forcehoming) { //Change between modes running make engine stall completedHomeSteps = 0; @@ -229,7 +229,7 @@ void initialiseIdle() iacStepTime_uS = configPage6.iacStepTime * 1000; iacCoolTime_uS = configPage9.iacCoolTime * 1000; - if( completedHomeSteps < (configPage6.iacStepHome * 3) ) + if (forcehoming) { //Change between modes running make engine stall completedHomeSteps = 0; @@ -393,7 +393,7 @@ static inline byte isStepperHomed() void idleControl() { - if( idleInitComplete != configPage6.iacAlgorithm) { initialiseIdle(); } + if( idleInitComplete != configPage6.iacAlgorithm) { initialiseIdle(false); } if( (currentStatus.RPM > 0) || (configPage6.iacPWMrun == true) ) { enableIdle(); } //Check whether the idleUp is active @@ -685,6 +685,7 @@ void idleControl() } doStep(); + idleTaper = 0; idle_pid_target_value = idleStepper.targetIdleStep << 2; //Resolution increased idlePID.ResetIntegeral(); FeedForwardTerm = idle_pid_target_value; @@ -703,6 +704,7 @@ void idleControl() //Tapering between cranking IAC value and running FeedForwardTerm = map(idleTaper, 0, configPage2.idleTaperTime, minValue, maxValue)<<2; + idleTaper++; idle_pid_target_value = FeedForwardTerm; } else if (configPage6.iacAlgorithm == IAC_ALGORITHM_STEP_OLCL) diff --git a/speeduino/init.ino b/speeduino/init.ino index 5ca4cdc2..c7eb754f 100644 --- a/speeduino/init.ino +++ b/speeduino/init.ino @@ -342,7 +342,7 @@ void initialiseAll() //Perform all initialisations initialiseSchedulers(); //initialiseDisplay(); - initialiseIdle(); + initialiseIdle(true); initialiseFan(); initialiseAirCon(); initialiseAuxPWM(); diff --git a/speeduino/sensors.ino b/speeduino/sensors.ino index 5ada90c9..9b46f74d 100644 --- a/speeduino/sensors.ino +++ b/speeduino/sensors.ino @@ -593,7 +593,7 @@ void readBat() //Redo the stepper homing if( (configPage6.iacAlgorithm == IAC_ALGORITHM_STEP_CL) || (configPage6.iacAlgorithm == IAC_ALGORITHM_STEP_OL) ) { - initialiseIdle(); + initialiseIdle(true); } }