Added possibility to configure Steper bounds (#930)

Previous bounding worked only for PWM
This commit is contained in:
Vitor Moreno B. Sales 2022-11-06 23:52:04 -03:00 committed by GitHub
parent be58be3b18
commit 8e2fb0b36e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 21 additions and 18 deletions

View File

@ -372,8 +372,8 @@ page = 1
aeTaperMin = scalar, U08, 59, "RPM", 100, 0.0, 1000, 10000, 0
aeTaperMax = scalar, U08, 60, "RPM", 100, 0.0, 2000, 10000, 0
iacCLminDuty = scalar, U08, 61, "%", 1.0, 0.0, 0.0, 100.0, 0 ; Minimum and maximum duty cycles when using closed loop idle
iacCLmaxDuty = scalar, U08, 62, "%", 1.0, 0.0, 0.0, 100.0, 0
iacCLminValue = scalar, U08, 61, "% / Steps", idleRes, 0.0, 0.0, idleResMax, 0 ; Minimum and maximum duty cycles when using closed loop idle
iacCLmaxValue = scalar, U08, 62, "% / Steps", idleRes, 0.0, 0.0, idleResMax, 0
boostMinDuty = scalar, U08, 63, "%", 1.0, 0.0, 0.0, 100.0, 0 ; Minimum and maximum duty cycles for boost control
baroMin = scalar, S08, 64, "kpa", 1.0, 0.0, -100, 127.0, 0
@ -1469,8 +1469,8 @@ page = 15
requiresPowerCycle = oddfire2
requiresPowerCycle = oddfire3
requiresPowerCycle = oddfire4
requiresPowerCycle = iacCLminDuty
requiresPowerCycle = iacCLmaxDuty
requiresPowerCycle = iacCLminValue
requiresPowerCycle = iacCLmaxValue
requiresPowerCycle = useExtBaro
requiresPowerCycle = useEMAP
requiresPowerCycle = baroPin
@ -1580,8 +1580,8 @@ page = 15
defaultValue = flexFreqHigh,150
defaultValue = fuelPumpPin, 0
defaultValue = fanPin, 0
defaultValue = iacCLminDuty,0
defaultValue = iacCLmaxDuty,100
defaultValue = iacCLminValue,0
defaultValue = iacCLmaxValue,100
defaultValue = iacTPSlimit, 5
defaultValue = iacRPMlimitHysteresis, 200
defaultValue = boostMinDuty,0
@ -2057,8 +2057,8 @@ menuDialog = main
iacAlgorithm = "Selects method of idle control.\nNone = no idle control valve.\nOn/Off valve.\nPWM valve (2,3 wire).\nStepper Valve (4,6,8 wire)."
iacPWMdir = "Normal PWM valves increase RPM with higher duty. If RPM decreases with higher duty then select Reverse"
iacPWMrun = "Determines if the idle valve runs before engine is cranked over. This can help starting the engine by letting more air in before the RPM sync is achieved."
iacCLminDuty = "When using closed loop idle control, this is the minimum duty cycle that the PID loop will allow. Combined with the maximum value, this specifies the working range of your idle valve"
iacCLmaxDuty = "When using closed loop idle control, this is the maximum duty cycle that the PID loop will allow. Combined with the minimum value, this specifies the working range of your idle valve"
iacCLminValue = "When using closed loop idle control, this is the minimum position value that the PID loop will allow. Combined with the maximum value, this specifies the working range of your idle valve"
iacCLmaxValue = "When using closed loop idle control, this is the maximum position value that the PID loop will allow. Combined with the minimum value, this specifies the working range of your idle valve"
iacTPSlimit = "When using OL+CL idle control, if the TPS is higher than this value closed loop idle resets the integral of the PID (To prevent RPM dips coming back to idle)"
iacRPMlimitHysteresis = "When using closed loop idle control, if the closed loop Target RPM + this value is higher than the actual RPM, closed loop idle resets the integral of the PID (To prevent RPM dips coming back to idle)"
iacFastTemp = "Below this temperature, the idle output will be high (On). Above this temperature, it will turn off."
@ -2158,8 +2158,8 @@ menuDialog = main
iacStepHyster = "The minimum number of steps to move in any one go."
iacAlgorithm = "Selects method of idle control.\nNone = no idle control valve.\nOn/Off valve.\nPWM valve (2,3 wire).\nStepper Valve (4,6,8 wire)."
iacPWMdir = "Normal PWM valves increase RPM with higher duty. If RPM decreases with higher duty then select Reverse"
iacCLminDuty = "When using closed loop idle control, this is the minimum duty cycle that the PID loop will allow. Combined with the maximum value, this specifies the working range of your idle valve"
iacCLmaxDuty = "When using closed loop idle control, this is the maximum duty cycle that the PID loop will allow. Combined with the minimum value, this specifies the working range of your idle valve"
iacCLminValue = "When using closed loop idle control, this is the minimum duty cycle that the PID loop will allow. Combined with the maximum value, this specifies the working range of your idle valve"
iacCLmaxValue = "When using closed loop idle control, this is the maximum duty cycle that the PID loop will allow. Combined with the minimum value, this specifies the working range of your idle valve"
iacFastTemp = "Below this temperature, the idle output will be high (On). Above this temperature, it will turn off."
idleUpPolarity = "Normal polarity is a ground switch where an earthed signal activates the Idle Up. The internal pullup will be enabled with Normal polarity. \n Inverted may be used if a 5v signal is used to enable the Idle Up."
idleUpOutputEnabled = "Enable an output that is toggled by the idle up input pin. An example use is driving an AC fan relay."
@ -2788,8 +2788,8 @@ menuDialog = main
field = "P", idleKP, { iacAlgorithm == 3 || iacAlgorithm == 5 || iacAlgorithm == 6 || iacAlgorithm == 7 }
field = "I", idleKI, { iacAlgorithm == 3 || iacAlgorithm == 5 || iacAlgorithm == 6 || iacAlgorithm == 7 }
field = "D", idleKD, { iacAlgorithm == 3 || iacAlgorithm == 5 || iacAlgorithm == 6 || iacAlgorithm == 7 }
field = "Minimum valve duty", iacCLminDuty, { iacAlgorithm == 3 || iacAlgorithm == 6 }
field = "Maximum valve duty", iacCLmaxDuty, { iacAlgorithm == 3 || iacAlgorithm == 6 }
field = "Minimum valve value", iacCLminValue, { iacAlgorithm == 3 || iacAlgorithm == 5 || iacAlgorithm == 6 || iacAlgorithm == 7 }
field = "Maximum valve value", iacCLmaxValue, { iacAlgorithm == 3 || iacAlgorithm == 5 || iacAlgorithm == 6 || iacAlgorithm == 7 }
field = "Integral reset above TPS", iacTPSlimit, { iacAlgorithm == 6 || iacAlgorithm == 7 }
field = "Integral reset RPM Hysteresis", iacRPMlimitHysteresis, { iacAlgorithm == 6 || iacAlgorithm == 7 }
@ -5359,6 +5359,9 @@ cmdVSSratio6 = "E\x99\x06"
wmiLoadMax = { (wmiMode == 2) ? 100.0 : 255 }
;Select data resolution and scale based on algorithm used
idleRes = { (iacAlgorithm == 5 || iacAlgorithm == 7) ? 3.0 : 1.0 }
idleResMax = { (iacAlgorithm == 5 || iacAlgorithm == 7) ? (iacStepHome-3) : 100.0 }
vvtLoadRes = { (vvtLoadSource == 0) ? 2.000 : 0.500 }
fuelLoadRes = { ((algorithm == 0) || (algorithm == 2)) ? 2.000 : 0.500 }

View File

@ -852,8 +852,8 @@ struct config2 {
byte aeTaperMin;
byte aeTaperMax;
byte iacCLminDuty;
byte iacCLmaxDuty;
byte iacCLminValue;
byte iacCLmaxValue;
byte boostMinDuty;
int8_t baroMin; //Must be signed

View File

@ -105,7 +105,7 @@ void initialiseIdle(bool forcehoming)
#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.SetOutputLimits(percentage(configPage2.iacCLminValue, idle_pwm_max_count<<2), percentage(configPage2.iacCLmaxValue, idle_pwm_max_count<<2));
idlePID.SetTunings(configPage6.idleKP, configPage6.idleKI, configPage6.idleKD);
idlePID.SetMode(AUTOMATIC); //Turn PID on
idle_pid_target_value = 0;
@ -129,7 +129,7 @@ void initialiseIdle(bool forcehoming)
#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.SetOutputLimits(percentage(configPage2.iacCLminValue, idle_pwm_max_count<<2), percentage(configPage2.iacCLmaxValue, idle_pwm_max_count<<2));
idlePID.SetTunings(configPage6.idleKP, configPage6.idleKI, configPage6.idleKD);
idlePID.SetMode(AUTOMATIC); //Turn PID on
idle_pid_target_value = table2D_getValue(&iacCrankDutyTable, currentStatus.coolant + CALIBRATION_TEMPERATURE_OFFSET);
@ -205,7 +205,7 @@ void initialiseIdle(bool forcehoming)
}
idlePID.SetSampleTime(250); //4Hz means 250ms
idlePID.SetOutputLimits((configPage6.iacOLStepVal[9]*3)<<1, (configPage9.iacMaxSteps * 3)<<2); //Maximum number of steps; always less than home steps count.
idlePID.SetOutputLimits((configPage2.iacCLminValue * 3)<<2, (configPage2.iacCLmaxValue * 3)<<2); //Maximum number of steps; always less than home steps count.
idlePID.SetTunings(configPage6.idleKP, configPage6.idleKI, configPage6.idleKD);
idlePID.SetMode(AUTOMATIC); //Turn PID on
configPage6.iacPWMrun = false; // just in case. This needs to be false with stepper idle
@ -249,7 +249,7 @@ void initialiseIdle(bool forcehoming)
}
idlePID.SetSampleTime(250); //4Hz means 250ms
idlePID.SetOutputLimits((configPage6.iacOLStepVal[9]*3)<<1, (configPage9.iacMaxSteps * 3)<<2); //Maximum number of steps; always less than home steps count.
idlePID.SetOutputLimits((configPage2.iacCLminValue * 3)<<2, (configPage2.iacCLmaxValue * 3)<<2); //Maximum number of steps; always less than home steps count.
idlePID.SetTunings(configPage6.idleKP, configPage6.idleKI, configPage6.idleKD);
idlePID.SetMode(AUTOMATIC); //Turn PID on
configPage6.iacPWMrun = false; // just in case. This needs to be false with stepper idle