Skip to content

Commit 80a7b4c

Browse files
committed
Implement Ignition Retard setting rusefi#6783
1 parent d2c90a9 commit 80a7b4c

13 files changed

+104
-4
lines changed

firmware/controllers/algo/advance_map.cpp

+5
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,11 @@ angle_t getRunningAdvance(float rpm, float engineLoad) {
123123
) {
124124
return engineConfiguration->torqueReductionIgnitionRetard;
125125
}
126+
if (engineConfiguration->nitrousControlEnabled
127+
&& engine->module<NitrousController>()->isNitrousConditionSatisfied
128+
) {
129+
advanceAngle -= engineConfiguration->nitrousIgnitionRetard;
130+
}
126131
#endif /* EFI_LAUNCH_CONTROL */
127132

128133
return advanceAngle;

firmware/controllers/algo/engine_configuration_defaults.h

+1
Original file line numberDiff line numberDiff line change
@@ -67,4 +67,5 @@ namespace engine_configuration_defaults {
6767
constexpr uint16_t NITROUS_DEACTIVATION_RPM = 7000;
6868
constexpr uint16_t NITROUS_DEACTIVATION_RPM_WINDOW = 500;
6969
constexpr int8_t NITROUS_FUEL_ADDER_PERCENT = 0;
70+
constexpr float NITROUS_IGNITION_RETARD = 0.0f;
7071
}

firmware/integration/rusefi_config.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1802,8 +1802,8 @@ uint8_t autoscale knockFuelTrim;Fuel trim when knock, max 30%;"%", 1, 0, 0, 30,
18021802
pin_output_mode_e nitrousRelayPinMode;
18031803

18041804
int8_t nitrousFuelAdderPercent;;"%", 1, 0, 0, 100, 0
1805-
1806-
#define END_OF_CALIBRATION_PADDING 72
1805+
float nitrousIgnitionRetard;Retard timing to remove from actual final timing (after all corrections) due to additional air.;"deg", 1, 0, -180, 180, 2
1806+
#define END_OF_CALIBRATION_PADDING 68
18071807
uint8_t[END_OF_CALIBRATION_PADDING] unusedOftenChangesDuringFirmwareUpdate;;"units", 1, 0, 0, 1, 0
18081808

18091809
! end of engine_configuration_s

firmware/tunerstudio/tunerstudio.template.ini

+1
Original file line numberDiff line numberDiff line change
@@ -4999,6 +4999,7 @@ dialog = tcuControls, "Transmission Settings"
49994999
field = "Dectivation RPM", nitrousDeactivationRpm
50005000
field = "Dectivation RPM Window", nitrousDeactivationRpmWindow
50015001
field = "Fuel Adder", nitrousFuelAdderPercent
5002+
field = "Ignition Retard", nitrousIgnitionRetard
50025003

50035004
dialog = NitrousControlSettingsDialog, "", yAxis
50045005
field = "Enable Nitrous Control", nitrousControlEnabled

unit_tests/tests/nitrous_control/nitrous_test_base.cpp

+5-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@
66

77
#include "nitrous_test_base.h"
88

