require TPS values to be different (#2017)
* require values to be different * fix not * oops * missed another spot * test negative cases too * resets * test no sensor case Co-authored-by: Matthew Kennedy <makenne@microsoft.com>
This commit is contained in:
parent
ffae0cd335
commit
2d9be1077b
|
@ -12,6 +12,10 @@ public:
|
||||||
|
|
||||||
void showInfo(Logging* logger, float testRawValue) const override;
|
void showInfo(Logging* logger, float testRawValue) const override;
|
||||||
|
|
||||||
|
float getDivideInput() const {
|
||||||
|
return m_divideInput;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Linear equation parameters for equation of form
|
// Linear equation parameters for equation of form
|
||||||
// y = ax + b
|
// y = ax + b
|
||||||
|
|
|
@ -39,12 +39,25 @@ LinearFunc idlePosFunc(PACK_MULT_VOLTAGE);
|
||||||
FunctionalSensor wastegateSens(SensorType::WastegatePosition, MS2NT(10));
|
FunctionalSensor wastegateSens(SensorType::WastegatePosition, MS2NT(10));
|
||||||
FunctionalSensor idlePosSens(SensorType::IdlePosition, MS2NT(10));
|
FunctionalSensor idlePosSens(SensorType::IdlePosition, MS2NT(10));
|
||||||
|
|
||||||
static void configureTps(LinearFunc& func, float closed, float open, float min, float max) {
|
static bool configureTps(LinearFunc& func, float closed, float open, float min, float max, const char* msg) {
|
||||||
|
float scaledClosed = closed / func.getDivideInput();
|
||||||
|
float scaledOpen = open / func.getDivideInput();
|
||||||
|
|
||||||
|
float split = absF(scaledOpen - scaledClosed);
|
||||||
|
|
||||||
|
// If the voltage for closed vs. open is very near, something is wrong with your calibration
|
||||||
|
if (split < 0.5f) {
|
||||||
|
firmwareError(OBD_Throttle_Position_Sensor_Circuit_Malfunction, "Sensor \"%s\" problem: open/closed calibration values are too close together. Please check your wiring!", msg);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
func.configure(
|
func.configure(
|
||||||
closed, 0,
|
closed, 0,
|
||||||
open, 100,
|
open, 100,
|
||||||
min, max
|
min, max
|
||||||
);
|
);
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool initTpsFunc(LinearFunc& func, FunctionalSensor& sensor, adc_channel_e channel, float closed, float open, float min, float max) {
|
static bool initTpsFunc(LinearFunc& func, FunctionalSensor& sensor, adc_channel_e channel, float closed, float open, float min, float max) {
|
||||||
|
@ -53,7 +66,10 @@ static bool initTpsFunc(LinearFunc& func, FunctionalSensor& sensor, adc_channel_
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
configureTps(func, closed, open, min, max);
|
// If the configuration was invalid, don't continues to configure the sensor
|
||||||
|
if (!configureTps(func, closed, open, min, max, sensor.getSensorName())) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
sensor.setFunction(func);
|
sensor.setFunction(func);
|
||||||
|
|
||||||
|
@ -110,14 +126,14 @@ void reconfigureTps(DECLARE_CONFIG_PARAMETER_SIGNATURE) {
|
||||||
float min = CONFIG(tpsErrorDetectionTooLow);
|
float min = CONFIG(tpsErrorDetectionTooLow);
|
||||||
float max = CONFIG(tpsErrorDetectionTooHigh);
|
float max = CONFIG(tpsErrorDetectionTooHigh);
|
||||||
|
|
||||||
configureTps(tpsFunc1p, CONFIG(tpsMin), CONFIG(tpsMax), min, max);
|
configureTps(tpsFunc1p, CONFIG(tpsMin), CONFIG(tpsMax), min, max, tpsSens1p.getSensorName());
|
||||||
configureTps(tpsFunc1s, CONFIG(tps1SecondaryMin), CONFIG(tps1SecondaryMax), min, max);
|
configureTps(tpsFunc1s, CONFIG(tps1SecondaryMin), CONFIG(tps1SecondaryMax), min, max, tpsSens1s.getSensorName());
|
||||||
configureTps(tpsFunc2p, CONFIG(tps2Min), CONFIG(tps2Max), min, max);
|
configureTps(tpsFunc2p, CONFIG(tps2Min), CONFIG(tps2Max), min, max, tpsSens2p.getSensorName());
|
||||||
configureTps(tpsFunc2s, CONFIG(tps2SecondaryMin), CONFIG(tps2SecondaryMax), min, max);
|
configureTps(tpsFunc2s, CONFIG(tps2SecondaryMin), CONFIG(tps2SecondaryMax), min, max, tpsSens2s.getSensorName());
|
||||||
|
|
||||||
configureTps(pedalFuncPrimary, CONFIG(throttlePedalUpVoltage), CONFIG(throttlePedalWOTVoltage), min, max);
|
configureTps(pedalFuncPrimary, CONFIG(throttlePedalUpVoltage), CONFIG(throttlePedalWOTVoltage), min, max, pedalSensorPrimary.getSensorName());
|
||||||
configureTps(pedalFuncSecondary, CONFIG(throttlePedalSecondaryUpVoltage), CONFIG(throttlePedalSecondaryWOTVoltage), min, max);
|
configureTps(pedalFuncSecondary, CONFIG(throttlePedalSecondaryUpVoltage), CONFIG(throttlePedalSecondaryWOTVoltage), min, max, pedalSensorSecondary.getSensorName());
|
||||||
|
|
||||||
configureTps(wastegateFunc, CONFIG(wastegatePositionMin), CONFIG(wastegatePositionMax), min, max);
|
configureTps(wastegateFunc, CONFIG(wastegatePositionMin), CONFIG(wastegatePositionMax), min, max, wastegateSens.getSensorName());
|
||||||
configureTps(idlePosFunc, CONFIG(idlePositionMin), CONFIG(idlePositionMax), min, max);
|
configureTps(idlePosFunc, CONFIG(idlePositionMin), CONFIG(idlePositionMax), min, max, idlePosSens.getSensorName());
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,6 +51,42 @@ TEST(SensorInit, Tps) {
|
||||||
EXPECT_NEAR(50.0f, Sensor::get(SensorType::Tps1).value_or(-1), EPS2D);
|
EXPECT_NEAR(50.0f, Sensor::get(SensorType::Tps1).value_or(-1), EPS2D);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(SensorInit, TpsValuesTooClose) {
|
||||||
|
WITH_ENGINE_TEST_HELPER(TEST_ENGINE);
|
||||||
|
|
||||||
|
// Should fail, 0.49 volts apart
|
||||||
|
CONFIG(tpsMin) = 200; // 1.00 volt
|
||||||
|
CONFIG(tpsMax) = 298; // 1.49 volts
|
||||||
|
EXPECT_FATAL_ERROR(initTps(PASS_CONFIG_PARAMETER_SIGNATURE));
|
||||||
|
Sensor::resetRegistry();
|
||||||
|
|
||||||
|
// Should fail, -0.49 volts apart
|
||||||
|
CONFIG(tpsMin) = 298; // 1.49 volt
|
||||||
|
CONFIG(tpsMax) = 200; // 1.00 volts
|
||||||
|
EXPECT_FATAL_ERROR(initTps(PASS_CONFIG_PARAMETER_SIGNATURE));
|
||||||
|
Sensor::resetRegistry();
|
||||||
|
|
||||||
|
// Should succeed, 0.51 volts apart
|
||||||
|
CONFIG(tpsMin) = 200; // 1.00 volt
|
||||||
|
CONFIG(tpsMax) = 302; // 1.51 volts
|
||||||
|
EXPECT_NO_FATAL_ERROR(initTps(PASS_CONFIG_PARAMETER_SIGNATURE));
|
||||||
|
Sensor::resetRegistry();
|
||||||
|
|
||||||
|
// Should succeed, -0.51 volts apart
|
||||||
|
CONFIG(tpsMin) = 302; // 1.51 volt
|
||||||
|
CONFIG(tpsMax) = 200; // 1.00 volts
|
||||||
|
EXPECT_NO_FATAL_ERROR(initTps(PASS_CONFIG_PARAMETER_SIGNATURE));
|
||||||
|
Sensor::resetRegistry();
|
||||||
|
|
||||||
|
// With no pin, it should be ok that they are the same
|
||||||
|
// Should succeed, -0.51 volts apart
|
||||||
|
CONFIG(tps1_1AdcChannel) = ADC_CHANNEL_NONE;
|
||||||
|
CONFIG(tpsMin) = 200; // 1.00 volt
|
||||||
|
CONFIG(tpsMax) = 200; // 1.00 volts
|
||||||
|
EXPECT_NO_FATAL_ERROR(initTps(PASS_CONFIG_PARAMETER_SIGNATURE));
|
||||||
|
Sensor::resetRegistry();
|
||||||
|
}
|
||||||
|
|
||||||
TEST(SensorInit, Pedal) {
|
TEST(SensorInit, Pedal) {
|
||||||
WITH_ENGINE_TEST_HELPER(TEST_ENGINE);
|
WITH_ENGINE_TEST_HELPER(TEST_ENGINE);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue