93 lines
3.9 KiB
C++
93 lines
3.9 KiB
C++
/**
|
|
* @file test_quad_cam.cpp
|
|
*
|
|
*/
|
|
|
|
#include "engine_test_helper.h"
|
|
|
|
TEST(trigger, testQuadCam) {
|
|
// setting some weird engine
|
|
WITH_ENGINE_TEST_HELPER(FORD_ESCORT_GT);
|
|
|
|
// changing to 'ONE TOOTH' trigger on CRANK with CAM/VVT
|
|
// setOperationMode(engineConfiguration, FOUR_STROKE_CRANK_SENSOR);
|
|
engineConfiguration->useOnlyRisingEdgeForTrigger = true;
|
|
engineConfiguration->vvtMode[0] = VVT_2JZ;
|
|
engineConfiguration->vvtMode[1] = VVT_MIATA_NB2;
|
|
|
|
engineConfiguration->camInputs[0] = GPIOA_10; // we just need to indicate that we have CAM
|
|
|
|
// this crank trigger would be easier to test, crank shape is less important for this test
|
|
eth.setTriggerType(TT_ONE PASS_ENGINE_PARAMETER_SUFFIX);
|
|
|
|
engineConfiguration->useOnlyRisingEdgeForTrigger = true;
|
|
|
|
ASSERT_EQ( 0, GET_RPM()) << "testQuadCam RPM no sync";
|
|
for (int i = 0; i < 1;i++) {
|
|
eth.fireRise(25);
|
|
ASSERT_EQ( 0, GET_RPM()) << "testQuadCam RPM still no sync";
|
|
}
|
|
eth.fireRise(25);
|
|
// first time we have RPM
|
|
ASSERT_EQ(4800, GET_RPM()) << "testQuadCam RPM";
|
|
|
|
int totalRevolutionCountBeforeVvtSync = 4;
|
|
// need to be out of VVT sync to see VVT sync in action
|
|
eth.fireRise(25);
|
|
eth.fireRise(25);
|
|
ASSERT_EQ(totalRevolutionCountBeforeVvtSync, engine->triggerCentral.triggerState.getTotalRevolutionCounter());
|
|
|
|
eth.moveTimeForwardUs(MS2US(3)); // shifting VVT phase a few angles
|
|
|
|
float d = 4;
|
|
|
|
int secondCam = 1;
|
|
|
|
// this would be ignored since we only consume the other kind of fronts here
|
|
hwHandleVvtCamSignal(TV_FALL, getTimeNowNt(), secondCam PASS_ENGINE_PARAMETER_SUFFIX);
|
|
eth.moveTimeForwardUs(MS2US(20 / d));
|
|
// this would be be first VVT signal - gap duration would be calculated against 'DEEP_IN_THE_PAST_SECONDS' initial value
|
|
hwHandleVvtCamSignal(TV_RISE, getTimeNowNt(), secondCam PASS_ENGINE_PARAMETER_SUFFIX);
|
|
|
|
eth.moveTimeForwardUs(MS2US(20 / d));
|
|
// this second important front would give us first real VVT gap duration
|
|
hwHandleVvtCamSignal(TV_RISE, getTimeNowNt(), secondCam PASS_ENGINE_PARAMETER_SUFFIX);
|
|
|
|
ASSERT_FLOAT_EQ(0, engine->triggerCentral.getVVTPosition(0, 0));
|
|
ASSERT_EQ(totalRevolutionCountBeforeVvtSync, engine->triggerCentral.triggerState.getTotalRevolutionCounter());
|
|
|
|
eth.moveTimeForwardUs(MS2US(130 / d));
|
|
// this third important front would give us first comparison between two real gaps
|
|
hwHandleVvtCamSignal(TV_RISE, getTimeNowNt(), secondCam PASS_ENGINE_PARAMETER_SUFFIX);
|
|
|
|
ASSERT_NEAR(-67.6 - 720 - 720 + 160.2, engine->triggerCentral.getVVTPosition(0, 1), EPS3D);
|
|
// actually position based on VVT!
|
|
ASSERT_EQ(totalRevolutionCountBeforeVvtSync, engine->triggerCentral.triggerState.getTotalRevolutionCounter());
|
|
|
|
|
|
int secondCamSecondBank = 3;
|
|
int secondBank = 1;
|
|
|
|
// this would be ignored since we only consume the other kind of fronts here
|
|
hwHandleVvtCamSignal(TV_FALL, getTimeNowNt(), secondCamSecondBank PASS_ENGINE_PARAMETER_SUFFIX);
|
|
eth.moveTimeForwardUs(MS2US(20 / d));
|
|
// this would be be first VVT signal - gap duration would be calculated against 'DEEP_IN_THE_PAST_SECONDS' initial value
|
|
hwHandleVvtCamSignal(TV_RISE, getTimeNowNt(), secondCamSecondBank PASS_ENGINE_PARAMETER_SUFFIX);
|
|
|
|
eth.moveTimeForwardUs(MS2US(20 / d));
|
|
// this second important front would give us first real VVT gap duration
|
|
hwHandleVvtCamSignal(TV_RISE, getTimeNowNt(), secondCamSecondBank PASS_ENGINE_PARAMETER_SUFFIX);
|
|
|
|
ASSERT_FLOAT_EQ(0, engine->triggerCentral.getVVTPosition(0, 0));
|
|
ASSERT_EQ(totalRevolutionCountBeforeVvtSync, engine->triggerCentral.triggerState.getTotalRevolutionCounter());
|
|
|
|
eth.moveTimeForwardUs(MS2US(130 / d));
|
|
// this third important front would give us first comparison between two real gaps
|
|
hwHandleVvtCamSignal(TV_RISE, getTimeNowNt(), secondCamSecondBank PASS_ENGINE_PARAMETER_SUFFIX);
|
|
|
|
ASSERT_NEAR(-2571.4, engine->triggerCentral.getVVTPosition(secondBank, secondCam), EPS3D);
|
|
// actually position based on VVT!
|
|
ASSERT_EQ(totalRevolutionCountBeforeVvtSync, engine->triggerCentral.triggerState.getTotalRevolutionCounter());
|
|
|
|
}
|