Merge branch 'master' of https://github.com/rusefi/rusefi
This commit is contained in:
commit
4552ae0dcc
|
@ -199,23 +199,9 @@ expected<percent_t> EtbController::getOpenLoop(percent_t target) const {
|
|||
return ff;
|
||||
}
|
||||
|
||||
expected<percent_t> EtbController::getClosedLoop(percent_t target, percent_t actualThrottlePosition) {
|
||||
if (m_shouldResetPid) {
|
||||
m_pid.reset();
|
||||
m_shouldResetPid = false;
|
||||
}
|
||||
|
||||
// Only report the 0th throttle
|
||||
if (m_myIndex == 0) {
|
||||
#if EFI_TUNER_STUDIO
|
||||
// Error is positive if the throttle needs to open further
|
||||
tsOutputChannels.etb1Error = target - actualThrottlePosition;
|
||||
#endif /* EFI_TUNER_STUDIO */
|
||||
}
|
||||
|
||||
// Only allow autotune with stopped engine
|
||||
if (GET_RPM() == 0 && engine->etbAutoTune) {
|
||||
bool isPositive = actualThrottlePosition > target;
|
||||
expected<percent_t> EtbController::getClosedLoopAutotune(percent_t actualThrottlePosition) {
|
||||
// Estimate gain at 60% position - this should be well away from the spring and in the linear region
|
||||
bool isPositive = actualThrottlePosition > 60.0f;
|
||||
|
||||
float autotuneAmplitude = 20;
|
||||
|
||||
|
@ -284,6 +270,25 @@ expected<percent_t> EtbController::getClosedLoop(percent_t target, percent_t act
|
|||
|
||||
// Bang-bang control the output to induce oscillation
|
||||
return autotuneAmplitude * (isPositive ? -1 : 1);
|
||||
}
|
||||
|
||||
expected<percent_t> EtbController::getClosedLoop(percent_t target, percent_t actualThrottlePosition) {
|
||||
if (m_shouldResetPid) {
|
||||
m_pid.reset();
|
||||
m_shouldResetPid = false;
|
||||
}
|
||||
|
||||
// Only report the 0th throttle
|
||||
if (m_myIndex == 0) {
|
||||
#if EFI_TUNER_STUDIO
|
||||
// Error is positive if the throttle needs to open further
|
||||
tsOutputChannels.etb1Error = target - actualThrottlePosition;
|
||||
#endif /* EFI_TUNER_STUDIO */
|
||||
}
|
||||
|
||||
// Only allow autotune with stopped engine
|
||||
if (GET_RPM() == 0 && engine->etbAutoTune) {
|
||||
return getClosedLoopAutotune(actualThrottlePosition);
|
||||
} else {
|
||||
// Normal case - use PID to compute closed loop part
|
||||
return m_pid.getOutput(target, actualThrottlePosition);
|
||||
|
|
|
@ -50,6 +50,7 @@ public:
|
|||
|
||||
expected<percent_t> getOpenLoop(percent_t target) const override;
|
||||
expected<percent_t> getClosedLoop(percent_t setpoint, percent_t target) override;
|
||||
expected<percent_t> getClosedLoopAutotune(percent_t actualThrottlePosition);
|
||||
|
||||
void setOutput(expected<percent_t> outputValue) override;
|
||||
|
||||
|
|
|
@ -590,8 +590,8 @@ fileVersion = { @@TS_FILE_VERSION@@ }
|
|||
|
||||
curve = etbTpsBiasCurve, "Electronic TB Bias Curve"
|
||||
columnLabel = "TPS", "duty bias"
|
||||
xAxis = 0, 100, 10
|
||||
yAxis = 0, 100, 10
|
||||
xAxis = 0, 50, 11
|
||||
yAxis = -40, 40, 9
|
||||
xBins = etbBiasBins, TPSValue
|
||||
yBins = etbBiasValues
|
||||
gauge = TPSGauge
|
||||
|
@ -1723,12 +1723,19 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00"
|
|||
field = "TPS low value detection threshold", tpsErrorDetectionTooLow, {tps1_1AdcChannel != 16}
|
||||
field = "TPS high value detection threshold", tpsErrorDetectionTooHigh, {tps1_1AdcChannel != 16}
|
||||
|
||||
dialog = pedalSensor, "Accelerator pedal"
|
||||
dialog = pedalSensorLeft, "Accelerator pedal"
|
||||
field = "Accelerator position sensor", throttlePedalPositionAdcChannel
|
||||
field = "Accelerator position 2nd sensor", throttlePedalPositionSecondAdcChannel
|
||||
field = "Up voltage", throttlePedalUpVoltage
|
||||
field = "Down (WOT) voltage", throttlePedalWOTVoltage
|
||||
field = "Accelerator position 2nd sensor", throttlePedalPositionSecondAdcChannel
|
||||
|
||||
dialog = pedalGauges
|
||||
gauge = pedalPositionGauge
|
||||
gauge = rawPpsPrimaryGauge
|
||||
|
||||
dialog = pedalSensor, "Accelerator pedal", border
|
||||
panel = pedalSensorLeft, West
|
||||
panel = pedalGauges, East
|
||||
|
||||
dialog = mc33Dialog, "GDI Dreams"
|
||||
field = mc33816_cs, mc33816_cs
|
||||
|
@ -2733,44 +2740,37 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00"
|
|||
field = "pFactor", etb_pFactor, {throttlePedalPositionAdcChannel != 16}
|
||||
field = "iFactor", etb_iFactor, {throttlePedalPositionAdcChannel != 16}
|
||||
field = "dFactor", etb_dFactor, {throttlePedalPositionAdcChannel != 16}
|
||||
field = "offset", etb_offset, {throttlePedalPositionAdcChannel != 16}
|
||||
field = "control period", etb_periodMs, {throttlePedalPositionAdcChannel != 16}
|
||||
field = "pid min", etb_minValue, {throttlePedalPositionAdcChannel != 16}
|
||||
field = "pid max", etb_maxValue, {throttlePedalPositionAdcChannel != 16}
|
||||
field = "iTermMin", etb_iTermMin, {throttlePedalPositionAdcChannel != 16}
|
||||
field = "iTermMax", etb_iTermMax, {throttlePedalPositionAdcChannel != 16}
|
||||
|
||||
dialog = etbIdleDialog, "ETB Idle"
|
||||
field = "use ETB for idle", useETBforIdleControl
|
||||
field = "ETB idle maximum angle", etbIdleThrottleRange
|
||||
|
||||
dialog = etbDialogLeft
|
||||
field = "https://rusefi.com/s/etb"
|
||||
field = "Detailed status in console", isVerboseETB
|
||||
field = "Pause ETB control", pauseEtbControl
|
||||
field = "Throttle Pedal Up", throttlePedalUpVoltage
|
||||
field = "Throttle Pedal Wide Open", throttlePedalWOTVoltage
|
||||
field = etbCalibrationOnStart, etbCalibrationOnStart
|
||||
field = "TPS#2 min", tps2Min, { tps2_1AdcChannel != 16 }
|
||||
field = "TPS#2 max", tps2Max, { tps2_1AdcChannel != 16 }
|
||||
; we need the term about stepper idle in here, because there's a bug in TS that you can't have different visibility
|
||||
; criteria for the same panel when used in multiple places
|
||||
panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || useStepperIdle && useHbridges }
|
||||
panel = etbPidDialog
|
||||
|
||||
dialog = etbAutotune, "PID Autotune"
|
||||
field = "!Set debug mode below to 'ETB Autotune' to show results"
|
||||
field = "Debug mode", debugMode
|
||||
commandButton = "ETB PID Autotune", cmd_etb_autotune
|
||||
|
||||
dialog = etbDialogRight
|
||||
field = "!https://rusefi.com/s/debugmode"
|
||||
field = "Neutral Position", etbNeutralPosition
|
||||
field = "Debug mode", debugMode
|
||||
field = "use ETB for idle", useETBforIdleControl
|
||||
field = "ETB idle maximum angle", etbIdleThrottleRange
|
||||
field = "Press buttons to calibrate sensors"
|
||||
field = "You would have to remove air filter to move throttle manually"
|
||||
commandButton = "TPS#1 closed position", cmd_calibrate_tps_1_closed
|
||||
commandButton = "TPS#1 wide open position", cmd_calibrate_tps_1_wot
|
||||
field = "Not many vehicles have two throttle bodies but some do"
|
||||
commandButton = "TPS#2 closed position", cmd_calibrate_tps_2_closed
|
||||
commandButton = "TPS#2 wide open position", cmd_calibrate_tps_2_wot
|
||||
commandButton = "Pedal Up", cmd_calibrate_pedal_up
|
||||
commandButton = "Pedal Down", cmd_calibrate_pedal_down
|
||||
commandButton = "ETB PID Autotune", cmd_etb_autotune
|
||||
panel = etbIdleDialog
|
||||
panel = etbPidDialog
|
||||
panel = etbAutotune
|
||||
|
||||
; Neutral position handling not yet implemented!
|
||||
;field = "Neutral Position", etbNeutralPosition
|
||||
|
||||
dialog = etbDialog, "Electronic Throttle Body (beta)", border
|
||||
topicHelp = "etbHelp"
|
||||
|
|
Loading…
Reference in New Issue