Weird VAG: DC motor idle valve not ETB

#1637
Seattle we might have a problem!
This commit is contained in:
rusefi 2020-07-26 12:03:36 -04:00
parent 86dd5cb8a9
commit 3857607fc2
4 changed files with 22 additions and 7 deletions

View File

@ -202,7 +202,9 @@ void setIdleMode(idle_mode_e value DECLARE_ENGINE_PARAMETER_SUFFIX) {
showIdleInfo();
}
static void applyIACposition(percent_t position) {
#endif // EFI_UNIT_TEST
void applyIACposition(percent_t position DECLARE_ENGINE_PARAMETER_SUFFIX) {
/**
* currently idle level is an percent value (0-100 range), and PWM takes a float in the 0..1 range
* todo: unify?
@ -216,8 +218,8 @@ static void applyIACposition(percent_t position) {
}
#if EFI_ELECTRONIC_THROTTLE_BODY
setEtbIdlePosition(position);
#endif
setEtbIdlePosition(position PASS_ENGINE_PARAMETER_SUFFIX);
#endif // EFI_ELECTRONIC_THROTTLE_BODY
#if ! EFI_UNIT_TEST
} if (CONFIG(useStepperIdle)) {
iacMotor.setTargetPosition(duty * engineConfiguration->idleStepperTotalSteps);
@ -239,11 +241,13 @@ static void applyIACposition(percent_t position) {
}
}
#if ! EFI_UNIT_TEST
percent_t getIdlePosition(void) {
return engine->engineState.idle.currentIdlePosition;
}
void setIdleValvePosition(int positionPercent) {
void setManualIdleValvePosition(int positionPercent) {
if (positionPercent < 1 || positionPercent > 99)
return;
scheduleMsg(logger, "setting idle valve position %d", positionPercent);

View File

@ -20,7 +20,10 @@ public:
};
percent_t getIdlePosition(void);
void setIdleValvePosition(int positionPercent);
void applyIACposition(percent_t position DECLARE_ENGINE_PARAMETER_SUFFIX);
void setManualIdleValvePosition(int positionPercent);
void startIdleThread(Logging*sharedLogger DECLARE_ENGINE_PARAMETER_SUFFIX);
void setDefaultIdleParameters(DECLARE_CONFIG_PARAMETER_SIGNATURE);
void startIdleBench(void);

View File

@ -1261,7 +1261,7 @@ const command_i_s commandsI[] = {{"ignition_mode", setIgnitionMode},
{"can_vss", setCanVss},
#endif /* EFI_CAN_SUPPORT */
#if EFI_IDLE_CONTROL
{"idle_position", setIdleValvePosition},
{"idle_position", setManualIdleValvePosition},
{"idle_rpm", setTargetIdleRpm},
{"idle_dt", setIdleDT},
#endif /* EFI_IDLE_CONTROL */

View File

@ -10,6 +10,7 @@
#include "dc_motor.h"
#include "engine_controller.h"
#include "sensor.h"
#include "idle_thread.h"
#include "mocks.h"
@ -101,16 +102,23 @@ TEST(etb, initializationDcMotorIdleValveMode) {
EXPECT_CALL(mocks[0], init(SensorType::Tps2, _, 0, &engineConfiguration->etb, Ne(nullptr)));
EXPECT_CALL(mocks[0], reset);
EXPECT_CALL(mocks[0], start);
// todo: make this work! EXPECT_CALL(mocks[0], setIdlePosition(33.0f));
// We do not expect throttle #2 to be initialized
doInitElectronicThrottle(PASS_ENGINE_PARAMETER_SIGNATURE);
applyIACposition(33.0f PASS_ENGINE_PARAMETER_SUFFIX);
}
TEST(etb, idlePlumbing) {
StrictMock<MockEtb> mocks[ETB_COUNT];
WITH_ENGINE_TEST_HELPER(TEST_ENGINE);
engineConfiguration->useETBforIdleControl = true;
Sensor::setMockValue(SensorType::AcceleratorPedal, 50.0f);
for (int i = 0; i < ETB_COUNT; i++) {
engine->etbControllers[i] = &mocks[i];
@ -118,7 +126,7 @@ TEST(etb, idlePlumbing) {
EXPECT_CALL(mocks[i], setIdlePosition(33.0f));
}
setEtbIdlePosition(33.0f PASS_ENGINE_PARAMETER_SUFFIX);
applyIACposition(33.0f PASS_ENGINE_PARAMETER_SUFFIX);
}
TEST(etb, testSetpointOnlyPedal) {