From 7b13b8995c5c5b7cbbf21c2fbcd14e7a525b59e7 Mon Sep 17 00:00:00 2001 From: Josh Stewart Date: Wed, 10 May 2017 15:46:14 +1000 Subject: [PATCH] Prevent the IAT retard curve from clobbering spark advance values below 0 --- speeduino/corrections.ino | 7 ++++--- speeduino/speeduino.ino | 30 +++++++++++++++--------------- 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/speeduino/corrections.ino b/speeduino/corrections.ino index ff94df30..48c798be 100644 --- a/speeduino/corrections.ino +++ b/speeduino/corrections.ino @@ -316,12 +316,12 @@ static inline byte correctionAFRClosedLoop() int8_t correctionsIgn(int8_t advance) { - advance = correctionFlexTiming(advance); advance = correctionIATretard(advance); advance = correctionSoftRevLimit(advance); advance = correctionSoftLaunch(advance); advance = correctionSoftFlatShift(advance); + //Fixed timing check must go last advance = correctionFixedTiming(advance); advance = correctionCrankingFixedTiming(advance); //This overrrides the regular fixed timing, must come last @@ -356,8 +356,9 @@ static inline int8_t correctionIATretard(int8_t advance) { //Adjust the advance based on IAT. If the adjustment amount is greater than the current advance, just set advance to 0 int8_t advanceIATadjust = table2D_getValue(&IATRetardTable, currentStatus.IAT); - if (advanceIATadjust <= advance) { return (advance - advanceIATadjust); } - else { return 0; } + int tempAdvance = (advance - advanceIATadjust); + if (tempAdvance >= -OFFSET_IGNITION) { return tempAdvance; } + else { return -OFFSET_IGNITION; } } static inline int8_t correctionSoftRevLimit(int8_t advance) diff --git a/speeduino/speeduino.ino b/speeduino/speeduino.ino index 713638b0..cd59b9b6 100644 --- a/speeduino/speeduino.ino +++ b/speeduino/speeduino.ino @@ -159,15 +159,15 @@ void setup() if (configPage10.enable_canbus == 1) { Serial3.begin(115200); } #elif defined(CORE_STM32) if (configPage10.enable_canbus == 1) { Serial2.begin(115200); } - else if (configPage10.enable_canbus == 2) + else if (configPage10.enable_canbus == 2) { - //enable local can interface + //enable local can interface } #elif defined(CORE_TEESNY) if (configPage10.enable_canbus == 1) { Serial2.begin(115200); } - else if (configPage10.enable_canbus == 2) + else if (configPage10.enable_canbus == 2) { - //enable local can interface + //enable local can interface FlexCAN CANbus0(2500000, 0); //setup can interface to 250k static CAN_message_t txmsg,rxmsg; CANbus0.begin(); @@ -840,11 +840,11 @@ void loop() command(); } } - + #if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) //ATmega2561 does not have Serial3 //if serial3 interface is enabled then check for serial3 requests. if (configPage10.enable_canbus == 1) - { + { if ( ((mainLoopCount & 31) == 1) or (Serial3.available() > SERIAL_BUFFER_THRESHOLD) ) { if (Serial3.available() > 0) @@ -865,11 +865,11 @@ void loop() canCommand(); } } - } + } else if (configPage10.enable_canbus == 2) // can module enabled - { + { //check local can module - } + } #elif defined(CORE_TEENSY) //if can or secondary serial interface is enabled then check for requests. if (configPage10.enable_canbus == 1) //secondary serial interface enabled @@ -881,14 +881,14 @@ void loop() canCommand(); } } - } + } else if (configPage10.enable_canbus == 2) // can module enabled - { + { //check local can module - // if ( ((mainLoopCount & 31) == 1) or (CANbus0.available()) + // if ( ((mainLoopCount & 31) == 1) or (CANbus0.available()) // { // CANbus0.read(rx_msg); - // } + // } } #endif @@ -1039,7 +1039,7 @@ void loop() } } } - + #endif vvtControl(); idleControl(); //Perform any idle related actions. Even at higher frequencies, running 4x per second is sufficient. @@ -1090,7 +1090,7 @@ void loop() currentStatus.PW1 = PW_AN(req_fuel_uS, currentStatus.VE, currentStatus.TPS, currentStatus.corrections, inj_opentime_uS); //Calculate pulsewidth using the Alpha-N algorithm (in uS) currentStatus.advance = get3DTableValue(&ignitionTable, currentStatus.TPS, currentStatus.RPM) - OFFSET_IGNITION; //As above, but for ignition advance } - + currentStatus.advance = correctionsIgn(currentStatus.advance); /* //Check for fixed ignition angles