diff --git a/firmware/controllers/actuators/electronic_throttle.cpp b/firmware/controllers/actuators/electronic_throttle.cpp index e9f4fac1e0..4e003305b6 100644 --- a/firmware/controllers/actuators/electronic_throttle.cpp +++ b/firmware/controllers/actuators/electronic_throttle.cpp @@ -77,13 +77,6 @@ #include "electronic_throttle.h" #include "tps.h" #include "sensor.h" -#include "io_pins.h" -#include "engine_configuration.h" -#include "pwm_generator_logic.h" -#include "pid.h" -#include "engine_controller.h" -#include "periodic_task.h" -#include "pin_repository.h" #include "dc_motor.h" #include "dc_motors.h" #include "pid_auto_tune.h" @@ -109,6 +102,13 @@ static bool startupPositionError = false; #define STARTUP_NEUTRAL_POSITION_ERROR_THRESHOLD 5 +static SensorType indexToTpsSensor(size_t index) { + switch(index) { + case 0: return SensorType::Tps1; + default: return SensorType::Tps2; + } +} + static percent_t directPwmValue = NAN; static percent_t currentEtbDuty; @@ -186,16 +186,20 @@ void EtbController::PeriodicTask() { return; } + SensorResult actualThrottlePosition = Sensor::get(indexToTpsSensor(m_myIndex)); - percent_t actualThrottlePosition = getTPSWithIndex(m_myIndex PASS_ENGINE_PARAMETER_SUFFIX); + if (!actualThrottlePosition.Valid) { + m_motor->set(0); + return; + } if (engine->etbAutoTune) { - autoTune.input = actualThrottlePosition; + autoTune.input = actualThrottlePosition.Value; bool result = autoTune.Runtime(&logger); tuneWorkingPid.updateFactors(autoTune.output, 0, 0); - float value = tuneWorkingPid.getOutput(50, actualThrottlePosition); + float value = tuneWorkingPid.getOutput(50, actualThrottlePosition.Value); scheduleMsg(&logger, "AT input=%f output=%f PID=%f", autoTune.input, autoTune.output, value); @@ -233,7 +237,7 @@ void EtbController::PeriodicTask() { m_pid.iTermMax = engineConfiguration->etb_iTermMax; currentEtbDuty = engine->engineState.etbFeedForward + - m_pid.getOutput(targetPosition, actualThrottlePosition); + m_pid.getOutput(targetPosition, actualThrottlePosition.Value); m_motor->set(ETB_PERCENT_TO_DUTY(currentEtbDuty)); @@ -290,7 +294,7 @@ void EtbController::PeriodicTask() { tsOutputChannels.etb1DutyCycle = currentEtbDuty; // 320 // Error is positive if the throttle needs to open further - tsOutputChannels.etb1Error = targetPosition - actualThrottlePosition; + tsOutputChannels.etb1Error = targetPosition - actualThrottlePosition.Value; #endif /* EFI_TUNER_STUDIO */ } } @@ -300,8 +304,6 @@ EtbController etbControllers[ETB_COUNT]; static void showEthInfo(void) { #if EFI_PROD_CODE - static char pinNameBuffer[16]; - if (engine->etbActualCount == 0) { scheduleMsg(&logger, "ETB DISABLED since no PPS"); } diff --git a/unit_tests/tests/test_etb.cpp b/unit_tests/tests/test_etb.cpp index b41695ed62..8dd5af60ce 100644 --- a/unit_tests/tests/test_etb.cpp +++ b/unit_tests/tests/test_etb.cpp @@ -74,6 +74,7 @@ TEST(etb, testTargetTpsIsFloatBug945) { // Must have a sensor configured before init Sensor::setMockValue(SensorType::AcceleratorPedal, 0); + Sensor::setMockValue(SensorType::Tps1, 0); doInitElectronicThrottle(PASS_ENGINE_PARAMETER_SIGNATURE);