mirror of https://github.com/rusefi/speeduino.git
Experimental MAP error checking, tracking and filtering
This commit is contained in:
parent
cb7c4cba33
commit
91a0649600
|
@ -33,6 +33,9 @@ const int map_page_size = 288;
|
|||
#define BIT_SQUIRT_TOOTHLOG1READY 6 //Used to flag if tooth log 1 is ready
|
||||
#define BIT_SQUIRT_TOOTHLOG2READY 7 //Used to flag if tooth log 2 is ready (Log is not currently used)
|
||||
|
||||
#define VALID_MAP_MAX 1022 //The largest ADC value that is valid for the MAP sensor
|
||||
#define VALID_MAP_MIN 2 //The smallest ADC value that is valid for the MAP sensor
|
||||
|
||||
#define TOOTH_LOG_SIZE 128
|
||||
#define TOOTH_LOG_BUFFER 256
|
||||
|
||||
|
|
|
@ -81,6 +81,12 @@ byte cltCalibrationTable[CALIBRATION_TABLE_SIZE];
|
|||
byte iatCalibrationTable[CALIBRATION_TABLE_SIZE];
|
||||
byte o2CalibrationTable[CALIBRATION_TABLE_SIZE];
|
||||
|
||||
//These variables are used for tracking the number of running sensors values that appear to be errors. Once a threshold is reached, the sensor reading will go to default value and assume the sensor is faulty
|
||||
byte mapErrorCount = 0;
|
||||
byte iatErrorCount = 0;
|
||||
byte cltErrorCount = 0;
|
||||
|
||||
|
||||
unsigned long counter;
|
||||
unsigned long currentLoopTime; //The time the current loop started (uS)
|
||||
unsigned long previousLoopTime; //The time the previous loop started (uS)
|
||||
|
@ -586,11 +592,17 @@ void loop()
|
|||
//-----------------------------------------------------------------------------------------------------
|
||||
|
||||
//MAP Sampling system
|
||||
int tempReading;
|
||||
switch(configPage1.mapSample)
|
||||
{
|
||||
case 0:
|
||||
//Instantaneous MAP readings
|
||||
currentStatus.mapADC = analogRead(pinMAP);
|
||||
tempReading = analogRead(pinMAP);
|
||||
|
||||
//Error checking
|
||||
if(tempReading >= VALID_MAP_MAX || tempReading <= VALID_MAP_MIN) { mapErrorCount += 1; }
|
||||
else { currentStatus.mapADC = tempReading; mapErrorCount = 0; }
|
||||
|
||||
currentStatus.MAP = map(currentStatus.mapADC, 0, 1023, configPage1.mapMin, configPage1.mapMax); //Get the current MAP value
|
||||
break;
|
||||
|
||||
|
@ -598,8 +610,15 @@ void loop()
|
|||
//Average of a cycle
|
||||
if( (MAPcurRev == startRevolutions) || (MAPcurRev == startRevolutions+1) ) //2 revolutions are looked at for 4 stroke. 2 stroke not currently catered for.
|
||||
{
|
||||
MAPrunningValue = MAPrunningValue + analogRead(pinMAP); //Add the current reading onto the total
|
||||
MAPcount++;
|
||||
tempReading = analogRead(pinMAP);
|
||||
|
||||
//Error check
|
||||
if(tempReading < VALID_MAP_MAX && tempReading > VALID_MAP_MIN)
|
||||
{
|
||||
MAPrunningValue = MAPrunningValue + tempReading; //Add the current reading onto the total
|
||||
MAPcount++;
|
||||
}
|
||||
else { mapErrorCount += 1; }
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -616,9 +635,14 @@ void loop()
|
|||
//Minimum reading in a cycle
|
||||
if( (MAPcurRev == startRevolutions) || (MAPcurRev == startRevolutions+1) ) //2 revolutions are looked at for 4 stroke. 2 stroke not currently catered for.
|
||||
{
|
||||
int tempValue = analogRead(pinMAP);
|
||||
if( tempValue < MAPrunningValue) { MAPrunningValue = tempValue; } //Check whether the current reading is lower than the running minimum
|
||||
MAPcount++;
|
||||
tempReading = analogRead(pinMAP);
|
||||
|
||||
//Error check
|
||||
if(tempReading < VALID_MAP_MAX && tempReading > VALID_MAP_MIN)
|
||||
{
|
||||
if( tempReading < MAPrunningValue) { MAPrunningValue = tempReading; } //Check whether the current reading is lower than the running minimum
|
||||
}
|
||||
else { mapErrorCount += 1; }
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue