| Line | Branch | Decision | Exec | Source |
|---|---|---|---|---|
| 1 | /** | |||
| 2 | * @file trigger_mitsubishi.cpp | |||
| 3 | * | |||
| 4 | * @date Aug 5, 2014 | |||
| 5 | * @author Andrey Belomutskiy, (c) 2012-2020 | |||
| 6 | */ | |||
| 7 | ||||
| 8 | #include "pch.h" | |||
| 9 | ||||
| 10 | #include "trigger_mitsubishi.h" | |||
| 11 | #include "trigger_universal.h" | |||
| 12 | ||||
| 13 | 9 | void configureFordAspireTriggerWaveform(TriggerWaveform * s) { | ||
| 14 | 9 | s->initialize(FOUR_STROKE_CAM_SENSOR, SyncEdge::RiseOnly); | ||
| 15 | 9 | s->isSynchronizationNeeded = false; | ||
| 16 | 9 | s->isSecondWheelCam = true; | ||
| 17 | ||||
| 18 | 9 | float x = 121.90; | ||
| 19 | 9 | float y = 110.86; | ||
| 20 | ||||
| 21 | 9 | s->addEvent720(x + y - 180, TriggerValue::RISE, TriggerWheel::T_SECONDARY); | ||
| 22 | 9 | s->addEvent720(x, TriggerValue::FALL, TriggerWheel::T_SECONDARY); | ||
| 23 | 9 | s->addEvent720(x + y, TriggerValue::RISE, TriggerWheel::T_SECONDARY); | ||
| 24 | 9 | s->addEvent720(x + 180, TriggerValue::FALL, TriggerWheel::T_SECONDARY); | ||
| 25 | 9 | s->addEvent720(360, TriggerValue::RISE, TriggerWheel::T_PRIMARY); | ||
| 26 | ||||
| 27 | 9 | s->addEvent720(x + 180 + y, TriggerValue::RISE, TriggerWheel::T_SECONDARY); | ||
| 28 | 9 | s->addEvent720(x + 360, TriggerValue::FALL, TriggerWheel::T_SECONDARY); | ||
| 29 | 9 | s->addEvent720(x + 360 + y, TriggerValue::RISE, TriggerWheel::T_SECONDARY); | ||
| 30 | 9 | s->addEvent720(x + 540, TriggerValue::FALL, TriggerWheel::T_SECONDARY); | ||
| 31 | 9 | s->addEvent720(720, TriggerValue::FALL, TriggerWheel::T_PRIMARY); | ||
| 32 | 9 | } | ||
| 33 | ||||
| 34 | 3 | void initializeMitsubishi4gSymmetricalCrank(TriggerWaveform *s) { | ||
| 35 | 3 | initializeSkippedToothTrigger(s, /* reality */2 * /* symmetrical*/0.5, | ||
| 36 | 0, FOUR_STROKE_SYMMETRICAL_CRANK_SENSOR, SyncEdge::RiseOnly); | |||
| 37 | #if EFI_UNIT_TEST | |||
| 38 | 3 | s->knownOperationMode = true; // this is always placed on crank, overriding 'initializeSkippedToothTrigger' value | ||
| 39 | #endif | |||
| 40 | 3 | } | ||
| 41 | ||||
| 42 | // https://github.com/rusefi/rusefi/issues/5593 | |||
| 43 | 12 | void initializeVvt6G72(TriggerWaveform *s) { | ||
| 44 | 12 | s->initialize(FOUR_STROKE_CAM_SENSOR, SyncEdge::Both); | ||
| 45 | ||||
| 46 | //happy ratio 0.548387 @ 0 | |||
| 47 | //happy ratio 0.941176 @ 1 | |||
| 48 | //happy ratio 0.500000 @ 2 | |||
| 49 | //happy ratio 3.750002 @ 3 | |||
| 50 | //happy ratio 0.266667 @ 4 | |||
| 51 | //happy ratio 3.250000 @ 5 | |||
| 52 | //happy ratio 0.307692 @ 6 | |||
| 53 | //happy ratio 3.875000 @ 7 | |||
| 54 | ||||
| 55 | // real working ranges for all of the engine states | |||
| 56 | 12 | s->setTriggerSynchronizationGap3(0, 1.3, 3.2); | ||
| 57 | 12 | s->setTriggerSynchronizationGap3(1, 0.3, 0.66); | ||
| 58 | 12 | s->setTriggerSynchronizationGap3(2, 1.3, 3.2); | ||
| 59 | 12 | s->setTriggerSynchronizationGap3(3, 0.3, 0.66); | ||
| 60 | 12 | s->setTriggerSynchronizationGap3(4, 1.3, 3.2); | ||
| 61 | ||||
| 62 | 12 | s->addEvent360(52.5, TriggerValue::FALL); | ||
| 63 | 12 | s->addEvent360(82.5, TriggerValue::RISE); | ||
| 64 | 12 | s->addEvent360(112.5, TriggerValue::FALL); | ||
| 65 | 12 | s->addEvent360(177.5, TriggerValue::RISE); | ||
| 66 | 12 | s->addEvent360(207.5, TriggerValue::FALL); | ||
| 67 | 12 | s->addEvent360(262.5, TriggerValue::RISE); | ||
| 68 | 12 | s->addEvent360(292.5, TriggerValue::FALL); | ||
| 69 | 12 | s->addEvent360(360, TriggerValue::RISE); | ||
| 70 | 12 | } | ||
| 71 | ||||
| 72 | 5 | void initializeMitsubishi4g63Cam(TriggerWaveform *s) { | ||
| 73 | 5 | s->initialize(FOUR_STROKE_CAM_SENSOR, SyncEdge::Both); | ||
| 74 | ||||
| 75 | // nominal gap 0.5 | |||
| 76 | 5 | s->setSecondTriggerSynchronizationGap2(0.2, 0.95); | ||
| 77 | ||||
| 78 | // nominal gap 3.0 | |||
| 79 | 5 | s->setTriggerSynchronizationGap2(2.0f, 5.0f); | ||
| 80 | ||||
| 81 | // 131 deg before #1 TDC | |||
| 82 | // 49 deg after #1 TDC | |||
| 83 | 5 | s->addToothRiseFall(225, /*width*/90); | ||
| 84 | ||||
| 85 | // 131 deg before #4 TDC | |||
| 86 | // 41 deg before #4 TDC | |||
| 87 | 5 | s->addToothRiseFall(360, /*width*/45); | ||
| 88 | 5 | } | ||
| 89 | ||||
| 90 | 2 | void initialize36_2_1_1(TriggerWaveform *s) { | ||
| 91 | 2 | s->initialize(FOUR_STROKE_CRANK_SENSOR, SyncEdge::RiseOnly); | ||
| 92 | 2 | s->tdcPosition = 90; | ||
| 93 | 2 | int totalTeethCount = 36; | ||
| 94 | ||||
| 95 | 2 | float engineCycle = FOUR_STROKE_ENGINE_CYCLE; | ||
| 96 | 2 | float toothWidth = 0.5; | ||
| 97 | ||||
| 98 | 2 | float oneTooth = 720 / totalTeethCount; | ||
| 99 | ||||
| 100 | 2 | float offset = (36 - 11 - 12 - 11) * oneTooth; | ||
| 101 | ||||
| 102 | 2 | addSkippedToothTriggerEvents(TriggerWheel::T_PRIMARY, s, totalTeethCount, 0, toothWidth, /*offset*/offset, engineCycle, | ||
| 103 | 2 | NO_LEFT_FILTER, offset + 11 * oneTooth + 1); | ||
| 104 | ||||
| 105 | 2 | offset += (11 + 1) * oneTooth; | ||
| 106 | ||||
| 107 | 2 | addSkippedToothTriggerEvents(TriggerWheel::T_PRIMARY, s, totalTeethCount, 0, toothWidth, /*offset*/offset, engineCycle, | ||
| 108 | 2 | NO_LEFT_FILTER, offset + 11 * oneTooth + 1); | ||
| 109 | ||||
| 110 | ||||
| 111 | 2 | offset += (11 + 1) * oneTooth; | ||
| 112 | ||||
| 113 | 2 | addSkippedToothTriggerEvents(TriggerWheel::T_PRIMARY, s, totalTeethCount, 0, toothWidth, /*offset*/offset, engineCycle, | ||
| 114 | 2 | NO_LEFT_FILTER, offset + 10 * oneTooth + 1); | ||
| 115 | ||||
| 116 | 2 | s->setTriggerSynchronizationGap(3); | ||
| 117 | 2 | s->setSecondTriggerSynchronizationGap(1); // redundancy | ||
| 118 | 2 | } | ||
| 119 | ||||
| 120 | // Mitsubishi 4B11 | |||
| 121 | // https://github.com/rusefi/rusefi/wiki/All-Supported-Triggers#36-2-1 | |||
| 122 | 5 | void initialize36_2_1(TriggerWaveform *s) { | ||
| 123 | 5 | s->initialize(FOUR_STROKE_CRANK_SENSOR, SyncEdge::RiseOnly); | ||
| 124 | 5 | s->tdcPosition = 90; | ||
| 125 | 5 | int totalTeethCount = 36; | ||
| 126 | ||||
| 127 | 5 | float engineCycle = FOUR_STROKE_ENGINE_CYCLE; | ||
| 128 | 5 | float toothWidth = 0.5; | ||
| 129 | ||||
| 130 | 5 | float oneTooth = 720 / totalTeethCount; | ||
| 131 | ||||
| 132 | 5 | float offset = (36 - 16 - 2 - 17) * oneTooth; | ||
| 133 | ||||
| 134 | 5 | addSkippedToothTriggerEvents(TriggerWheel::T_PRIMARY, s, totalTeethCount, 0, toothWidth, /*offset*/offset, engineCycle, | ||
| 135 | 5 | NO_LEFT_FILTER, offset + 16 * oneTooth + 1); | ||
| 136 | ||||
| 137 | 5 | offset += (16 + 2) * oneTooth; | ||
| 138 | ||||
| 139 | 5 | addSkippedToothTriggerEvents(TriggerWheel::T_PRIMARY, s, totalTeethCount, 0, toothWidth, /*offset*/offset, engineCycle, | ||
| 140 | 5 | NO_LEFT_FILTER, offset + 17 * oneTooth + 1); | ||
| 141 | ||||
| 142 | ||||
| 143 | 5 | s->setTriggerSynchronizationGap(3); | ||
| 144 | 5 | s->setSecondTriggerSynchronizationGap(1); // redundancy | ||
| 145 | 5 | } | ||
| 146 | ||||
| 147 | 4 | void initializeVvt3A92(TriggerWaveform *s) { | ||
| 148 | 4 | s->initialize(FOUR_STROKE_CRANK_SENSOR, SyncEdge::RiseOnly); | ||
| 149 | ||||
| 150 | 4 | int w = 5; | ||
| 151 | 4 | s->addToothRiseFall(120, w); | ||
| 152 | ||||
| 153 | 4 | s->addToothRiseFall(12 + 120, w); | ||
| 154 | ||||
| 155 | 4 | s->addToothRiseFall(240, w); | ||
| 156 | ||||
| 157 | 4 | s->addToothRiseFall(360, w); | ||
| 158 | ||||
| 159 | 4 | s->setTriggerSynchronizationGap(9); | ||
| 160 | 4 | s->setSecondTriggerSynchronizationGap(0.11); // redundancy | ||
| 161 | 4 | } | ||
| 162 | ||||
| 163 | 1 | void initializeMitsubishi4G69Cam(TriggerWaveform *s) { | ||
| 164 | 1 | s->initialize(FOUR_STROKE_CAM_SENSOR, SyncEdge::RiseOnly); | ||
| 165 | ||||
| 166 | 1 | int tooth = 5; | ||
| 167 | ||||
| 168 | 1 | int extraTooth = 20; | ||
| 169 | ||||
| 170 | 1 | s->addEvent360( 90 - tooth, TriggerValue::RISE, TriggerWheel::T_PRIMARY); | ||
| 171 | 1 | s->addEvent360( 90, TriggerValue::FALL, TriggerWheel::T_PRIMARY); | ||
| 172 | ||||
| 173 | 1 | s->addEvent360(180 - extraTooth - tooth, TriggerValue::RISE, TriggerWheel::T_PRIMARY); | ||
| 174 | 1 | s->addEvent360(180 - extraTooth, TriggerValue::FALL, TriggerWheel::T_PRIMARY); | ||
| 175 | ||||
| 176 | 1 | s->addEvent360(180 - tooth, TriggerValue::RISE, TriggerWheel::T_PRIMARY); | ||
| 177 | 1 | s->addEvent360(180, TriggerValue::FALL, TriggerWheel::T_PRIMARY); | ||
| 178 | ||||
| 179 | 1 | s->addEvent360(270 - extraTooth - tooth, TriggerValue::RISE, TriggerWheel::T_PRIMARY); | ||
| 180 | 1 | s->addEvent360(270 - extraTooth, TriggerValue::FALL, TriggerWheel::T_PRIMARY); | ||
| 181 | ||||
| 182 | 1 | s->addEvent360(270 - tooth, TriggerValue::RISE, TriggerWheel::T_PRIMARY); | ||
| 183 | 1 | s->addEvent360(270, TriggerValue::FALL, TriggerWheel::T_PRIMARY); | ||
| 184 | ||||
| 185 | 1 | s->addEvent360(360 - tooth, TriggerValue::RISE, TriggerWheel::T_PRIMARY); | ||
| 186 | 1 | s->addEvent360(360, TriggerValue::FALL, TriggerWheel::T_PRIMARY); | ||
| 187 | ||||
| 188 | 1 | s->setTriggerSynchronizationGap(1); | ||
| 189 | 1 | s->setSecondTriggerSynchronizationGap(4.5); | ||
| 190 | 1 | } | ||
| 191 |