auto-sync
This commit is contained in:
parent
11c4ad9d3d
commit
fc3b585438
|
@ -50,7 +50,6 @@ Engine::Engine() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Engine::precalc(engine_configuration_s *engineConfiguration) {
|
void Engine::precalc(engine_configuration_s *engineConfiguration) {
|
||||||
sparkTable.init(DWELL_CURVE_SIZE, sparkAtable, sparkBtable);
|
|
||||||
sparkTable.preCalc(engineConfiguration->sparkDwellBins, engineConfiguration->sparkDwell);
|
sparkTable.preCalc(engineConfiguration->sparkDwellBins, engineConfiguration->sparkDwell);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -83,6 +83,10 @@ typedef struct {
|
||||||
adc_channel_e channel;
|
adc_channel_e channel;
|
||||||
} Thermistor;
|
} Thermistor;
|
||||||
|
|
||||||
|
#define MAF_DECODING_CACHE_SIZE 256
|
||||||
|
|
||||||
|
#define MAF_DECODING_CACHE_MULT (MAF_DECODING_CACHE_SIZE / 5.0)
|
||||||
|
|
||||||
class Engine {
|
class Engine {
|
||||||
public:
|
public:
|
||||||
Engine();
|
Engine();
|
||||||
|
@ -112,6 +116,11 @@ public:
|
||||||
|
|
||||||
TriggerShape triggerShape;
|
TriggerShape triggerShape;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* pre-calculated offset for given sequence index within engine cycle
|
||||||
|
* not cylinder ID
|
||||||
|
* todo: better name?
|
||||||
|
*/
|
||||||
float angleExtra[IGNITION_PIN_COUNT];
|
float angleExtra[IGNITION_PIN_COUNT];
|
||||||
NamedOutputPin *ignitionPin[IGNITION_PIN_COUNT];
|
NamedOutputPin *ignitionPin[IGNITION_PIN_COUNT];
|
||||||
|
|
||||||
|
@ -142,10 +151,22 @@ public:
|
||||||
uint32_t beforeIgnitionSch;
|
uint32_t beforeIgnitionSch;
|
||||||
uint32_t ignitionSchTime;
|
uint32_t ignitionSchTime;
|
||||||
|
|
||||||
float sparkAtable[DWELL_CURVE_SIZE];
|
/**
|
||||||
float sparkBtable[DWELL_CURVE_SIZE];
|
* fast spark dwell time interpolation helper
|
||||||
|
* todo: finish the implementation and
|
||||||
|
*/
|
||||||
|
Table2D<DWELL_CURVE_SIZE> sparkTable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fast MAF decoding lookup table with ~0.2 volt step
|
||||||
|
* This table is build based on MAF decoding curve
|
||||||
|
*/
|
||||||
|
float mafDecodingLookup[MAF_DECODING_CACHE_SIZE];
|
||||||
|
|
||||||
|
float mafDecoding[MAF_DECODING_COUNT];
|
||||||
|
float mafDecodingBins[MAF_DECODING_COUNT];
|
||||||
|
|
||||||
|
|
||||||
Table2D sparkTable;
|
|
||||||
void precalc(engine_configuration_s *engineConfiguration);
|
void precalc(engine_configuration_s *engineConfiguration);
|
||||||
|
|
||||||
void updateSlowSensors();
|
void updateSlowSensors();
|
||||||
|
|
|
@ -50,6 +50,8 @@ typedef void (*Void)(void);
|
||||||
#define LE_COMMAND_LENGTH 200
|
#define LE_COMMAND_LENGTH 200
|
||||||
#define LE_COMMAND_COUNT 16
|
#define LE_COMMAND_COUNT 16
|
||||||
|
|
||||||
|
#define MAF_DECODING_COUNT 256
|
||||||
|
|
||||||
typedef char le_formula_t[LE_COMMAND_LENGTH];
|
typedef char le_formula_t[LE_COMMAND_LENGTH];
|
||||||
|
|
||||||
#define HW_MAX_ADC_INDEX 16
|
#define HW_MAX_ADC_INDEX 16
|
||||||
|
|
|
@ -20,30 +20,6 @@ void setTableBin2(float array[], int size, float l, float r, float precision) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Table2D::init(int size, float *aTable, float *bTable) {
|
|
||||||
this->size = size;
|
|
||||||
this->aTable = aTable;
|
|
||||||
this->bTable = bTable;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Table2D::preCalc(float *bin, float *values) {
|
|
||||||
this->bin = bin;
|
|
||||||
for (int i = 0; i < size - 1; i++) {
|
|
||||||
float x1 = bin[i];
|
|
||||||
float x2 = bin[i + 1];
|
|
||||||
if (x1 == x2) {
|
|
||||||
firmwareError("Same x1 and x2 in interpolate: %f/%f", x1, x2);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
float y1 = values[i];
|
|
||||||
float y2 = values[i + 1];
|
|
||||||
|
|
||||||
aTable[i] = INTERPOLATION_A(x1, y1, x2, y2);
|
|
||||||
bTable[i] = y1 - aTable[i] * x1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void setTableBin(float array[], int size, float from, float to) {
|
void setTableBin(float array[], int size, float from, float to) {
|
||||||
setTableBin2(array, size, from, to, 0.01);
|
setTableBin2(array, size, from, to, 0.01);
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,16 +25,35 @@ private:
|
||||||
int initialized;
|
int initialized;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template<int SIZE>
|
||||||
class Table2D {
|
class Table2D {
|
||||||
public:
|
public:
|
||||||
void init(int size, float *aTable, float *bTable);
|
|
||||||
void preCalc(float *bin, float *values);
|
void preCalc(float *bin, float *values);
|
||||||
int size;
|
float aTable[SIZE];
|
||||||
float *aTable;
|
float bTable[SIZE];
|
||||||
float *bTable;
|
|
||||||
float *bin;
|
float *bin;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template<int SIZE>
|
||||||
|
void Table2D<SIZE>::preCalc(float *bin, float *values) {
|
||||||
|
this->bin = bin;
|
||||||
|
for (int i = 0; i < SIZE - 1; i++) {
|
||||||
|
float x1 = bin[i];
|
||||||
|
float x2 = bin[i + 1];
|
||||||
|
if (x1 == x2) {
|
||||||
|
firmwareError("Same x1 and x2 in interpolate: %f/%f", x1, x2);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
float y1 = values[i];
|
||||||
|
float y2 = values[i + 1];
|
||||||
|
|
||||||
|
aTable[i] = INTERPOLATION_A(x1, y1, x2, y2);
|
||||||
|
bTable[i] = y1 - aTable[i] * x1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
template<int RPM_BIN_SIZE, int LOAD_BIN_SIZE>
|
template<int RPM_BIN_SIZE, int LOAD_BIN_SIZE>
|
||||||
void Map3D<RPM_BIN_SIZE, LOAD_BIN_SIZE>::init(float table[RPM_BIN_SIZE][LOAD_BIN_SIZE]) {
|
void Map3D<RPM_BIN_SIZE, LOAD_BIN_SIZE>::init(float table[RPM_BIN_SIZE][LOAD_BIN_SIZE]) {
|
||||||
for (int k = 0; k < LOAD_BIN_SIZE; k++) {
|
for (int k = 0; k < LOAD_BIN_SIZE; k++) {
|
||||||
|
|
Loading…
Reference in New Issue