Timing showing crazy negative values like -595 #5250

only:tdd
This commit is contained in:
Andrey 2024-03-20 14:05:56 -04:00
parent 1b5e455188
commit ef2fe9e33c
3 changed files with 31 additions and 3 deletions

View File

@ -39,7 +39,7 @@ static Map3D<TRACTION_CONTROL_ETB_DROP_SIZE, TRACTION_CONTROL_ETB_DROP_SIZE, int
/**
* @return ignition timing angle advance before TDC
*/
static angle_t getRunningAdvance(int rpm, float engineLoad) {
angle_t getRunningAdvance(int rpm, float engineLoad) {
if (engineConfiguration->timingMode == TM_FIXED) {
return engineConfiguration->fixedTiming;
}
@ -120,7 +120,7 @@ static angle_t getRunningAdvance(int rpm, float engineLoad) {
return advanceAngle;
}
static angle_t getAdvanceCorrections(float engineLoad) {
angle_t getAdvanceCorrections(float engineLoad) {
auto iat = Sensor::get(SensorType::Iat);
if (!iat) {
@ -151,7 +151,7 @@ static angle_t getAdvanceCorrections(float engineLoad) {
/**
* @return ignition timing angle advance before TDC for Cranking
*/
static angle_t getCrankingAdvance(int rpm, float engineLoad) {
angle_t getCrankingAdvance(int rpm, float engineLoad) {
// get advance from the separate table for Cranking
if (engineConfiguration->useSeparateAdvanceForCranking) {
return interpolate2d(rpm, config->crankingAdvanceBins, config->crankingAdvance);

View File

@ -15,6 +15,10 @@ angle_t getCylinderIgnitionTrim(size_t cylinderNumber, int rpm, float ignitionLo
* this method is used to build default advance map
*/
float getInitialAdvance(int rpm, float map, float advanceMax);
// public only for unit tests
angle_t getCrankingAdvance(int rpm, float engineLoad);
angle_t getRunningAdvance(int rpm, float engineLoad);
angle_t getAdvanceCorrections(float engineLoad);
size_t getMultiSparkCount(int rpm);
void initIgnitionAdvanceControl();

View File

@ -6,6 +6,7 @@
*/
#include "pch.h"
#include "defaults.h"
#include "spark_logic.h"
using ::testing::_;
@ -148,3 +149,26 @@ TEST(ignition, CylinderTimingTrim) {
EXPECT_NEAR(engine->engineState.timingAdvance[2], unadjusted + 2, EPS4D);
EXPECT_NEAR(engine->engineState.timingAdvance[3], unadjusted + 4, EPS4D);
}
TEST(ignition, negativeAdvance) {
EngineTestHelper eth(engine_type_e::TEST_ENGINE);
int rpm = 0;
float load = 50;
engineConfiguration->fixedTiming = -13;
engineConfiguration->timingMode = TM_FIXED;
// run the ignition math
engine->periodicFastCallback();
eth.assertRpm(0);
ASSERT_EQ(DEFAULT_CRANKING_ANGLE, getCrankingAdvance(rpm, load));
ASSERT_EQ(-13, getRunningAdvance(rpm, load));
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);
}