switching to target RPM curve

This commit is contained in:
rusefi 2017-12-24 22:05:16 -05:00
parent 73024a808a
commit 3de93ad64d
10 changed files with 32 additions and 20 deletions

View File

@ -82,7 +82,7 @@ void setGy6139qmbDefaultEngineConfiguration(DECLARE_ENGINE_PARAMETER_SIGNATURE)
engineConfiguration->rpmHardLimit = 9000;
engineConfiguration->cranking.rpm = 1100;
engineConfiguration->targetIdleRpm = 2000;
setTargetRpmCurve(2000 PASS_ENGINE_PARAMETER_SUFFIX);
engineConfiguration->analogInputDividerCoefficient = 1;
engineConfiguration->fuelAlgorithm = LM_MAP;
engineConfiguration->globalTriggerAngleOffset = 45;

View File

@ -347,7 +347,7 @@ void setMiata1994_s(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
engineConfiguration->acIdleRpmBump = 200;
//engineConfiguration->idleMode != IM_AUTO;
engineConfiguration->targetIdleRpm = 800;
setTargetRpmCurve(800 PASS_ENGINE_PARAMETER_SUFFIX);
engineConfiguration->tpsMax = 86;

View File

@ -188,8 +188,8 @@ void incrementGlobalConfigurationVersion(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
void setConstantDwell(floatms_t dwellMs DECLARE_ENGINE_PARAMETER_SUFFIX) {
for (int i = 0; i < DWELL_CURVE_SIZE; i++) {
engineConfiguration->sparkDwellRpmBins[i] = 1000 * i;
engineConfiguration->sparkDwellValues[i] = dwellMs;
}
setTableBin2(engineConfiguration->sparkDwellValues, DWELL_CURVE_SIZE, dwellMs, dwellMs, 3);
}
void setAfrMap(afr_table_t table, float value) {
@ -556,6 +556,11 @@ static void setCanDefaults(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
engineConfiguration->canNbcType = CAN_BUS_MAZDA_RX8;
}
void setTargetRpmCurve(int rpm PASS_ENGINE_PARAMETER_SUFFIX) {
setTableBin2(engineConfiguration->cltIdleRpmBins, DWELL_CURVE_SIZE, -40, 90, 0);
setTableBin2(engineConfiguration->cltIdleRpm, DWELL_CURVE_SIZE, rpm, rpm, 0);
}
/**
* @brief Global default engine configuration
* This method sets the global engine configuration defaults. These default values are then
@ -841,7 +846,7 @@ void setDefaultConfiguration(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
// set idle_position 50
boardConfiguration->manIdlePosition = 50;
engineConfiguration->crankingIACposition = 50;
engineConfiguration->targetIdleRpm = 1200;
setTargetRpmCurve(1200 PASS_ENGINE_PARAMETER_SUFFIX);
// engineConfiguration->idleMode = IM_AUTO;
engineConfiguration->idleMode = IM_MANUAL;

View File

@ -48,6 +48,7 @@ typedef struct {
void prepareVoidConfiguration(engine_configuration_s *activeConfiguration);
void setDefaultConfiguration(DECLARE_ENGINE_PARAMETER_SIGNATURE);
void setTargetRpmCurve(int rpm PASS_ENGINE_PARAMETER_SUFFIX);
void setAfrMap(afr_table_t table, float value);
void setMap(fuel_table_t table, float value);
void setWholeFuelMap(float value DECLARE_ENGINE_PARAMETER_SUFFIX);

View File

@ -1,4 +1,4 @@
// this section was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Mon Dec 11 11:22:10 EST 2017
// this section was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Sun Dec 24 21:42:02 EST 2017
// begin
#ifndef ENGINE_CONFIGURATION_GENERATED_H_
#define ENGINE_CONFIGURATION_GENERATED_H_
@ -1357,7 +1357,7 @@ typedef struct {
* See also cltIdleCorr
* offset 1492
*/
int targetIdleRpm;
int unusedIdleRpm;
/**
* A/C button input handled as analog input
* offset 1496
@ -2233,4 +2233,4 @@ typedef struct {
#endif
// end
// this section was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Mon Dec 11 11:22:10 EST 2017
// this section was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Sun Dec 24 21:42:02 EST 2017

View File

@ -918,8 +918,8 @@
#define twoWireBatchIgnition_offset_hex 5cc
#define engineChartSize_offset 1488
#define engineChartSize_offset_hex 5d0
#define targetIdleRpm_offset 1492
#define targetIdleRpm_offset_hex 5d4
#define unusedIdleRpm_offset 1492
#define unusedIdleRpm_offset_hex 5d4
#define acSwitchAdc_offset 1496
#define acSwitchAdc_offset_hex 5d8
#define ignMathCalculateAtIndex_offset 1500

View File

@ -52,8 +52,6 @@ static SimplePwm idleSolenoid;
static StepperMotor iacMotor;
static int adjustedTargetRpm;
static uint32_t lastCrankingCyclesCounter = 0;
static float lastCrankingIacPosition;
@ -162,9 +160,17 @@ static float autoIdle(float cltCorrection) {
return currentIdlePosition;
}
adjustedTargetRpm = engineConfiguration->targetIdleRpm * cltCorrection;
// get Target RPM for Auto-PID from a separate table
float clt = engine->sensors.clt;
int targetRpm;
if (cisnan(clt)) {
// error is already reported, let's take first value from the table should be good enough error handing solution
targetRpm = CONFIG(cltIdleRpm)[0];
} else {
targetRpm = interpolate2d("cltRpm", clt, CONFIG(cltIdleRpmBins), CONFIG(cltIdleRpm), CLT_CURVE_SIZE);
}
percent_t newValue = idlePid.getValue(adjustedTargetRpm, getRpmE(engine), engineConfiguration->idleRpmPid.period);
percent_t newValue = idlePid.getValue(targetRpm, getRpmE(engine), engineConfiguration->idleRpmPid.period);
return newValue;
}
@ -268,7 +274,7 @@ static msg_t ivThread(int param) {
}
void setTargetIdleRpm(int value) {
engineConfiguration->targetIdleRpm = value;
setTargetRpmCurve(value PASS_ENGINE_PARAMETER_SUFFIX);
scheduleMsg(logger, "target idle RPM %d", value);
showIdleInfo();
}

View File

@ -667,7 +667,7 @@ custom idle_mode_e 4 bits, U32, @OFFSET@, [0:0], "false", "true"
uint32_t engineChartSize;;"count", 1, 0, 0, 300, 0
int targetIdleRpm;set idle_rpm X\nSee also cltIdleCorr;"RPM", 1, 0, 0, 7000, 0
int unusedIdleRpm;set idle_rpm X\nSee also cltIdleCorr;"RPM", 1, 0, 0, 7000, 0
adc_channel_e acSwitchAdc;A/C button input handled as analog input

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 Sat Dec 23 11:13:57 EST 2017
; this section was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Sun Dec 24 21:42:02 EST 2017
pageSize = 20000
page = 1
@ -478,7 +478,7 @@ page = 1
useOnlyRisingEdgeForTrigger= bits, U32, 1484, [14:14], "false", "true"
twoWireBatchIgnition = bits, U32, 1484, [15:15], "false", "true"
engineChartSize = scalar, U32, 1488, "count", 1, 0, 0, 300, 0
targetIdleRpm = scalar, S32, 1492, "RPM", 1, 0, 0, 7000, 0
unusedIdleRpm = scalar, S32, 1492, "RPM", 1, 0, 0, 7000, 0
acSwitchAdc = bits, U32, 1496, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
ignMathCalculateAtIndex = scalar, S32, 1500, "index", 1, 0, 0, 7000, 0
;skipping acCutoffLowRpm offset 1504

View File

@ -1,6 +1,6 @@
package com.rusefi.config;
// this file was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Sun Dec 17 12:47:08 EST 2017
// this file was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Sun Dec 24 21:42:02 EST 2017
public class Fields {
public static final int LE_COMMAND_LENGTH = 200;
public static final int BLOCKING_FACTOR = 400;
@ -628,7 +628,7 @@ public class Fields {
public static final int useOnlyRisingEdgeForTrigger_offset = 1484;
public static final int twoWireBatchIgnition_offset = 1484;
public static final int engineChartSize_offset = 1488;
public static final int targetIdleRpm_offset = 1492;
public static final int unusedIdleRpm_offset = 1492;
public static final int acSwitchAdc_offset = 1496;
public static final int ignMathCalculateAtIndex_offset = 1500;
public static final int acCutoffLowRpm_offset = 1504;
@ -1533,7 +1533,7 @@ 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 ENGINECHARTSIZE = Field.create("ENGINECHARTSIZE", 1488, FieldType.INT);
public static final Field TARGETIDLERPM = Field.create("TARGETIDLERPM", 1492, FieldType.INT);
public static final Field UNUSEDIDLERPM = Field.create("UNUSEDIDLERPM", 1492, FieldType.INT);
public static final Field ACSWITCHADC = Field.create("ACSWITCHADC", 1496, FieldType.INT, adc_channel_e);
public static final Field IGNMATHCALCULATEATINDEX = Field.create("IGNMATHCALCULATEATINDEX", 1500, FieldType.INT);
public static final Field ACCUTOFFLOWRPM = Field.create("ACCUTOFFLOWRPM", 1504, FieldType.INT);