Fix problems with idle things
This commit is contained in:
parent
fcb962864a
commit
8bccb56d9a
|
@ -137,6 +137,11 @@ void fanControl()
|
|||
{ *fan_pin_port &= ~(fan_pin_mask); } // Switch pin to low
|
||||
#if defined(PWM_FAN_AVAILABLE)//own timer for PWM fan not available on Arduino MEGA
|
||||
DISABLE_FAN_TIMER();
|
||||
#else
|
||||
}
|
||||
else
|
||||
{
|
||||
fan_max_pwm = false;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
|
|
@ -29,6 +29,16 @@ void initialiseIdle()
|
|||
idle2_pin_port = portOutputRegister(digitalPinToPort(pinIdle2));
|
||||
idle2_pin_mask = digitalPinToBitMask(pinIdle2);
|
||||
|
||||
//these are set in anycase, for PWM fan use.
|
||||
#if defined(CORE_AVR)
|
||||
idle_pwm_max_count = 1000000L / (16 * configPage6.idleFreq * 2); //Converts the frequency in Hz to the number of ticks (at 16uS) it takes to complete 1 cycle. Note that the frequency is divided by 2 coming from TS to allow for up to 512hz
|
||||
#elif defined(CORE_TEENSY)
|
||||
idle_pwm_max_count = 1000000L / (32 * configPage6.idleFreq * 2); //Converts the frequency in Hz to the number of ticks (at 32uS) it takes to complete 1 cycle. Note that the frequency is divided by 2 coming from TS to allow for up to 512hz
|
||||
#elif defined(CORE_TEENSY41)
|
||||
idle_pwm_max_count = 1000000L / (2 * configPage6.idleFreq * 2); //Converts the frequency in Hz to the number of ticks (at 2uS) it takes to complete 1 cycle. Note that the frequency is divided by 2 coming from TS to allow for up to 512hz
|
||||
#endif
|
||||
idle_pwm_target_value = 0;
|
||||
|
||||
//Initialising comprises of setting the 2D tables with the relevant values from the config pages
|
||||
switch(configPage6.iacAlgorithm)
|
||||
{
|
||||
|
@ -60,13 +70,6 @@ void initialiseIdle()
|
|||
iacCrankDutyTable.values = configPage6.iacCrankDuty;
|
||||
iacCrankDutyTable.axisX = configPage6.iacCrankBins;
|
||||
|
||||
#if defined(CORE_AVR)
|
||||
idle_pwm_max_count = 1000000L / (16 * configPage6.idleFreq * 2); //Converts the frequency in Hz to the number of ticks (at 16uS) it takes to complete 1 cycle. Note that the frequency is divided by 2 coming from TS to allow for up to 512hz
|
||||
#elif defined(CORE_TEENSY35)
|
||||
idle_pwm_max_count = 1000000L / (32 * configPage6.idleFreq * 2); //Converts the frequency in Hz to the number of ticks (at 32uS) it takes to complete 1 cycle. Note that the frequency is divided by 2 coming from TS to allow for up to 512hz
|
||||
#elif defined(CORE_TEENSY41)
|
||||
idle_pwm_max_count = 1000000L / (2 * configPage6.idleFreq * 2); //Converts the frequency in Hz to the number of ticks (at 2uS) it takes to complete 1 cycle. Note that the frequency is divided by 2 coming from TS to allow for up to 512hz
|
||||
#endif
|
||||
enableIdle();
|
||||
break;
|
||||
|
||||
|
@ -84,13 +87,6 @@ void initialiseIdle()
|
|||
iacCrankDutyTable.values = configPage6.iacCrankDuty;
|
||||
iacCrankDutyTable.axisX = configPage6.iacCrankBins;
|
||||
|
||||
#if defined(CORE_AVR)
|
||||
idle_pwm_max_count = 1000000L / (16 * configPage6.idleFreq * 2); //Converts the frequency in Hz to the number of ticks (at 16uS) it takes to complete 1 cycle. Note that the frequency is divided by 2 coming from TS to allow for up to 512hz
|
||||
#elif defined(CORE_TEENSY)
|
||||
idle_pwm_max_count = 1000000L / (32 * configPage6.idleFreq * 2); //Converts the frequency in Hz to the number of ticks (at 32uS) it takes to complete 1 cycle. Note that the frequency is divided by 2 coming from TS to allow for up to 512hz
|
||||
#elif defined(CORE_TEENSY41)
|
||||
idle_pwm_max_count = 1000000L / (2 * configPage6.idleFreq * 2); //Converts the frequency in Hz to the number of ticks (at 2uS) it takes to complete 1 cycle. Note that the frequency is divided by 2 coming from TS to allow for up to 512hz
|
||||
#endif
|
||||
idlePID.SetOutputLimits(percentage(configPage2.iacCLminDuty, idle_pwm_max_count<<2), percentage(configPage2.iacCLmaxDuty, idle_pwm_max_count<<2));
|
||||
idlePID.SetTunings(configPage6.idleKP, configPage6.idleKI, configPage6.idleKD);
|
||||
idlePID.SetMode(AUTOMATIC); //Turn PID on
|
||||
|
@ -518,8 +514,10 @@ static inline void disableIdle()
|
|||
{
|
||||
if( (configPage6.iacAlgorithm == IAC_ALGORITHM_PWM_CL) || (configPage6.iacAlgorithm == IAC_ALGORITHM_PWM_OL) )
|
||||
{
|
||||
IDLE_TIMER_DISABLE();
|
||||
//IDLE_TIMER_DISABLE();
|
||||
digitalWrite(pinIdle1, LOW);
|
||||
if(configPage6.iacChannels == 1) { digitalWrite(pinIdle2, LOW); } //If 2 idle channels are in use, put idle pin2 also to low
|
||||
idle_pwm_target_value = 0;
|
||||
}
|
||||
else if ((configPage6.iacAlgorithm == IAC_ALGORITHM_STEP_OL) )
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue