This commit is contained in:
rusefi 2017-05-22 23:25:34 -04:00
parent a1dcc5292b
commit f45e5757b4
5 changed files with 44 additions and 11 deletions

View File

@ -385,7 +385,17 @@ void setMazdaMiata2003EngineConfiguration(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
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) {

View File

@ -50,6 +50,8 @@ static SimplePwm idleSolenoid;
static StepperMotor iacMotor;
static int adjustedTargetRpm;
/**
* 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);
}
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) {
const char * idleModeStr = getIdle_mode_e(engineConfiguration->idleMode);
scheduleMsg(logger, "idleMode=%s position=%f isStepper=%s", idleModeStr,
@ -78,10 +91,7 @@ static void showIdleInfo(void) {
if (engineConfiguration->idleMode == IM_AUTO) {
scheduleMsg(logger, "idle P=%f I=%f D=%f dT=%d", engineConfiguration->idleRpmPid.pFactor,
engineConfiguration->idleRpmPid.iFactor,
engineConfiguration->idleRpmPid.dFactor,
engineConfiguration->idleDT);
showPidSettings("idle", &engineConfiguration->idleRpmPid);
}
}
@ -160,9 +170,9 @@ percent_t getIdlePosition(void) {
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;
}
@ -225,8 +235,13 @@ static msg_t ivThread(int param) {
#endif
}
if (engineConfiguration->isVerboseIAC) {
scheduleMsg(logger, "rpm=%d position=%f", getRpmE(engine), iacPosition);
if (engineConfiguration->isVerboseIAC && engineConfiguration->idleMode == IM_AUTO) {
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;
@ -241,10 +256,16 @@ static msg_t ivThread(int param) {
void setTargetIdleRpm(int value) {
engineConfiguration->targetIdleRpm = value;
scheduleMsg(logger, "target idle RPM %d", value);
showIdleInfo();
}
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) {

View File

@ -17,6 +17,7 @@ void startIdleThread(Logging*sharedLogger);
void setDefaultIdleParameters(void);
void startIdleBench(void);
void setIdleDT(int value);
void setIdleOffset(float value);
void setIdlePFactor(float value);
void setIdleIFactor(float value);
void setIdleDFactor(float value);

View File

@ -862,7 +862,7 @@ static void enableOrDisable(const char *param, bool isEnabled) {
boardConfiguration->enabledStep1Limiter = isEnabled;
#if EFI_PROD_CODE || defined(__DOXYGEN__)
} else if (strEqualCaseInsensitive(param, "auto_idle")) {
setIdleMode(isEnabled ? IM_AUTO : IM_MANUAL);
setIdleMode(isEnabled ? IM_MANUAL : IM_AUTO);
#endif /* EFI_PROD_CODE */
} else if (strEqualCaseInsensitive(param, "serial")) {
boardConfiguration->useSerialPort = isEnabled;
@ -1109,6 +1109,7 @@ command_f_s commandsF[] = {{"mock_iat_voltage", setIatVoltage},
{"engine_decel_multiplier", setDecelMult},
#if EFI_PROD_CODE || defined(__DOXYGEN__)
{"mock_vehicle_speed", setMockVehicleSpeed},
{"idle_offset", setIdleOffset},
{"idle_p", setIdlePFactor},
{"idle_i", setIdleIFactor},
{"idle_d", setIdleDFactor},

View File

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