mirror of https://github.com/rusefi/rusefi.git
ETB overheats due to constant isTpsError true/false/true/false jitter: this seems obvious enough to disable ETB at least on non running engine #4832
This commit is contained in:
parent
4a35b55634
commit
1e7baa1089
|
@ -160,9 +160,10 @@ static percent_t directPwmValue = NAN;
|
||||||
// this macro clamps both positive and negative percentages from about -100% to 100%
|
// this macro clamps both positive and negative percentages from about -100% to 100%
|
||||||
#define ETB_PERCENT_TO_DUTY(x) (clampF(-ETB_DUTY_LIMIT, 0.01f * (x), ETB_DUTY_LIMIT))
|
#define ETB_PERCENT_TO_DUTY(x) (clampF(-ETB_DUTY_LIMIT, 0.01f * (x), ETB_DUTY_LIMIT))
|
||||||
|
|
||||||
bool EtbController::init(etb_function_e function, DcMotor *motor, pid_s *pidParameters, const ValueProvider3D* pedalMap, bool initializeThrottles) {
|
bool EtbController::init(etb_function_e function, DcMotor *motor, pid_s *pidParameters, const ValueProvider3D* pedalMap, bool hasPedal) {
|
||||||
if (function == ETB_None) {
|
if (function == ETB_None) {
|
||||||
// if not configured, don't init.
|
// if not configured, don't init.
|
||||||
|
etbErrorCode = (int8_t)TpsState::NotConfigured;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -172,12 +173,14 @@ bool EtbController::init(etb_function_e function, DcMotor *motor, pid_s *pidPara
|
||||||
// If we are a throttle, require redundant TPS sensor
|
// If we are a throttle, require redundant TPS sensor
|
||||||
if (function == ETB_Throttle1 || function == ETB_Throttle2) {
|
if (function == ETB_Throttle1 || function == ETB_Throttle2) {
|
||||||
// We don't need to init throttles, so nothing to do here.
|
// We don't need to init throttles, so nothing to do here.
|
||||||
if (!initializeThrottles) {
|
if (!hasPedal) {
|
||||||
|
etbErrorCode = (int8_t)TpsState::PpsError;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If no sensor is configured for this throttle, skip initialization.
|
// If no sensor is configured for this throttle, skip initialization.
|
||||||
if (!Sensor::hasSensor(functionToTpsSensorPrimary(function))) {
|
if (!Sensor::hasSensor(functionToTpsSensorPrimary(function))) {
|
||||||
|
etbErrorCode = (int8_t)TpsState::TpsError;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -188,6 +191,7 @@ bool EtbController::init(etb_function_e function, DcMotor *motor, pid_s *pidPara
|
||||||
Sensor::getSensorName(m_positionSensor)
|
Sensor::getSensorName(m_positionSensor)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
etbErrorCode = (int8_t)TpsState::Redundancy;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -196,7 +200,7 @@ bool EtbController::init(etb_function_e function, DcMotor *motor, pid_s *pidPara
|
||||||
OBD_TPS_Configuration,
|
OBD_TPS_Configuration,
|
||||||
"Use of electronic throttle requires accelerator pedal to be redundant."
|
"Use of electronic throttle requires accelerator pedal to be redundant."
|
||||||
);
|
);
|
||||||
|
etbErrorCode = (int8_t)TpsState::Redundancy;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -536,7 +540,9 @@ void EtbController::setOutput(expected<percent_t> outputValue) {
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (!m_motor) return;
|
if (!m_motor) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// If ETB is allowed, output is valid, and we aren't paused, output to motor.
|
// If ETB is allowed, output is valid, and we aren't paused, output to motor.
|
||||||
if (getLimpManager()->allowElectronicThrottle()
|
if (getLimpManager()->allowElectronicThrottle()
|
||||||
|
@ -567,12 +573,21 @@ void EtbController::update() {
|
||||||
|
|
||||||
if (!cisnan(directPwmValue)) {
|
if (!cisnan(directPwmValue)) {
|
||||||
m_motor->set(directPwmValue);
|
m_motor->set(directPwmValue);
|
||||||
|
etbErrorCode = (int8_t)TpsState::Manual;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((engineConfiguration->disableEtbWhenEngineStopped && !engine->triggerCentral.engineMovedRecently())
|
TpsState localReason = TpsState::None;
|
||||||
|| (etbInputErrorCounter > 50)
|
if (engineConfiguration->disableEtbWhenEngineStopped && !engine->triggerCentral.engineMovedRecently()) {
|
||||||
|| engine->engineState.lua.luaDisableEtb) {
|
localReason = TpsState::Setting;
|
||||||
|
} else if (etbInputErrorCounter > 50) {
|
||||||
|
localReason = TpsState::InputJitter;
|
||||||
|
} else if (engine->engineState.lua.luaDisableEtb) {
|
||||||
|
localReason = TpsState::Lua;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (localReason != TpsState::None) {
|
||||||
|
etbErrorCode = (int8_t)localReason;
|
||||||
// If engine is stopped and so configured, skip the ETB update entirely
|
// If engine is stopped and so configured, skip the ETB update entirely
|
||||||
// This is quieter and pulls less power than leaving it on all the time
|
// This is quieter and pulls less power than leaving it on all the time
|
||||||
m_motor->disable();
|
m_motor->disable();
|
||||||
|
@ -956,10 +971,10 @@ static pid_s* getEtbPidForFunction(etb_function_e function) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void doInitElectronicThrottle() {
|
void doInitElectronicThrottle() {
|
||||||
bool shouldInitThrottles = Sensor::hasSensor(SensorType::AcceleratorPedalPrimary);
|
bool hasPedal = Sensor::hasSensor(SensorType::AcceleratorPedalPrimary);
|
||||||
|
|
||||||
#if EFI_UNIT_TEST
|
#if EFI_UNIT_TEST
|
||||||
printf("doInitElectronicThrottle %s\n", boolToString(shouldInitThrottles));
|
printf("doInitElectronicThrottle %s\n", boolToString(hasPedal));
|
||||||
#endif // EFI_UNIT_TEST
|
#endif // EFI_UNIT_TEST
|
||||||
|
|
||||||
engineConfiguration->etb1configured = engineConfiguration->etb2configured = false;
|
engineConfiguration->etb1configured = engineConfiguration->etb2configured = false;
|
||||||
|
@ -981,7 +996,7 @@ void doInitElectronicThrottle() {
|
||||||
|
|
||||||
auto pid = getEtbPidForFunction(func);
|
auto pid = getEtbPidForFunction(func);
|
||||||
|
|
||||||
bool etbConfigured = controller->init(func, motor, pid, &pedal2tpsMap, shouldInitThrottles);
|
bool etbConfigured = controller->init(func, motor, pid, &pedal2tpsMap, hasPedal);
|
||||||
if (i == 0) {
|
if (i == 0) {
|
||||||
engineConfiguration->etb1configured = etbConfigured;
|
engineConfiguration->etb1configured = etbConfigured;
|
||||||
} else if (i == 1) {
|
} else if (i == 1) {
|
||||||
|
@ -991,7 +1006,7 @@ void doInitElectronicThrottle() {
|
||||||
|
|
||||||
if (!engineConfiguration->etb1configured && !engineConfiguration->etb2configured) {
|
if (!engineConfiguration->etb1configured && !engineConfiguration->etb2configured) {
|
||||||
// It's not valid to have a PPS without any ETBs - check that at least one ETB was enabled along with the pedal
|
// It's not valid to have a PPS without any ETBs - check that at least one ETB was enabled along with the pedal
|
||||||
if (shouldInitThrottles) {
|
if (hasPedal) {
|
||||||
firmwareError(OBD_PCM_Processor_Fault, "A pedal position sensor was configured, but no electronic throttles are configured.");
|
firmwareError(OBD_PCM_Processor_Fault, "A pedal position sensor was configured, but no electronic throttles are configured.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -33,7 +33,10 @@ enum class TpsState : uint8_t {
|
||||||
PpsError, // 3
|
PpsError, // 3
|
||||||
InputJitter,
|
InputJitter,
|
||||||
PidJitter,
|
PidJitter,
|
||||||
Lua
|
Lua, // 6
|
||||||
|
Manual,
|
||||||
|
NotConfigured,
|
||||||
|
Redundancy, // 9
|
||||||
// keep this list in sync with etbCutCodeList in rusefi.input!
|
// keep this list in sync with etbCutCodeList in rusefi.input!
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -239,7 +239,7 @@ enable2ndByteCanID = false
|
||||||
fuelIgnCutCodeList = bits, U08, [0:7], "None", "fatal error", "setting disabled", "RPM limit", "fault RPM limit", "boost cut", "oil pressure", "stop requested", "ETB problem", "launch control", "max injector duty", "flood clear", "engine sync", "kickstart", "ign off"
|
fuelIgnCutCodeList = bits, U08, [0:7], "None", "fatal error", "setting disabled", "RPM limit", "fault RPM limit", "boost cut", "oil pressure", "stop requested", "ETB problem", "launch control", "max injector duty", "flood clear", "engine sync", "kickstart", "ign off"
|
||||||
|
|
||||||
; TpsState
|
; TpsState
|
||||||
etbCutCodeList = bits, U08, [0:7], "None", "engine off setting", "TPS error", "PPS error", "Input noise", "PID noise", "Lua"
|
etbCutCodeList = bits, U08, [0:7], "None", "engine off setting", "TPS error", "PPS error", "Input noise", "PID noise", "Lua", "Manual", "N/A", "Redundancy"
|
||||||
|
|
||||||
[ConstantsExtensions]
|
[ConstantsExtensions]
|
||||||
; defaultValue is used to provide TunerStudio with a value to use in the case of
|
; defaultValue is used to provide TunerStudio with a value to use in the case of
|
||||||
|
|
Loading…
Reference in New Issue