Accelerator pedal with new sensors (#1208)
* add pedal sensor * update status loop * add bit to ts * fix math * divide at config time * this used a little bit of ram
This commit is contained in:
parent
1d8af48d28
commit
701f7fd7aa
|
@ -59,7 +59,7 @@ typedef struct {
|
||||||
unsigned int isTriggerError : 1; // bit 23
|
unsigned int isTriggerError : 1; // bit 23
|
||||||
unsigned int hasFatalError : 1; // bit 24
|
unsigned int hasFatalError : 1; // bit 24
|
||||||
unsigned int isWarnNow : 1; // bit 25
|
unsigned int isWarnNow : 1; // bit 25
|
||||||
unsigned int unused80b8 : 1; // bit 26
|
unsigned int isPedalError : 1; // bit 26
|
||||||
unsigned int isKnockChipOk : 1; // bit 27
|
unsigned int isKnockChipOk : 1; // bit 27
|
||||||
|
|
||||||
// RPM, vss
|
// RPM, vss
|
||||||
|
|
|
@ -323,24 +323,20 @@ static void printSensors(Logging *log) {
|
||||||
reportSensorF(log, GAUGE_NAME_TIMING_ADVANCE, "deg", engine->engineState.timingAdvance, 2);
|
reportSensorF(log, GAUGE_NAME_TIMING_ADVANCE, "deg", engine->engineState.timingAdvance, 2);
|
||||||
|
|
||||||
|
|
||||||
if (hasPedalPositionSensor(PASS_ENGINE_PARAMETER_SIGNATURE)) {
|
reportSensorF(log, GAUGE_NAME_THROTTLE_PEDAL, "%", Sensor::get(SensorType::AcceleratorPedal).value_or(0), 2);
|
||||||
// 136
|
|
||||||
reportSensorF(log, GAUGE_NAME_THROTTLE_PEDAL, "%", getPedalPosition(PASS_ENGINE_PARAMETER_SIGNATURE), 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
floatms_t fuelBase = getBaseFuel(rpm PASS_ENGINE_PARAMETER_SUFFIX);
|
||||||
|
reportSensorF(log, GAUGE_NAME_FUEL_BASE, "ms", fuelBase, 2);
|
||||||
|
reportSensorF(log, GAUGE_NAME_FUEL_LAST_INJECTION, "ms", ENGINE(actualLastInjection), 2);
|
||||||
|
reportSensorF(log, GAUGE_NAME_INJECTOR_LAG, "ms", engine->engineState.running.injectorLag, 2);
|
||||||
|
reportSensorF(log, GAUGE_NAME_FUEL_RUNNING, "ms", ENGINE(engineState.running.fuel), 2);
|
||||||
|
// 268
|
||||||
|
reportSensorF(log, GAUGE_NAME_FUEL_PID_CORR, "ms", ENGINE(engineState.running.pidCorrection), 2);
|
||||||
|
|
||||||
floatms_t fuelBase = getBaseFuel(rpm PASS_ENGINE_PARAMETER_SUFFIX);
|
reportSensorF(log, GAUGE_NAME_FUEL_WALL_AMOUNT, "v", ENGINE(wallFuel[0]).getWallFuel(), 2);
|
||||||
reportSensorF(log, GAUGE_NAME_FUEL_BASE, "ms", fuelBase, 2);
|
reportSensorF(log, GAUGE_NAME_FUEL_WALL_CORRECTION, "v", ENGINE(wallFuel[0]).wallFuelCorrection, 2);
|
||||||
reportSensorF(log, GAUGE_NAME_FUEL_LAST_INJECTION, "ms", ENGINE(actualLastInjection), 2);
|
|
||||||
reportSensorF(log, GAUGE_NAME_INJECTOR_LAG, "ms", engine->engineState.running.injectorLag, 2);
|
|
||||||
reportSensorF(log, GAUGE_NAME_FUEL_RUNNING, "ms", ENGINE(engineState.running.fuel), 2);
|
|
||||||
// 268
|
|
||||||
reportSensorF(log, GAUGE_NAME_FUEL_PID_CORR, "ms", ENGINE(engineState.running.pidCorrection), 2);
|
|
||||||
|
|
||||||
reportSensorF(log, GAUGE_NAME_FUEL_WALL_AMOUNT, "v", ENGINE(wallFuel[0]).getWallFuel(), 2);
|
reportSensorI(log, GAUGE_NAME_VERSION, "#", getRusEfiVersion());
|
||||||
reportSensorF(log, GAUGE_NAME_FUEL_WALL_CORRECTION, "v", ENGINE(wallFuel[0]).wallFuelCorrection, 2);
|
|
||||||
|
|
||||||
reportSensorI(log, GAUGE_NAME_VERSION, "#", getRusEfiVersion());
|
|
||||||
|
|
||||||
#if EFI_VEHICLE_SPEED
|
#if EFI_VEHICLE_SPEED
|
||||||
if (hasVehicleSpeedSensor()) {
|
if (hasVehicleSpeedSensor()) {
|
||||||
|
@ -732,6 +728,9 @@ void updateTunerStudioState(TunerStudioOutputChannels *tsOutputChannels DECLARE_
|
||||||
SensorResult tps2 = Sensor::get(SensorType::Tps2);
|
SensorResult tps2 = Sensor::get(SensorType::Tps2);
|
||||||
tsOutputChannels->throttle2Position = tps2.Value;
|
tsOutputChannels->throttle2Position = tps2.Value;
|
||||||
|
|
||||||
|
SensorResult pedal = Sensor::get(SensorType::AcceleratorPedal);
|
||||||
|
tsOutputChannels->pedalPosition = pedal.Value;
|
||||||
|
tsOutputChannels->isPedalError = !pedal.Valid;
|
||||||
|
|
||||||
// offset 16
|
// offset 16
|
||||||
tsOutputChannels->massAirFlowVoltage = hasMafSensor() ? getMafVoltage(PASS_ENGINE_PARAMETER_SIGNATURE) : 0;
|
tsOutputChannels->massAirFlowVoltage = hasMafSensor() ? getMafVoltage(PASS_ENGINE_PARAMETER_SIGNATURE) : 0;
|
||||||
|
@ -771,8 +770,6 @@ void updateTunerStudioState(TunerStudioOutputChannels *tsOutputChannels DECLARE_
|
||||||
tsOutputChannels->orderingErrorCounter = engine->triggerCentral.triggerState.orderingErrorCounter;
|
tsOutputChannels->orderingErrorCounter = engine->triggerCentral.triggerState.orderingErrorCounter;
|
||||||
// 68
|
// 68
|
||||||
tsOutputChannels->baroCorrection = engine->engineState.baroCorrection;
|
tsOutputChannels->baroCorrection = engine->engineState.baroCorrection;
|
||||||
// 136
|
|
||||||
tsOutputChannels->pedalPosition = hasPedalPositionSensor(PASS_ENGINE_PARAMETER_SIGNATURE) ? getPedalPosition(PASS_ENGINE_PARAMETER_SIGNATURE) : 0;
|
|
||||||
// 140
|
// 140
|
||||||
#if EFI_ENGINE_CONTROL
|
#if EFI_ENGINE_CONTROL
|
||||||
tsOutputChannels->injectorDutyCycle = getInjectorDutyCycle(rpm PASS_ENGINE_PARAMETER_SUFFIX);
|
tsOutputChannels->injectorDutyCycle = getInjectorDutyCycle(rpm PASS_ENGINE_PARAMETER_SUFFIX);
|
||||||
|
|
|
@ -828,7 +828,7 @@ void initEngineContoller(Logging *sharedLogger DECLARE_ENGINE_PARAMETER_SUFFIX)
|
||||||
// help to notice when RAM usage goes up - if a code change adds to RAM usage these variables would fail
|
// help to notice when RAM usage goes up - if a code change adds to RAM usage these variables would fail
|
||||||
// linking process which is the way to raise the alarm
|
// linking process which is the way to raise the alarm
|
||||||
#ifndef RAM_UNUSED_SIZE
|
#ifndef RAM_UNUSED_SIZE
|
||||||
#define RAM_UNUSED_SIZE 14300
|
#define RAM_UNUSED_SIZE 14200
|
||||||
#endif
|
#endif
|
||||||
#ifndef CCM_UNUSED_SIZE
|
#ifndef CCM_UNUSED_SIZE
|
||||||
#define CCM_UNUSED_SIZE 4100
|
#define CCM_UNUSED_SIZE 4100
|
||||||
|
|
|
@ -6,6 +6,9 @@ void LinearFunc::configure(float in1, float out1, float in2, float out2, float m
|
||||||
m_minOutput = minOutput;
|
m_minOutput = minOutput;
|
||||||
m_maxOutput = maxOutput;
|
m_maxOutput = maxOutput;
|
||||||
|
|
||||||
|
in1 = in1 / m_divideInput;
|
||||||
|
in2 = in2 / m_divideInput;
|
||||||
|
|
||||||
m_a = INTERPOLATION_A(in1, out1, in2, out2);
|
m_a = INTERPOLATION_A(in1, out1, in2, out2);
|
||||||
m_b = out1 - m_a * in1;
|
m_b = out1 - m_a * in1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
class LinearFunc final : public SensorConverter {
|
class LinearFunc final : public SensorConverter {
|
||||||
public:
|
public:
|
||||||
LinearFunc() = default;
|
LinearFunc(float divideInput = 1.0f) : m_divideInput(divideInput) {}
|
||||||
|
|
||||||
void configure(float in1, float out1, float in2, float out2, float minOutput, float maxOutput);
|
void configure(float in1, float out1, float in2, float out2, float minOutput, float maxOutput);
|
||||||
|
|
||||||
|
@ -18,4 +18,7 @@ private:
|
||||||
|
|
||||||
float m_minOutput = 0;
|
float m_minOutput = 0;
|
||||||
float m_maxOutput = 0;
|
float m_maxOutput = 0;
|
||||||
|
|
||||||
|
// Divisor for the input values - some configurations use a ratio'd value for compat
|
||||||
|
const float m_divideInput;
|
||||||
};
|
};
|
||||||
|
|
|
@ -32,6 +32,11 @@ enum class SensorType : unsigned char {
|
||||||
Tps2Primary,
|
Tps2Primary,
|
||||||
Tps2Secondary,
|
Tps2Secondary,
|
||||||
|
|
||||||
|
// Redundant and combined sensors for acc pedal
|
||||||
|
AcceleratorPedal,
|
||||||
|
AcceleratorPedalPrimary,
|
||||||
|
AcceleratorPedalSecondary,
|
||||||
|
|
||||||
// Leave me at the end!
|
// Leave me at the end!
|
||||||
PlaceholderLast
|
PlaceholderLast
|
||||||
};
|
};
|
||||||
|
|
|
@ -8,20 +8,23 @@
|
||||||
|
|
||||||
EXTERN_ENGINE;
|
EXTERN_ENGINE;
|
||||||
|
|
||||||
LinearFunc tpsFunc1p;
|
LinearFunc tpsFunc1p(TPS_TS_CONVERSION);
|
||||||
//LinearFunc tpsFunc1s;
|
//LinearFunc tpsFunc1s(TPS_TS_CONVERSION);
|
||||||
LinearFunc tpsFunc2p;
|
LinearFunc tpsFunc2p(TPS_TS_CONVERSION);
|
||||||
//LinearFunc tpsFunc2s;
|
//LinearFunc tpsFunc2s(TPS_TS_CONVERSION);
|
||||||
|
|
||||||
FunctionalSensor tpsSens1p(SensorType::Tps1, MS2NT(10));
|
FunctionalSensor tpsSens1p(SensorType::Tps1, MS2NT(10));
|
||||||
//FunctionalSensor tpsSens1s(SensorType::Tps1Secondary, MS2NT(10));
|
//FunctionalSensor tpsSens1s(SensorType::Tps1Secondary, MS2NT(10));
|
||||||
FunctionalSensor tpsSens2p(SensorType::Tps2, MS2NT(10));
|
FunctionalSensor tpsSens2p(SensorType::Tps2, MS2NT(10));
|
||||||
//FunctionalSensor tpsSens2s(SensorType::Tps2Secondary, MS2NT(10));
|
//FunctionalSensor tpsSens2s(SensorType::Tps2Secondary, MS2NT(10));
|
||||||
|
|
||||||
|
LinearFunc pedalFunc;
|
||||||
|
FunctionalSensor pedalSensor(SensorType::AcceleratorPedal, MS2NT(10));
|
||||||
|
|
||||||
static void configureTps(LinearFunc& func, float closed, float open) {
|
static void configureTps(LinearFunc& func, float closed, float open) {
|
||||||
func.configure(
|
func.configure(
|
||||||
closed / TPS_TS_CONVERSION, 0,
|
closed, 0,
|
||||||
open / TPS_TS_CONVERSION, 100,
|
open, 100,
|
||||||
CONFIG(tpsErrorDetectionTooLow),
|
CONFIG(tpsErrorDetectionTooLow),
|
||||||
CONFIG(tpsErrorDetectionTooHigh)
|
CONFIG(tpsErrorDetectionTooHigh)
|
||||||
);
|
);
|
||||||
|
@ -47,9 +50,11 @@ static void initTpsFunc(LinearFunc& func, FunctionalSensor& sensor, adc_channel_
|
||||||
void initTps() {
|
void initTps() {
|
||||||
initTpsFunc(tpsFunc1p, tpsSens1p, CONFIG(tps1_1AdcChannel), CONFIG(tpsMin), CONFIG(tpsMax));
|
initTpsFunc(tpsFunc1p, tpsSens1p, CONFIG(tps1_1AdcChannel), CONFIG(tpsMin), CONFIG(tpsMax));
|
||||||
initTpsFunc(tpsFunc2p, tpsSens2p, CONFIG(tps2_1AdcChannel), CONFIG(tps2Min), CONFIG(tps2Max));
|
initTpsFunc(tpsFunc2p, tpsSens2p, CONFIG(tps2_1AdcChannel), CONFIG(tps2Min), CONFIG(tps2Max));
|
||||||
|
initTpsFunc(pedalFunc, pedalSensor, CONFIG(throttlePedalPositionAdcChannel), CONFIG(throttlePedalUpVoltage), CONFIG(throttlePedalWOTVoltage));
|
||||||
}
|
}
|
||||||
|
|
||||||
void reconfigureTps() {
|
void reconfigureTps() {
|
||||||
configureTps(tpsFunc1p, CONFIG(tpsMin), CONFIG(tpsMax));
|
configureTps(tpsFunc1p, CONFIG(tpsMin), CONFIG(tpsMax));
|
||||||
configureTps(tpsFunc2p, CONFIG(tps2Min), CONFIG(tps2Max));
|
configureTps(tpsFunc2p, CONFIG(tps2Min), CONFIG(tps2Max));
|
||||||
|
configureTps(pedalFunc, CONFIG(throttlePedalUpVoltage), CONFIG(throttlePedalWOTVoltage));
|
||||||
}
|
}
|
||||||
|
|
|
@ -193,6 +193,7 @@ fileVersion = { @@TS_FILE_VERSION@@ }
|
||||||
ind_isTriggerError = bits, U32, 0, [23:23], "true", "false";
|
ind_isTriggerError = bits, U32, 0, [23:23], "true", "false";
|
||||||
ind_hasFatalError=bits, U32, 0, [24:24], "true", "false";
|
ind_hasFatalError=bits, U32, 0, [24:24], "true", "false";
|
||||||
ind_isWarnNow =bits, U32, 0, [25:25], "true", "false";
|
ind_isWarnNow =bits, U32, 0, [25:25], "true", "false";
|
||||||
|
ind_pedal_error =bits, U32, 0, [26:26], "true", "false";
|
||||||
|
|
||||||
; RPM, vss
|
; RPM, vss
|
||||||
RPMValue = scalar, U16, 4, "RPM", 1, 0.00000
|
RPMValue = scalar, U16, 4, "RPM", 1, 0.00000
|
||||||
|
@ -1005,6 +1006,7 @@ gaugeCategory = Throttle Body (incl. ETB)
|
||||||
indicator = { ind_clt_error}, "clt", "clt error", white, black, red, black
|
indicator = { ind_clt_error}, "clt", "clt error", white, black, red, black
|
||||||
indicator = { ind_iat_error}, "iat", "iat error", white, black, red, black
|
indicator = { ind_iat_error}, "iat", "iat error", white, black, red, black
|
||||||
indicator = { ind_map_error}, "map", "map error", white, black, red, black
|
indicator = { ind_map_error}, "map", "map error", white, black, red, black
|
||||||
|
indicator = { ind_pedal_error}, "map", "map error", white, black, red, black
|
||||||
|
|
||||||
indicator = { knockEverIndicator }, "", "Knock recently", white, black, red, black
|
indicator = { knockEverIndicator }, "", "Knock recently", white, black, red, black
|
||||||
indicator = { knockNowIndicator }, "no knock", "Knock NOW", white, black, red, black
|
indicator = { knockNowIndicator }, "no knock", "Knock NOW", white, black, red, black
|
||||||
|
|
Loading…
Reference in New Issue