rusefi-1/firmware/controllers/trigger/decoders/trigger_chrysler.cpp

611 lines
20 KiB
C++
Raw Normal View History

2015-07-10 06:01:56 -07:00
/**
* @file trigger_chrysler.cpp
*
* @date Mar 24, 2014
2020-01-13 18:57:43 -08:00
* @author Andrey Belomutskiy, (c) 2012-2020
2015-07-10 06:01:56 -07:00
*/
#include "trigger_chrysler.h"
2017-01-03 13:02:43 -08:00
#include "trigger_universal.h"
2015-07-10 06:01:56 -07:00
void initDodgeRam(TriggerWaveform *s) {
2015-07-10 06:01:56 -07:00
s->initialize(FOUR_STROKE_CAM_SENSOR);
2015-07-10 06:01:56 -07:00
s->useRiseEdge = true;
s->isSynchronizationNeeded = false;
2018-12-25 16:42:27 -08:00
addSkippedToothTriggerEvents(T_SECONDARY, s, 8, 0, 0.06, -25, 360, 0, 720);
2015-07-10 06:01:56 -07:00
2018-12-25 08:51:49 -08:00
s->addEvent720(360, T_PRIMARY, TV_RISE);
2015-07-10 06:01:56 -07:00
2018-12-25 16:42:27 -08:00
addSkippedToothTriggerEvents(T_SECONDARY, s, 8, 0, 0.06, 360 - 25, 360, 0, 720);
2015-07-10 06:01:56 -07:00
2018-12-25 08:51:49 -08:00
s->addEvent720(720, T_PRIMARY, TV_FALL);
2015-07-10 06:01:56 -07:00
}
void configureNeon2003TriggerWaveformCrank(TriggerWaveform *s DECLARE_ENGINE_PARAMETER_SUFFIX) {
s->initialize(FOUR_STROKE_CRANK_SENSOR);
2016-09-21 14:02:13 -07:00
s->useRiseEdge = true;
2016-09-21 17:02:02 -07:00
s->setTriggerSynchronizationGap(3);
2018-03-01 03:01:15 -08:00
int m = CRANK_MODE_MULTIPLIER;
2016-09-21 17:02:02 -07:00
2018-12-25 08:51:49 -08:00
s->addEvent720(m * 25, T_PRIMARY, TV_FALL);
s->addEvent720(m * 30, T_PRIMARY, TV_RISE);
s->addEvent720(m * 35, T_PRIMARY, TV_FALL);
s->addEvent720(m * 40, T_PRIMARY, TV_RISE);
s->addEvent720(m * 45, T_PRIMARY, TV_FALL);
s->addEvent720(m * 50, T_PRIMARY, TV_RISE);
s->addEvent720(m * 55, T_PRIMARY, TV_FALL);
s->addEvent720(m * 60, T_PRIMARY, TV_RISE);
s->addEvent720(m * 65, T_PRIMARY, TV_FALL);
s->addEvent720(m * 70, T_PRIMARY, TV_RISE);
s->addEvent720(m * 75, T_PRIMARY, TV_FALL);
s->addEvent720(m * 80, T_PRIMARY, TV_RISE);
s->addEvent720(m * 85, T_PRIMARY, TV_FALL);
s->addEvent720(m * 90, T_PRIMARY, TV_RISE);
s->addEvent720(m * 95, T_PRIMARY, TV_FALL);
s->addEvent720(m * 100, T_PRIMARY, TV_RISE);
s->addEvent720(m * 105, T_PRIMARY, TV_FALL);
s->addEvent720(m * 110, T_PRIMARY, TV_RISE);
s->addEvent720(m * 115, T_PRIMARY, TV_FALL);
s->addEvent720(m * 120, T_PRIMARY, TV_RISE);
s->addEvent720(m * 125, T_PRIMARY, TV_FALL);
s->addEvent720(m * 130, T_PRIMARY, TV_RISE);
s->addEvent720(m * 135, T_PRIMARY, TV_FALL);
s->addEvent720(m * 140, T_PRIMARY, TV_RISE);
s->addEvent720(m * 145,T_PRIMARY, TV_FALL);
s->addEvent720(m * 150, T_PRIMARY, TV_RISE);
s->addEvent720(m * 155, T_PRIMARY, TV_FALL);
s->addEvent720(m * 160, T_PRIMARY, TV_RISE);
s->addEvent720(m * 165, T_PRIMARY, TV_FALL);
s->addEvent720(m * 170, T_PRIMARY, TV_RISE);
s->addEvent720(m * 175, T_PRIMARY, TV_FALL);
s->addEvent720(m * 180, T_PRIMARY, TV_RISE);
s->addEvent720(m * 185, T_PRIMARY, TV_FALL);
2016-09-21 17:02:02 -07:00
// gap 25
2018-12-25 08:51:49 -08:00
s->addEvent720(m * 210, T_PRIMARY, TV_RISE);
s->addEvent720(m * 215, T_PRIMARY, TV_FALL);
s->addEvent720(m * 220, T_PRIMARY, TV_RISE);
s->addEvent720(m * 225, T_PRIMARY, TV_FALL);
s->addEvent720(m * 230, T_PRIMARY, TV_RISE);
s->addEvent720(m * 235, T_PRIMARY, TV_FALL);
s->addEvent720(m * 240, T_PRIMARY, TV_RISE);
s->addEvent720(m * 245, T_PRIMARY, TV_FALL);
s->addEvent720(m * 250, T_PRIMARY, TV_RISE);
s->addEvent720(m * 255, T_PRIMARY, TV_FALL);
s->addEvent720(m * 260, T_PRIMARY, TV_RISE);
s->addEvent720(m * 265, T_PRIMARY, TV_FALL);
s->addEvent720(m * 270, T_PRIMARY, TV_RISE);
s->addEvent720(m * 275, T_PRIMARY, TV_FALL);
s->addEvent720(m * 280, T_PRIMARY, TV_RISE);
s->addEvent720(m * 285, T_PRIMARY, TV_FALL);
s->addEvent720(m * 290, T_PRIMARY, TV_RISE);
s->addEvent720(m * 295, T_PRIMARY, TV_FALL);
s->addEvent720(m * 300, T_PRIMARY, TV_RISE);
s->addEvent720(m * 305, T_PRIMARY, TV_FALL);
s->addEvent720(m * 310, T_PRIMARY, TV_RISE);
s->addEvent720(m * 315, T_PRIMARY, TV_FALL);
s->addEvent720(m * 320, T_PRIMARY, TV_RISE);
s->addEvent720(m * 325, T_PRIMARY, TV_FALL);
s->addEvent720(m * 330, T_PRIMARY, TV_RISE);
s->addEvent720(m * 335, T_PRIMARY, TV_FALL);
s->addEvent720(m * 340, T_PRIMARY, TV_RISE);
s->addEvent720(m * 345, T_PRIMARY, TV_FALL);
s->addEvent720(m * 350, T_PRIMARY, TV_RISE);
s->addEvent720(m * 355, T_PRIMARY, TV_FALL);
s->addEvent720(m * 360, T_PRIMARY, TV_RISE);
2016-09-21 14:02:13 -07:00
}
void configureNeon2003TriggerWaveformCam(TriggerWaveform *s) {
2016-01-21 16:02:57 -08:00
// todo: move sync point so that two channel does not have false trigger issues
bool useOnlyPrimary = true;
2015-08-25 13:01:51 -07:00
s->initialize(FOUR_STROKE_CAM_SENSOR);
2015-07-10 06:01:56 -07:00
s->useRiseEdge = true;
2015-09-22 06:01:31 -07:00
s->tdcPosition = 496;
2015-07-10 06:01:56 -07:00
2015-12-26 20:03:07 -08:00
/**
* ratio sequence is:
gap=2.17/1.46
gap=0.33/2.17
gap=1.06/0.33
gap=2.73/1.06
gap=0.47/2.73
gap=0.71/0.47
gap=1.43/0.71
*
*/
// these values only work well for 'useFronOnly' mode!!!
s->setTriggerSynchronizationGap2(0.75, 1.5);
2018-10-21 10:41:01 -07:00
s->setTriggerSynchronizationGap3(1, 0.65, 1.25);
2015-09-20 16:01:32 -07:00
float EPS_ANGLE = 0.3;
2015-07-10 06:01:56 -07:00
2015-07-15 22:05:04 -07:00
s->useOnlyPrimaryForSync = true;
2015-08-25 13:01:51 -07:00
if (useOnlyPrimary) {
2018-12-25 08:51:49 -08:00
s->addEvent720(144, T_PRIMARY, TV_RISE);
s->addEvent720(180, T_PRIMARY, TV_FALL);
2015-08-25 13:01:51 -07:00
2018-12-25 08:51:49 -08:00
s->addEvent720(216, T_PRIMARY, TV_RISE);
s->addEvent720(252, T_PRIMARY, TV_FALL);
2015-07-15 22:05:04 -07:00
2018-12-25 08:51:49 -08:00
s->addEvent720(288, T_PRIMARY, TV_RISE);
s->addEvent720(324, T_PRIMARY, TV_FALL);
2015-07-10 06:01:56 -07:00
2018-12-25 08:51:49 -08:00
s->addEvent720(360, T_PRIMARY, TV_RISE); // width = 144
s->addEvent720(504, T_PRIMARY, TV_FALL); // width = 36
s->addEvent720(540, T_PRIMARY, TV_RISE);
s->addEvent720(576, T_PRIMARY, TV_FALL);
s->addEvent720(612, T_PRIMARY, TV_RISE);
s->addEvent720(648, T_PRIMARY, TV_FALL);
s->addEvent720(684, T_PRIMARY, TV_RISE);
s->addEvent720(720, T_PRIMARY, TV_FALL);
2015-08-25 13:01:51 -07:00
} else {
2015-09-22 06:01:31 -07:00
/**
* 7 primary (four narrow + one wide + two narrow)
* 64 secondary (one wide + 15 narrow + 16 narrow + one wide + 15 narrow + 16 narrow)
*
*/
2015-07-15 22:05:04 -07:00
2018-12-25 08:51:49 -08:00
s->addEvent720(25, T_SECONDARY, TV_FALL);
s->addEvent720(30, T_SECONDARY, TV_RISE);
s->addEvent720(35, T_SECONDARY, TV_FALL);
s->addEvent720(40, T_SECONDARY, TV_RISE);
s->addEvent720(45, T_SECONDARY, TV_FALL);
s->addEvent720(50, T_SECONDARY, TV_RISE);
s->addEvent720(55, T_SECONDARY, TV_FALL);
s->addEvent720(60, T_SECONDARY, TV_RISE);
s->addEvent720(65, T_SECONDARY, TV_FALL);
s->addEvent720(70, T_SECONDARY, TV_RISE);
s->addEvent720(75, T_SECONDARY, TV_FALL);
s->addEvent720(80, T_SECONDARY, TV_RISE);
s->addEvent720(85, T_SECONDARY, TV_FALL);
s->addEvent720(90, T_SECONDARY, TV_RISE);
s->addEvent720(95, T_SECONDARY, TV_FALL);
s->addEvent720(100, T_SECONDARY, TV_RISE);
s->addEvent720(105, T_SECONDARY, TV_FALL);
s->addEvent720(110, T_SECONDARY, TV_RISE);
s->addEvent720(115, T_SECONDARY, TV_FALL);
s->addEvent720(120, T_SECONDARY, TV_RISE);
s->addEvent720(125, T_SECONDARY, TV_FALL);
s->addEvent720(130, T_SECONDARY, TV_RISE);
s->addEvent720(135, T_SECONDARY, TV_FALL);
s->addEvent720(140, T_SECONDARY, TV_RISE);
s->addEvent720(144, T_PRIMARY, TV_RISE);
s->addEvent720(145,T_SECONDARY, TV_FALL);
s->addEvent720(150, T_SECONDARY, TV_RISE);
s->addEvent720(155, T_SECONDARY, TV_FALL);
s->addEvent720(160, T_SECONDARY, TV_RISE);
s->addEvent720(165, T_SECONDARY, TV_FALL);
s->addEvent720(170, T_SECONDARY, TV_RISE);
s->addEvent720(175, T_SECONDARY, TV_FALL);
s->addEvent720(180 - EPS_ANGLE, T_SECONDARY, TV_RISE);
s->addEvent720(180, T_PRIMARY, TV_FALL);
s->addEvent720(185, T_SECONDARY, TV_FALL);
s->addEvent720(210, T_SECONDARY, TV_RISE);
s->addEvent720(215, T_SECONDARY, TV_FALL);
s->addEvent720(216, T_PRIMARY, TV_RISE);
s->addEvent720(220, T_SECONDARY, TV_RISE);
s->addEvent720(225, T_SECONDARY, TV_FALL);
s->addEvent720(230, T_SECONDARY, TV_RISE);
s->addEvent720(235, T_SECONDARY, TV_FALL);
s->addEvent720(240, T_SECONDARY, TV_RISE);
s->addEvent720(245, T_SECONDARY, TV_FALL);
s->addEvent720(250, T_SECONDARY, TV_RISE);
s->addEvent720(252, T_PRIMARY, TV_FALL);
s->addEvent720(255, T_SECONDARY, TV_FALL);
s->addEvent720(260, T_SECONDARY, TV_RISE);
s->addEvent720(265, T_SECONDARY, TV_FALL);
s->addEvent720(270, T_SECONDARY, TV_RISE);
s->addEvent720(275, T_SECONDARY, TV_FALL);
s->addEvent720(280, T_SECONDARY, TV_RISE);
s->addEvent720(285, T_SECONDARY, TV_FALL);
s->addEvent720(288, T_PRIMARY, TV_RISE);
s->addEvent720(290, T_SECONDARY, TV_RISE);
s->addEvent720(295, T_SECONDARY, TV_FALL);
s->addEvent720(300, T_SECONDARY, TV_RISE);
s->addEvent720(305, T_SECONDARY, TV_FALL);
s->addEvent720(310, T_SECONDARY, TV_RISE);
s->addEvent720(315, T_SECONDARY, TV_FALL);
s->addEvent720(320, T_SECONDARY, TV_RISE);
s->addEvent720(324, T_PRIMARY, TV_FALL);
s->addEvent720(325, T_SECONDARY, TV_FALL);
s->addEvent720(330, T_SECONDARY, TV_RISE);
s->addEvent720(335, T_SECONDARY, TV_FALL);
s->addEvent720(340, T_SECONDARY, TV_RISE);
s->addEvent720(345, T_SECONDARY, TV_FALL);
s->addEvent720(350, T_SECONDARY, TV_RISE);
s->addEvent720(355, T_SECONDARY, TV_FALL);
s->addEvent720(360 - EPS_ANGLE, T_SECONDARY, TV_RISE);
s->addEvent720(360, T_PRIMARY, TV_RISE);
s->addEvent720(385, T_SECONDARY, TV_FALL);
s->addEvent720(390, T_SECONDARY, TV_RISE);
s->addEvent720(395, T_SECONDARY, TV_FALL);
s->addEvent720(400, T_SECONDARY, TV_RISE);
s->addEvent720(405, T_SECONDARY, TV_FALL);
s->addEvent720(410, T_SECONDARY, TV_RISE);
s->addEvent720(415, T_SECONDARY, TV_FALL);
s->addEvent720(420, T_SECONDARY, TV_RISE);
s->addEvent720(425, T_SECONDARY, TV_FALL);
s->addEvent720(430, T_SECONDARY, TV_RISE);
s->addEvent720(435, T_SECONDARY, TV_FALL);
s->addEvent720(440, T_SECONDARY, TV_RISE);
s->addEvent720(445, T_SECONDARY, TV_FALL);
s->addEvent720(450, T_SECONDARY, TV_RISE);
s->addEvent720(455, T_SECONDARY, TV_FALL);
s->addEvent720(460, T_SECONDARY, TV_RISE);
s->addEvent720(465, T_SECONDARY, TV_FALL);
s->addEvent720(470, T_SECONDARY, TV_RISE);
s->addEvent720(475, T_SECONDARY, TV_FALL);
s->addEvent720(480, T_SECONDARY, TV_RISE);
s->addEvent720(485, T_SECONDARY, TV_FALL);
s->addEvent720(490, T_SECONDARY, TV_RISE);
s->addEvent720(495, T_SECONDARY, TV_FALL);
s->addEvent720(500, T_SECONDARY, TV_RISE);
s->addEvent720(504, T_PRIMARY, TV_FALL);
s->addEvent720(505, T_SECONDARY, TV_FALL);
s->addEvent720(510, T_SECONDARY, TV_RISE);
s->addEvent720(515, T_SECONDARY, TV_FALL);
s->addEvent720(520, T_SECONDARY, TV_RISE);
s->addEvent720(525, T_SECONDARY, TV_FALL);
s->addEvent720(530, T_SECONDARY, TV_RISE);
s->addEvent720(535, T_SECONDARY, TV_FALL);
s->addEvent720(540 - EPS_ANGLE, T_SECONDARY, TV_RISE);
s->addEvent720(540, T_PRIMARY, TV_RISE);
s->addEvent720(545, T_SECONDARY, TV_FALL);
s->addEvent720(570, T_SECONDARY, TV_RISE);
s->addEvent720(575, T_SECONDARY, TV_FALL);
s->addEvent720(576, T_PRIMARY, TV_FALL);
s->addEvent720(580, T_SECONDARY, TV_RISE);
s->addEvent720(585, T_SECONDARY, TV_FALL);
s->addEvent720(590, T_SECONDARY, TV_RISE);
s->addEvent720(595, T_SECONDARY, TV_FALL);
s->addEvent720(600, T_SECONDARY, TV_RISE);
s->addEvent720(605, T_SECONDARY, TV_FALL);
s->addEvent720(610, T_SECONDARY, TV_RISE);
s->addEvent720(612, T_PRIMARY, TV_RISE);
s->addEvent720(615, T_SECONDARY, TV_FALL);
s->addEvent720(620, T_SECONDARY, TV_RISE);
s->addEvent720(625, T_SECONDARY, TV_FALL);
s->addEvent720(630, T_SECONDARY, TV_RISE);
s->addEvent720(635, T_SECONDARY, TV_FALL);
s->addEvent720(640, T_SECONDARY, TV_RISE);
s->addEvent720(645, T_SECONDARY, TV_FALL);
s->addEvent720(648, T_PRIMARY, TV_FALL);
s->addEvent720(650, T_SECONDARY, TV_RISE);
s->addEvent720(655, T_SECONDARY, TV_FALL);
s->addEvent720(660, T_SECONDARY, TV_RISE);
s->addEvent720(665, T_SECONDARY, TV_FALL);
s->addEvent720(670, T_SECONDARY, TV_RISE);
s->addEvent720(675, T_SECONDARY, TV_FALL);
s->addEvent720(680, T_SECONDARY, TV_RISE);
s->addEvent720(684, T_PRIMARY, TV_RISE);
s->addEvent720(685, T_SECONDARY, TV_FALL);
s->addEvent720(690, T_SECONDARY, TV_RISE);
s->addEvent720(695, T_SECONDARY, TV_FALL);
s->addEvent720(700, T_SECONDARY, TV_RISE);
s->addEvent720(705, T_SECONDARY, TV_FALL);
s->addEvent720(710, T_SECONDARY, TV_RISE);
s->addEvent720(715, T_SECONDARY, TV_FALL);
s->addEvent720(720 - EPS_ANGLE, T_SECONDARY, TV_RISE);
s->addEvent720(720, T_PRIMARY, TV_FALL);
2015-08-25 13:01:51 -07:00
}
2015-07-10 06:01:56 -07:00
}
void configureDodgeStratusTriggerWaveform(TriggerWaveform *s) {
s->initialize(FOUR_STROKE_CAM_SENSOR);
2015-09-06 11:01:29 -07:00
s->tdcPosition = 150;
2015-09-05 20:02:46 -07:00
float w = 7;
float g = 20;
2015-09-20 16:01:32 -07:00
s->setTriggerSynchronizationGap2(CHRYSLER_NGC6_GAP - 0.25,
CHRYSLER_NGC6_GAP + 0.4);
2015-09-05 20:02:46 -07:00
float base = 0;
2015-09-06 11:01:29 -07:00
// 2 teeth
2015-09-05 20:02:46 -07:00
float angle = base + 120.0 - w;
2018-12-25 08:51:49 -08:00
s->addEvent720(angle, T_PRIMARY, TV_RISE);
s->addEvent720(angle + w, T_PRIMARY, TV_FALL);
2015-09-06 11:01:29 -07:00
angle += g;
2018-12-25 08:51:49 -08:00
s->addEvent720(angle, T_PRIMARY, TV_RISE);
s->addEvent720(angle + w, T_PRIMARY, TV_FALL);
2015-09-05 20:02:46 -07:00
base += 120;
// 3 teeth
angle = base + 120.0 - w;
2018-12-25 08:51:49 -08:00
s->addEvent720(angle, T_PRIMARY, TV_RISE);
s->addEvent720(angle + w, T_PRIMARY, TV_FALL);
2015-09-05 20:02:46 -07:00
angle += g;
2018-12-25 08:51:49 -08:00
s->addEvent720(angle, T_PRIMARY, TV_RISE);
s->addEvent720(angle + w, T_PRIMARY, TV_FALL);
2015-09-05 20:02:46 -07:00
angle += g;
2018-12-25 08:51:49 -08:00
s->addEvent720(angle, T_PRIMARY, TV_RISE);
s->addEvent720(angle + w, T_PRIMARY, TV_FALL);
2015-09-05 20:02:46 -07:00
base += 120;
// 2 teeth
angle = base + 120.0 - w;
2018-12-25 08:51:49 -08:00
s->addEvent720(angle, T_PRIMARY, TV_RISE);
s->addEvent720(angle + w, T_PRIMARY, TV_FALL);
2015-09-05 20:02:46 -07:00
angle += g;
2018-12-25 08:51:49 -08:00
s->addEvent720(angle, T_PRIMARY, TV_RISE);
s->addEvent720(angle + w, T_PRIMARY, TV_FALL);
2015-09-05 20:02:46 -07:00
base += 120;
// just one
angle = base + 120.0 - w;
2018-12-25 08:51:49 -08:00
s->addEvent720(angle, T_PRIMARY, TV_RISE);
s->addEvent720(angle + w, T_PRIMARY, TV_FALL);
2015-09-05 20:02:46 -07:00
base += 120;
2015-09-06 11:01:29 -07:00
// 3 teeth
2015-09-05 20:02:46 -07:00
angle = base + 120.0 - w;
2018-12-25 08:51:49 -08:00
s->addEvent720(angle, T_PRIMARY, TV_RISE);
s->addEvent720(angle + w, T_PRIMARY, TV_FALL);
2015-09-05 20:02:46 -07:00
angle += g;
2018-12-25 08:51:49 -08:00
s->addEvent720(angle, T_PRIMARY, TV_RISE);
s->addEvent720(angle + w, T_PRIMARY, TV_FALL);
2015-09-05 20:02:46 -07:00
angle += g;
2018-12-25 08:51:49 -08:00
s->addEvent720(angle, T_PRIMARY, TV_RISE);
s->addEvent720(angle + w, T_PRIMARY, TV_FALL);
2015-09-05 20:02:46 -07:00
base += 120;
// just one again
angle = base + 120.0 - w;
2018-12-25 08:51:49 -08:00
s->addEvent720(angle, T_PRIMARY, TV_RISE);
s->addEvent720(angle + w, T_PRIMARY, TV_FALL);
2015-09-05 20:02:46 -07:00
}
static void configureNeon1995TriggerWaveformCommon(bool withCam, TriggerWaveform *s) {
2018-02-26 19:24:48 -08:00
trigger_wheel_e crank = withCam ? T_SECONDARY : T_PRIMARY;
// voodoo magic - we always need 720 at the end
2018-03-01 03:01:15 -08:00
int base = withCam ? 720 - 560 : 360 - 135;
float m = withCam ? 1 : 2;
2018-02-26 19:24:48 -08:00
2018-12-25 08:51:49 -08:00
s->addEvent720(m * (base - 120), crank, TV_RISE);
s->addEvent720(m * (base - 116), crank, TV_FALL);
s->addEvent720(m * (base - 720 + 616), crank, TV_RISE);
s->addEvent720(m * (base - 100), crank, TV_FALL);
s->addEvent720(m * (base - 720 + 643), crank, TV_RISE);
s->addEvent720(m * (base - 720 + 648), crank, TV_FALL);
s->addEvent720(m * (base - 720 + 671), crank, TV_RISE);
s->addEvent720(m * (base - 44), crank, TV_FALL);
2018-02-26 19:24:48 -08:00
2018-03-01 03:01:15 -08:00
if (withCam) {
2018-12-25 08:51:49 -08:00
s->addEvent720(base + 0, T_PRIMARY, TV_FALL);
2018-03-01 03:01:15 -08:00
}
2018-12-25 08:51:49 -08:00
s->addEvent720(m * (base + 20), crank, TV_RISE);
s->addEvent720(m * (base + 60), crank, TV_FALL);
s->addEvent720(m * (base + 75), crank, TV_RISE);
s->addEvent720(m * (base + 79), crank, TV_FALL);
s->addEvent720(m * (base + 101), crank, TV_RISE);
s->addEvent720(m * (base + 106), crank, TV_FALL);
s->addEvent720(m * (base + 130), crank, TV_RISE);
s->addEvent720(m * (base + 135), crank, TV_FALL);
2018-03-01 03:01:15 -08:00
if (withCam) {
2018-12-25 08:51:49 -08:00
s->addEvent720(base + 200, T_PRIMARY, TV_RISE); // width = 150
2018-02-26 19:24:48 -08:00
2018-12-25 08:51:49 -08:00
s->addEvent720(base + 236, crank, TV_RISE);
s->addEvent720(base + 239, crank, TV_FALL);
s->addEvent720(base + 250, crank, TV_RISE);
s->addEvent720(base + 255, crank, TV_FALL);
s->addEvent720(base + 277, crank, TV_RISE);
s->addEvent720(base + 282, crank, TV_FALL);
s->addEvent720(base + 305, crank, TV_RISE);
s->addEvent720(base + 310, crank, TV_FALL);
2018-02-26 19:24:48 -08:00
2018-12-25 08:51:49 -08:00
s->addEvent720(base + 374, crank, TV_RISE);
2018-02-26 19:24:48 -08:00
2018-03-01 03:01:15 -08:00
// if (withCam)
2018-12-25 08:51:49 -08:00
s->addEvent720(base + 395, T_PRIMARY, TV_FALL); // width =
2018-02-26 19:24:48 -08:00
2018-12-25 08:51:49 -08:00
s->addEvent720(base + 418, crank, TV_FALL);
s->addEvent720(base + 436, crank, TV_RISE);
s->addEvent720(base + 441, crank, TV_FALL);
s->addEvent720(base + 463, crank, TV_RISE);
s->addEvent720(base + 468, crank, TV_FALL);
s->addEvent720(base + 492, crank, TV_RISE);
s->addEvent720(base + 497, crank, TV_FALL);
2018-02-26 19:24:48 -08:00
2018-03-01 03:01:15 -08:00
// if (withCam)
2018-12-25 08:51:49 -08:00
s->addEvent720(base + 560, T_PRIMARY, TV_RISE); // width =
2018-03-01 03:01:15 -08:00
}
2018-02-26 19:24:48 -08:00
}
void configureNeon1995TriggerWaveformOnlyCrank(TriggerWaveform *s) {
s->initialize(FOUR_STROKE_CRANK_SENSOR);
2018-03-01 03:01:15 -08:00
s->setTriggerSynchronizationGap(3.79);
2018-02-26 19:24:48 -08:00
s->tdcPosition = 279;
configureNeon1995TriggerWaveformCommon(false, s);
2018-02-26 19:24:48 -08:00
}
void configureNeon1995TriggerWaveform(TriggerWaveform *s) {
s->initialize(FOUR_STROKE_CAM_SENSOR);
2015-07-10 06:01:56 -07:00
2017-03-04 17:52:24 -08:00
s->setTriggerSynchronizationGap(0.8227);
2015-07-10 06:01:56 -07:00
s->useRiseEdge = false;
2019-02-02 22:27:47 -08:00
s->initialState[T_PRIMARY] = TV_RISE;
2015-07-10 06:01:56 -07:00
configureNeon1995TriggerWaveformCommon(true, s);
2018-02-26 19:24:48 -08:00
2016-06-13 23:01:37 -07:00
s->useOnlyPrimaryForSync = true;
2015-07-10 06:01:56 -07:00
}
void initJeep18_2_2_2(TriggerWaveform *s) {
s->initialize(FOUR_STROKE_CAM_SENSOR);
2020-01-13 19:23:46 -08:00
s->isSynchronizationNeeded = false;
2017-01-23 19:03:58 -08:00
s->tdcPosition = 581;
2017-01-23 13:03:46 -08:00
float off = 212;
2018-12-25 08:51:49 -08:00
s->addEvent720(534 - 720 + off, T_SECONDARY, TV_RISE);
s->addEvent720(536 - 720 + off, T_SECONDARY, TV_FALL);
s->addEvent720(554 - 720 + off, T_SECONDARY, TV_RISE);
s->addEvent720(556 - 720 + off, T_SECONDARY, TV_FALL);
s->addEvent720(574 - 720 + off, T_SECONDARY, TV_RISE);
s->addEvent720(576 - 720 + off, T_SECONDARY, TV_FALL);
s->addEvent720(594 - 720 + off, T_SECONDARY, TV_RISE);
s->addEvent720(596 - 720 + off, T_SECONDARY, TV_FALL);
s->addEvent720(654 - 720 + off, T_SECONDARY, TV_RISE);
s->addEvent720(656 - 720 + off, T_SECONDARY, TV_FALL);
s->addEvent720(674 - 720 + off, T_SECONDARY, TV_RISE);
s->addEvent720(676 - 720 + off, T_SECONDARY, TV_FALL);
s->addEvent720(694 - 720 + off, T_SECONDARY, TV_RISE);
s->addEvent720(696 - 720 + off, T_SECONDARY, TV_FALL);
s->addEvent720(714 - 720 + off, T_SECONDARY, TV_RISE);
s->addEvent720(716 - 720 + off, T_SECONDARY, TV_FALL);
s->addEvent720(54 + off, T_SECONDARY, TV_RISE);
s->addEvent720(56 + off, T_SECONDARY, TV_FALL);
s->addEvent720(74 + off, T_SECONDARY, TV_RISE);
s->addEvent720(76 + off, T_SECONDARY, TV_FALL);
s->addEvent720(94 + off, T_SECONDARY, TV_RISE);
s->addEvent720(96 + off, T_SECONDARY, TV_FALL);
s->addEvent720(114 + off, T_SECONDARY, TV_RISE);
s->addEvent720(116 + off, T_SECONDARY, TV_FALL);
s->addEvent720(148 + off, T_PRIMARY, TV_RISE); // 360
s->addEvent720(174 + off, T_SECONDARY, TV_RISE);
s->addEvent720(176 + off, T_SECONDARY, TV_FALL);
s->addEvent720(194 + off, T_SECONDARY, TV_RISE);
s->addEvent720(196 + off, T_SECONDARY, TV_FALL);
s->addEvent720(214 + off, T_SECONDARY, TV_RISE);
s->addEvent720(216 + off, T_SECONDARY, TV_FALL);
s->addEvent720(234 + off, T_SECONDARY, TV_RISE);
s->addEvent720(236 + off, T_SECONDARY, TV_FALL);
s->addEvent720(294 + off, T_SECONDARY, TV_RISE);
s->addEvent720(296 + off, T_SECONDARY, TV_FALL);
s->addEvent720(314 + off, T_SECONDARY, TV_RISE);
s->addEvent720(316 + off, T_SECONDARY, TV_FALL);
s->addEvent720(334 + off, T_SECONDARY, TV_RISE);
s->addEvent720(336 + off, T_SECONDARY, TV_FALL);
s->addEvent720(354 + off, T_SECONDARY, TV_RISE);
s->addEvent720(356 + off, T_SECONDARY, TV_FALL);
s->addEvent720(414 + off, T_SECONDARY, TV_RISE);
s->addEvent720(416 + off, T_SECONDARY, TV_FALL);
s->addEvent720(434 + off, T_SECONDARY, TV_RISE);
s->addEvent720(436 + off, T_SECONDARY, TV_FALL);
s->addEvent720(454 + off, T_SECONDARY, TV_RISE);
s->addEvent720(456 + off, T_SECONDARY, TV_FALL);
s->addEvent720(474 + off, T_SECONDARY, TV_RISE);
s->addEvent720(476 + off, T_SECONDARY, TV_FALL);
s->addEvent720(508 + off, T_PRIMARY, TV_FALL); // 720
2017-01-23 18:03:11 -08:00
2017-01-23 13:03:46 -08:00
}
2018-10-25 14:42:42 -07:00
static void add4cylblock(int off, TriggerWaveform *s) {
2018-12-25 08:51:49 -08:00
s->addEvent720(114 + off, T_SECONDARY, TV_RISE);
s->addEvent720(114 + off + 2, T_SECONDARY, TV_FALL);
2018-10-25 15:17:47 -07:00
2018-12-25 08:51:49 -08:00
s->addEvent720(134 + off, T_SECONDARY, TV_RISE);
s->addEvent720(134 + off + 2, T_SECONDARY, TV_FALL);
2018-10-25 15:17:47 -07:00
2018-12-25 08:51:49 -08:00
s->addEvent720(154 + off, T_SECONDARY, TV_RISE);
s->addEvent720(154 + off + 2, T_SECONDARY, TV_FALL);
2018-10-25 15:17:47 -07:00
2018-12-25 08:51:49 -08:00
s->addEvent720(174 + off, T_SECONDARY, TV_RISE);
s->addEvent720(174 + off + 2, T_SECONDARY, TV_FALL);
2018-10-25 15:17:47 -07:00
}
// TT_JEEP_4_CYL
void initJeep_XJ_4cyl_2500(TriggerWaveform *s) {
s->initialize(FOUR_STROKE_CAM_SENSOR);
2020-01-13 19:25:51 -08:00
s->isSynchronizationNeeded = false;
2018-10-25 15:17:47 -07:00
s->tdcPosition = 720 - 236;
float offset = 124;
2018-12-25 16:42:27 -08:00
add4cylblock(offset - 180, s);
add4cylblock(offset, s);
2018-10-25 15:17:47 -07:00
2018-12-25 08:51:49 -08:00
s->addEvent720(236 + offset, T_PRIMARY, TV_RISE); // 360
2018-10-25 15:17:47 -07:00
2018-12-25 16:42:27 -08:00
add4cylblock(offset + 180, s);
add4cylblock(offset + 360, s);
2018-10-25 15:17:47 -07:00
2018-12-25 08:51:49 -08:00
s->addEvent720(596 + offset, T_PRIMARY, TV_FALL); // 720
2018-10-25 15:17:47 -07:00
2018-10-25 14:42:42 -07:00
}
2020-12-03 21:30:22 -08:00
void configureChryslerNGC_36_2_2(TriggerWaveform *s) {
s->initialize(FOUR_STROKE_CAM_SENSOR);
float wide = 30 * 2;
float narrow = 10 * 2;
2020-12-04 13:33:29 -08:00
s->setTriggerSynchronizationGap(3.5);
2020-12-04 13:50:26 -08:00
for (int i = 1; i < 15; i++) {
2020-12-04 13:33:29 -08:00
s->setTriggerSynchronizationGap3(/*gapIndex*/i, TRIGGER_GAP_DEVIATION_LOW, TRIGGER_GAP_DEVIATION_HIGH);
}
2020-12-04 13:50:26 -08:00
s->setTriggerSynchronizationGap3(/*gapIndex*/15, 0.4 * TRIGGER_GAP_DEVIATION_LOW, 0.4 * TRIGGER_GAP_DEVIATION_HIGH);
2020-12-03 21:30:22 -08:00
float base = 0;
2020-12-04 13:50:26 -08:00
for (int i = 0; i < 14; i++) {
s->addEventAngle(base + narrow / 2, T_PRIMARY, TV_RISE);
s->addEventAngle(base + narrow, T_PRIMARY, TV_FALL);
2020-12-03 21:30:22 -08:00
base += narrow;
}
s->addEventAngle(base + narrow / 2, T_PRIMARY, TV_RISE);
2020-12-03 22:02:09 -08:00
base += narrow / 2;
s->addEventAngle(base + wide, T_PRIMARY, TV_FALL);
2020-12-03 21:30:22 -08:00
base += wide;
2020-12-04 13:50:26 -08:00
for (int i = 0; i < 16; i++) {
s->addEventAngle(base + narrow / 2, T_PRIMARY, TV_RISE);
s->addEventAngle(base + narrow, T_PRIMARY, TV_FALL);
2020-12-03 21:30:22 -08:00
base += narrow;
}
2020-12-04 13:50:26 -08:00
// one small tooth at the end of the engine cycle
s->addEventAngle(s->getCycleDuration() - narrow / 2, T_PRIMARY, TV_RISE);
s->addEventAngle(s->getCycleDuration(), T_PRIMARY, TV_FALL);
2020-12-03 21:30:22 -08:00
s->useOnlyPrimaryForSync = true;
}