Implement `Ignition Retard` setting #6783
This commit is contained in:
parent
d2c90a9199
commit
80a7b4c436
|
@ -123,6 +123,11 @@ angle_t getRunningAdvance(float rpm, float engineLoad) {
|
|||
) {
|
||||
return engineConfiguration->torqueReductionIgnitionRetard;
|
||||
}
|
||||
if (engineConfiguration->nitrousControlEnabled
|
||||
&& engine->module<NitrousController>()->isNitrousConditionSatisfied
|
||||
) {
|
||||
advanceAngle -= engineConfiguration->nitrousIgnitionRetard;
|
||||
}
|
||||
#endif /* EFI_LAUNCH_CONTROL */
|
||||
|
||||
return advanceAngle;
|
||||
|
|
|
@ -67,4 +67,5 @@ namespace engine_configuration_defaults {
|
|||
constexpr uint16_t NITROUS_DEACTIVATION_RPM = 7000;
|
||||
constexpr uint16_t NITROUS_DEACTIVATION_RPM_WINDOW = 500;
|
||||
constexpr int8_t NITROUS_FUEL_ADDER_PERCENT = 0;
|
||||
constexpr float NITROUS_IGNITION_RETARD = 0.0f;
|
||||
}
|
||||
|
|
|
@ -1802,8 +1802,8 @@ uint8_t autoscale knockFuelTrim;Fuel trim when knock, max 30%;"%", 1, 0, 0, 30,
|
|||
pin_output_mode_e nitrousRelayPinMode;
|
||||
|
||||
int8_t nitrousFuelAdderPercent;;"%", 1, 0, 0, 100, 0
|
||||
|
||||
#define END_OF_CALIBRATION_PADDING 72
|
||||
float nitrousIgnitionRetard;Retard timing to remove from actual final timing (after all corrections) due to additional air.;"deg", 1, 0, -180, 180, 2
|
||||
#define END_OF_CALIBRATION_PADDING 68
|
||||
uint8_t[END_OF_CALIBRATION_PADDING] unusedOftenChangesDuringFirmwareUpdate;;"units", 1, 0, 0, 1, 0
|
||||
|
||||
! end of engine_configuration_s
|
||||
|
|
|
@ -4999,6 +4999,7 @@ dialog = tcuControls, "Transmission Settings"
|
|||
field = "Dectivation RPM", nitrousDeactivationRpm
|
||||
field = "Dectivation RPM Window", nitrousDeactivationRpmWindow
|
||||
field = "Fuel Adder", nitrousFuelAdderPercent
|
||||
field = "Ignition Retard", nitrousIgnitionRetard
|
||||
|
||||
dialog = NitrousControlSettingsDialog, "", yAxis
|
||||
field = "Enable Nitrous Control", nitrousControlEnabled
|
||||
|
|
|
@ -6,7 +6,10 @@
|
|||
|
||||
#include "nitrous_test_base.h"
|
||||
|
||||
void NitrousTestBase::setUpTestConfiguration(const std::optional<int8_t> nitrousFuelAdderPercent) {
|
||||
void NitrousTestBase::setUpTestConfiguration(
|
||||
const std::optional<int8_t> nitrousFuelAdderPercent,
|
||||
const std::optional<float> nitrousIgnitionRetard
|
||||
) {
|
||||
setUpEngineConfiguration(EngineConfig()
|
||||
.setNitrousControlEnabled({ true })
|
||||
.setNitrousControlArmingMethod({ DIGITAL_SWITCH_INPUT })
|
||||
|
@ -19,6 +22,7 @@ void NitrousTestBase::setUpTestConfiguration(const std::optional<int8_t> nitrous
|
|||
.setNitrousDeactivationRpm({ TEST_DEACTIVATION_RPM })
|
||||
.setNitrousDeactivationRpmWindow({ TEST_DEACTIVATION_RPM_WINDOW })
|
||||
.setNitrousFuelAdderPercent(nitrousFuelAdderPercent)
|
||||
.setNitrousIgnitionRetard(nitrousIgnitionRetard)
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -20,7 +20,10 @@ protected:
|
|||
static constexpr uint16_t TEST_DEACTIVATION_RPM = 932;
|
||||
static constexpr uint16_t TEST_DEACTIVATION_RPM_WINDOW = 17;
|
||||
|
||||
void setUpTestConfiguration(std::optional<int8_t> nitrousFuelAdderPercent = {});
|
||||
void setUpTestConfiguration(
|
||||
std::optional<int8_t> nitrousFuelAdderPercent = {},
|
||||
std::optional<float> nitrousIgnitionRetard = {}
|
||||
);
|
||||
|
||||
void armNitrousControl();
|
||||
void satisfyTpsCondition();
|
||||
|
|
|
@ -0,0 +1,64 @@
|
|||
//
|
||||
// Created by kifir on 12/6/24.
|
||||
//
|
||||
|
||||
#include "pch.h"
|
||||
|
||||
#include "nitrous_test_base.h"
|
||||
|
||||
namespace {
|
||||
class NitrousIgnitionRetardTest : public NitrousTestBase {
|
||||
protected:
|
||||
static constexpr float EXPECTED_BASE_IGNITION_ADVANCE = 10.5f;
|
||||
static constexpr float TEST_NITROUS_IGNITION_RETARD = 1.78f;
|
||||
|
||||
void checkBaseIgnitionAdvance(float expectedBaseIgnitionAdvance, const char* context);
|
||||
};
|
||||
|
||||
void NitrousIgnitionRetardTest::checkBaseIgnitionAdvance(
|
||||
const float expectedBaseIgnitionAdvance,
|
||||
const char* const context
|
||||
) {
|
||||
periodicFastCallback();
|
||||
EXPECT_NEAR(expectedBaseIgnitionAdvance, engine->ignitionState.baseIgnitionAdvance, EPS5D) << context;
|
||||
}
|
||||
|
||||
TEST_F(NitrousIgnitionRetardTest, checkDefaultIgnitionRetardCorrection) {
|
||||
setUpTestConfiguration();
|
||||
checkBaseIgnitionAdvance(EXPECTED_BASE_IGNITION_ADVANCE, "Default");
|
||||
|
||||
activateNitrousControl();
|
||||
checkBaseIgnitionAdvance(EXPECTED_BASE_IGNITION_ADVANCE, "All conditions are satisfied");
|
||||
|
||||
deactivateNitrousControl();
|
||||
checkBaseIgnitionAdvance(EXPECTED_BASE_IGNITION_ADVANCE, "No conditions are satisfied");
|
||||
}
|
||||
|
||||
TEST_F(NitrousIgnitionRetardTest, checkZeroIgnitionRetardCorrection) {
|
||||
setUpTestConfiguration(/* nitrousFuelAdderPercent = */ {}, /* nitrousIgnitionRetard = */ { 0.0f });
|
||||
checkBaseIgnitionAdvance(EXPECTED_BASE_IGNITION_ADVANCE, "Default");
|
||||
|
||||
activateNitrousControl();
|
||||
checkBaseIgnitionAdvance(EXPECTED_BASE_IGNITION_ADVANCE, "All conditions are satisfied");
|
||||
|
||||
deactivateNitrousControl();
|
||||
checkBaseIgnitionAdvance(EXPECTED_BASE_IGNITION_ADVANCE, "No conditions are satisfied");
|
||||
}
|
||||
|
||||
TEST_F(NitrousIgnitionRetardTest, checkIgnitionRetardCorrection) {
|
||||
setUpTestConfiguration(
|
||||
/* nitrousFuelAdderPercent = */ {},
|
||||
/* nitrousIgnitionRetard = */ { TEST_NITROUS_IGNITION_RETARD }
|
||||
);
|
||||
checkBaseIgnitionAdvance(EXPECTED_BASE_IGNITION_ADVANCE, "Default");
|
||||
|
||||
activateNitrousControl();
|
||||
checkBaseIgnitionAdvance(
|
||||
EXPECTED_BASE_IGNITION_ADVANCE - TEST_NITROUS_IGNITION_RETARD,
|
||||
"All conditions are satisfied"
|
||||
);
|
||||
|
||||
deactivateNitrousControl();
|
||||
checkBaseIgnitionAdvance(EXPECTED_BASE_IGNITION_ADVANCE, "No conditions are satisfied");
|
||||
}
|
||||
}
|
|
@ -80,6 +80,7 @@ TESTS_SRC_CPP = \
|
|||
tests/nitrous_control/test_nitrous_rpm_condition.cpp \
|
||||
tests/nitrous_control/test_nitrous_condition.cpp \
|
||||
tests/nitrous_control/test_nitrous_fuel_adder.cpp \
|
||||
tests/nitrous_control/test_nitrous_ignition_retard.cpp \
|
||||
tests/test_fft.cpp \
|
||||
tests/lua/test_lua_basic.cpp \
|
||||
tests/lua/test_bit_range_msb.cpp \
|
||||
|
|
|
@ -258,3 +258,8 @@ EngineConfig EngineConfig::setNitrousFuelAdderPercent(const std::optional<int8_t
|
|||
m_nitrousFuelAdderPercent = value;
|
||||
return *this;
|
||||
}
|
||||
|
||||
EngineConfig EngineConfig::setNitrousIgnitionRetard(const std::optional<float> value) {
|
||||
m_nitrousIgnitionRetard = value;
|
||||
return *this;
|
||||
}
|
|
@ -77,6 +77,7 @@ public:
|
|||
std::optional<uint16_t> getNitrousDeactivationRpm() const { return m_nitrousDeactivationRpm; }
|
||||
std::optional<uint16_t> getNitrousDeactivationRpmWindow() const { return m_nitrousDeactivationRpmWindow; }
|
||||
std::optional<int8_t> getNitrousFuelAdderPercent() const { return m_nitrousFuelAdderPercent; }
|
||||
std::optional<float> getNitrousIgnitionRetard() const { return m_nitrousIgnitionRetard; }
|
||||
|
||||
// We do not core about performance in tests, but we want to use builder-like style, so setters return new instance
|
||||
// of configuration:
|
||||
|
@ -143,6 +144,7 @@ public:
|
|||
EngineConfig setNitrousDeactivationRpm(std::optional<uint16_t> value);
|
||||
EngineConfig setNitrousDeactivationRpmWindow(std::optional<uint16_t> value);
|
||||
EngineConfig setNitrousFuelAdderPercent(std::optional<int8_t> value);
|
||||
EngineConfig setNitrousIgnitionRetard(std::optional<float> value);
|
||||
private:
|
||||
// Launch Control
|
||||
std::optional<switch_input_pin_e> m_launchActivatePin;
|
||||
|
@ -206,4 +208,5 @@ private:
|
|||
std::optional<uint16_t> m_nitrousDeactivationRpm;
|
||||
std::optional<uint16_t> m_nitrousDeactivationRpmWindow;
|
||||
std::optional<int8_t> m_nitrousFuelAdderPercent;
|
||||
std::optional<float> m_nitrousIgnitionRetard;
|
||||
};
|
|
@ -99,6 +99,7 @@ void TestBase::setUpEngineConfiguration(const EngineConfig& config) {
|
|||
getTestEngineConfiguration().configureNitrousFuelAdderPercent(
|
||||
config.getNitrousFuelAdderPercent()
|
||||
);
|
||||
getTestEngineConfiguration().configureNitrousIgnitionRetard(config.getNitrousIgnitionRetard());
|
||||
}
|
||||
|
||||
void TestBase::periodicFastCallback() {
|
||||
|
|
|
@ -567,6 +567,17 @@ void TestEngineConfiguration::configureNitrousFuelAdderPercent(const std::option
|
|||
}
|
||||
}
|
||||
|
||||
void TestEngineConfiguration::configureNitrousIgnitionRetard(const std::optional<float> nitrousIgnitionRetard) {
|
||||
if (nitrousIgnitionRetard.has_value()) {
|
||||
engineConfiguration->nitrousIgnitionRetard = nitrousIgnitionRetard.value();
|
||||
} else {
|
||||
ASSERT_EQ(
|
||||
engineConfiguration->nitrousIgnitionRetard,
|
||||
engine_configuration_defaults::NITROUS_IGNITION_RETARD
|
||||
); // check default value
|
||||
}
|
||||
}
|
||||
|
||||
TestEngineConfiguration::TestEngineConfiguration() {
|
||||
}
|
||||
|
||||
|
|
|
@ -80,6 +80,7 @@ public:
|
|||
void configureNitrousDeactivationRpm(std::optional<uint16_t> nitrousDeactivationRpm);
|
||||
void configureNitrousDeactivationRpmWindow(std::optional<uint16_t> nitrousDeactivationRpmWindow);
|
||||
void configureNitrousFuelAdderPercent(std::optional<int8_t> nitrousFuelAdderPercent);
|
||||
void configureNitrousIgnitionRetard(std::optional<float> nitrousIgnitionRetard);
|
||||
private:
|
||||
TestEngineConfiguration();
|
||||
static TestEngineConfiguration instance;
|
||||
|
|
Loading…
Reference in New Issue