adjust taper behavior (#3051)

* adjust taper behavior

* check that taper works in running state too
This commit is contained in:
Matthew Kennedy 2021-07-24 13:12:07 -07:00 committed by GitHub
parent ca34562d5d
commit 617c2886d9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 9 additions and 9 deletions

View File

@ -285,21 +285,17 @@ float IdleController::getOpenLoop(Phase phase, float clt, SensorResult tps, floa
return cranking; return cranking;
} }
float running = getRunningOpenLoop(clt, tps);
if (phase == Phase::CrankToRunTaper) {
// Interpolate between cranking and running over a short time
// This clamps once you fall off the end, so no explicit check for >1 required
return interpolateClamped(0, cranking, 1, running, crankingTaperFraction);
}
// If coasting (and enabled), use the coasting position table instead of normal open loop // If coasting (and enabled), use the coasting position table instead of normal open loop
// TODO: this should be a table of open loop mult vs. RPM, not vs. clt // TODO: this should be a table of open loop mult vs. RPM, not vs. clt
if (CONFIG(useIacTableForCoasting) && phase == Phase::Coasting) { if (CONFIG(useIacTableForCoasting) && phase == Phase::Coasting) {
return interpolate2d(clt, CONFIG(iacCoastingBins), CONFIG(iacCoasting)); return interpolate2d(clt, CONFIG(iacCoastingBins), CONFIG(iacCoasting));
} }
return running; float running = getRunningOpenLoop(clt, tps);
// Interpolate between cranking and running over a short time
// This clamps once you fall off the end, so no explicit check for >1 required
return interpolateClamped(0, cranking, 1, running, crankingTaperFraction);
} }
float IdleController::getIdleTimingAdjustment(int rpm) { float IdleController::getIdleTimingAdjustment(int rpm) {

View File

@ -292,15 +292,19 @@ TEST(idle_v2, openLoopRunningTaper) {
EXPECT_CALL(dut, getCrankingOpenLoop(30)).WillRepeatedly(Return(75)); EXPECT_CALL(dut, getCrankingOpenLoop(30)).WillRepeatedly(Return(75));
// 0 cycles - no taper yet, pure cranking value // 0 cycles - no taper yet, pure cranking value
EXPECT_FLOAT_EQ(75, dut.getOpenLoop(ICP::Running, 30, 0, 0));
EXPECT_FLOAT_EQ(75, dut.getOpenLoop(ICP::CrankToRunTaper, 30, 0, 0)); EXPECT_FLOAT_EQ(75, dut.getOpenLoop(ICP::CrankToRunTaper, 30, 0, 0));
// 1/2 taper - half way, 50% each value -> outputs 50 // 1/2 taper - half way, 50% each value -> outputs 50
EXPECT_FLOAT_EQ(50, dut.getOpenLoop(ICP::Running, 30, 0, 0.5f));
EXPECT_FLOAT_EQ(50, dut.getOpenLoop(ICP::CrankToRunTaper, 30, 0, 0.5f)); EXPECT_FLOAT_EQ(50, dut.getOpenLoop(ICP::CrankToRunTaper, 30, 0, 0.5f));
// 1x taper - fully tapered, should be running value // 1x taper - fully tapered, should be running value
EXPECT_FLOAT_EQ(25, dut.getOpenLoop(ICP::Running, 30, 0, 1.0f));
EXPECT_FLOAT_EQ(25, dut.getOpenLoop(ICP::CrankToRunTaper, 30, 0, 1.0f)); EXPECT_FLOAT_EQ(25, dut.getOpenLoop(ICP::CrankToRunTaper, 30, 0, 1.0f));
// 2x taper - still fully tapered, should be running value // 2x taper - still fully tapered, should be running value
EXPECT_FLOAT_EQ(25, dut.getOpenLoop(ICP::Running, 30, 0, 2.0f));
EXPECT_FLOAT_EQ(25, dut.getOpenLoop(ICP::CrankToRunTaper, 30, 0, 2.0f)); EXPECT_FLOAT_EQ(25, dut.getOpenLoop(ICP::CrankToRunTaper, 30, 0, 2.0f));
} }