SpeedyMAP initial work on RPM detection

This commit is contained in:
Josh Stewart 2018-01-12 13:54:31 +11:00
parent c8badf88b8
commit d49d8f5fb7
2 changed files with 23 additions and 6 deletions

View File

@ -5,9 +5,12 @@
uint16_t map1_adc, map2_adc, map3_adc, map4_adc; uint16_t map1_adc, map2_adc, map3_adc, map4_adc;
uint16_t map5_adc, map6_adc, map7_adc, map8_adc; uint16_t map5_adc, map6_adc, map7_adc, map8_adc;
uint16_t currentMAP, map1, map2, map3, map4; //These values are all stored in kPa x 10 for 1 point of extra precision uint16_t currentMAP, map1, map2, map3, map4; //These values are all stored in kPa x 8 for 1 point of extra precision. They are the instantaneous values
uint16_t map1_min, map2_min, map3_min, map4_min; //As above, but represent the minimum reading for each sensor within the current cycle
uint16_t rev_count = 0; byte currentLowestCylinder;
uint16_t cycle_count = 0;
unsigned long cycleStartTime;
bool serialStream = false; bool serialStream = false;
@ -41,6 +44,8 @@ void setup() {
//Set the port and mask for the cable select pin //Set the port and mask for the cable select pin
cs_pin_port = portOutputRegister(digitalPinToPort(pinChipSelect)); cs_pin_port = portOutputRegister(digitalPinToPort(pinChipSelect));
cs_pin_mask = digitalPinToBitMask(pinChipSelect); cs_pin_mask = digitalPinToBitMask(pinChipSelect);
cycleStartTime = micros();
} }
void loop() void loop()
@ -68,10 +73,22 @@ void loop()
map4 = fastMap10BitX8(map4_adc, MPX2450_min, MPX2450_max); map4 = fastMap10BitX8(map4_adc, MPX2450_min, MPX2450_max);
//Find the lowest current value //Find the lowest current value
byte tempLowestCylinder = 1;
currentMAP = map1; currentMAP = map1;
if(map2 < currentMAP) { currentMAP = map2; } if(map2 < currentMAP) { currentMAP = map2; tempLowestCylinder = 2; }
if(map3 < currentMAP) { currentMAP = map3; } if(map3 < currentMAP) { currentMAP = map3; tempLowestCylinder = 3; }
if(map4 < currentMAP) { currentMAP = map4; } if(map4 < currentMAP) { currentMAP = map4; tempLowestCylinder = 4; }
//Check if we're starting a new cycle yet
//This is determined to be when sensor 1 has the lowest reading, but only if the previous lowest reading was on another cylinder
//Note that this is only really accurate for determining that a new cycle has started. RPM readings based on it will bounce around by a few 100
if( tempLowestCylinder == 1 && currentLowestCylinder != 1)
{
cycle_count++;
currentLowestCylinder = tempLowestCylinder;
cycleStartTime = micros();
}
//Set the DAC output value from the above //Set the DAC output value from the above
setDAC(); setDAC();