From 12bc5eb28b8ca74bb8195d73a5c8ea14588494a5 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Sun, 23 Aug 2020 20:41:35 -0700 Subject: [PATCH] Auto cal dual etb (#1725) * implement * add bench mode * add ts cal mode * TS impl Co-authored-by: Matthew Kennedy --- firmware/console/binary/tunerstudio_outputs.h | 4 +++ .../actuators/electronic_throttle.cpp | 36 ++++++++++++++++--- firmware/controllers/bench_test.cpp | 3 ++ firmware/tunerstudio/rusefi.input | 14 +++++++- 4 files changed, 52 insertions(+), 5 deletions(-) diff --git a/firmware/console/binary/tunerstudio_outputs.h b/firmware/console/binary/tunerstudio_outputs.h index 7f051c929b..9109607c1f 100644 --- a/firmware/console/binary/tunerstudio_outputs.h +++ b/firmware/console/binary/tunerstudio_outputs.h @@ -28,6 +28,10 @@ enum class TsCalMode : uint8_t { EtbKd = 5, Tps1SecondaryMax = 6, Tps1SecondaryMin = 7, + Tps2Max = 8, + Tps2Min = 9, + Tps2SecondaryMax = 10, + Tps2SecondaryMin = 11, }; /** diff --git a/firmware/controllers/actuators/electronic_throttle.cpp b/firmware/controllers/actuators/electronic_throttle.cpp index 1a93b3402f..cc2d4b7030 100644 --- a/firmware/controllers/actuators/electronic_throttle.cpp +++ b/firmware/controllers/actuators/electronic_throttle.cpp @@ -124,6 +124,34 @@ static SensorType indexToTpsSensorSecondary(size_t index) { } } +static TsCalMode indexToCalModePriMin(size_t index) { + switch (index) { + case 0: return TsCalMode::Tps1Min; + default: return TsCalMode::Tps2Min; + } +} + +static TsCalMode indexToCalModePriMax(size_t index) { + switch (index) { + case 0: return TsCalMode::Tps1Max; + default: return TsCalMode::Tps2Max; + } +} + +static TsCalMode indexToCalModeSecMin(size_t index) { + switch (index) { + case 0: return TsCalMode::Tps1SecondaryMin; + default: return TsCalMode::Tps2SecondaryMin; + } +} + +static TsCalMode indexToCalModeSecMax(size_t index) { + switch (index) { + case 0: return TsCalMode::Tps1SecondaryMax; + default: return TsCalMode::Tps2SecondaryMax; + } +} + static percent_t directPwmValue = NAN; static percent_t currentEtbDuty; @@ -496,17 +524,17 @@ struct EtbImpl final : public EtbController, public PeriodicController<512> { motor->disable(); // Write out the learned values to TS, waiting briefly after setting each to let TS grab it - tsOutputChannels.calibrationMode = TsCalMode::Tps1Max; + tsOutputChannels.calibrationMode = indexToCalModePriMax(myIndex); tsOutputChannels.calibrationValue = primaryMax; chThdSleepMilliseconds(500); - tsOutputChannels.calibrationMode = TsCalMode::Tps1Min; + tsOutputChannels.calibrationMode = indexToCalModePriMin(myIndex); tsOutputChannels.calibrationValue = primaryMin; chThdSleepMilliseconds(500); - tsOutputChannels.calibrationMode = TsCalMode::Tps1SecondaryMax; + tsOutputChannels.calibrationMode = indexToCalModeSecMax(myIndex); tsOutputChannels.calibrationValue = secondaryMax; chThdSleepMilliseconds(500); - tsOutputChannels.calibrationMode = TsCalMode::Tps1SecondaryMin; + tsOutputChannels.calibrationMode = indexToCalModeSecMin(myIndex); tsOutputChannels.calibrationValue = secondaryMin; chThdSleepMilliseconds(500); diff --git a/firmware/controllers/bench_test.cpp b/firmware/controllers/bench_test.cpp index dc9da0e2a7..4329fc09b6 100644 --- a/firmware/controllers/bench_test.cpp +++ b/firmware/controllers/bench_test.cpp @@ -270,6 +270,9 @@ static void handleCommandX14(uint16_t index) { case 0xE: etbAutocal(0); return; + case 0x11: + etbAutocal(1); + return; case 0xC: engine->etbAutoTune = true; return; diff --git a/firmware/tunerstudio/rusefi.input b/firmware/tunerstudio/rusefi.input index babb4b5849..0673e5ed2e 100644 --- a/firmware/tunerstudio/rusefi.input +++ b/firmware/tunerstudio/rusefi.input @@ -404,6 +404,14 @@ enable2ndByteCanID = false maintainConstantValue = tps1SecondaryMax, { (calibrationMode == 6 ) ? calibrationValue : tps1SecondaryMax } maintainConstantValue = tps1SecondaryMin, { (calibrationMode == 7 ) ? calibrationValue : tps1SecondaryMin } + ; TPS 2 Primary + maintainConstantValue = tps2Max, { (calibrationMode == 8 ) ? calibrationValue : tps2Max } + maintainConstantValue = tps2Min, { (calibrationMode == 9 ) ? calibrationValue : tps2Min } + + ; TPS 2 Secondary + maintainConstantValue = tps2SecondaryMax, { (calibrationMode == 10 ) ? calibrationValue : tps2SecondaryMax } + maintainConstantValue = tps2SecondaryMin, { (calibrationMode == 11 ) ? calibrationValue : tps2SecondaryMin } + ; ETB Auto Gain Calibration maintainConstantValue = etb_pFactor, { (calibrationMode == 3 ) ? calibrationValue : etb_pFactor } maintainConstantValue = etb_iFactor, { (calibrationMode == 4 ) ? calibrationValue : etb_iFactor } @@ -1439,6 +1447,7 @@ cmd_test_starter_relay = "@@TS_IO_TEST_COMMAND_char@@\x00\x14\x00\x0B" cmd_etb_autotune = "@@TS_IO_TEST_COMMAND_char@@\x00\x14\x00\x0C" cmd_enable_self_stim = "@@TS_IO_TEST_COMMAND_char@@\x00\x14\x00\x0D" cmb_etb_auto_calibrate = "@@TS_IO_TEST_COMMAND_char@@\x00\x14\x00\x0E" +cmb_etb_auto_calibrate_2 = "@@TS_IO_TEST_COMMAND_char@@\x00\x14\x00\x11" cmd_disable_self_stim = "@@TS_IO_TEST_COMMAND_char@@\x00\x14\x00\x0F" cmd_etb_autotune_stop = "@@TS_IO_TEST_COMMAND_char@@\x00\x14\x00\x10" @@ -1732,6 +1741,7 @@ cmd_set_engine_type_default = "@@TS_IO_TEST_COMMAND_char@@\x00\x31\x00\x00" field = "Secondary sensor", tps1_2AdcChannel field = "Secondary min", tps1SecondaryMin, {tps1_2AdcChannel != @@ADC_CHANNEL_NONE@@} field = "Secondary max", tps1SecondaryMax, {tps1_2AdcChannel != @@ADC_CHANNEL_NONE@@} + commandButton = "Auto Calibrate TPS 1", cmb_etb_auto_calibrate, {tps1_2AdcChannel != @@ADC_CHANNEL_NONE@@ && throttlePedalPositionAdcChannel != @@ADC_CHANNEL_NONE@@} dialog = tpsNum2, "Throttle #2" field = "Primary sensor", tps2_1AdcChannel @@ -1740,6 +1750,7 @@ cmd_set_engine_type_default = "@@TS_IO_TEST_COMMAND_char@@\x00\x31\x00\x00" field = "Secondary sensor", tps2_2AdcChannel field = "Secondary min", tps2SecondaryMin, {tps2_2AdcChannel != @@ADC_CHANNEL_NONE@@} field = "Secondary max", tps2SecondaryMax, {tps2_2AdcChannel != @@ADC_CHANNEL_NONE@@} + commandButton = "Auto Calibrate TPS 2", cmb_etb_auto_calibrate_2, {tps2_2AdcChannel != @@ADC_CHANNEL_NONE@@ && throttlePedalPositionAdcChannel != @@ADC_CHANNEL_NONE@@} dialog = tpsLimits, "TPS Limits" field = "TPS minimum valid value", tpsErrorDetectionTooLow, {tps1_1AdcChannel != @@ADC_CHANNEL_NONE@@} @@ -2868,7 +2879,8 @@ cmd_set_engine_type_default = "@@TS_IO_TEST_COMMAND_char@@\x00\x31\x00\x00" dialog = etbAutotune, "PID Autotune" field = "First step: calibrate TPS and hit 'Burn'" - commandButton = "Auto Calibrate TPS", cmb_etb_auto_calibrate + commandButton = "Auto Calibrate TPS 1", cmb_etb_auto_calibrate + commandButton = "Auto Calibrate TPS 2", cmb_etb_auto_calibrate_2 field = "Second step" commandButton = "Start ETB PID Autotune", cmd_etb_autotune commandButton = "Stop ETB PID Autotune", cmd_etb_autotune_stop