#4 progress
This commit is contained in:
parent
7020c532c7
commit
15b6993cb4
|
@ -385,7 +385,17 @@ void setMazdaMiata2003EngineConfiguration(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
|
||||||
|
|
||||||
setFsio(1, GPIOE_6, COMBINED_WARNING_LIGHT PASS_ENGINE_PARAMETER_SUFFIX);
|
setFsio(1, GPIOE_6, COMBINED_WARNING_LIGHT PASS_ENGINE_PARAMETER_SUFFIX);
|
||||||
|
|
||||||
|
// enable auto_idle
|
||||||
|
// enable verbose_idle
|
||||||
|
engineConfiguration->isVerboseIAC = false;
|
||||||
|
// set idle_p 0.01
|
||||||
|
// set idle_i 0
|
||||||
|
// set idle_d 0
|
||||||
|
// set debug_mode 3
|
||||||
|
// set idle_rpm 1700
|
||||||
|
|
||||||
|
//set idle_offset 30
|
||||||
|
engineConfiguration->idleRpmPid.offset = 30;
|
||||||
}
|
}
|
||||||
|
|
||||||
void setMazdaMiata2003EngineConfigurationNewBoard(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
|
void setMazdaMiata2003EngineConfigurationNewBoard(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
|
||||||
|
|
|
@ -50,6 +50,8 @@ static SimplePwm idleSolenoid;
|
||||||
|
|
||||||
static StepperMotor iacMotor;
|
static StepperMotor iacMotor;
|
||||||
|
|
||||||
|
static int adjustedTargetRpm;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* that's the position with CLT and IAT corrections
|
* that's the position with CLT and IAT corrections
|
||||||
*/
|
*/
|
||||||
|
@ -59,6 +61,17 @@ void idleDebug(const char *msg, percent_t value) {
|
||||||
scheduleMsg(logger, "idle debug: %s%f", msg, value);
|
scheduleMsg(logger, "idle debug: %s%f", msg, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void showPidSettings(const char*msg, pid_s *pid) {
|
||||||
|
scheduleMsg(logger, "%s o=%f P=%.5f I=%.5f D=%.5f dT=%d",
|
||||||
|
msg,
|
||||||
|
pid->offset,
|
||||||
|
pid->pFactor,
|
||||||
|
pid->iFactor,
|
||||||
|
pid->dFactor,
|
||||||
|
engineConfiguration->idleDT);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
static void showIdleInfo(void) {
|
static void showIdleInfo(void) {
|
||||||
const char * idleModeStr = getIdle_mode_e(engineConfiguration->idleMode);
|
const char * idleModeStr = getIdle_mode_e(engineConfiguration->idleMode);
|
||||||
scheduleMsg(logger, "idleMode=%s position=%f isStepper=%s", idleModeStr,
|
scheduleMsg(logger, "idleMode=%s position=%f isStepper=%s", idleModeStr,
|
||||||
|
@ -78,10 +91,7 @@ static void showIdleInfo(void) {
|
||||||
|
|
||||||
|
|
||||||
if (engineConfiguration->idleMode == IM_AUTO) {
|
if (engineConfiguration->idleMode == IM_AUTO) {
|
||||||
scheduleMsg(logger, "idle P=%f I=%f D=%f dT=%d", engineConfiguration->idleRpmPid.pFactor,
|
showPidSettings("idle", &engineConfiguration->idleRpmPid);
|
||||||
engineConfiguration->idleRpmPid.iFactor,
|
|
||||||
engineConfiguration->idleRpmPid.dFactor,
|
|
||||||
engineConfiguration->idleDT);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -160,9 +170,9 @@ percent_t getIdlePosition(void) {
|
||||||
|
|
||||||
static float autoIdle(float cltCorrection) {
|
static float autoIdle(float cltCorrection) {
|
||||||
|
|
||||||
int targetRpm = engineConfiguration->targetIdleRpm * cltCorrection;
|
adjustedTargetRpm = engineConfiguration->targetIdleRpm * cltCorrection;
|
||||||
|
|
||||||
percent_t newValue = idlePid.getValue(targetRpm, getRpmE(engine));
|
percent_t newValue = idlePid.getValue(adjustedTargetRpm, getRpmE(engine));
|
||||||
|
|
||||||
return newValue;
|
return newValue;
|
||||||
}
|
}
|
||||||
|
@ -225,8 +235,13 @@ static msg_t ivThread(int param) {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if (engineConfiguration->isVerboseIAC) {
|
if (engineConfiguration->isVerboseIAC && engineConfiguration->idleMode == IM_AUTO) {
|
||||||
scheduleMsg(logger, "rpm=%d position=%f", getRpmE(engine), iacPosition);
|
showPidSettings("idle", &engineConfiguration->idleRpmPid);
|
||||||
|
scheduleMsg(logger, "rpm=%d/%d position=%f iTerm=%.5f dTerm=%.5f",
|
||||||
|
getRpmE(engine),
|
||||||
|
adjustedTargetRpm,
|
||||||
|
iacPosition,
|
||||||
|
idlePid.iTerm, idlePid.dTerm);
|
||||||
}
|
}
|
||||||
|
|
||||||
actualIdlePosition = iacPosition;
|
actualIdlePosition = iacPosition;
|
||||||
|
@ -241,10 +256,16 @@ static msg_t ivThread(int param) {
|
||||||
void setTargetIdleRpm(int value) {
|
void setTargetIdleRpm(int value) {
|
||||||
engineConfiguration->targetIdleRpm = value;
|
engineConfiguration->targetIdleRpm = value;
|
||||||
scheduleMsg(logger, "target idle RPM %d", value);
|
scheduleMsg(logger, "target idle RPM %d", value);
|
||||||
|
showIdleInfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void apply(void) {
|
static void apply(void) {
|
||||||
// idleMath.updateFactors(engineConfiguration->idlePFactor, engineConfiguration->idleIFactor, engineConfiguration->idleDFactor, engineConfiguration->idleDT);
|
idlePid.updateFactors(engineConfiguration->idleRpmPid.pFactor, engineConfiguration->idleRpmPid.iFactor, engineConfiguration->idleRpmPid.dFactor);
|
||||||
|
}
|
||||||
|
|
||||||
|
void setIdleOffset(float value) {
|
||||||
|
engineConfiguration->idleRpmPid.offset = value;
|
||||||
|
showIdleInfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
void setIdlePFactor(float value) {
|
void setIdlePFactor(float value) {
|
||||||
|
|
|
@ -17,6 +17,7 @@ void startIdleThread(Logging*sharedLogger);
|
||||||
void setDefaultIdleParameters(void);
|
void setDefaultIdleParameters(void);
|
||||||
void startIdleBench(void);
|
void startIdleBench(void);
|
||||||
void setIdleDT(int value);
|
void setIdleDT(int value);
|
||||||
|
void setIdleOffset(float value);
|
||||||
void setIdlePFactor(float value);
|
void setIdlePFactor(float value);
|
||||||
void setIdleIFactor(float value);
|
void setIdleIFactor(float value);
|
||||||
void setIdleDFactor(float value);
|
void setIdleDFactor(float value);
|
||||||
|
|
|
@ -862,7 +862,7 @@ static void enableOrDisable(const char *param, bool isEnabled) {
|
||||||
boardConfiguration->enabledStep1Limiter = isEnabled;
|
boardConfiguration->enabledStep1Limiter = isEnabled;
|
||||||
#if EFI_PROD_CODE || defined(__DOXYGEN__)
|
#if EFI_PROD_CODE || defined(__DOXYGEN__)
|
||||||
} else if (strEqualCaseInsensitive(param, "auto_idle")) {
|
} else if (strEqualCaseInsensitive(param, "auto_idle")) {
|
||||||
setIdleMode(isEnabled ? IM_AUTO : IM_MANUAL);
|
setIdleMode(isEnabled ? IM_MANUAL : IM_AUTO);
|
||||||
#endif /* EFI_PROD_CODE */
|
#endif /* EFI_PROD_CODE */
|
||||||
} else if (strEqualCaseInsensitive(param, "serial")) {
|
} else if (strEqualCaseInsensitive(param, "serial")) {
|
||||||
boardConfiguration->useSerialPort = isEnabled;
|
boardConfiguration->useSerialPort = isEnabled;
|
||||||
|
@ -1109,6 +1109,7 @@ command_f_s commandsF[] = {{"mock_iat_voltage", setIatVoltage},
|
||||||
{"engine_decel_multiplier", setDecelMult},
|
{"engine_decel_multiplier", setDecelMult},
|
||||||
#if EFI_PROD_CODE || defined(__DOXYGEN__)
|
#if EFI_PROD_CODE || defined(__DOXYGEN__)
|
||||||
{"mock_vehicle_speed", setMockVehicleSpeed},
|
{"mock_vehicle_speed", setMockVehicleSpeed},
|
||||||
|
{"idle_offset", setIdleOffset},
|
||||||
{"idle_p", setIdlePFactor},
|
{"idle_p", setIdlePFactor},
|
||||||
{"idle_i", setIdleIFactor},
|
{"idle_i", setIdleIFactor},
|
||||||
{"idle_d", setIdleDFactor},
|
{"idle_d", setIdleDFactor},
|
||||||
|
|
|
@ -631,7 +631,7 @@ custom idle_mode_e 4 bits, U32, @OFFSET@, [0:0], "false", "true"
|
||||||
uint32_t engineChartSize;;"count", 1, 0, 0, 300, 0
|
uint32_t engineChartSize;;"count", 1, 0, 0, 300, 0
|
||||||
|
|
||||||
|
|
||||||
int targetIdleRpm;;"RPM", 1, 0, 0, 7000, 0
|
int targetIdleRpm;set idle_rpm X;"RPM", 1, 0, 0, 7000, 0
|
||||||
|
|
||||||
adc_channel_e acSwitchAdc;A/C button input handled as analog input
|
adc_channel_e acSwitchAdc;A/C button input handled as analog input
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue