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