Negative timing is not displayed correctly fix #5250

This commit is contained in:
Andrey 2024-03-20 14:43:50 -04:00
parent ef2fe9e33c
commit 5d46bb1074
3 changed files with 26 additions and 4 deletions

View File

@ -40,6 +40,7 @@ Release template (copy/paste this for new release):
- hellen128 better ETB pin choice between rev A/B and C
- Base map values for Open Loop Boost Duty should be 0% #6188
- HPFP control on cam with variable timing #6245
- Negative timing is not displayed correctly fix #5250
### Breaking Changes
- wrong trigger naming for missing teeth #6258

View File

@ -95,6 +95,8 @@ void EngineState::updateSparkSkip() {
#endif // EFI_LAUNCH_CONTROL
}
#define MAKE_HUMAN_READABLE_ADVANCE(advance) (advance > getEngineState()->engineCycle / 2 ? advance - getEngineState()->engineCycle : advance)
void EngineState::periodicFastCallback() {
ScopePerf perf(PE::EngineStatePeriodicFastCallback);
@ -172,8 +174,8 @@ void EngineState::periodicFastCallback() {
// Degrees of timing REMOVED from actual timing during soft RPM limit window
- getLimpManager()->getLimitingTimingRetard();
// these fields are scaled_channel so let's only use for observability, with a local variables holding value while it matters locally
engine->ignitionState.baseIgnitionAdvance = baseAdvance;
engine->ignitionState.correctedIgnitionAdvance = correctedIgnitionAdvance;
engine->ignitionState.baseIgnitionAdvance = MAKE_HUMAN_READABLE_ADVANCE(baseAdvance);
engine->ignitionState.correctedIgnitionAdvance = MAKE_HUMAN_READABLE_ADVANCE(correctedIgnitionAdvance);
// compute per-bank fueling

View File

@ -168,7 +168,26 @@ TEST(ignition, negativeAdvance) {
ASSERT_EQ(0, getAdvanceCorrections(load));
ASSERT_EQ(707, getAdvance(rpm, load));
ASSERT_NEAR(-603.72, engine->ignitionState.baseIgnitionAdvance, EPS4D);
ASSERT_NEAR(-603.72, engine->ignitionState.correctedIgnitionAdvance, EPS4D);
ASSERT_NEAR(-13, engine->ignitionState.baseIgnitionAdvance, EPS4D);
ASSERT_NEAR(-13, engine->ignitionState.correctedIgnitionAdvance, EPS4D);
}
TEST(ignition, negativeAdvance2stroke) {
EngineTestHelper eth(engine_type_e::SACHS);
int rpm = 0;
float load = 50;
ASSERT_EQ(360, getEngineState()->engineCycle);
engineConfiguration->fixedTiming = -13;
engineConfiguration->timingMode = TM_FIXED;
// run the ignition math
engine->periodicFastCallback();
eth.assertRpm(0);
ASSERT_EQ(347, getAdvance(rpm, load));
ASSERT_NEAR(-13, engine->ignitionState.correctedIgnitionAdvance, EPS4D);
}