fome-fw/firmware/controllers/trigger/trigger_bmw.cpp

74 lines
1.8 KiB
C++
Raw Normal View History

2015-07-10 06:01:56 -07:00
/**
* @file trigger_bmw.cpp
*
* @date May 11, 2014
2015-12-31 13:02:30 -08:00
* @author Andrey Belomutskiy, (c) 2012-2016
2015-07-10 06:01:56 -07:00
*/
#include "trigger_bmw.h"
2016-10-31 19:02:12 -07:00
static inline float addPair(TriggerShape *s, float a, float w DECLARE_ENGINE_PARAMETER_S) {
s->addEvent2(a, T_SECONDARY, TV_RISE PASS_ENGINE_PARAMETER);
2015-07-10 06:01:56 -07:00
a += w;
2016-10-31 19:02:12 -07:00
s->addEvent2(a, T_SECONDARY, TV_FALL PASS_ENGINE_PARAMETER);
2015-07-10 06:01:56 -07:00
a += w;
return a;
}
2016-10-31 19:02:12 -07:00
void configureMiniCooperTriggerShape(TriggerShape *s DECLARE_ENGINE_PARAMETER_S) {
2015-10-29 11:02:52 -07:00
s->initialize(FOUR_STROKE_CAM_SENSOR, true);
2015-07-10 06:01:56 -07:00
// s->initialState[0] = 1;
float w = 360.0 / 121;
float a = w / 2;
2016-10-31 19:02:12 -07:00
s->addEvent2(a, T_SECONDARY, TV_FALL PASS_ENGINE_PARAMETER);
2015-07-10 06:01:56 -07:00
a += w;
for (int i = 0; i <= 22; i++) {
2016-10-31 19:02:12 -07:00
a = addPair(s, a, w PASS_ENGINE_PARAMETER);
2015-07-10 06:01:56 -07:00
}
a += 3 * w;
float firstGapAngle = a;
2016-10-31 19:02:12 -07:00
s->addEvent2(a, T_SECONDARY, TV_RISE PASS_ENGINE_PARAMETER);
2015-07-10 06:01:56 -07:00
a += 3 * w;
2016-10-31 19:02:12 -07:00
s->addEvent2(a, T_SECONDARY, TV_FALL PASS_ENGINE_PARAMETER);
2015-07-10 06:01:56 -07:00
a += w;
for (int i = 0; i < 36; i++) {
2016-10-31 19:02:12 -07:00
a = addPair(s, a, w PASS_ENGINE_PARAMETER);
2015-07-10 06:01:56 -07:00
}
2016-10-31 19:02:12 -07:00
s->addEvent2(376, T_PRIMARY, TV_RISE PASS_ENGINE_PARAMETER);
2015-07-10 06:01:56 -07:00
for (int i = 0; i < 21; i++) {
2016-10-31 19:02:12 -07:00
a = addPair(s, a, w PASS_ENGINE_PARAMETER);
2015-07-10 06:01:56 -07:00
}
a += 3 * w;
efiAssertVoid(absF(firstGapAngle + 360 - a) < 0.1, "shape constraint");
2016-10-31 19:02:12 -07:00
s->addEvent2(a, T_SECONDARY, TV_RISE PASS_ENGINE_PARAMETER);
2015-07-10 06:01:56 -07:00
a += 3 * w;
2016-10-31 19:02:12 -07:00
s->addEvent2(a, T_SECONDARY, TV_FALL PASS_ENGINE_PARAMETER);
2015-07-10 06:01:56 -07:00
a += w;
for (int i = 0; i < 33; i++) {
2016-10-31 19:02:12 -07:00
a = addPair(s, a, w PASS_ENGINE_PARAMETER);
2015-07-10 06:01:56 -07:00
}
efiAssertVoid(absF(720 - w / 2 - a) < 0.1, "shape constraint");
2016-10-31 19:02:12 -07:00
s->addEvent2(a, T_SECONDARY, TV_RISE PASS_ENGINE_PARAMETER);
2015-07-10 06:01:56 -07:00
2016-10-31 19:02:12 -07:00
s->addEvent2(720.0, T_PRIMARY, TV_FALL PASS_ENGINE_PARAMETER);
2015-07-10 06:01:56 -07:00
/**
* With just one tooth on camshaft synchronization is not needed
*/
s->isSynchronizationNeeded = false;
2016-06-13 23:01:37 -07:00
s->useOnlyPrimaryForSync = true;
2015-07-10 06:01:56 -07:00
}