log map averaging duration

This commit is contained in:
Matthew Kennedy 2024-08-05 21:42:32 -07:00
parent 76e54132ee
commit 6a10aceb16
3 changed files with 16 additions and 8 deletions

View File

@ -48,11 +48,8 @@ public:
* MAP averaging angle start, in relation to 'mapAveragingSchedulingAtIndex' trigger index index
*/
angle_t mapAveragingStart[MAX_CYLINDER_COUNT];
angle_t mapAveragingDuration = 0;
/**
* timing advance is angle distance before Top Dead Center (TDP), i.e. "10 degree timing advance" means "happens 10 degrees before TDC"
*/
// degrees timing advance - 10 means fire spark 10 degrees BTDC
angle_t timingAdvance[MAX_CYLINDER_COUNT] = {0};
// Angle between firing the main (primary) spark and the secondary (trailing) spark

View File

@ -54,5 +54,7 @@ struct_no_prefix engine_state_s
uint16_t autoscale veTableYAxis;;"%",{1/100}, 0, 0, 0, 0
uint16_t autoscale mapAveragingDuration;;"deg", 0.01, 0, 0, 0, 0
! engine_state_s
end_struct

View File

@ -65,13 +65,19 @@ static size_t currentMapAverager = 0;
static void startAveraging(sampler* s) {
efiAssertVoid(ObdCode::CUSTOM_ERR_6649, getCurrentRemainingStack() > 128, "lowstck#9");
float duration = engine->engineState.mapAveragingDuration;
if (duration == 0) {
// Zero duration means the engine wasn't spinning or something, abort
return;
}
// TODO: set currentMapAverager based on cylinder bank
auto& averager = getMapAvg(currentMapAverager);
averager.start();
mapAveragingPin.setHigh();
scheduleByAngle(&s->endTimer, getTimeNowNt(), engine->engineState.mapAveragingDuration,
scheduleByAngle(&s->endTimer, getTimeNowNt(), duration,
{ endAveraging, &averager });
}
@ -171,6 +177,7 @@ void refreshMapAveragingPreCalc() {
if (isValidRpm(rpm)) {
MAP_sensor_config_s * c = &engineConfiguration->map;
angle_t start = interpolate2d(rpm, c->samplingAngleBins, c->samplingAngle);
angle_t duration = interpolate2d(rpm, c->samplingWindowBins, c->samplingWindow);
efiAssertVoid(ObdCode::CUSTOM_ERR_MAP_START_ASSERT, !std::isnan(start), "start");
angle_t offsetAngle = engine->triggerCentral.triggerFormDetails.eventAngles[engineConfiguration->mapAveragingSchedulingAtIndex];
@ -186,12 +193,14 @@ void refreshMapAveragingPreCalc() {
wrapAngle(cylinderStart, "cylinderStart", ObdCode::CUSTOM_ERR_6562);
engine->engineState.mapAveragingStart[i] = cylinderStart;
}
engine->engineState.mapAveragingDuration = interpolate2d(rpm, c->samplingWindowBins, c->samplingWindow);
engine->engineState.mapAveragingDuration = duration;
} else {
for (size_t i = 0; i < engineConfiguration->cylindersCount; i++) {
engine->engineState.mapAveragingStart[i] = NAN;
engine->engineState.mapAveragingStart[i] = 0;
}
engine->engineState.mapAveragingDuration = NAN;
engine->engineState.mapAveragingDuration = 0;
}
}