rusEFI
The most advanced open source ECU
Loading...
Searching...
No Matches
config
engines
subaru.cpp
Go to the documentation of this file.
1
/**
2
* @file subaru.cpp
3
*
4
* SUBARU_2003_WRX
5
* set engine_type 22
6
*
7
* @date Sep 14, 2014
8
* @author Andrey Belomutskiy, (c) 2012-2020
9
*/
10
11
#include "
pch.h
"
12
13
#include "
subaru.h
"
14
#include "
custom_engine.h
"
15
#include "
proteus_meta.h
"
16
#include "
defaults.h
"
17
#include "
mre_meta.h
"
18
19
/**
20
* MRE_SUBARU_EJ18
21
* set engine_type 37
22
*/
23
void
setSubaruEJ18_MRE
() {
24
engineConfiguration
->trigger.type =
trigger_type_e::TT_VVT_SUBARU_7_WITHOUT_6
;
25
26
27
// engineConfiguration->isDoubleSolenoidIdle = true;
28
29
engineConfiguration
->displacement = 1.8;
30
strcpy(
engineConfiguration
->engineMake, ENGINE_MAKE_SUBARU);
31
strcpy(
engineConfiguration
->engineCode,
"EJ18"
);
32
33
engineConfiguration
->firingOrder = FO_1_3_2_4;
34
engineConfiguration
->injectionMode = IM_SEQUENTIAL;
35
engineConfiguration
->ignitionMode = IM_WASTED_SPARK;
36
37
#if (BOARD_TLE8888_COUNT > 0)
38
// Gpio::TLE8888_PIN_23: "33 - GP Out 3"
39
engineConfiguration
->malfunctionIndicatorPin = MRE_GPOUT_3;
40
#endif
/* BOARD_TLE8888_COUNT */
41
42
// this car has high-side main relay WOW so we have to hard wire it to ignition switch
43
44
45
}
46
47
/*
48
* Subaru SVX (Alcyone SVX)
49
*/
50
51
void
setSubaruEG33Defaults
() {
52
setCamOperationMode
();
53
54
engineConfiguration
->trigger.type =
trigger_type_e::TT_SUBARU_SVX
;
55
56
engineConfiguration
->cylindersCount = 6;
57
setLeftRightBanksNeedBetterName
();
58
engineConfiguration
->firingOrder = FO_1_6_3_2_5_4;
59
60
engineConfiguration
->ignitionMode = IM_INDIVIDUAL_COILS;
61
engineConfiguration
->crankingInjectionMode = IM_SIMULTANEOUS;
62
engineConfiguration
->injectionMode = IM_SEQUENTIAL;
63
64
/* TODO: */
65
engineConfiguration
->globalTriggerAngleOffset = 114;
// the end of 19th tooth?
66
67
engineConfiguration
->fuelAlgorithm = engine_load_mode_e::LM_REAL_MAF;
68
69
engineConfiguration
->displacement = 3.30;
70
engineConfiguration
->injector.flow = 250;
71
72
setTable
(
config
->crankingCycleBaseFuel, 5);
// ???
73
engineConfiguration
->cranking.rpm = 400;
74
75
engineConfiguration
->rpmHardLimit = 6500;
76
77
engineConfiguration
->idleStepperReactionTime = 10;
78
engineConfiguration
->stepperDirectionPinMode = OM_INVERTED;
79
engineConfiguration
->useLinearCltSensor =
true
;
80
81
engineConfiguration
->canReadEnabled =
true
;
82
engineConfiguration
->canWriteEnabled =
false
;
83
84
/* Fully closed - 0.9V, fully opened - 4.7 (?) */
85
engineConfiguration
->tpsMin =
convertVoltageTo10bitADC
(0.9);
86
engineConfiguration
->tpsMax =
convertVoltageTo10bitADC
(4.7);
87
engineConfiguration
->tpsErrorDetectionTooLow = -10;
// -10% open
88
engineConfiguration
->tpsErrorDetectionTooHigh = 110;
// 110% open
89
90
engineConfiguration
->mapMinBufferLength = 4;
91
92
/* idle configuration */
93
setTable
(
config
->cltIdleCorrTable, 30.0);
94
95
engineConfiguration
->maxAcRpm = 3000;
96
97
/* Check this */
98
engineConfiguration
->tachPulsePerRev = 2;
99
}
100
101
void
setSubaru2011
() {
102
engineConfiguration
->allowIdenticalPps =
true
;
103
setPPSCalibration
(0.69, 3.38, 0.69, 3.38);
104
105
engineConfiguration
->displacement = 2.5;
106
strcpy(
engineConfiguration
->engineMake, ENGINE_MAKE_SUBARU);
107
engineConfiguration
->trigger.type =
trigger_type_e::TT_36_2_2_2
;
108
engineConfiguration
->vvtMode[0] = VVT_BOSCH_QUICK_START;
109
engineConfiguration
->vvtMode[1] = VVT_BOSCH_QUICK_START;
110
engineConfiguration
->firingOrder = FO_1_3_2_4;
111
engineConfiguration
->injectionMode = IM_SEQUENTIAL;
112
113
#if HW_PROTEUS && EFI_PROD_CODE
114
setProteusEtbIO
();
115
engineConfiguration
->triggerInputPins[0] = PROTEUS_VR_1;
116
engineConfiguration
->camInputs[0] = PROTEUS_DIGITAL_1;
117
engineConfiguration
->camInputs[1] = PROTEUS_DIGITAL_2;
118
engineConfiguration
->camInputs[2] = PROTEUS_DIGITAL_3;
119
engineConfiguration
->camInputs[3] = PROTEUS_DIGITAL_4;
120
121
122
engineConfiguration
->starterControlPin = Gpio::PROTEUS_LS_14;
123
engineConfiguration
->startStopButtonPin = PROTEUS_IN_AV_6_DIGITAL;
124
#endif
// HW_PROTEUS
125
126
engineConfiguration
->tpsMin =
convertVoltageTo10bitADC
(0.68);
127
engineConfiguration
->tpsMax =
convertVoltageTo10bitADC
(3.96);
128
engineConfiguration
->tps1SecondaryMin =
convertVoltageTo10bitADC
(1.55);
129
engineConfiguration
->tps1SecondaryMax =
convertVoltageTo10bitADC
(4.17);
130
131
}
custom_engine.h
setPPSCalibration
void setPPSCalibration(float primaryUp, float primaryDown, float secondaryUp, float secondaryDown)
Definition
default_base_engine.cpp:461
setLeftRightBanksNeedBetterName
void setLeftRightBanksNeedBetterName()
Definition
default_base_engine.cpp:95
defaults.h
setCamOperationMode
void setCamOperationMode()
Definition
engine_configuration.cpp:713
config
static constexpr persistent_config_s * config
Definition
engine_configuration.h:82
engineConfiguration
static constexpr engine_configuration_s * engineConfiguration
Definition
engine_configuration.h:81
trigger_type_e::TT_36_2_2_2
@ TT_36_2_2_2
trigger_type_e::TT_SUBARU_SVX
@ TT_SUBARU_SVX
trigger_type_e::TT_VVT_SUBARU_7_WITHOUT_6
@ TT_VVT_SUBARU_7_WITHOUT_6
mre_meta.h
pch.h
proteus_meta.h
setProteusEtbIO
void setProteusEtbIO()
Definition
default_base_engine.cpp:479
setSubaruEG33Defaults
void setSubaruEG33Defaults()
Definition
subaru.cpp:51
setSubaru2011
void setSubaru2011()
Definition
subaru.cpp:101
setSubaruEJ18_MRE
void setSubaruEJ18_MRE()
Definition
subaru.cpp:23
subaru.h
setTable
constexpr void setTable(TElement(&dest)[N][M], const VElement value)
Definition
table_helper.h:167
convertVoltageTo10bitADC
constexpr int convertVoltageTo10bitADC(float voltage)
Definition
tps.h:21
Generated on Sat Dec 13 2025 01:49:58 for rusEFI by
1.9.8