9-
void NitrousTestBase::setUpTestConfiguration(const std::optional<int8_t> nitrousFuelAdderPercent) {
9+
void NitrousTestBase::setUpTestConfiguration(
10+
const std::optional<int8_t> nitrousFuelAdderPercent,
11+
const std::optional<float> nitrousIgnitionRetard
12+
) {
1013
setUpEngineConfiguration(EngineConfig()
1114
.setNitrousControlEnabled({ true })
1215
.setNitrousControlArmingMethod({ DIGITAL_SWITCH_INPUT })
@@ -19,6 +22,7 @@ void NitrousTestBase::setUpTestConfiguration(const std::optional<int8_t> nitrous
1922
.setNitrousDeactivationRpm({ TEST_DEACTIVATION_RPM })
2023
.setNitrousDeactivationRpmWindow({ TEST_DEACTIVATION_RPM_WINDOW })
2124
.setNitrousFuelAdderPercent(nitrousFuelAdderPercent)
25+
.setNitrousIgnitionRetard(nitrousIgnitionRetard)
2226
);
2327
}
2428

unit_tests/tests/nitrous_control/nitrous_test_base.h

+4-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,10 @@ class NitrousTestBase : public TestBase {
2020
static constexpr uint16_t TEST_DEACTIVATION_RPM = 932;
2121
static constexpr uint16_t TEST_DEACTIVATION_RPM_WINDOW = 17;
2222

23-
void setUpTestConfiguration(std::optional<int8_t> nitrousFuelAdderPercent = {});
23+
void setUpTestConfiguration(
24+
std::optional<int8_t> nitrousFuelAdderPercent = {},
25+
std::optional<float> nitrousIgnitionRetard = {}
26+
);
2427

2528
void armNitrousControl();
2629
void satisfyTpsCondition();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
//
2+
// Created by kifir on 12/6/24.
3+
//
4+
5+
#include "pch.h"
6+
7+
#include "nitrous_test_base.h"
8+
9+
namespace {
10+
class NitrousIgnitionRetardTest : public NitrousTestBase {
11+
protected:
12+
static constexpr float EXPECTED_BASE_IGNITION_ADVANCE = 10.5f;
13+
static constexpr float TEST_NITROUS_IGNITION_RETARD = 1.78f;
14+
15+
void checkBaseIgnitionAdvance(float expectedBaseIgnitionAdvance, const char* context);
16+
};
17+
18+
void NitrousIgnitionRetardTest::checkBaseIgnitionAdvance(
19+
const float expectedBaseIgnitionAdvance,
20+
const char* const context
21+
) {
22+
periodicFastCallback();
23+
EXPECT_NEAR(expectedBaseIgnitionAdvance, engine->ignitionState.baseIgnitionAdvance, EPS5D) << context;
24+
}
25+
26+
TEST_F(NitrousIgnitionRetardTest, checkDefaultIgnitionRetardCorrection) {
27+
setUpTestConfiguration();
28+
checkBaseIgnitionAdvance(EXPECTED_BASE_IGNITION_ADVANCE, "Default");
29+
30+
activateNitrousControl();
31+
checkBaseIgnitionAdvance(EXPECTED_BASE_IGNITION_ADVANCE, "All conditions are satisfied");
32+
33+
deactivateNitrousControl();
34+
checkBaseIgnitionAdvance(EXPECTED_BASE_IGNITION_ADVANCE, "No conditions are satisfied");
35+
}
36+
37+
TEST_F(NitrousIgnitionRetardTest, checkZeroIgnitionRetardCorrection) {
38+
setUpTestConfiguration(/* nitrousFuelAdderPercent = */ {}, /* nitrousIgnitionRetard = */ { 0.0f });
39+
checkBaseIgnitionAdvance(EXPECTED_BASE_IGNITION_ADVANCE, "Default");
40+
41+
activateNitrousControl();
42+
checkBaseIgnitionAdvance(EXPECTED_BASE_IGNITION_ADVANCE, "All conditions are satisfied");
43+
44+
deactivateNitrousControl();
45+
checkBaseIgnitionAdvance(EXPECTED_BASE_IGNITION_ADVANCE, "No conditions are satisfied");
46+
}
47+
48+
TEST_F(NitrousIgnitionRetardTest, checkIgnitionRetardCorrection) {
49+
setUpTestConfiguration(
50+
/* nitrousFuelAdderPercent = */ {},
51+
/* nitrousIgnitionRetard = */ { TEST_NITROUS_IGNITION_RETARD }
52+
);
53+
checkBaseIgnitionAdvance(EXPECTED_BASE_IGNITION_ADVANCE, "Default");
54+
55+
activateNitrousControl();
56+
checkBaseIgnitionAdvance(
57+
EXPECTED_BASE_IGNITION_ADVANCE - TEST_NITROUS_IGNITION_RETARD,
58+
"All conditions are satisfied"
59+
);
60+
61+
deactivateNitrousControl();
62+
checkBaseIgnitionAdvance(EXPECTED_BASE_IGNITION_ADVANCE, "No conditions are satisfied");
63+
}
64+
}

unit_tests/tests/tests.mk

+1
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ TESTS_SRC_CPP = \
8080
tests/nitrous_control/test_nitrous_rpm_condition.cpp \
8181
tests/nitrous_control/test_nitrous_condition.cpp \
8282
tests/nitrous_control/test_nitrous_fuel_adder.cpp \
83+
tests/nitrous_control/test_nitrous_ignition_retard.cpp \
8384
tests/test_fft.cpp \
8485
tests/lua/test_lua_basic.cpp \
8586
tests/lua/test_bit_range_msb.cpp \

unit_tests/tests/util/engine_config.cpp

+5
Original file line numberDiff line numberDiff line change
@@ -258,3 +258,8 @@ EngineConfig EngineConfig::setNitrousFuelAdderPercent(const std::optional<int8_t
258258
m_nitrousFuelAdderPercent = value;
259259
return *this;
260260
}
261+
262+
EngineConfig EngineConfig::setNitrousIgnitionRetard(const std::optional<float> value) {
263+
m_nitrousIgnitionRetard = value;
264+
return *this;
265+
}

unit_tests/tests/util/engine_config.h

+3
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ class EngineConfig {
7777
std::optional<uint16_t> getNitrousDeactivationRpm() const { return m_nitrousDeactivationRpm; }
7878
std::optional<uint16_t> getNitrousDeactivationRpmWindow() const { return m_nitrousDeactivationRpmWindow; }
7979
std::optional<int8_t> getNitrousFuelAdderPercent() const { return m_nitrousFuelAdderPercent; }
80+
std::optional<float> getNitrousIgnitionRetard() const { return m_nitrousIgnitionRetard; }
8081

8182
// We do not core about performance in tests, but we want to use builder-like style, so setters return new instance
8283
// of configuration:
@@ -143,6 +144,7 @@ class EngineConfig {
143144
EngineConfig setNitrousDeactivationRpm(std::optional<uint16_t> value);
144145
EngineConfig setNitrousDeactivationRpmWindow(std::optional<uint16_t> value);
145146
EngineConfig setNitrousFuelAdderPercent(std::optional<int8_t> value);
147+
EngineConfig setNitrousIgnitionRetard(std::optional<float> value);
146148
private:
147149
// Launch Control
148150
std::optional<switch_input_pin_e> m_launchActivatePin;
@@ -206,4 +208,5 @@ class EngineConfig {
206208
std::optional<uint16_t> m_nitrousDeactivationRpm;
207209
std::optional<uint16_t> m_nitrousDeactivationRpmWindow;
208210
std::optional<int8_t> m_nitrousFuelAdderPercent;
211+
std::optional<float> m_nitrousIgnitionRetard;
209212
};

unit_tests/tests/util/test_base.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ void TestBase::setUpEngineConfiguration(const EngineConfig& config) {
9999
getTestEngineConfiguration().configureNitrousFuelAdderPercent(
100100
config.getNitrousFuelAdderPercent()
101101
);
102+
getTestEngineConfiguration().configureNitrousIgnitionRetard(config.getNitrousIgnitionRetard());
102103
}
103104

104105
void TestBase::periodicFastCallback() {

unit_tests/tests/util/test_engine_configuration.cpp

+11
Original file line numberDiff line numberDiff line change
@@ -567,6 +567,17 @@ void TestEngineConfiguration::configureNitrousFuelAdderPercent(const std::option
567567
}
568568
}
569569

570+
void TestEngineConfiguration::configureNitrousIgnitionRetard(const std::optional<float> nitrousIgnitionRetard) {
571+
if (nitrousIgnitionRetard.has_value()) {
572+
engineConfiguration->nitrousIgnitionRetard = nitrousIgnitionRetard.value();
573+
} else {
574+
ASSERT_EQ(
575+
engineConfiguration->nitrousIgnitionRetard,
576+
engine_configuration_defaults::NITROUS_IGNITION_RETARD
577+
); // check default value
578+
}
579+
}
580+
570581
TestEngineConfiguration::TestEngineConfiguration() {
571582
}
572583

unit_tests/tests/util/test_engine_configuration.h

+1
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ class TestEngineConfiguration {
8080
void configureNitrousDeactivationRpm(std::optional<uint16_t> nitrousDeactivationRpm);
8181
void configureNitrousDeactivationRpmWindow(std::optional<uint16_t> nitrousDeactivationRpmWindow);
8282
void configureNitrousFuelAdderPercent(std::optional<int8_t> nitrousFuelAdderPercent);
83+
void configureNitrousIgnitionRetard(std::optional<float> nitrousIgnitionRetard);
8384
private:
8485
TestEngineConfiguration();
8586
static TestEngineConfiguration instance;

0 commit comments

Comments
 (0)