Impl. useSeparateAdvanceForCranking & useAdvanceCorrectionsForCranking (#565)

This commit is contained in:
andreika-git 2018-02-02 15:18:00 +02:00 committed by rusefi
parent da03e1c5bc
commit 9424d39ab3
9 changed files with 103 additions and 32 deletions

View File

@ -119,22 +119,37 @@ static angle_t getAdvanceCorrections(int rpm DECLARE_ENGINE_PARAMETER_SUFFIX) {
;
}
/**
* @return ignition timing angle advance before TDC for Cranking
*/
static angle_t getCrankingAdvance(int rpm, float engineLoad DECLARE_ENGINE_PARAMETER_SUFFIX) {
// get advance from the separate table for Cranking
if (CONFIG(useSeparateAdvanceForCranking)) {
return interpolate2d("crankingAdvance", rpm, CONFIG(crankingAdvanceBins), CONFIG(crankingAdvance), CRANKING_ADVANCE_CURVE_SIZE);
}
// Interpolate the cranking timing angle to the earlier running angle for faster engine start
angle_t crankingToRunningTransitionAngle = getRunningAdvance(CONFIG(cranking.rpm), engineLoad PASS_ENGINE_PARAMETER_SUFFIX);
// interpolate not from zero, but starting from min. possible rpm detected
if (rpm < minCrankingRpm || minCrankingRpm == 0)
minCrankingRpm = rpm;
return interpolateClamped(minCrankingRpm, CONFIG(crankingTimingAngle), CONFIG(cranking.rpm), crankingToRunningTransitionAngle, rpm);
}
angle_t getAdvance(int rpm, float engineLoad DECLARE_ENGINE_PARAMETER_SUFFIX) {
if (cisnan(engineLoad)) {
return 0; // any error should already be reported
}
angle_t angle;
if (ENGINE(rpmCalculator).isCranking(PASS_ENGINE_PARAMETER_SIGNATURE)) {
// Interpolate the cranking timing angle to the earlier running angle for faster engine start
angle_t crankingToRunningTransitionAngle = getRunningAdvance(CONFIG(cranking.rpm), engineLoad PASS_ENGINE_PARAMETER_SUFFIX);
// interpolate not from zero, but starting from min. possible rpm detected
if (rpm < minCrankingRpm || minCrankingRpm == 0)
minCrankingRpm = rpm;
angle = interpolateClamped(minCrankingRpm, engineConfiguration->crankingTimingAngle, CONFIG(cranking.rpm), crankingToRunningTransitionAngle, rpm);
angle = getCrankingAdvance(rpm, engineLoad PASS_ENGINE_PARAMETER_SUFFIX);
if (CONFIG(useAdvanceCorrectionsForCranking))
angle += getAdvanceCorrections(rpm PASS_ENGINE_PARAMETER_SUFFIX);
} else {
angle = getRunningAdvance(rpm, engineLoad PASS_ENGINE_PARAMETER_SUFFIX);
angle += getAdvanceCorrections(rpm PASS_ENGINE_PARAMETER_SUFFIX);
}
angle += getAdvanceCorrections(rpm PASS_ENGINE_PARAMETER_SUFFIX);
angle -= engineConfiguration->ignitionOffset;
fixAngle(angle, "getAdvance");
return angle;

View File

@ -517,6 +517,15 @@ static void setDefaultCrankingSettings(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
config->crankingCycleCoef[7] = 0.5;
config->crankingCycleBins[7] = 77;
engineConfiguration->crankingAdvance[0] = 0;
engineConfiguration->crankingAdvanceBins[0] = 0;
engineConfiguration->crankingAdvance[1] = 0;
engineConfiguration->crankingAdvanceBins[0] = 200;
engineConfiguration->crankingAdvance[2] = 0;
engineConfiguration->crankingAdvanceBins[0] = 400;
engineConfiguration->crankingAdvance[3] = 0;
engineConfiguration->crankingAdvanceBins[0] = 1000;
}
/**

View File

@ -1,4 +1,4 @@
// this section was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Sun Jan 28 22:17:49 EET 2018
// this section was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Thu Feb 01 08:34:19 EET 2018
// begin
#ifndef ENGINE_CONFIGURATION_GENERATED_H_
#define ENGINE_CONFIGURATION_GENERATED_H_
@ -1415,10 +1415,10 @@ typedef struct {
bool useFixedBaroCorrFromMap : 1;
/**
offset 1484 bit 17 */
bool unused_1484_bit_17 : 1;
bool useSeparateAdvanceForCranking : 1;
/**
offset 1484 bit 18 */
bool unused_1484_bit_18 : 1;
bool useAdvanceCorrectionsForCranking : 1;
/**
offset 1484 bit 19 */
bool unused_1484_bit_19 : 1;
@ -2082,9 +2082,19 @@ typedef struct {
*/
brain_pin_e test557pin;
/**
* Optional timing advance table for Cranking (see useSeparateAdvanceForCranking)
* offset 3312
*/
int unusedEnd[792];
float crankingAdvanceBins[CRANKING_ADVANCE_CURVE_SIZE];
/**
* Optional timing advance table for Cranking (see useSeparateAdvanceForCranking)
* offset 3328
*/
float crankingAdvance[CRANKING_ADVANCE_CURVE_SIZE];
/**
* offset 3344
*/
int unusedEnd[784];
/** total size 6480*/
} engine_configuration_s;
@ -2330,4 +2340,4 @@ typedef struct {
#endif
// end
// this section was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Sun Jan 28 22:17:49 EET 2018
// this section was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Thu Feb 01 08:34:19 EET 2018

View File

@ -26,6 +26,7 @@
#define CRANKING_CLT_IDLE_CURVE_SIZE 8
#define CLT_CRANKING_CURVE_SIZE 8
#define IDLE_ADVANCE_CURVE_SIZE 8
#define CRANKING_ADVANCE_CURVE_SIZE 4
#define ENGINE_NOISE_CURVE_SIZE 8
#define CLT_TIMING_CURVE_SIZE 8
#define IDLE_VE_CURVE_SIZE 8
@ -958,10 +959,10 @@
#define twoWireBatchIgnition_offset_hex 5cc
#define useFixedBaroCorrFromMap_offset 1484
#define useFixedBaroCorrFromMap_offset_hex 5cc
#define unused_1484_bit_17_offset 1484
#define unused_1484_bit_17_offset_hex 5cc
#define unused_1484_bit_18_offset 1484
#define unused_1484_bit_18_offset_hex 5cc
#define useSeparateAdvanceForCranking_offset 1484
#define useSeparateAdvanceForCranking_offset_hex 5cc
#define useAdvanceCorrectionsForCranking_offset 1484
#define useAdvanceCorrectionsForCranking_offset_hex 5cc
#define unused_1484_bit_19_offset 1484
#define unused_1484_bit_19_offset_hex 5cc
#define unused_1484_bit_20_offset 1484
@ -1530,8 +1531,12 @@
#define flexFuelSensor_offset_hex ce8
#define test557pin_offset 3308
#define test557pin_offset_hex cec
#define unusedEnd_offset 3312
#define unusedEnd_offset_hex cf0
#define crankingAdvanceBins_offset 3312
#define crankingAdvanceBins_offset_hex cf0
#define crankingAdvance_offset 3328
#define crankingAdvance_offset_hex d00
#define unusedEnd_offset 3344
#define unusedEnd_offset_hex d10
#define cltCrankingCorrBins_offset 6480
#define cltCrankingCorrBins_offset_hex 1950
#define cltCrankingCorr_offset 6512

View File

@ -70,6 +70,7 @@ struct_no_prefix engine_configuration_s
#define CRANKING_CLT_IDLE_CURVE_SIZE 8
#define CLT_CRANKING_CURVE_SIZE 8
#define IDLE_ADVANCE_CURVE_SIZE 8
#define CRANKING_ADVANCE_CURVE_SIZE 4
#define ENGINE_NOISE_CURVE_SIZE 8
#define CLT_TIMING_CURVE_SIZE 8
@ -683,8 +684,8 @@ custom idle_mode_e 4 bits, U32, @OFFSET@, [0:0], "Automatic", "Manual"
bit useOnlyRisingEdgeForTrigger;+VR sensors are only precise on rising front\nenable trigger_only_front
bit twoWireBatchIgnition;+This is needed if batched igniton (waster spark) and individual coil wiring
bit useFixedBaroCorrFromMap
bit unused_1484_bit_17
bit unused_1484_bit_18
bit useSeparateAdvanceForCranking
bit useAdvanceCorrectionsForCranking
bit unused_1484_bit_19
bit unused_1484_bit_20
bit unused_1484_bit_21
@ -888,7 +889,11 @@ spi_device_e accelerometerSpiDevice;
float[FSIO_CURVE_8] fsioCurve4;;"y", 1, 0, -999, 1000.0, 3
brain_input_pin_e flexFuelSensor;
brain_pin_e test557pin
int[792] unusedEnd;
float[CRANKING_ADVANCE_CURVE_SIZE] crankingAdvanceBins;Optional timing advance table for Cranking (see useSeparateAdvanceForCranking);"RPM", 1, 0, 0.0, 18000, 2
float[CRANKING_ADVANCE_CURVE_SIZE] crankingAdvance ;Optional timing advance table for Cranking (see useSeparateAdvanceForCranking);"deg", 1, 0, -20, 90, 2
int[784] unusedEnd;
end_struct

View File

@ -63,7 +63,7 @@ enable2ndByteCanID = false
; see PAGE_0_SIZE in C source code
; CONFIG_DEFINITION_START
; this section was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Mon Jan 29 19:16:26 EST 2018
; this section was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Thu Feb 01 08:34:19 EET 2018
pageSize = 20000
page = 1
@ -498,8 +498,8 @@ page = 1
useOnlyRisingEdgeForTrigger= bits, U32, 1484, [14:14], "false", "true"
twoWireBatchIgnition = bits, U32, 1484, [15:15], "false", "true"
useFixedBaroCorrFromMap = bits, U32, 1484, [16:16], "false", "true"
unused_1484_bit_17 = bits, U32, 1484, [17:17], "false", "true"
unused_1484_bit_18 = bits, U32, 1484, [18:18], "false", "true"
useSeparateAdvanceForCranking= bits, U32, 1484, [17:17], "false", "true"
useAdvanceCorrectionsForCranking= bits, U32, 1484, [18:18], "false", "true"
unused_1484_bit_19 = bits, U32, 1484, [19:19], "false", "true"
unused_1484_bit_20 = bits, U32, 1484, [20:20], "false", "true"
unused_1484_bit_21 = bits, U32, 1484, [21:21], "false", "true"
@ -769,7 +769,9 @@ page = 1
fsioCurve4 = array, F32, 3272, [8], "y", 1, 0, -999, 1000.0, 3
flexFuelSensor = bits, U32, 3304, [0:6], "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PE5", "PE6", "INVALID", "INVALID", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
test557pin = bits, U32, 3308, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
;skipping unusedEnd offset 3312
crankingAdvanceBins = array, F32, 3312, [4], "RPM", 1, 0, 0.0, 18000, 2
crankingAdvance = array, F32, 3328, [4], "deg", 1, 0, -20, 90, 2
;skipping unusedEnd offset 3344
cltCrankingCorrBins = array, F32, 6480, [8], "C", 1, 0, -100.0, 250.0, 2
cltCrankingCorr = array, F32, 6512, [8], "%", 1, 0, 0.0, 500.0, 2
idleAdvanceBins = array, F32, 6544, [8], "RPM", 1, 0, 0.0, 18000, 2
@ -1285,6 +1287,14 @@ fileVersion = { 20171101 }
xBins = idleVeBins, RPMValue
yBins = idleVe
gauge = afr1Gauge
curve = crankingAdvanceCurve, "Cranking Advance Angle"
columnLabel = "RPM", "degrees"
xAxis = 0, 8000, 10
yAxis = -100, 100, 10
xBins = crankingAdvanceBins, RPMValue
yBins = crankingAdvance
gauge = RPMGauge
curve = warmupTargetAfrCurve, "CLT-based target AFR"
columnLabel = "Coolant", "Correction"
@ -1787,6 +1797,7 @@ gaugeCategory = Fuel Data
subMenu = std_separator
subMenu = ignitionTableTbl, "Ignition Advance Table"
subMenu = idleAdvanceCurve, "Idle Ignition Advance Table", 0, {useSeparateAdvanceForIdle == 1}
subMenu = crankingAdvanceCurve, "Cranking Ignition Advance Table", 0, {useSeparateAdvanceForCranking == 1}
subMenu = ignitionIatCorrTableTbl, "Ignition Intake Air Temp correction"
subMenu = baroCorrTbl, "Baro Correction", 0, {fuelAlgorithm == LM_SPEED_DENSITY}
subMenu = std_separator
@ -2637,6 +2648,8 @@ cmd_stop_engine = "w\x00\x99\x00\x00"
dialog = crankingIgnition, "Ignition"
field = "Advance", crankingTimingAngle
field = "Use separate Advance Table for cranking", useSeparateAdvanceForCranking
field = "Use Advance Corrections for cranking", useAdvanceCorrectionsForCranking
field = "Use fixed Dwell?", useConstantDwellDuringCranking
field = "Fixed Dwell", ignitionDwellForCrankingMs, {useConstantDwellDuringCranking == 1}
field = "Charge Angle", crankingChargeAngle, {useConstantDwellDuringCranking == 0}

View File

@ -466,6 +466,14 @@ fileVersion = { 20171101 }
xBins = idleVeBins, RPMValue
yBins = idleVe
gauge = afr1Gauge
curve = crankingAdvanceCurve, "Cranking Advance Angle"
columnLabel = "RPM", "degrees"
xAxis = 0, 8000, 10
yAxis = -100, 100, 10
xBins = crankingAdvanceBins, RPMValue
yBins = crankingAdvance
gauge = RPMGauge
curve = warmupTargetAfrCurve, "CLT-based target AFR"
columnLabel = "Coolant", "Correction"
@ -968,6 +976,7 @@ gaugeCategory = Fuel Data
subMenu = std_separator
subMenu = ignitionTableTbl, "Ignition Advance Table"
subMenu = idleAdvanceCurve, "Idle Ignition Advance Table", 0, {useSeparateAdvanceForIdle == 1}
subMenu = crankingAdvanceCurve, "Cranking Ignition Advance Table", 0, {useSeparateAdvanceForCranking == 1}
subMenu = ignitionIatCorrTableTbl, "Ignition Intake Air Temp correction"
subMenu = baroCorrTbl, "Baro Correction", 0, {fuelAlgorithm == LM_SPEED_DENSITY}
subMenu = std_separator
@ -1818,6 +1827,8 @@ cmd_stop_engine = "w\x00\x99\x00\x00"
dialog = crankingIgnition, "Ignition"
field = "Advance", crankingTimingAngle
field = "Use separate Advance Table for cranking", useSeparateAdvanceForCranking
field = "Use Advance Corrections for cranking", useAdvanceCorrectionsForCranking
field = "Use fixed Dwell?", useConstantDwellDuringCranking
field = "Fixed Dwell", ignitionDwellForCrankingMs, {useConstantDwellDuringCranking == 1}
field = "Charge Angle", crankingChargeAngle, {useConstantDwellDuringCranking == 0}

View File

@ -1,6 +1,6 @@
package com.rusefi.config;
// this file was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Mon Jan 29 19:16:26 EST 2018
// this file was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Thu Feb 01 08:34:19 EET 2018
public class Fields {
public static final int LE_COMMAND_LENGTH = 200;
public static final int BLOCKING_FACTOR = 400;
@ -15,6 +15,7 @@ public class Fields {
public static final int CRANKING_CLT_IDLE_CURVE_SIZE = 8;
public static final int CLT_CRANKING_CURVE_SIZE = 8;
public static final int IDLE_ADVANCE_CURVE_SIZE = 8;
public static final int CRANKING_ADVANCE_CURVE_SIZE = 4;
public static final int ENGINE_NOISE_CURVE_SIZE = 8;
public static final int CLT_TIMING_CURVE_SIZE = 8;
public static final int IDLE_VE_CURVE_SIZE = 8;
@ -648,8 +649,8 @@ public class Fields {
public static final int useOnlyRisingEdgeForTrigger_offset = 1484;
public static final int twoWireBatchIgnition_offset = 1484;
public static final int useFixedBaroCorrFromMap_offset = 1484;
public static final int unused_1484_bit_17_offset = 1484;
public static final int unused_1484_bit_18_offset = 1484;
public static final int useSeparateAdvanceForCranking_offset = 1484;
public static final int useAdvanceCorrectionsForCranking_offset = 1484;
public static final int unused_1484_bit_19_offset = 1484;
public static final int unused_1484_bit_20_offset = 1484;
public static final int unused_1484_bit_21_offset = 1484;
@ -1016,7 +1017,9 @@ public class Fields {
public static final int fsioCurve4_offset = 3272;
public static final int flexFuelSensor_offset = 3304;
public static final int test557pin_offset = 3308;
public static final int unusedEnd_offset = 3312;
public static final int crankingAdvanceBins_offset = 3312;
public static final int crankingAdvance_offset = 3328;
public static final int unusedEnd_offset = 3344;
public static final int cltCrankingCorrBins_offset = 6480;
public static final int cltCrankingCorrBins_offset_hex = 1950;
public static final int cltCrankingCorr_offset = 6512;
@ -1582,8 +1585,8 @@ public class Fields {
public static final Field USEONLYRISINGEDGEFORTRIGGER = Field.create("USEONLYRISINGEDGEFORTRIGGER", 1484, FieldType.BIT, 14);
public static final Field TWOWIREBATCHIGNITION = Field.create("TWOWIREBATCHIGNITION", 1484, FieldType.BIT, 15);
public static final Field USEFIXEDBAROCORRFROMMAP = Field.create("USEFIXEDBAROCORRFROMMAP", 1484, FieldType.BIT, 16);
public static final Field UNUSED_1484_BIT_17 = Field.create("UNUSED_1484_BIT_17", 1484, FieldType.BIT, 17);
public static final Field UNUSED_1484_BIT_18 = Field.create("UNUSED_1484_BIT_18", 1484, FieldType.BIT, 18);
public static final Field USESEPARATEADVANCEFORCRANKING = Field.create("USESEPARATEADVANCEFORCRANKING", 1484, FieldType.BIT, 17);
public static final Field USEADVANCECORRECTIONSFORCRANKING = Field.create("USEADVANCECORRECTIONSFORCRANKING", 1484, FieldType.BIT, 18);
public static final Field UNUSED_1484_BIT_19 = Field.create("UNUSED_1484_BIT_19", 1484, FieldType.BIT, 19);
public static final Field UNUSED_1484_BIT_20 = Field.create("UNUSED_1484_BIT_20", 1484, FieldType.BIT, 20);
public static final Field UNUSED_1484_BIT_21 = Field.create("UNUSED_1484_BIT_21", 1484, FieldType.BIT, 21);

View File

@ -1,6 +1,6 @@
<roms>
<!-- Generated by ConfigDefinition utility on Sun Jan 28 21:17:01 EET 2018 -->
<!-- Generated by ConfigDefinition utility on Thu Feb 01 08:34:22 EET 2018 -->
<rom>
<romid>