v12 done right

This commit is contained in:
rusefi 2019-11-17 09:32:12 -05:00
parent 1f1f7e86ae
commit ebe6a4b981
5 changed files with 51 additions and 5 deletions

View File

@ -81,10 +81,11 @@ void setEngineBMW_M73(DECLARE_CONFIG_PARAMETER_SIGNATURE) {
engineConfiguration->ignitionMode = IM_TWO_COILS;
boardConfiguration->ignitionPins[0] = GPIOE_14; // Frankenso high side - pin 1G
boardConfiguration->ignitionPins[1] = GPIO_UNASSIGNED;
boardConfiguration->ignitionPins[2] = GPIOC_7; // Frankenso high side - pin 1H
boardConfiguration->ignitionPins[3] = GPIO_UNASSIGNED;
boardConfiguration->ignitionPins[ID2INDEX(1)] = GPIOE_14; // Frankenso high side - pin 1G
boardConfiguration->ignitionPins[ID2INDEX(2)] = GPIO_UNASSIGNED;
boardConfiguration->ignitionPins[ID2INDEX(3)] = GPIO_UNASSIGNED;
boardConfiguration->ignitionPins[ID2INDEX(4)] = GPIO_UNASSIGNED;
boardConfiguration->ignitionPins[ID2INDEX(7)] = GPIOC_7; // Frankenso high side - pin 1H
boardConfiguration->injectionPins[0] = GPIOB_8;

View File

@ -326,7 +326,7 @@ static ALWAYS_INLINE void handleSparkEvent(bool limitedSpark, uint32_t trgEventI
}
}
static void initializeIgnitionActions(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
void initializeIgnitionActions(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
IgnitionEventList *list = &engine->ignitionEvents;
angle_t dwellAngle = ENGINE(engineState.dwellAngle);
floatms_t sparkDwell = ENGINE(engineState.sparkDwell);

View File

@ -17,5 +17,6 @@ void turnSparkPinHigh(IgnitionEvent *event);
void fireSparkAndPrepareNextSchedule(IgnitionEvent *event);
int getNumberOfSparks(ignition_mode_e mode DECLARE_ENGINE_PARAMETER_SUFFIX);
percent_t getCoilDutyCycle(int rpm DECLARE_ENGINE_PARAMETER_SUFFIX);
void initializeIgnitionActions(DECLARE_ENGINE_PARAMETER_SIGNATURE);
#endif /* CONTROLLERS_TRIGGER_SPARK_LOGIC_H_ */

View File

@ -0,0 +1,43 @@
/*
* @file test_ignition_scheduling.cpp
*
* @date Nov 17, 2019
* @author Andrey Belomutskiy, (c) 2012-2019
*/
#include "engine_test_helper.h"
#include "spark_logic.h"
extern EnginePins enginePins;
TEST(ignition, twoCoils) {
WITH_ENGINE_TEST_HELPER(BMW_M73);
// first one to fire uses first coil
ASSERT_EQ(ENGINE(ignitionPin[ID2INDEX(1)]), 0);
ASSERT_EQ(ENGINE(ignitionPin[ID2INDEX(2)]), 1);
ASSERT_EQ(ENGINE(ignitionPin[ID2INDEX(3)]), 0);
ASSERT_EQ(ENGINE(ignitionPin[ID2INDEX(4)]), 1);
ASSERT_EQ(ENGINE(ignitionPin[ID2INDEX(11)]), 0);
ASSERT_EQ(ENGINE(ignitionPin[ID2INDEX(12)]), 1);
// let's recalculate with zero timing so that we can focus on relation advance between cylinders
engine->engineState.timingAdvance = 0;
initializeIgnitionActions(PASS_ENGINE_PARAMETER_SIGNATURE);
ASSERT_EQ(engine->ignitionEvents.elements[0].advance, 0);
ASSERT_EQ((void*)engine->ignitionEvents.elements[0].outputs[0], (void*)&enginePins.coils[0]);
ASSERT_EQ(engine->ignitionEvents.elements[1].advance, 720 / 12);
ASSERT_EQ((void*)engine->ignitionEvents.elements[1].outputs[0], (void*)&enginePins.coils[6]);
ASSERT_EQ(engine->ignitionEvents.elements[3].advance, 3 * 720 / 12);
ASSERT_EQ((void*)engine->ignitionEvents.elements[3].outputs[0], (void*)&enginePins.coils[6]);
}

View File

@ -14,6 +14,7 @@ TESTS_SRC_CPP = \
tests/test_trigger_decoder.cpp \
tests/test_trigger_noiseless.cpp \
tests/test_issue_898.cpp \
tests/test_ignition_scheduling.cpp \
tests/test_fuel_map.cpp \
tests/test_fuel_wall_wetting.cpp \
tests/test_one_cylinder_logic.cpp \