MAP phase sensing #3544

taking a step back to happy place
This commit is contained in:
rusefillc 2021-12-04 18:20:01 -05:00
parent ce32c26fa2
commit 0c91e77749
4 changed files with 10 additions and 5 deletions

View File

@ -260,7 +260,7 @@ uint16_t rpmAcceleration;dRPM;"RPM/s",1, 0, 0, 0, 0
uint8_t fallbackMap;;"", 1, 0, -10000, 10000, 3
uint8_t TEMPLOG_map_peak;;"", 1, 0, -10000, 10000, 3
uint8_t TEMPLOG_map_length;;"", 1, 0, -10000, 10000, 3
uint8_t unused113;;"", 1, 0, -10000, 10000, 3
uint8_t TEMPLOG_mapIndex;;"", 1, 0, -10000, 10000, 3
uint16_t autoscale timingCltCorrection;;"%",{1/@@PACK_MULT_PERCENT@@}, 0, 0, 0, 0

View File

@ -92,6 +92,8 @@ static void startAveraging(scheduling_s *endAveragingScheduling) {
}
#if HAL_USE_ADC
static int fastMapCounter = 0;
/**
* This method is invoked from ADC callback.
* @note This method is invoked OFTEN, this method is a potential bottleneck - the implementation should be
@ -106,7 +108,8 @@ void mapAveragingAdcCallback(adcsample_t adcValue) {
tsOutputChannels.instantMAPValue = instantMap;
#endif // EFI_TUNER_STUDIO
if (engineConfiguration->vvtMode[0] == VVT_MAP_V_TWIN) {
if (engineConfiguration->vvtMode[0] == VVT_MAP_V_TWIN &&
((fastMapCounter++ % engineConfiguration->mapCamSkipFactor) == 0)) {
engine->triggerCentral.mapState.add(instantMap);
bool isPeak = engine->triggerCentral.mapState.isPeak();
#if EFI_TUNER_STUDIO

View File

@ -15,7 +15,7 @@
#include "pin_repository.h"
#include "local_version_holder.h"
#define MAP_CAM_BUFFER 64
#define MAP_CAM_BUFFER 8
class Engine;
typedef void (*ShaftPositionListener)(trigger_event_e signal, uint32_t index, efitick_t edgeTimestamp);
@ -45,7 +45,7 @@ struct MapState {
// add new value
mapBuffer.add(value);
current = mapBuffer.sum(MAP_CAM_BUFFER);
current = mapBuffer.sum(engineConfiguration->mapCamAveragingLength);
}
bool isPeak() {

View File

@ -23,14 +23,16 @@ static int getZigZag(int index) {
}
TEST(trigger, map_cam) {
EngineTestHelper eth(TEST_ENGINE);
engineConfiguration->mapCamAveragingLength = 8;
MapState state;
int i = 0;
for (;i<404;i++) {
state.add(getZigZag(i));
if (state.mapBuffer.getCount() > MAP_CAM_BUFFER) {
if (state.mapBuffer.getCount() > engineConfiguration->mapCamAveragingLength) {
ASSERT_FALSE(state.isPeak()) << "At " << i;
}
}