2015-07-10 06:01:56 -07:00
|
|
|
/**
|
|
|
|
* @file accel_enrichment.h
|
|
|
|
* @brief Acceleration enrichment calculator
|
|
|
|
*
|
|
|
|
* @date Apr 21, 2014
|
|
|
|
* @author Dmitry Sidin
|
2020-01-13 18:57:43 -08:00
|
|
|
* @author Andrey Belomutskiy, (c) 2012-2020
|
2015-07-10 06:01:56 -07:00
|
|
|
*/
|
|
|
|
|
2019-11-14 21:00:13 -08:00
|
|
|
#pragma once
|
2015-07-10 06:01:56 -07:00
|
|
|
|
|
|
|
#include "cyclic_buffer.h"
|
2016-03-10 21:01:55 -08:00
|
|
|
#include "table_helper.h"
|
2019-08-31 20:12:39 -07:00
|
|
|
#include "wall_fuel_generated.h"
|
2016-03-10 21:01:55 -08:00
|
|
|
|
2019-06-10 09:38:32 -07:00
|
|
|
typedef Map3D<TPS_TPS_ACCEL_TABLE, TPS_TPS_ACCEL_TABLE, float, float> tps_tps_Map3D_t;
|
2015-07-10 06:01:56 -07:00
|
|
|
|
2015-08-21 12:01:36 -07:00
|
|
|
/**
|
|
|
|
* this object is used for MAP rate-of-change and TPS rate-of-change corrections
|
|
|
|
*/
|
2019-07-12 20:15:52 -07:00
|
|
|
class AccelEnrichment {
|
|
|
|
public:
|
|
|
|
AccelEnrichment();
|
|
|
|
int getMaxDeltaIndex(DECLARE_ENGINE_PARAMETER_SIGNATURE);
|
|
|
|
float getMaxDelta(DECLARE_ENGINE_PARAMETER_SIGNATURE);
|
|
|
|
|
|
|
|
void resetAE();
|
|
|
|
void setLength(int length);
|
|
|
|
cyclic_buffer<float> cb;
|
|
|
|
void onNewValue(float currentValue DECLARE_ENGINE_PARAMETER_SUFFIX);
|
2019-10-16 19:10:38 -07:00
|
|
|
int onUpdateInvocationCounter = 0;
|
2019-07-12 20:15:52 -07:00
|
|
|
};
|
|
|
|
|
|
|
|
class LoadAccelEnrichment : public AccelEnrichment {
|
2015-07-10 06:01:56 -07:00
|
|
|
public:
|
2015-08-23 18:03:42 -07:00
|
|
|
/**
|
2016-01-02 13:01:27 -08:00
|
|
|
* @return Extra engine load value for fuel logic calculation
|
2015-08-23 18:03:42 -07:00
|
|
|
*/
|
2017-05-15 20:33:22 -07:00
|
|
|
float getEngineLoadEnrichment(DECLARE_ENGINE_PARAMETER_SIGNATURE);
|
2019-07-12 20:15:52 -07:00
|
|
|
void onEngineCycle(DECLARE_ENGINE_PARAMETER_SIGNATURE);
|
|
|
|
};
|
|
|
|
|
|
|
|
class TpsAccelEnrichment : public AccelEnrichment {
|
|
|
|
public:
|
2015-08-23 18:03:42 -07:00
|
|
|
/**
|
|
|
|
* @return Extra fuel squirt duration for TPS acceleration
|
|
|
|
*/
|
2017-05-15 20:33:22 -07:00
|
|
|
floatms_t getTpsEnrichment(DECLARE_ENGINE_PARAMETER_SIGNATURE);
|
|
|
|
void onEngineCycleTps(DECLARE_ENGINE_PARAMETER_SIGNATURE);
|
2019-03-28 19:47:20 -07:00
|
|
|
void resetFractionValues();
|
2019-07-12 20:15:52 -07:00
|
|
|
void resetAE();
|
2015-07-10 06:01:56 -07:00
|
|
|
private:
|
2019-03-28 19:47:20 -07:00
|
|
|
/**
|
|
|
|
* Used for Fractional TPS enrichment.
|
|
|
|
*/
|
2020-07-29 02:22:54 -07:00
|
|
|
floatms_t accumulatedValue = 0;
|
|
|
|
floatms_t maxExtraPerCycle = 0;
|
|
|
|
floatms_t maxExtraPerPeriod = 0;
|
|
|
|
floatms_t maxInjectedPerPeriod = 0;
|
|
|
|
int cycleCnt = 0;
|
2015-07-10 06:01:56 -07:00
|
|
|
};
|
|
|
|
|
2019-01-04 18:54:57 -08:00
|
|
|
/**
|
|
|
|
* Wall wetting, also known as fuel film
|
|
|
|
* See https://github.com/rusefi/rusefi/issues/151 for the theory
|
|
|
|
*/
|
2019-07-12 19:51:59 -07:00
|
|
|
class WallFuel : public wall_fuel_state {
|
2015-08-23 18:03:42 -07:00
|
|
|
public:
|
2016-01-31 08:01:43 -08:00
|
|
|
/**
|
|
|
|
* @param target desired squirt duration
|
|
|
|
* @return total adjusted fuel squirt duration once wall wetting is taken into effect
|
|
|
|
*/
|
2019-10-16 21:06:54 -07:00
|
|
|
floatms_t adjust(floatms_t target DECLARE_ENGINE_PARAMETER_SUFFIX);
|
|
|
|
floatms_t getWallFuel() const;
|
2019-07-12 19:34:38 -07:00
|
|
|
void resetWF();
|
2019-10-16 19:10:38 -07:00
|
|
|
int invocationCounter = 0;
|
2015-08-21 12:01:36 -07:00
|
|
|
};
|
|
|
|
|
2021-04-21 11:28:48 -07:00
|
|
|
void initAccelEnrichment(DECLARE_ENGINE_PARAMETER_SIGNATURE);
|
2015-12-31 15:02:17 -08:00
|
|
|
|
|
|
|
void setEngineLoadAccelLen(int len);
|
|
|
|
void setEngineLoadAccelThr(float value);
|
|
|
|
void setEngineLoadAccelMult(float value);
|
2017-01-06 13:03:41 -08:00
|
|
|
|
2017-01-06 07:04:41 -08:00
|
|
|
void setTpsAccelThr(float value);
|
|
|
|
void setTpsDecelThr(float value);
|
|
|
|
void setTpsDecelMult(float value);
|
2017-01-06 13:03:41 -08:00
|
|
|
void setTpsAccelLen(int length);
|
|
|
|
|
|
|
|
void setDecelThr(float value);
|
|
|
|
void setDecelMult(float value);
|
2017-01-06 07:04:41 -08:00
|
|
|
|
2016-01-31 12:01:41 -08:00
|
|
|
void updateAccelParameters();
|