only:Some sort of AFR smoothing for some reason #6579

This commit is contained in:
Andrey 2024-06-15 01:54:42 -04:00
parent aa9eec47b0
commit 37085b9196
7 changed files with 36 additions and 2 deletions

View File

@ -37,6 +37,7 @@ Release template (copy/paste this for new release):
- Allow to choose lower RPM cutoff for AC Compressor #6597 - Allow to choose lower RPM cutoff for AC Compressor #6597
- New TPS/TPS enrichment mode: percent adder #3167 - New TPS/TPS enrichment mode: percent adder #3167
- Launch control has a variable ignition cut BEFORE the main Hard cut #6566 - Launch control has a variable ignition cut BEFORE the main Hard cut #6566
- Experimental mapExpAverageAlpha filtering #6579
### Fixed ### Fixed
- knock logic not activated until any configuration change via TS #6462 - knock logic not activated until any configuration change via TS #6462

View File

@ -546,6 +546,9 @@ bool validateConfigOnStartUpOrBurn() {
criticalError("Invalid adcVcc: %f", engineConfiguration->adcVcc); criticalError("Invalid adcVcc: %f", engineConfiguration->adcVcc);
return false; return false;
} }
if (engineConfiguration->mapExpAverageAlpha <= 0 || engineConfiguration->mapExpAverageAlpha > 1) {
engineConfiguration->mapExpAverageAlpha = 1;
}
ensureArrayIsAscending("Batt Lag", engineConfiguration->injector.battLagCorrBins); ensureArrayIsAscending("Batt Lag", engineConfiguration->injector.battLagCorrBins);

View File

@ -97,6 +97,17 @@ SensorResult MapAverager::submit(float volts) {
return result; return result;
} }
PUBLIC_API_WEAK float filterMapValue(float value) {
static float state = 0;
if (state == 0) {
state = value;
return value;
}
float result = state + engineConfiguration->mapExpAverageAlpha * (value - state);
state = result;
return result;
}
void MapAverager::stop() { void MapAverager::stop() {
chibios_rt::CriticalSectionLocker csl; chibios_rt::CriticalSectionLocker csl;
@ -117,7 +128,7 @@ void MapAverager::stop() {
minPressure = averagedMapRunningBuffer[i]; minPressure = averagedMapRunningBuffer[i];
} }
setValidValue(minPressure, getTimeNowNt()); setValidValue(filterMapValue(minPressure), getTimeNowNt());
} else { } else {
#if EFI_PROD_CODE #if EFI_PROD_CODE
warning(ObdCode::CUSTOM_UNEXPECTED_MAP_VALUE, "No MAP values to average"); warning(ObdCode::CUSTOM_UNEXPECTED_MAP_VALUE, "No MAP values to average");

View File

@ -988,7 +988,7 @@ bit verboseCan2,"Print all","Do not print";Print incoming and outgoing second bu
int launchSpeedThreshold;Launch disabled above this speed if setting is above zero;"Kph", 1, 0, 0, 300, 0 int launchSpeedThreshold;Launch disabled above this speed if setting is above zero;"Kph", 1, 0, 0, 300, 0
int launchRpmWindow;Starting Launch RPM window to activate (subtracts from Launch RPM);"RPM", 1, 0, 0, 8000, 0 int launchRpmWindow;Starting Launch RPM window to activate (subtracts from Launch RPM);"RPM", 1, 0, 0, 8000, 0
float triggerEventsTimeoutMs;;"ms", 1, 0, 0, 3000, 3 float triggerEventsTimeoutMs;;"ms", 1, 0, 0, 3000, 3
int unusedHere13 float mapExpAverageAlpha;;"", 1, 0, 0, 3000, 3
float magicNumberAvailableForDevTricks float magicNumberAvailableForDevTricks
float turbochargerFilter float turbochargerFilter
int launchTpsThreshold;;"", 1, 0, 0, 20000, 0 int launchTpsThreshold;;"", 1, 0, 0, 20000, 0

View File

@ -3444,6 +3444,7 @@ cmd_set_engine_type_default = "@@TS_IO_TEST_COMMAND_char@@@@ts_command_e_TS_
field = "" field = ""
field = "Measure Map Only In One Cylinder", measureMapOnlyInOneCylinder field = "Measure Map Only In One Cylinder", measureMapOnlyInOneCylinder
field = "Cylinder count to sample MAP", mapMinBufferLength field = "Cylinder count to sample MAP", mapMinBufferLength
field = mapExpAverageAlpha, mapExpAverageAlpha
dialog = mapSettings, "", yAxis dialog = mapSettings, "", yAxis
panel = mapCommon panel = mapCommon

View File

@ -0,0 +1,17 @@
#include "pch.h"
extern float filterMapValue(float value);
TEST(average, exp) {
EngineTestHelper eth(engine_type_e::TEST_ENGINE);
ASSERT_EQ(filterMapValue(0), 0);
engineConfiguration->mapExpAverageAlpha = 0.5;
ASSERT_EQ(filterMapValue(3), 3); // this would start collecting
ASSERT_EQ(filterMapValue(1), 2);
ASSERT_EQ(filterMapValue(3), 2.5);
}

View File

@ -7,6 +7,7 @@ CPPSRC += $(PROJECT_DIR)/../unit_tests/tests/util/test_buffered_writer.cpp \
$(PROJECT_DIR)/../unit_tests/tests/util/test_closed_loop_controller.cpp \ $(PROJECT_DIR)/../unit_tests/tests/util/test_closed_loop_controller.cpp \
$(PROJECT_DIR)/../unit_tests/tests/util/test_scaled_channel.cpp \ $(PROJECT_DIR)/../unit_tests/tests/util/test_scaled_channel.cpp \
$(PROJECT_DIR)/../unit_tests/tests/util/test_timer.cpp \ $(PROJECT_DIR)/../unit_tests/tests/util/test_timer.cpp \
$(PROJECT_DIR)/../unit_tests/tests/util/test_averaging.cpp \
$(PROJECT_DIR)/../unit_tests/tests/util/test_lua_biquad.cpp \ $(PROJECT_DIR)/../unit_tests/tests/util/test_lua_biquad.cpp \
$(PROJECT_DIR)/../unit_tests/tests/util/test_hash.cpp \ $(PROJECT_DIR)/../unit_tests/tests/util/test_hash.cpp \