parent
d8607aa1af
commit
5b7023cf49
|
@ -105,9 +105,12 @@ void EngineState::periodicFastCallback() {
|
||||||
if (!engine->slowCallBackWasInvoked) {
|
if (!engine->slowCallBackWasInvoked) {
|
||||||
warning(ObdCode::CUSTOM_SLOW_NOT_INVOKED, "Slow not invoked yet");
|
warning(ObdCode::CUSTOM_SLOW_NOT_INVOKED, "Slow not invoked yet");
|
||||||
}
|
}
|
||||||
efitick_t nowNt = getTimeNowNt();
|
|
||||||
|
|
||||||
if (engine->rpmCalculator.isCranking()) {
|
efitick_t nowNt = getTimeNowNt();
|
||||||
|
bool isCranking = engine->rpmCalculator.isCranking();
|
||||||
|
float rpm = Sensor::getOrZero(SensorType::Rpm);
|
||||||
|
|
||||||
|
if (isCranking) {
|
||||||
crankingTimer.reset(nowNt);
|
crankingTimer.reset(nowNt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -117,8 +120,7 @@ void EngineState::periodicFastCallback() {
|
||||||
recalculateAuxValveTiming();
|
recalculateAuxValveTiming();
|
||||||
#endif //EFI_AUX_VALVES
|
#endif //EFI_AUX_VALVES
|
||||||
|
|
||||||
float rpm = Sensor::getOrZero(SensorType::Rpm);
|
engine->ignitionState.updateDwell(rpm, isCranking);
|
||||||
engine->ignitionState.updateDwell(rpm);
|
|
||||||
|
|
||||||
// todo: move this into slow callback, no reason for IAT corr to be here
|
// todo: move this into slow callback, no reason for IAT corr to be here
|
||||||
engine->fuelComputer.running.intakeTemperatureCoefficient = getIatFuelCorrection();
|
engine->fuelComputer.running.intakeTemperatureCoefficient = getIatFuelCorrection();
|
||||||
|
|
|
@ -282,9 +282,9 @@ void initIgnitionAdvanceControl() {
|
||||||
/**
|
/**
|
||||||
* @return Spark dwell time, in milliseconds. 0 if tables are not ready.
|
* @return Spark dwell time, in milliseconds. 0 if tables are not ready.
|
||||||
*/
|
*/
|
||||||
floatms_t IgnitionState::getSparkDwell(float rpm) {
|
floatms_t IgnitionState::getSparkDwell(float rpm, bool isCranking) {
|
||||||
float dwellMs;
|
float dwellMs;
|
||||||
if (engine->rpmCalculator.isCranking()) {
|
if (isCranking) {
|
||||||
dwellMs = engineConfiguration->ignitionDwellForCrankingMs;
|
dwellMs = engineConfiguration->ignitionDwellForCrankingMs;
|
||||||
} else {
|
} else {
|
||||||
efiAssert(ObdCode::CUSTOM_ERR_ASSERT, !std::isnan(rpm), "invalid rpm", NAN);
|
efiAssert(ObdCode::CUSTOM_ERR_ASSERT, !std::isnan(rpm), "invalid rpm", NAN);
|
||||||
|
@ -312,8 +312,8 @@ floatms_t IgnitionState::getSparkDwell(float rpm) {
|
||||||
return dwellMs;
|
return dwellMs;
|
||||||
}
|
}
|
||||||
|
|
||||||
void IgnitionState::updateDwell(float rpm) {
|
void IgnitionState::updateDwell(float rpm, bool isCranking) {
|
||||||
sparkDwell = getSparkDwell(rpm);
|
sparkDwell = getSparkDwell(rpm, isCranking);
|
||||||
dwellDurationAngle = std::isnan(rpm) ? NAN : getDwell() / getOneDegreeTimeMs(rpm);
|
dwellDurationAngle = std::isnan(rpm) ? NAN : getDwell() / getOneDegreeTimeMs(rpm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,8 +4,8 @@
|
||||||
|
|
||||||
class IgnitionState : public ignition_state_s {
|
class IgnitionState : public ignition_state_s {
|
||||||
public:
|
public:
|
||||||
void updateDwell(float rpm);
|
void updateDwell(float rpm, bool isCranking);
|
||||||
floatms_t getDwell() const;
|
floatms_t getDwell() const;
|
||||||
private:
|
private:
|
||||||
floatms_t getSparkDwell(float rpm);
|
floatms_t getSparkDwell(float rpm, bool isCranking);
|
||||||
};
|
};
|
||||||
|
|
|
@ -110,7 +110,7 @@ TEST(trigger, test1995FordInline6TriggerDecoder) {
|
||||||
EXPECT_NEAR(ecl->elements[5].dwellAngle, 607, 1e-3);
|
EXPECT_NEAR(ecl->elements[5].dwellAngle, 607, 1e-3);
|
||||||
EXPECT_NEAR(ecl->elements[5].sparkAngle, 613.0f, 1e-3);
|
EXPECT_NEAR(ecl->elements[5].sparkAngle, 613.0f, 1e-3);
|
||||||
|
|
||||||
engine->ignitionState.updateDwell(2000);
|
engine->ignitionState.updateDwell(2000, false);
|
||||||
ASSERT_FLOAT_EQ(0.5, engine->ignitionState.getDwell()) << "running dwell";
|
ASSERT_FLOAT_EQ(0.5, engine->ignitionState.getDwell()) << "running dwell";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -119,7 +119,7 @@ TEST(misc, testGetCoilDutyCycleIssue977) {
|
||||||
|
|
||||||
float rpm = 2000;
|
float rpm = 2000;
|
||||||
engine->rpmCalculator.setRpmValue(rpm);
|
engine->rpmCalculator.setRpmValue(rpm);
|
||||||
engine->ignitionState.updateDwell(rpm);
|
engine->ignitionState.updateDwell(rpm, false);
|
||||||
ASSERT_EQ( 4, engine->ignitionState.getDwell()) << "running dwell";
|
ASSERT_EQ( 4, engine->ignitionState.getDwell()) << "running dwell";
|
||||||
|
|
||||||
ASSERT_NEAR( 26.66666, getCoilDutyCycle(rpm), 0.0001);
|
ASSERT_NEAR( 26.66666, getCoilDutyCycle(rpm), 0.0001);
|
||||||
|
@ -138,11 +138,11 @@ TEST(misc, testFordAspire) {
|
||||||
|
|
||||||
int rpm = 2000;
|
int rpm = 2000;
|
||||||
engine->rpmCalculator.setRpmValue(rpm);
|
engine->rpmCalculator.setRpmValue(rpm);
|
||||||
engine->ignitionState.updateDwell(rpm);
|
engine->ignitionState.updateDwell(rpm, false);
|
||||||
ASSERT_EQ( 4, engine->ignitionState.getDwell()) << "running dwell";
|
ASSERT_EQ( 4, engine->ignitionState.getDwell()) << "running dwell";
|
||||||
|
|
||||||
engine->rpmCalculator.setRpmValue(6000);
|
engine->rpmCalculator.setRpmValue(6000);
|
||||||
engine->ignitionState.updateDwell(6000);
|
engine->ignitionState.updateDwell(6000, false);
|
||||||
assertEqualsM("higher rpm dwell", 3.25, engine->ignitionState.getDwell());
|
assertEqualsM("higher rpm dwell", 3.25, engine->ignitionState.getDwell());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue