Idle PID Coasting & Amplification Improvements (#589)
* PID Error Amplification Coef * Add settings: useIacTableForCoasting,pidExtraForLowRpm,iacCoasting * Modify interface for the new settings * Run gen_config.bat and generate configs * idlePositionSensitivityThreshold * Remove cltCorrection from autoIdle() & more verbose debug * Impl. idlePidRpmDeadZone and pidExtraForLowRpm; reset PID when deactivated * Impl. useIacTableForCoasting+iacCoasting and idlePidRpmUpperLimit
This commit is contained in:
parent
b55dda9658
commit
99ea4ee796
|
@ -1,4 +1,4 @@
|
|||
// this section was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Thu Mar 22 08:12:47 EDT 2018
|
||||
// this section was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Wed Mar 28 16:53:17 EEST 2018
|
||||
// begin
|
||||
#ifndef ENGINE_CONFIGURATION_GENERATED_H_
|
||||
#define ENGINE_CONFIGURATION_GENERATED_H_
|
||||
|
@ -648,7 +648,7 @@ typedef struct {
|
|||
bool coastingFuelCutEnabled : 1;
|
||||
/**
|
||||
offset 376 bit 22 */
|
||||
bool unused_board_984_22 : 1;
|
||||
bool useIacTableForCoasting : 1;
|
||||
/**
|
||||
offset 376 bit 23 */
|
||||
bool unused_board_984_23 : 1;
|
||||
|
@ -2117,9 +2117,28 @@ typedef struct {
|
|||
*/
|
||||
int16_t coastingFuelCutClt;
|
||||
/**
|
||||
* Increases PID reaction for RPM<target by adding extra percent to PID-error
|
||||
* offset 3384
|
||||
*/
|
||||
int unusedEnd[774];
|
||||
int16_t pidExtraForLowRpm;
|
||||
/**
|
||||
* offset 3386
|
||||
*/
|
||||
int16_t unusedInt16;
|
||||
/**
|
||||
* CLT-based idle position for coasting (used in Auto-PID Idle mode)
|
||||
* offset 3388
|
||||
*/
|
||||
float iacCoastingBins[CLT_CURVE_SIZE];
|
||||
/**
|
||||
* CLT-based idle position for coasting (used in Auto-PID Idle mode)
|
||||
* offset 3452
|
||||
*/
|
||||
float iacCoasting[CLT_CURVE_SIZE];
|
||||
/**
|
||||
* offset 3516
|
||||
*/
|
||||
int unusedEnd[741];
|
||||
/** total size 6480*/
|
||||
} engine_configuration_s;
|
||||
|
||||
|
@ -2203,12 +2222,12 @@ typedef struct {
|
|||
*/
|
||||
float crankingCycleBins[CRANKING_CURVE_SIZE];
|
||||
/**
|
||||
* CLT-based idle position multiplier for simple manual idle controller, or target RPM multiplier for PID-based idle
|
||||
* CLT-based idle position multiplier for simple manual idle controller
|
||||
* offset 10656
|
||||
*/
|
||||
float cltIdleCorrBins[CLT_CURVE_SIZE];
|
||||
/**
|
||||
* CLT-based idle position multiplier for simple manual idle controller, or target RPM multiplier for PID-based idle
|
||||
* CLT-based idle position multiplier for simple manual idle controller
|
||||
* offset 10720
|
||||
*/
|
||||
float cltIdleCorr[CLT_CURVE_SIZE];
|
||||
|
@ -2365,4 +2384,4 @@ typedef struct {
|
|||
|
||||
#endif
|
||||
// end
|
||||
// this section was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Thu Mar 22 08:12:47 EDT 2018
|
||||
// this section was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Wed Mar 28 16:53:17 EEST 2018
|
||||
|
|
|
@ -588,8 +588,8 @@
|
|||
#define isFasterEngineSpinUpEnabled_offset_hex 3d8
|
||||
#define coastingFuelCutEnabled_offset 984
|
||||
#define coastingFuelCutEnabled_offset_hex 3d8
|
||||
#define unused_board_984_22_offset 984
|
||||
#define unused_board_984_22_offset_hex 3d8
|
||||
#define useIacTableForCoasting_offset 984
|
||||
#define useIacTableForCoasting_offset_hex 3d8
|
||||
#define unused_board_984_23_offset 984
|
||||
#define unused_board_984_23_offset_hex 3d8
|
||||
#define unused_board_984_24_offset 984
|
||||
|
@ -1560,8 +1560,16 @@
|
|||
#define coastingFuelCutTps_offset_hex d34
|
||||
#define coastingFuelCutClt_offset 3382
|
||||
#define coastingFuelCutClt_offset_hex d36
|
||||
#define unusedEnd_offset 3384
|
||||
#define unusedEnd_offset_hex d38
|
||||
#define pidExtraForLowRpm_offset 3384
|
||||
#define pidExtraForLowRpm_offset_hex d38
|
||||
#define unusedInt16_offset 3386
|
||||
#define unusedInt16_offset_hex d3a
|
||||
#define iacCoastingBins_offset 3388
|
||||
#define iacCoastingBins_offset_hex d3c
|
||||
#define iacCoasting_offset 3452
|
||||
#define iacCoasting_offset_hex d7c
|
||||
#define unusedEnd_offset 3516
|
||||
#define unusedEnd_offset_hex dbc
|
||||
#define cltCrankingCorrBins_offset 6480
|
||||
#define cltCrankingCorrBins_offset_hex 1950
|
||||
#define cltCrankingCorr_offset 6512
|
||||
|
|
|
@ -44,6 +44,8 @@ EXTERN_ENGINE
|
|||
;
|
||||
|
||||
static bool shouldResetPid = false;
|
||||
// we might reset PID state when the state is changed, but only if needed (See autoIdle())
|
||||
static bool mightResetPid = false;
|
||||
|
||||
#if EFI_IDLE_INCREMENTAL_PID_CIC || defined(__DOXYGEN__)
|
||||
// Use new PID with CIC integrator
|
||||
|
@ -68,6 +70,10 @@ static percent_t currentIdlePosition = -100.0f;
|
|||
* the same as currentIdlePosition, but without adjustments (iacByTpsTaper, afterCrankingIACtaperDuration)
|
||||
*/
|
||||
static percent_t baseIdlePosition = currentIdlePosition;
|
||||
/**
|
||||
* When the IAC position value change is insignificant (lower than this threshold), leave the poor valve alone
|
||||
*/
|
||||
static percent_t idlePositionSensitivityThreshold = 1.0f;
|
||||
|
||||
void idleDebug(const char *msg, percent_t value) {
|
||||
scheduleMsg(logger, "idle debug: %s%.2f", msg, value);
|
||||
|
@ -163,9 +169,16 @@ percent_t getIdlePosition(void) {
|
|||
return currentIdlePosition;
|
||||
}
|
||||
|
||||
static float autoIdle(float cltCorrection) {
|
||||
static float autoIdle() {
|
||||
percent_t tpsPos = getTPS(PASS_ENGINE_PARAMETER_SIGNATURE);
|
||||
if (tpsPos > boardConfiguration->idlePidDeactivationTpsThreshold) {
|
||||
// Don't store old I and D terms if PID doesn't work anymore.
|
||||
// Otherwise they will affect the idle position much later, when the throttle is closed.
|
||||
if (mightResetPid) {
|
||||
mightResetPid = false;
|
||||
shouldResetPid = true;
|
||||
}
|
||||
|
||||
// just leave IAC position as is (but don't return currentIdlePosition - it may already contain additionalAir)
|
||||
return baseIdlePosition;
|
||||
}
|
||||
|
@ -180,7 +193,23 @@ static float autoIdle(float cltCorrection) {
|
|||
targetRpm = interpolate2d("cltRpm", clt, CONFIG(cltIdleRpmBins), CONFIG(cltIdleRpm), CLT_CURVE_SIZE);
|
||||
}
|
||||
|
||||
percent_t newValue = idlePid.getValue(targetRpm, getRpmE(engine), engineConfiguration->idleRpmPid.period);
|
||||
// check if within the dead zone
|
||||
int rpm = getRpmE(engine);
|
||||
if (absI(rpm - targetRpm) <= CONFIG(idlePidRpmDeadZone))
|
||||
return baseIdlePosition;
|
||||
|
||||
// When rpm < targetRpm, there's a risk of dropping RPM too low - and the engine dies out.
|
||||
// So PID reaction should be increased by adding extra percent to PID-error:
|
||||
percent_t errorAmpCoef = 1.0f;
|
||||
if (rpm < targetRpm)
|
||||
errorAmpCoef += (float)CONFIG(pidExtraForLowRpm) / PERCENT_MULT;
|
||||
// If errorAmpCoef > 1.0, then PID thinks that RPM is lower than it is, and controls IAC more aggressively
|
||||
idlePid.setErrorAmplification(errorAmpCoef);
|
||||
|
||||
percent_t newValue = idlePid.getValue(targetRpm, rpm, engineConfiguration->idleRpmPid.period);
|
||||
|
||||
// the state of PID has been changed, so we might reset it now, but only when needed (see idlePidDeactivationTpsThreshold)
|
||||
mightResetPid = true;
|
||||
|
||||
#if EFI_IDLE_INCREMENTAL_PID_CIC || defined(__DOXYGEN__)
|
||||
// Treat the 'newValue' as if it contains not an actual IAC position, but an incremental delta.
|
||||
|
@ -192,6 +221,22 @@ static float autoIdle(float cltCorrection) {
|
|||
newValue = minF(newValue, CONFIG(idleRpmPid.maxValue));
|
||||
#endif /* EFI_IDLE_INCREMENTAL_PID_CIC */
|
||||
|
||||
// Interpolate to the manual position when RPM is close to the upper RPM limit (if idlePidRpmUpperLimit is set).
|
||||
// If RPM increases and the throttle is closed, then we're in coasting mode, and we should smoothly disable auto-pid.
|
||||
// If we just leave IAC at baseIdlePosition (as in case of TPS deactivation threshold), RPM would get stuck.
|
||||
// That's why there's 'useIacTableForCoasting' setting which involves a separate IAC position table for coasting (iacCoasting).
|
||||
// Currently it's user-defined. But eventually we'll use a real calculated and stored IAC position instead.
|
||||
int idlePidLowerRpm = targetRpm + CONFIG(idlePidRpmDeadZone);
|
||||
if (CONFIG(idlePidRpmUpperLimit) > 0) {
|
||||
if (boardConfiguration->useIacTableForCoasting) {
|
||||
percent_t iacPosForCoasting = interpolate2d("iacCoasting", clt, CONFIG(iacCoastingBins), CONFIG(iacCoasting), CLT_CURVE_SIZE);
|
||||
newValue = interpolateClamped(idlePidLowerRpm, newValue, idlePidLowerRpm + CONFIG(idlePidRpmUpperLimit), iacPosForCoasting, rpm);
|
||||
} else {
|
||||
// Well, just leave it as is, without PID regulation...
|
||||
newValue = baseIdlePosition;
|
||||
}
|
||||
}
|
||||
|
||||
return newValue;
|
||||
}
|
||||
|
||||
|
@ -233,6 +278,7 @@ static msg_t ivThread(int param) {
|
|||
|
||||
float clt = engine->sensors.clt;
|
||||
bool isRunning = engine->rpmCalculator.isRunning(PASS_ENGINE_PARAMETER_SIGNATURE);
|
||||
// cltCorrection is used only for cranking or running in manual mode
|
||||
float cltCorrection;
|
||||
if (cisnan(clt))
|
||||
cltCorrection = 1.0f;
|
||||
|
@ -259,7 +305,7 @@ static msg_t ivThread(int param) {
|
|||
// let's re-apply CLT correction
|
||||
iacPosition = manualIdleController(cltCorrection);
|
||||
} else {
|
||||
iacPosition = autoIdle(cltCorrection);
|
||||
iacPosition = autoIdle();
|
||||
}
|
||||
|
||||
// store 'base' iacPosition without adjustments
|
||||
|
@ -276,7 +322,8 @@ static msg_t ivThread(int param) {
|
|||
engine->rpmCalculator.getRevolutionCounterSinceStart());
|
||||
}
|
||||
|
||||
if (absF(iacPosition - currentIdlePosition) < 1) {
|
||||
// The threshold is dependent on IAC type (see initIdleHardware())
|
||||
if (absF(iacPosition - currentIdlePosition) < idlePositionSensitivityThreshold) {
|
||||
continue; // value is pretty close, let's leave the poor valve alone
|
||||
}
|
||||
|
||||
|
@ -287,6 +334,7 @@ static msg_t ivThread(int param) {
|
|||
idlePid.postState(&tsOutputChannels, 1000000);
|
||||
} else {
|
||||
tsOutputChannels.debugFloatField1 = iacPosition;
|
||||
tsOutputChannels.debugIntField1 = iacMotor.getTargetPosition();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -379,6 +427,8 @@ static void initIdleHardware() {
|
|||
iacMotor.initialize(boardConfiguration->idle.stepperStepPin, boardConfiguration->idle.stepperDirectionPin,
|
||||
engineConfiguration->stepperDirectionPinMode, engineConfiguration->idleStepperReactionTime,
|
||||
engineConfiguration->idleStepperTotalSteps, engineConfiguration->stepperEnablePin, logger);
|
||||
// This greatly improves PID accuracy for steppers with a small number of steps
|
||||
idlePositionSensitivityThreshold = 1.0f / engineConfiguration->idleStepperTotalSteps;
|
||||
} else {
|
||||
/**
|
||||
* Start PWM for idleValvePin
|
||||
|
@ -386,6 +436,7 @@ static void initIdleHardware() {
|
|||
startSimplePwmExt(&idleSolenoid, "Idle Valve", boardConfiguration->idle.solenoidPin, &enginePins.idleSolenoidPin,
|
||||
boardConfiguration->idle.solenoidFrequency, boardConfiguration->manIdlePosition / 100,
|
||||
applyIdleSolenoidPinState);
|
||||
idlePositionSensitivityThreshold = 1.0f;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -39,7 +39,7 @@ float Pid::getValue(float target, float input) {
|
|||
}
|
||||
|
||||
float Pid::getRawValue(float target, float input, float dTime) {
|
||||
float error = target - input;
|
||||
float error = (target - input) * errorAmplificationCoef;
|
||||
prevTarget = target;
|
||||
prevInput = input;
|
||||
|
||||
|
@ -74,6 +74,7 @@ void Pid::updateFactors(float pFactor, float iFactor, float dFactor) {
|
|||
void Pid::reset(void) {
|
||||
dTerm = iTerm = 0;
|
||||
prevResult = prevInput = prevTarget = prevError = 0;
|
||||
errorAmplificationCoef = 1.0f;
|
||||
resetCounter++;
|
||||
}
|
||||
|
||||
|
@ -101,6 +102,10 @@ float Pid::getOffset(void) {
|
|||
return pid->offset;
|
||||
}
|
||||
|
||||
void Pid::setErrorAmplification(float coef) {
|
||||
errorAmplificationCoef = coef;
|
||||
}
|
||||
|
||||
#if EFI_PROD_CODE || EFI_SIMULATOR
|
||||
void Pid::postState(TunerStudioOutputChannels *tsOutputChannels) {
|
||||
postState(tsOutputChannels, 1);
|
||||
|
|
|
@ -41,6 +41,7 @@ public:
|
|||
float getOffset(void);
|
||||
float getIntegration(void);
|
||||
float getPrevError(void);
|
||||
void setErrorAmplification(float coef);
|
||||
#if EFI_PROD_CODE || EFI_SIMULATOR
|
||||
void postState(TunerStudioOutputChannels *tsOutputChannels);
|
||||
void postState(TunerStudioOutputChannels *tsOutputChannels, int pMult);
|
||||
|
@ -60,6 +61,7 @@ private:
|
|||
float prevTarget;
|
||||
float prevInput;
|
||||
float prevResult;
|
||||
float errorAmplificationCoef;
|
||||
|
||||
private:
|
||||
virtual void updateITerm(float value);
|
||||
|
|
|
@ -550,7 +550,7 @@ bit is_enabled_spi_2
|
|||
bit stepperForceParkingEveryRestart
|
||||
bit isFasterEngineSpinUpEnabled
|
||||
bit coastingFuelCutEnabled
|
||||
bit unused_board_984_22
|
||||
bit useIacTableForCoasting
|
||||
bit unused_board_984_23
|
||||
bit unused_board_984_24
|
||||
bit unused_board_984_25
|
||||
|
@ -903,7 +903,13 @@ float[CRANKING_ADVANCE_CURVE_SIZE] crankingAdvance ;Optional timing advance t
|
|||
int16_t coastingFuelCutTps;percent between 0 and 100;"%", 1, 0, 0, 100, 0
|
||||
int16_t coastingFuelCutClt;Fuel cutoff is deactivated if CLT<threshold;"C", 1, 0, -100, 100, 0
|
||||
|
||||
int[774] unusedEnd;
|
||||
int16_t pidExtraForLowRpm;+Increases PID reaction for RPM<target by adding extra percent to PID-error;"%", 1, 0, 0, 100, 0
|
||||
int16_t unusedInt16;
|
||||
|
||||
float[CLT_CURVE_SIZE] iacCoastingBins;CLT-based idle position for coasting (used in Auto-PID Idle mode);"C", 1, 0, -100.0, 250.0, 2
|
||||
float[CLT_CURVE_SIZE] iacCoasting; CLT-based idle position for coasting (used in Auto-PID Idle mode);"%", 1, 0, 0.0, 100.0, 2
|
||||
|
||||
int[741] unusedEnd;
|
||||
|
||||
|
||||
end_struct
|
||||
|
@ -934,8 +940,8 @@ float[IAT_CURVE_SIZE] iatFuelCorr;;"%", 1, 0, 0.0, 500.0, 2
|
|||
float[CRANKING_CURVE_SIZE] crankingCycleCoef;;"%", 1, 0, 0.0, 500.0, 2
|
||||
float[CRANKING_CURVE_SIZE] crankingCycleBins;;"counter", 1, 0, -80.0, 170.0, 2
|
||||
|
||||
float[CLT_CURVE_SIZE] cltIdleCorrBins;CLT-based idle position multiplier for simple manual idle controller, or target RPM multiplier for PID-based idle;"C", 1, 0, -100.0, 250.0, 2
|
||||
float[CLT_CURVE_SIZE] cltIdleCorr; CLT-based idle position multiplier for simple manual idle controller, or target RPM multiplier for PID-based idle;"%", 1, 0, 0.0, 1000.0, 2
|
||||
float[CLT_CURVE_SIZE] cltIdleCorrBins;CLT-based idle position multiplier for simple manual idle controller;"C", 1, 0, -100.0, 250.0, 2
|
||||
float[CLT_CURVE_SIZE] cltIdleCorr; CLT-based idle position multiplier for simple manual idle controller;"%", 1, 0, 0.0, 1000.0, 2
|
||||
|
||||
float[MAF_DECODING_COUNT] mafDecoding;kg/hour value.\nBy the way 2.081989116 kg/h = 1 ft³/m;"kg/hour", 1, 0, -500.0, 4000.0, 2
|
||||
float[MAF_DECODING_COUNT] mafDecodingBins;; "V", 1, 0, -5.0, 150.0, 2
|
||||
|
|
|
@ -63,7 +63,7 @@ enable2ndByteCanID = false
|
|||
|
||||
; see PAGE_0_SIZE in C source code
|
||||
; CONFIG_DEFINITION_START
|
||||
; this section was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Sun Mar 25 09:12:10 EDT 2018
|
||||
; this section was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Wed Mar 28 16:53:17 EEST 2018
|
||||
|
||||
pageSize = 20000
|
||||
page = 1
|
||||
|
@ -312,7 +312,7 @@ page = 1
|
|||
stepperForceParkingEveryRestart= bits, U32, 984, [19:19], "false", "true"
|
||||
isFasterEngineSpinUpEnabled= bits, U32, 984, [20:20], "false", "true"
|
||||
coastingFuelCutEnabled = bits, U32, 984, [21:21], "false", "true"
|
||||
unused_board_984_22 = bits, U32, 984, [22:22], "false", "true"
|
||||
useIacTableForCoasting = bits, U32, 984, [22:22], "false", "true"
|
||||
unused_board_984_23 = bits, U32, 984, [23:23], "false", "true"
|
||||
unused_board_984_24 = bits, U32, 984, [24:24], "false", "true"
|
||||
unused_board_984_25 = bits, U32, 984, [25:25], "false", "true"
|
||||
|
@ -783,7 +783,11 @@ page = 1
|
|||
coastingFuelCutRpmLow = scalar, S16, 3378, "rpm", 1, 0, 0, 5000, 0
|
||||
coastingFuelCutTps = scalar, S16, 3380, "%", 1, 0, 0, 100, 0
|
||||
coastingFuelCutClt = scalar, S16, 3382, "C", 1, 0, -100, 100, 0
|
||||
;no TS info - skipping unusedEnd offset 3384
|
||||
pidExtraForLowRpm = scalar, S16, 3384, "%", 1, 0, 0, 100, 0
|
||||
;no TS info - skipping unusedInt16 offset 3386
|
||||
iacCoastingBins = array, F32, 3388, [16], "C", 1, 0, -100.0, 250.0, 2
|
||||
iacCoasting = array, F32, 3452, [16], "%", 1, 0, 0.0, 100.0, 2
|
||||
;no TS info - skipping unusedEnd offset 3516
|
||||
cltCrankingCorrBins = array, F32, 6480, [8], "C", 1, 0, -100.0, 250.0, 2
|
||||
cltCrankingCorr = array, F32, 6512, [8], "%", 1, 0, 0.0, 500.0, 2
|
||||
idleAdvanceBins = array, F32, 6544, [8], "RPM", 1, 0, 0.0, 18000, 2
|
||||
|
@ -897,6 +901,7 @@ page = 1
|
|||
slowAdcAlpha = "ExpAverage alpha coefficient"
|
||||
dizzySparkOutputPin = "This implementation makes a pulse every time one of the coils is charged, using coil dwell for pulse width. See also tachOutputPin"
|
||||
crankingIACposition = "IAC position during cranking"
|
||||
pidExtraForLowRpm = "Increases PID reaction for RPM<target by adding extra percent to PID-error"
|
||||
|
||||
|
||||
; CONFIG_DEFINITION_END
|
||||
|
@ -1264,6 +1269,14 @@ fileVersion = { 20171101 }
|
|||
yBins = cltIdleCorr
|
||||
gauge = CLTGauge
|
||||
|
||||
curve = iacCoastingCurve, "Coasting IAC Position for Auto-Idle"
|
||||
columnLabel = "Coolant", "Multiplier"
|
||||
xAxis = -40, 120, 10
|
||||
yAxis = 0, 100, 10
|
||||
xBins = iacCoastingBins, coolant
|
||||
yBins = iacCoasting
|
||||
gauge = idleAirValvePositionGauge
|
||||
|
||||
curve = cltCrankingCurve, "Cranking IAC multiplier"
|
||||
columnLabel = "Coolant", "Multiplier"
|
||||
xAxis = -40, 120, 10
|
||||
|
@ -1799,6 +1812,7 @@ menuDialog = main
|
|||
subMenu = idleAdvanceCurve, "Idle Ignition Advance", 0, {useSeparateAdvanceForIdle == 1}
|
||||
subMenu = std_separator
|
||||
subMenu = cltIdleCurve, "Warmup Idle multiplier"
|
||||
subMenu = iacCoastingCurve, "Coasting IAC Position for Auto-Idle", 0, {useIacTableForCoasting == 1}
|
||||
|
||||
menu = "&Tuning"
|
||||
subMenu = AccelEnrich, "Accel/Decel Enrichment/Enleanment"
|
||||
|
@ -2411,8 +2425,9 @@ cmd_stop_engine = "w\x00\x99\x00\x00"
|
|||
field = "Min", idleRpmPid_minValue
|
||||
field = "Max", idleRpmPid_maxValue
|
||||
field = "period", idleRpmPid_period
|
||||
field = "RPM dead zone to deactivate IAC pid", idlePidRpmDeadZone, { idleMode == 0}
|
||||
field = "RPM upper limit to deactivate IAC pid",idlePidRpmUpperLimit, { idleMode == 0}
|
||||
field = "RPM dead zone to deactivate IAC pid", idlePidRpmDeadZone
|
||||
field = "RPM upper limit to deactivate IAC pid",idlePidRpmUpperLimit
|
||||
field = "PID Extra for low RPM", pidExtraForLowRpm
|
||||
|
||||
|
||||
dialog = idleSettings, "", yAxis
|
||||
|
@ -2420,6 +2435,7 @@ cmd_stop_engine = "w\x00\x99\x00\x00"
|
|||
field = "Idle IAC control mode", idleMode
|
||||
field = "Use separate Ignition Table for idle", useSeparateAdvanceForIdle
|
||||
field = "Use separate VE Table for idle", useSeparateVeForIdle
|
||||
field = "Use separate IAC Table For Coasting", useIacTableForCoasting, {idleMode == 0}
|
||||
field = "TPS deactivation threshold", idlePidDeactivationTpsThreshold
|
||||
panel = idlePidSettings, { idleMode == 0}
|
||||
field = "Extra IAC if Throttle Pressed", iacByTpsTaper;
|
||||
|
|
|
@ -431,6 +431,14 @@ fileVersion = { 20171101 }
|
|||
yBins = cltIdleCorr
|
||||
gauge = CLTGauge
|
||||
|
||||
curve = iacCoastingCurve, "Coasting IAC Position for Auto-Idle"
|
||||
columnLabel = "Coolant", "Multiplier"
|
||||
xAxis = -40, 120, 10
|
||||
yAxis = 0, 100, 10
|
||||
xBins = iacCoastingBins, coolant
|
||||
yBins = iacCoasting
|
||||
gauge = idleAirValvePositionGauge
|
||||
|
||||
curve = cltCrankingCurve, "Cranking IAC multiplier"
|
||||
columnLabel = "Coolant", "Multiplier"
|
||||
xAxis = -40, 120, 10
|
||||
|
@ -966,6 +974,7 @@ menuDialog = main
|
|||
subMenu = idleAdvanceCurve, "Idle Ignition Advance", 0, {useSeparateAdvanceForIdle == 1}
|
||||
subMenu = std_separator
|
||||
subMenu = cltIdleCurve, "Warmup Idle multiplier"
|
||||
subMenu = iacCoastingCurve, "Coasting IAC Position for Auto-Idle", 0, {useIacTableForCoasting == 1}
|
||||
|
||||
menu = "&Tuning"
|
||||
subMenu = AccelEnrich, "Accel/Decel Enrichment/Enleanment"
|
||||
|
@ -1578,8 +1587,9 @@ cmd_stop_engine = "w\x00\x99\x00\x00"
|
|||
field = "Min", idleRpmPid_minValue
|
||||
field = "Max", idleRpmPid_maxValue
|
||||
field = "period", idleRpmPid_period
|
||||
field = "RPM dead zone to deactivate IAC pid", idlePidRpmDeadZone, { idleMode == 0}
|
||||
field = "RPM upper limit to deactivate IAC pid",idlePidRpmUpperLimit, { idleMode == 0}
|
||||
field = "RPM dead zone to deactivate IAC pid", idlePidRpmDeadZone
|
||||
field = "RPM upper limit to deactivate IAC pid",idlePidRpmUpperLimit
|
||||
field = "PID Extra for low RPM", pidExtraForLowRpm
|
||||
|
||||
|
||||
dialog = idleSettings, "", yAxis
|
||||
|
@ -1587,6 +1597,7 @@ cmd_stop_engine = "w\x00\x99\x00\x00"
|
|||
field = "Idle IAC control mode", idleMode
|
||||
field = "Use separate Ignition Table for idle", useSeparateAdvanceForIdle
|
||||
field = "Use separate VE Table for idle", useSeparateVeForIdle
|
||||
field = "Use separate IAC Table For Coasting", useIacTableForCoasting, {idleMode == 0}
|
||||
field = "TPS deactivation threshold", idlePidDeactivationTpsThreshold
|
||||
panel = idlePidSettings, { idleMode == 0}
|
||||
field = "Extra IAC if Throttle Pressed", iacByTpsTaper;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package com.rusefi.config;
|
||||
|
||||
// this file was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Thu Mar 22 08:12:47 EDT 2018
|
||||
// this file was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Wed Mar 28 16:53:17 EEST 2018
|
||||
public class Fields {
|
||||
public static final int LE_COMMAND_LENGTH = 200;
|
||||
public static final int BLOCKING_FACTOR = 400;
|
||||
|
@ -404,7 +404,7 @@ public class Fields {
|
|||
public static final int stepperForceParkingEveryRestart_offset = 984;
|
||||
public static final int isFasterEngineSpinUpEnabled_offset = 984;
|
||||
public static final int coastingFuelCutEnabled_offset = 984;
|
||||
public static final int unused_board_984_22_offset = 984;
|
||||
public static final int useIacTableForCoasting_offset = 984;
|
||||
public static final int unused_board_984_23_offset = 984;
|
||||
public static final int unused_board_984_24_offset = 984;
|
||||
public static final int unused_board_984_25_offset = 984;
|
||||
|
@ -1032,7 +1032,11 @@ public class Fields {
|
|||
public static final int coastingFuelCutRpmLow_offset = 3378;
|
||||
public static final int coastingFuelCutTps_offset = 3380;
|
||||
public static final int coastingFuelCutClt_offset = 3382;
|
||||
public static final int unusedEnd_offset = 3384;
|
||||
public static final int pidExtraForLowRpm_offset = 3384;
|
||||
public static final int unusedInt16_offset = 3386;
|
||||
public static final int iacCoastingBins_offset = 3388;
|
||||
public static final int iacCoasting_offset = 3452;
|
||||
public static final int unusedEnd_offset = 3516;
|
||||
public static final int cltCrankingCorrBins_offset = 6480;
|
||||
public static final int cltCrankingCorrBins_offset_hex = 1950;
|
||||
public static final int cltCrankingCorr_offset = 6512;
|
||||
|
@ -1412,7 +1416,7 @@ public class Fields {
|
|||
public static final Field STEPPERFORCEPARKINGEVERYRESTART = Field.create("STEPPERFORCEPARKINGEVERYRESTART", 984, FieldType.BIT, 19);
|
||||
public static final Field ISFASTERENGINESPINUPENABLED = Field.create("ISFASTERENGINESPINUPENABLED", 984, FieldType.BIT, 20);
|
||||
public static final Field COASTINGFUELCUTENABLED = Field.create("COASTINGFUELCUTENABLED", 984, FieldType.BIT, 21);
|
||||
public static final Field UNUSED_BOARD_984_22 = Field.create("UNUSED_BOARD_984_22", 984, FieldType.BIT, 22);
|
||||
public static final Field USEIACTABLEFORCOASTING = Field.create("USEIACTABLEFORCOASTING", 984, FieldType.BIT, 22);
|
||||
public static final Field UNUSED_BOARD_984_23 = Field.create("UNUSED_BOARD_984_23", 984, FieldType.BIT, 23);
|
||||
public static final Field UNUSED_BOARD_984_24 = Field.create("UNUSED_BOARD_984_24", 984, FieldType.BIT, 24);
|
||||
public static final Field UNUSED_BOARD_984_25 = Field.create("UNUSED_BOARD_984_25", 984, FieldType.BIT, 25);
|
||||
|
@ -1860,6 +1864,8 @@ public class Fields {
|
|||
public static final Field COASTINGFUELCUTRPMLOW = Field.create("COASTINGFUELCUTRPMLOW", 3378, FieldType.INT);
|
||||
public static final Field COASTINGFUELCUTTPS = Field.create("COASTINGFUELCUTTPS", 3380, FieldType.INT);
|
||||
public static final Field COASTINGFUELCUTCLT = Field.create("COASTINGFUELCUTCLT", 3382, FieldType.INT);
|
||||
public static final Field PIDEXTRAFORLOWRPM = Field.create("PIDEXTRAFORLOWRPM", 3384, FieldType.INT);
|
||||
public static final Field UNUSEDINT16 = Field.create("UNUSEDINT16", 3386, FieldType.INT);
|
||||
public static final Field FSIOFORMULAS1 = Field.create("FSIOFORMULAS1", 6672, FieldType.INT);
|
||||
public static final Field FSIOFORMULAS2 = Field.create("FSIOFORMULAS2", 6872, FieldType.INT);
|
||||
public static final Field FSIOFORMULAS3 = Field.create("FSIOFORMULAS3", 7072, FieldType.INT);
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<roms>
|
||||
|
||||
<!-- Generated by ConfigDefinition utility on Thu Feb 01 08:34:22 EET 2018 -->
|
||||
<!-- Generated by ConfigDefinition utility on Wed Mar 28 16:53:21 EEST 2018 -->
|
||||
|
||||
<rom>
|
||||
<romid>
|
||||
|
|
Loading…
Reference in New Issue