25#define ETB_LOOP_FREQUENCY 500
26#define DEFAULT_ETB_PWM_FREQUENCY 800
33 void reset(
const char *reason)
override;
61 void setOutput(expected<percent_t> outputValue)
override;
154template <
typename TBase>
176 template <
typename... TArgs>
199 if (TBase::getFunction() == DC_Throttle1 || TBase::getFunction() == DC_Throttle2 || TBase::getFunction() == DC_Wastegate) {
208 efiPrintf(
" ****************** ERROR: Not while RPM ********************");
212 auto motor = TBase::getMotor();
214 efiPrintf(
" ****************** ERROR: No DC motor ********************");
220 auto myFunction = TBase::getFunction();
246 motor->disable(
"autotune");
255 if (myFunction == DC_Throttle1) {
260 }
else if (myFunction == DC_Throttle2) {
265 }
else if (myFunction == DC_Wastegate) {
332template<
typename T,
size_t idx>
334#if EFI_ELECTRONIC_THROTTLE_BODY
336 static_assert(idx < ETB_COUNT);
338 if constexpr (idx == 0) {
Brushed or brushless DC motor interface.
const ValueProvider3D & m_throttle2Trim
percent_t getThrottleTrim(float rpm, percent_t) const override
EtbController2(const ValueProvider3D &throttle2TrimTable)
void setWastegatePosition(percent_t pos) override
float getLuaAdjustment() const
bool isEtbMode() const override
uint8_t m_autotuneCounter
uint8_t m_autotuneCurrentParam
const pid_state_s & getPidState() const override
expected< percent_t > getSetpointIdleValve() const
expected< percent_t > getSetpointEtb()
void setIdlePosition(percent_t pos) override
void checkJam(percent_t setpoint, percent_t observation)
expected< percent_t > getSetpoint() override
ErrorAccumulator m_targetErrorAccumulator
virtual percent_t getThrottleTrim(float, percent_t) const
expected< percent_t > getClosedLoopAutotune(percent_t setpoint, percent_t actualThrottlePosition)
Timer m_luaAdjustmentTimer
dc_function_e getFunction() const
bool init(dc_function_e function, DcMotor *motor, pid_s *pidParameters, const ValueProvider3D *pedalMap) override
SensorType m_positionSensor
void setLuaAdjustment(percent_t adjustment) override
expected< percent_t > getClosedLoop(percent_t setpoint, percent_t observation) override
expected< percent_t > getOpenLoop(percent_t target) override
void reset(const char *reason) override
void onConfigurationChange(pid_s *previousConfiguration)
const ValueProvider3D * m_pedalProvider
expected< percent_t > observePlant() override
expected< percent_t > getSetpointWastegate() const
float getCurrentTarget() const override
void setOutput(expected< percent_t > outputValue) override
void autoCalibrateTps(bool reportToTs) override
EtbImpl(TArgs &&... args)
ACPhase doAutocal(ACPhase phase)
virtual float getRaw() const
static float getOrZero(SensorType type)
static TsCalMode functionToCalModePriMin(dc_function_e func)
static Map3D< ETB2_TRIM_SIZE, ETB2_TRIM_SIZE, int8_t, uint8_t, uint8_t > throttle2TrimTable
static TsCalMode functionToCalModeSecMin(dc_function_e func)
static SensorType functionToTpsSensorPrimary(dc_function_e func)
static TsCalMode functionToCalModePriMax(dc_function_e func)
static SensorType functionToTpsSensorSecondary(dc_function_e func)
static TsCalMode functionToCalModeSecMax(dc_function_e func)
static constexpr electronic_throttle_s const * etbData2_ptr
static constexpr electronic_throttle_s const * etbData1_ptr
consteval electronic_throttle_s const * getLiveDataConstexpr()
EtbImpl< EtbController1 > etb1
EtbImpl< EtbController2 > etb2
static constexpr engine_configuration_s * engineConfiguration
void firmwareError(ObdCode code, const char *fmt,...)
Base class for sensors. Inherit this class to implement a new type of sensor.
tps_limit_t tps1SecondaryMax
float wastegatePositionOpenedVoltage
uint16_t tps2SecondaryMax
float wastegatePositionClosedVoltage
tps_limit_t tps1SecondaryMin
uint16_t tps2SecondaryMin
constexpr int convertVoltageTo10bitADC(float voltage)
bool tsCalibrationIsIdle()
void tsCalibrationSetData(TsCalMode mode, float value, float value2, float timeoutMs)
maintainConstantValue implementation header