From b24685ce6566eb8af6b23c3d890944bb0c3f9e44 Mon Sep 17 00:00:00 2001 From: rusEfi Date: Mon, 24 Sep 2018 23:57:03 -0400 Subject: [PATCH] ETB progress --- firmware/controllers/electronic_throttle.cpp | 50 ++++++++++++-------- firmware/controllers/electronic_throttle.h | 1 + firmware/controllers/engine_controller.cpp | 2 +- firmware/controllers/settings.cpp | 1 + 4 files changed, 33 insertions(+), 21 deletions(-) diff --git a/firmware/controllers/electronic_throttle.cpp b/firmware/controllers/electronic_throttle.cpp index 8e3b107611..202124989c 100644 --- a/firmware/controllers/electronic_throttle.cpp +++ b/firmware/controllers/electronic_throttle.cpp @@ -75,9 +75,10 @@ static THD_WORKING_AREA(etbTreadStack, UTILITY_THREAD_STACK_SIZE); * @brief Pulse-Width Modulation state */ static SimplePwm etbPwmUp CCM_OPTIONAL; +/* static SimplePwm etbPwmDown CCM_OPTIONAL; - static OutputPin outputDirectionOpen CCM_OPTIONAL; +*/ static OutputPin outputDirectionClose CCM_OPTIONAL; EXTERN_ENGINE; @@ -117,12 +118,14 @@ static msg_t etbThread(void *arg) { etbPwmUp.setSimplePwmDutyCycle(currentEtbDuty / 100); - bool needEtbBraking = absF(targetPosition - actualThrottlePosition) < 3; - if (needEtbBraking != wasEtbBraking) { - scheduleMsg(&logger, "need ETB braking: %d", needEtbBraking); - wasEtbBraking = needEtbBraking; + if (boardConfiguration->etbDirectionPin2 != GPIO_UNASSIGNED) { + bool needEtbBraking = absF(targetPosition - actualThrottlePosition) < 3; + if (needEtbBraking != wasEtbBraking) { + scheduleMsg(&logger, "need ETB braking: %d", needEtbBraking); + wasEtbBraking = needEtbBraking; + } + outputDirectionClose.setValue(needEtbBraking); } - outputDirectionClose.setValue(needEtbBraking); if (engineConfiguration->debugMode == DBG_ELECTRONIC_THROTTLE) { pid.postState(&tsOutputChannels); @@ -145,12 +148,15 @@ static msg_t etbThread(void *arg) { #endif } -static void setThrottleConsole(int level) { +/** + * manual duty cycle control without PID + */ +static void setThrottleDutyCycle(int level) { scheduleMsg(&logger, "setting throttle=%d", level); float dc = 0.01 + (minI(level, 98)) / 100.0; etbPwmUp.setSimplePwmDutyCycle(dc); - print("st = %.2f\r\n", dc); + print("etb duty = %.2f\r\n", dc); } static void showEthInfo(void) { @@ -175,19 +181,25 @@ static void showEthInfo(void) { pid.showPidStatus(&logger, "ETB"); } -static void apply(void) { +static void applyPidSettings(void) { pid.updateFactors(engineConfiguration->etb.pFactor, engineConfiguration->etb.iFactor, 0); } void setEtbPFactor(float value) { engineConfiguration->etb.pFactor = value; - apply(); + applyPidSettings(); showEthInfo(); } void setEtbIFactor(float value) { engineConfiguration->etb.iFactor = value; - apply(); + applyPidSettings(); + showEthInfo(); +} + +void setEtbDFactor(float value) { + engineConfiguration->etb.dFactor = value; + applyPidSettings(); showEthInfo(); } @@ -199,6 +211,8 @@ void setDefaultEtbParameters(void) { engineConfiguration->etb.iFactor = 0.5; engineConfiguration->etb.period = 100; engineConfiguration->etbFreq = 300; + +// boardConfiguration->etbControlPin1 = GPIOE_4; // test board, matched default fuel pump relay } bool isETBRestartNeeded(void) { @@ -233,32 +247,27 @@ void startETBPins(void) { freq, 0.80, applyPinState); +/* startSimplePwmExt(&etbPwmDown, "etb2", boardConfiguration->etbControlPin2, &enginePins.etbOutput2, freq, 0.80, applyPinState); - outputDirectionOpen.initPin("etb dir open", boardConfiguration->etbDirectionPin1); +*/ outputDirectionClose.initPin("etb dir close", boardConfiguration->etbDirectionPin2); } static void setTempOutput(float value) { autoTune.output = value; - } static void setTempStep(float value) { autoTune.oStep = value; - } void initElectronicThrottle(void) { - // these two lines are controlling direction -// outputPinRegister("etb1", ELECTRONIC_THROTTLE_CONTROL_1, ETB_CONTROL_LINE_1_PORT, ETB_CONTROL_LINE_1_PIN); -// outputPinRegister("etb2", ELECTRONIC_THROTTLE_CONTROL_2, ETB_CONTROL_LINE_2_PORT, ETB_CONTROL_LINE_2_PIN); - addConsoleAction("ethinfo", showEthInfo); if (!hasPedalPositionSensor()) { return; @@ -266,12 +275,13 @@ void initElectronicThrottle(void) { startETBPins(); - addConsoleActionI("set_etb", setThrottleConsole); + // + addConsoleActionI("set_etb", setThrottleDutyCycle); addConsoleActionF("set_etb_output", setTempOutput); addConsoleActionF("set_etb_step", setTempStep); - apply(); + applyPidSettings(); chThdCreateStatic(etbTreadStack, sizeof(etbTreadStack), NORMALPRIO, (tfunc_t) etbThread, NULL); } diff --git a/firmware/controllers/electronic_throttle.h b/firmware/controllers/electronic_throttle.h index 666be69cde..bd8df2aef9 100644 --- a/firmware/controllers/electronic_throttle.h +++ b/firmware/controllers/electronic_throttle.h @@ -13,6 +13,7 @@ void initElectronicThrottle(void); void setDefaultEtbParameters(void); void setEtbPFactor(float value); void setEtbIFactor(float value); +void setEtbDFactor(float value); bool isETBRestartNeeded(void); void stopETBPins(void); void startETBPins(void); diff --git a/firmware/controllers/engine_controller.cpp b/firmware/controllers/engine_controller.cpp index 3c19f7e35a..45c8cef25f 100644 --- a/firmware/controllers/engine_controller.cpp +++ b/firmware/controllers/engine_controller.cpp @@ -733,5 +733,5 @@ int getRusEfiVersion(void) { if (initBootloader() != 0) return 123; #endif /* EFI_BOOTLOADER_INCLUDE_CODE */ - return 20180831; + return 20180924; } diff --git a/firmware/controllers/settings.cpp b/firmware/controllers/settings.cpp index 8046698223..ec5b2373c7 100644 --- a/firmware/controllers/settings.cpp +++ b/firmware/controllers/settings.cpp @@ -1162,6 +1162,7 @@ command_f_s commandsF[] = {{"mock_iat_voltage", setMockIatVoltage}, {"idle_d", setIdleDFactor}, {"etb_p", setEtbPFactor}, {"etb_i", setEtbIFactor}, + {"etb_d", setEtbDFactor}, #endif /* EFI_PROD_CODE */ // {"", },