Fix for uninitialised variable in OLCL and CL stepper idle control (#926)

* Fix problem of using an uninitialised variable when initialising the stepper
after power on.

* Fix faulty idle taper causing OLCL and CL stepper to get stuck in the cranking position.

Co-authored-by: Richard Metcalfe <richard@richmet.com>
This commit is contained in:
ric355 2022-09-13 14:16:31 +01:00 committed by GitHub
parent c8b7c18622
commit 659eb8ec0f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 10 additions and 8 deletions

View File

@ -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();

View File

@ -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)

View File

@ -342,7 +342,7 @@ void initialiseAll()
//Perform all initialisations
initialiseSchedulers();
//initialiseDisplay();
initialiseIdle();
initialiseIdle(true);
initialiseFan();
initialiseAirCon();
initialiseAuxPWM();

View File

@ -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);
}
}