mirror of https://github.com/rusefi/rusefi.git
parent
db09833774
commit
c8b998a911
|
@ -13,6 +13,7 @@
|
||||||
#include "advance_map.h"
|
#include "advance_map.h"
|
||||||
#include "engine_state.h"
|
#include "engine_state.h"
|
||||||
#include "advance_map.h"
|
#include "advance_map.h"
|
||||||
|
#include "fuel_math.h"
|
||||||
|
|
||||||
bool AntilagSystemBase::isInsideALSSwitchCondition() {
|
bool AntilagSystemBase::isInsideALSSwitchCondition() {
|
||||||
isALSSwitchActivated = engineConfiguration->antiLagActivationMode == SWITCH_INPUT_ANTILAG;
|
isALSSwitchActivated = engineConfiguration->antiLagActivationMode == SWITCH_INPUT_ANTILAG;
|
||||||
|
@ -32,15 +33,11 @@ bool AntilagSystemBase::isInsideALSSwitchCondition() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AntilagSystemBase::isALSMinRPMCondition() const {
|
bool AntilagSystemBase::isALSMinRPMCondition(int rpm) const {
|
||||||
int rpm = Sensor::getOrZero(SensorType::Rpm);
|
|
||||||
|
|
||||||
return engineConfiguration->ALSMinRPM < rpm;
|
return engineConfiguration->ALSMinRPM < rpm;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AntilagSystemBase::isALSMaxRPMCondition() const {
|
bool AntilagSystemBase::isALSMaxRPMCondition(int rpm) const {
|
||||||
int rpm = Sensor::getOrZero(SensorType::Rpm);
|
|
||||||
|
|
||||||
return engineConfiguration->ALSMaxRPM > rpm;
|
return engineConfiguration->ALSMaxRPM > rpm;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -62,10 +59,11 @@ bool AntilagSystemBase::isALSMaxThrottleIntentCondition() const {
|
||||||
return engineConfiguration->ALSMaxTPS > throttleIntent;
|
return engineConfiguration->ALSMaxTPS > throttleIntent;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AntilagSystemBase::isAntilagConditionMet() {
|
bool AntilagSystemBase::isAntilagConditionMet(int rpm) {
|
||||||
|
|
||||||
ALSMinRPMCondition = isALSMinRPMCondition();
|
|
||||||
ALSMaxRPMCondition = isALSMaxRPMCondition();
|
ALSMinRPMCondition = isALSMinRPMCondition(rpm);
|
||||||
|
ALSMaxRPMCondition = isALSMaxRPMCondition(rpm);
|
||||||
ALSMinCLTCondition = isALSMinCLTCondition();
|
ALSMinCLTCondition = isALSMinCLTCondition();
|
||||||
ALSMaxCLTCondition = isALSMaxCLTCondition();
|
ALSMaxCLTCondition = isALSMaxCLTCondition();
|
||||||
ALSMaxThrottleIntentCondition = isALSMaxThrottleIntentCondition();
|
ALSMaxThrottleIntentCondition = isALSMaxThrottleIntentCondition();
|
||||||
|
@ -80,7 +78,12 @@ bool AntilagSystemBase::isAntilagConditionMet() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void AntilagSystemBase::update() {
|
void AntilagSystemBase::update() {
|
||||||
isAntilagCondition = engineConfiguration->antiLagEnabled && isAntilagConditionMet();
|
int rpm = Sensor::getOrZero(SensorType::Rpm);
|
||||||
|
isAntilagCondition = engineConfiguration->antiLagEnabled && isAntilagConditionMet(rpm);
|
||||||
|
|
||||||
|
#if EFI_ANTILAG_SYSTEM
|
||||||
|
fuelALSCorrection = getFuelALSCorrection(rpm);
|
||||||
|
#endif // EFI_ANTILAG_SYSTEM
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* EFI_ANTILAG_SYSTEM */
|
#endif /* EFI_ANTILAG_SYSTEM */
|
||||||
|
|
|
@ -16,12 +16,12 @@ class AntilagSystemBase : public antilag_system_state_s {
|
||||||
public:
|
public:
|
||||||
void update();
|
void update();
|
||||||
|
|
||||||
bool isALSMinRPMCondition() const;
|
bool isALSMinRPMCondition(int rpm) const;
|
||||||
bool isALSMaxRPMCondition() const;
|
bool isALSMaxRPMCondition(int rpm) const;
|
||||||
bool isALSMinCLTCondition() const;
|
bool isALSMinCLTCondition() const;
|
||||||
bool isALSMaxCLTCondition() const;
|
bool isALSMaxCLTCondition() const;
|
||||||
bool isALSMaxThrottleIntentCondition() const;
|
bool isALSMaxThrottleIntentCondition() const;
|
||||||
bool isInsideALSSwitchCondition();
|
bool isInsideALSSwitchCondition();
|
||||||
/* enabled and all conditions above */
|
/* enabled and all conditions above */
|
||||||
bool isAntilagConditionMet();
|
bool isAntilagConditionMet(int rpm);
|
||||||
};
|
};
|
||||||
|
|
|
@ -130,7 +130,7 @@ float getRunningFuel(float baseFuel) {
|
||||||
float runningFuel = baseFuel * baroCorrection * iatCorrection * cltCorrection * postCrankingFuelCorrection;
|
float runningFuel = baseFuel * baroCorrection * iatCorrection * cltCorrection * postCrankingFuelCorrection;
|
||||||
|
|
||||||
#if EFI_ANTILAG_SYSTEM
|
#if EFI_ANTILAG_SYSTEM
|
||||||
runningFuel *= (1 + engine->antilagController.fuelALSCorrection);
|
runningFuel *= (1 + engine->antilagController.fuelALSCorrection / 100);
|
||||||
#endif /* EFI_ANTILAG_SYSTEM */
|
#endif /* EFI_ANTILAG_SYSTEM */
|
||||||
|
|
||||||
#if EFI_LAUNCH_CONTROL
|
#if EFI_LAUNCH_CONTROL
|
||||||
|
@ -395,21 +395,20 @@ float getBaroCorrection() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
auto tps = Sensor::get(SensorType::Tps1);
|
percent_t getFuelALSCorrection(int rpm) {
|
||||||
auto rpm = Sensor::get(SensorType::Rpm);
|
|
||||||
float getfuelALSCorrection(int rpm, float engineLoad) {
|
|
||||||
#if EFI_ANTILAG_SYSTEM
|
#if EFI_ANTILAG_SYSTEM
|
||||||
if (engine->antilagController.isAntilagCondition) {
|
if (engine->antilagController.isAntilagCondition) {
|
||||||
|
float throttleIntent = Sensor::getOrZero(SensorType::DriverThrottleIntent);
|
||||||
auto AlsFuelAdd = interpolate3d(
|
auto AlsFuelAdd = interpolate3d(
|
||||||
config->ALSFuelAdjustment,
|
config->ALSFuelAdjustment,
|
||||||
config->alsFuelAdjustmentLoadBins, tps.Value,
|
config->alsFuelAdjustmentLoadBins, throttleIntent,
|
||||||
config->alsFuelAdjustmentrpmBins, rpm
|
config->alsFuelAdjustmentrpmBins, rpm
|
||||||
);
|
);
|
||||||
return AlsFuelAdd;
|
return AlsFuelAdd;
|
||||||
} else
|
} else
|
||||||
#endif /* EFI_ANTILAG_SYSTEM */
|
#endif /* EFI_ANTILAG_SYSTEM */
|
||||||
{
|
{
|
||||||
return 1;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@ void initFuelMap();
|
||||||
float getRunningFuel(float baseFuel);
|
float getRunningFuel(float baseFuel);
|
||||||
|
|
||||||
float getBaroCorrection();
|
float getBaroCorrection();
|
||||||
float getfuelALSCorrection(int rpm, float engineLoad);
|
percent_t getFuelALSCorrection(int rpm);
|
||||||
int getNumberOfInjections(injection_mode_e mode);
|
int getNumberOfInjections(injection_mode_e mode);
|
||||||
angle_t getInjectionOffset(float rpm, float load);
|
angle_t getInjectionOffset(float rpm, float load);
|
||||||
float getIatFuelCorrection();
|
float getIatFuelCorrection();
|
||||||
|
|
|
@ -1,24 +1,36 @@
|
||||||
#include "pch.h"
|
#include "pch.h"
|
||||||
|
#include "fuel_math.h"
|
||||||
|
|
||||||
TEST(Actuators, AntiLag) {
|
TEST(Actuators, AntiLag) {
|
||||||
EngineTestHelper eth(TEST_ENGINE);
|
EngineTestHelper eth(TEST_ENGINE);
|
||||||
|
|
||||||
engineConfiguration->antiLagEnabled = true;
|
engineConfiguration->antiLagEnabled = true;
|
||||||
|
|
||||||
|
setTable(config->ALSFuelAdjustment, 50 /* percent */);
|
||||||
Sensor::setMockValue(SensorType::Clt, 70);
|
Sensor::setMockValue(SensorType::Clt, 70);
|
||||||
|
Sensor::setMockValue(SensorType::Rpm, 1000);
|
||||||
|
Sensor::setMockValue(SensorType::Tps1, 1);
|
||||||
|
Sensor::setMockValue(SensorType::AcceleratorPedal, 1);
|
||||||
|
|
||||||
engineConfiguration->antiLagActivationMode = SWITCH_INPUT_ANTILAG;
|
engineConfiguration->antiLagActivationMode = SWITCH_INPUT_ANTILAG;
|
||||||
engine->periodicFastCallback();
|
engine->periodicFastCallback();
|
||||||
|
float fuelWithCorrections = 1.01;
|
||||||
|
ASSERT_NEAR(fuelWithCorrections, getRunningFuel(1), EPS4D);
|
||||||
// in unit tests we pretend that physical swiych is always OFF
|
// in unit tests we pretend that physical swiych is always OFF
|
||||||
ASSERT_EQ(0, engine->antilagController.ALSSwitchCondition);
|
ASSERT_EQ(0, engine->antilagController.ALSSwitchCondition);
|
||||||
|
ASSERT_EQ(0.0, engine->antilagController.fuelALSCorrection);
|
||||||
|
|
||||||
engineConfiguration->antiLagActivationMode = ALWAYS_ON_ANTILAG;
|
engineConfiguration->antiLagActivationMode = ALWAYS_ON_ANTILAG;
|
||||||
engine->periodicFastCallback();
|
engine->periodicFastCallback();
|
||||||
ASSERT_EQ(1, engine->antilagController.ALSSwitchCondition);
|
ASSERT_EQ(1, engine->antilagController.ALSSwitchCondition);
|
||||||
|
ASSERT_NEAR(50, engine->antilagController.fuelALSCorrection, EPS4D);
|
||||||
|
|
||||||
|
ASSERT_EQ(1, engine->antilagController.ALSMinRPMCondition);
|
||||||
|
ASSERT_EQ(1, engine->antilagController.ALSMaxRPMCondition);
|
||||||
ASSERT_EQ(1, engine->antilagController.ALSMinCLTCondition);
|
ASSERT_EQ(1, engine->antilagController.ALSMinCLTCondition);
|
||||||
ASSERT_EQ(1, engine->antilagController.ALSMaxCLTCondition);
|
ASSERT_EQ(1, engine->antilagController.ALSMaxCLTCondition);
|
||||||
|
ASSERT_EQ(1, engine->antilagController.ALSMaxThrottleIntentCondition);
|
||||||
|
|
||||||
// todo: let's have this 'true'
|
ASSERT_EQ(1, engine->antilagController.isAntilagCondition);
|
||||||
ASSERT_EQ(0, engine->antilagController.isAntilagCondition);
|
ASSERT_NEAR(1.5 * fuelWithCorrections, getRunningFuel(1), EPS4D);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue