Line | Branch | Decision | Exec | Source |
---|---|---|---|---|
1 | /* | |||
2 | * @file mazda_miata_vvt.cpp | |||
3 | * | |||
4 | * Miata NB2, also known as MX-5 Mk2.5 | |||
5 | * | |||
6 | * Frankenso MAZDA_MIATA_2003 | |||
7 | * set engine_type 47 | |||
8 | * | |||
9 | * coil1/4 (p1 +5 VP) Gpio::E14 | |||
10 | * coil2/2 (p1 +5 VP) Gpio::C9 | |||
11 | * tachometer +5 VP (p3 +12 VP) Gpio::E8 | |||
12 | * alternator +5 VP (p3 +12 VP) Gpio::E10 | |||
13 | * ETB PWM Gpio::E6 inverted low-side with pull-up | |||
14 | * ETB dir1 Gpio::E12 | |||
15 | * ETB dir2 Gpio::C7 | |||
16 | * | |||
17 | * COP ion #1 Gpio::D8 | |||
18 | * COP ion #3 Gpio::D9 | |||
19 | * | |||
20 | * @date Oct 4, 2016 | |||
21 | * @author Andrey Belomutskiy, (c) 2012-2020 | |||
22 | * http://rusefi.com/forum/viewtopic.php?f=3&t=1095 | |||
23 | * | |||
24 | * | |||
25 | * See also TT_MAZDA_MIATA_VVT_TEST for trigger simulation | |||
26 | * | |||
27 | * Based on http://rusefi.com/wiki/index.php?title=Manual:Hardware_Frankenso_board#Default_Pinout | |||
28 | * | |||
29 | * board #70 - red car, hunchback compatible | |||
30 | * set engine_type 55 | |||
31 | * | |||
32 | * Crank primary trigger PA5 (3E in Miata board) white | |||
33 | * Cam vvt input PC6 (3G in Miata board) blue | |||
34 | * Wideband input PA3 (3J in Miata board) | |||
35 | * | |||
36 | * coil1/4 (p1 +5 VP) Gpio::E14 | |||
37 | * coil2/2 (p1 +5 VP) Gpio::C7 | |||
38 | * | |||
39 | * tachometer +5 VP (p3 +12 VP) Gpio::E8 | |||
40 | * alternator +5 VP (p3 +12 VP) Gpio::E10 | |||
41 | * | |||
42 | * VVT solenoid on aux PID#1 Gpio::E3 | |||
43 | * warning light Gpio::E6 | |||
44 | * | |||
45 | * | |||
46 | * idle solenoid PC13 on middle harness plug. diodes seem to be in the harness | |||
47 | */ | |||
48 | ||||
49 | #include "pch.h" | |||
50 | ||||
51 | #include "mazda_miata_vvt.h" | |||
52 | #include "custom_engine.h" | |||
53 | #include "mazda_miata_base_maps.h" | |||
54 | ||||
55 | ||||
56 | #if HW_PROTEUS | |||
57 | #include "proteus_meta.h" | |||
58 | #endif | |||
59 | ||||
60 | #include "mre_meta.h" | |||
61 | ||||
62 | #if HW_HELLEN | |||
63 | ||||
64 | #if VVT_TABLE_SIZE == 8 | |||
65 | static const float vvt18RpmBins[VVT_TABLE_SIZE] = | |||
66 | {700.0, 1000.0, 2000.0, 3000.0, 3500.0, 4500.0, 5500.0, 6500.0} | |||
67 | ; | |||
68 | ||||
69 | static const float vvt18LoadBins[VVT_TABLE_SIZE] = | |||
70 | {30.0, 40.0, 50.0, 60.0, 70.0, 75.0, 82.0, 85.0} | |||
71 | ; | |||
72 | ||||
73 | static const uint8_t SCRIPT_TABLE_vvt_target[VVT_TABLE_SIZE][VVT_TABLE_SIZE] = { | |||
74 | /* Generated by TS2C on Mon Feb 13 19:11:32 EST 2017*/ | |||
75 | {/* 0 30 *//* 0 700.0*/1, /* 1 1000.0*/3, /* 2 2000.0*/10, /* 3 3000.0*/20, /* 4 3500.0*/27, /* 5 4500.0*/28, /* 6 5500.0*/11, /* 7 6500.0*/5, }, | |||
76 | {/* 1 40 *//* 0 700.0*/3, /* 1 1000.0*/10, /* 2 2000.0*/19, /* 3 3000.0*/26, /* 4 3500.0*/30, /* 5 4500.0*/28, /* 6 5500.0*/11, /* 7 6500.0*/5, }, | |||
77 | {/* 2 50 *//* 0 700.0*/7, /* 1 1000.0*/16, /* 2 2000.0*/24, /* 3 3000.0*/28, /* 4 3500.0*/30, /* 5 4500.0*/28, /* 6 5500.0*/11, /* 7 6500.0*/5, }, | |||
78 | {/* 3 60 *//* 0 700.0*/11, /* 1 1000.0*/20, /* 2 2000.0*/27, /* 3 3000.0*/28, /* 4 3500.0*/30, /* 5 4500.0*/28, /* 6 5500.0*/11, /* 7 6500.0*/5, }, | |||
79 | {/* 4 70 *//* 0 700.0*/13, /* 1 1000.0*/24, /* 2 2000.0*/31, /* 3 3000.0*/28, /* 4 3500.0*/30, /* 5 4500.0*/28, /* 6 5500.0*/11, /* 7 6500.0*/5, }, | |||
80 | {/* 5 75 *//* 0 700.0*/15, /* 1 1000.0*/27, /* 2 2000.0*/33, /* 3 3000.0*/28, /* 4 3500.0*/30, /* 5 4500.0*/28, /* 6 5500.0*/11, /* 7 6500.0*/5, }, | |||
81 | {/* 6 82 *//* 0 700.0*/17, /* 1 1000.0*/28, /* 2 2000.0*/33, /* 3 3000.0*/28, /* 4 3500.0*/30, /* 5 4500.0*/28, /* 6 5500.0*/11, /* 7 6500.0*/5, }, | |||
82 | {/* 7 85 *//* 0 700.0*/17, /* 1 1000.0*/28, /* 2 2000.0*/33, /* 3 3000.0*/28, /* 4 3500.0*/30, /* 5 4500.0*/28, /* 6 5500.0*/11, /* 7 6500.0*/5, }, | |||
83 | }; | |||
84 | #endif | |||
85 | ||||
86 | #if (VE_RPM_COUNT == 16) && (VE_LOAD_COUNT == 16) | |||
87 | static const int8_t mapBased18vvtVeTable_NB_fuel_rail[16][16] = { | |||
88 | /* Generated by TS2C on Tue Apr 18 21:46:03 EDT 2017*/ | |||
89 | {/* 0 20 *//* 0 700.0*/35, /* 1 820.0*/36, /* 2 950.0*/37, /* 3 1100.0*/35, /* 4 1300.0*/36, /* 5 1550.0*/37, /* 6 1800.0*/33, /* 7 2150.0*/31, /* 8 2500.0*/25, /* 9 3000.0*/24, /* 10 3500.0*/24, /* 11 4150.0*/25, /* 12 4900.0*/26, /* 13 5800.0*/29, /* 14 6800.0*/33, /* 15 8000.0*/36, }, | |||
90 | {/* 1 25 *//* 0 700.0*/35, /* 1 820.0*/37, /* 2 950.0*/38, /* 3 1100.0*/37, /* 4 1300.0*/36, /* 5 1550.0*/37, /* 6 1800.0*/41, /* 7 2150.0*/39, /* 8 2500.0*/40, /* 9 3000.0*/37, /* 10 3500.0*/35, /* 11 4150.0*/36, /* 12 4900.0*/37, /* 13 5800.0*/35, /* 14 6800.0*/38, /* 15 8000.0*/40, }, | |||
91 | {/* 2 30 *//* 0 700.0*/37, /* 1 820.0*/40, /* 2 950.0*/39, /* 3 1100.0*/37, /* 4 1300.0*/38, /* 5 1550.0*/41, /* 6 1800.0*/45, /* 7 2150.0*/47, /* 8 2500.0*/54, /* 9 3000.0*/48, /* 10 3500.0*/47, /* 11 4150.0*/55, /* 12 4900.0*/55, /* 13 5800.0*/49, /* 14 6800.0*/50, /* 15 8000.0*/51, }, | |||
92 | {/* 3 35 *//* 0 700.0*/39, /* 1 820.0*/44, /* 2 950.0*/42, /* 3 1100.0*/40, /* 4 1300.0*/45, /* 5 1550.0*/48, /* 6 1800.0*/48, /* 7 2150.0*/52, /* 8 2500.0*/56, /* 9 3000.0*/53, /* 10 3500.0*/52, /* 11 4150.0*/58, /* 12 4900.0*/62, /* 13 5800.0*/57, /* 14 6800.0*/58, /* 15 8000.0*/58, }, | |||
93 | {/* 4 40 *//* 0 700.0*/45, /* 1 820.0*/56, /* 2 950.0*/49, /* 3 1100.0*/45, /* 4 1300.0*/54, /* 5 1550.0*/53, /* 6 1800.0*/55, /* 7 2150.0*/54, /* 8 2500.0*/57, /* 9 3000.0*/55, /* 10 3500.0*/57, /* 11 4150.0*/59, /* 12 4900.0*/62, /* 13 5800.0*/59, /* 14 6800.0*/63, /* 15 8000.0*/62, }, | |||
94 | {/* 5 46 *//* 0 700.0*/54, /* 1 820.0*/61, /* 2 950.0*/56, /* 3 1100.0*/52, /* 4 1300.0*/53, /* 5 1550.0*/58, /* 6 1800.0*/57, /* 7 2150.0*/59, /* 8 2500.0*/58, /* 9 3000.0*/58, /* 10 3500.0*/60, /* 11 4150.0*/64, /* 12 4900.0*/66, /* 13 5800.0*/64, /* 14 6800.0*/65, /* 15 8000.0*/63, }, | |||
95 | {/* 6 54 *//* 0 700.0*/60, /* 1 820.0*/67, /* 2 950.0*/66, /* 3 1100.0*/60, /* 4 1300.0*/59, /* 5 1550.0*/59, /* 6 1800.0*/61, /* 7 2150.0*/63, /* 8 2500.0*/63, /* 9 3000.0*/60, /* 10 3500.0*/62, /* 11 4150.0*/69, /* 12 4900.0*/71, /* 13 5800.0*/67, /* 14 6800.0*/65, /* 15 8000.0*/63, }, | |||
96 | {/* 7 63 *//* 0 700.0*/65, /* 1 820.0*/70, /* 2 950.0*/71, /* 3 1100.0*/67, /* 4 1300.0*/62, /* 5 1550.0*/61, /* 6 1800.0*/65, /* 7 2150.0*/63, /* 8 2500.0*/63, /* 9 3000.0*/64, /* 10 3500.0*/66, /* 11 4150.0*/69, /* 12 4900.0*/73, /* 13 5800.0*/71, /* 14 6800.0*/67, /* 15 8000.0*/65, }, | |||
97 | {/* 8 73 *//* 0 700.0*/70, /* 1 820.0*/74, /* 2 950.0*/73, /* 3 1100.0*/75, /* 4 1300.0*/71, /* 5 1550.0*/66, /* 6 1800.0*/66, /* 7 2150.0*/65, /* 8 2500.0*/67, /* 9 3000.0*/69, /* 10 3500.0*/68, /* 11 4150.0*/72, /* 12 4900.0*/76, /* 13 5800.0*/75, /* 14 6800.0*/66, /* 15 8000.0*/65, }, | |||
98 | {/* 9 85 *//* 0 700.0*/71, /* 1 820.0*/75, /* 2 950.0*/76, /* 3 1100.0*/74, /* 4 1300.0*/73, /* 5 1550.0*/72, /* 6 1800.0*/71, /* 7 2150.0*/70, /* 8 2500.0*/72, /* 9 3000.0*/72, /* 10 3500.0*/74, /* 11 4150.0*/76, /* 12 4900.0*/78, /* 13 5800.0*/76, /* 14 6800.0*/68, /* 15 8000.0*/64, }, | |||
99 | {/* 10 99 *//* 0 700.0*/75, /* 1 820.0*/76, /* 2 950.0*/78, /* 3 1100.0*/76, /* 4 1300.0*/73, /* 5 1550.0*/74, /* 6 1800.0*/74, /* 7 2150.0*/74, /* 8 2500.0*/77, /* 9 3000.0*/76, /* 10 3500.0*/77, /* 11 4150.0*/76, /* 12 4900.0*/77, /* 13 5800.0*/76, /* 14 6800.0*/69, /* 15 8000.0*/65, }, | |||
100 | {/* 11 116 *//* 0 700.0*/80, /* 1 820.0*/80, /* 2 950.0*/80, /* 3 1100.0*/80, /* 4 1300.0*/80, /* 5 1550.0*/80, /* 6 1800.0*/80, /* 7 2150.0*/80, /* 8 2500.0*/80, /* 9 3000.0*/80, /* 10 3500.0*/80, /* 11 4150.0*/80, /* 12 4900.0*/80, /* 13 5800.0*/80, /* 14 6800.0*/80, /* 15 8000.0*/80, }, | |||
101 | {/* 12 135 *//* 0 700.0*/80, /* 1 820.0*/80, /* 2 950.0*/80, /* 3 1100.0*/80, /* 4 1300.0*/80, /* 5 1550.0*/80, /* 6 1800.0*/80, /* 7 2150.0*/80, /* 8 2500.0*/80, /* 9 3000.0*/80, /* 10 3500.0*/80, /* 11 4150.0*/80, /* 12 4900.0*/80, /* 13 5800.0*/80, /* 14 6800.0*/80, /* 15 8000.0*/80, }, | |||
102 | {/* 13 158 *//* 0 700.0*/80, /* 1 820.0*/80, /* 2 950.0*/80, /* 3 1100.0*/80, /* 4 1300.0*/80, /* 5 1550.0*/80, /* 6 1800.0*/80, /* 7 2150.0*/80, /* 8 2500.0*/80, /* 9 3000.0*/80, /* 10 3500.0*/80, /* 11 4150.0*/80, /* 12 4900.0*/80, /* 13 5800.0*/80, /* 14 6800.0*/80, /* 15 8000.0*/80, }, | |||
103 | {/* 14 185 *//* 0 700.0*/80, /* 1 820.0*/80, /* 2 950.0*/80, /* 3 1100.0*/80, /* 4 1300.0*/80, /* 5 1550.0*/80, /* 6 1800.0*/80, /* 7 2150.0*/80, /* 8 2500.0*/80, /* 9 3000.0*/80, /* 10 3500.0*/80, /* 11 4150.0*/80, /* 12 4900.0*/80, /* 13 5800.0*/80, /* 14 6800.0*/80, /* 15 8000.0*/80, }, | |||
104 | {/* 15 220 *//* 0 700.0*/80, /* 1 820.0*/80, /* 2 950.0*/80, /* 3 1100.0*/80, /* 4 1300.0*/80, /* 5 1550.0*/80, /* 6 1800.0*/80, /* 7 2150.0*/80, /* 8 2500.0*/80, /* 9 3000.0*/80, /* 10 3500.0*/80, /* 11 4150.0*/80, /* 12 4900.0*/80, /* 13 5800.0*/80, /* 14 6800.0*/80, /* 15 8000.0*/80, }, | |||
105 | }; | |||
106 | ||||
107 | const float mazda_miata_nb2_RpmBins[VE_RPM_COUNT] = {700.0, 820.0, 950.0, 1100.0, | |||
108 | 1300.0, 1550.0, 1800.0, 2150.0, | |||
109 | 2500.0, 3000.0, 3500.0, 4150.0, | |||
110 | 4900.0, 5800.0, 6800.0, 8000.0} | |||
111 | ; | |||
112 | ||||
113 | const float mazda_miata_nb2_LoadBins[VE_LOAD_COUNT] = {20.0, 25.0, 30.0, 35.0, | |||
114 | 40.0, 46.0, 54.0, 63.0, | |||
115 | 73.0, 85.0, 99.0, 116.0, | |||
116 | 135.0, 158.0, 185.0, 220.0} | |||
117 | ; | |||
118 | #endif | |||
119 | ||||
120 | #if (IGN_RPM_COUNT == 16) && (IGN_LOAD_COUNT == 16) | |||
121 | static const float ignition18vvtRpmBins[IGN_RPM_COUNT] = { | |||
122 | 700.0, 850.0 , 943.0 , | |||
123 | 1112.0 , 1310.0 , 1545.0 , | |||
124 | 1821.0, 2146.0, 2530.0, | |||
125 | 2982.0, 3515.0 , 4144.0 , | |||
126 | 4884.0 , 5757.0 , 6787.0, 8000.0}; | |||
127 | ||||
128 | static const float ignition18vvtLoadBins[IGN_LOAD_COUNT] = { | |||
129 | 25.0 , 29.10009765625 , 34.0 , 39.60009765625 , | |||
130 | 46.2001953125 , 53.89990234375 , 62.7998046875 , | |||
131 | 73.2001953125 , 85.400390625 , 99.5 , 116.0 , | |||
132 | 135.30078125 , 157.69921875 , 183.900390625 , 214.400390625 , | |||
133 | 250.0}; | |||
134 | ||||
135 | static const uint8_t mapBased18vvtTimingTable[16][16] = { | |||
136 | /* Generated by TS2C on Tue Apr 18 21:43:57 EDT 2017*/ | |||
137 | {/* 0 25 *//* 0 700.0*/14, /* 1 850.0*/13, /* 2 943.0*/13, /* 3 1112.0*/16, /* 4 1310.0*/21, /* 5 1545.0*/25, /* 6 1821.0*/28, /* 7 2146.0*/31, /* 8 2530.0*/34, /* 9 2982.0*/36, /* 10 3515.0*/38, /* 11 4144.0*/39, /* 12 4884.0*/40, /* 13 5757.0*/40, /* 14 6787.0*/40, /* 15 8000.0*/41, }, | |||
138 | {/* 1 29.100 *//* 0 700.0*/14, /* 1 850.0*/13, /* 2 943.0*/13, /* 3 1112.0*/16, /* 4 1310.0*/21, /* 5 1545.0*/25, /* 6 1821.0*/28, /* 7 2146.0*/31, /* 8 2530.0*/34, /* 9 2982.0*/36, /* 10 3515.0*/38, /* 11 4144.0*/39, /* 12 4884.0*/40, /* 13 5757.0*/40, /* 14 6787.0*/40, /* 15 8000.0*/40, }, | |||
139 | {/* 2 34 *//* 0 700.0*/14, /* 1 850.0*/13, /* 2 943.0*/13, /* 3 1112.0*/16, /* 4 1310.0*/21, /* 5 1545.0*/24, /* 6 1821.0*/27, /* 7 2146.0*/30, /* 8 2530.0*/33, /* 9 2982.0*/35, /* 10 3515.0*/37, /* 11 4144.0*/38, /* 12 4884.0*/39, /* 13 5757.0*/40, /* 14 6787.0*/40, /* 15 8000.0*/40, }, | |||
140 | {/* 3 39.600 *//* 0 700.0*/15, /* 1 850.0*/13, /* 2 943.0*/13, /* 3 1112.0*/17, /* 4 1310.0*/21, /* 5 1545.0*/24, /* 6 1821.0*/27, /* 7 2146.0*/30, /* 8 2530.0*/33, /* 9 2982.0*/35, /* 10 3515.0*/36, /* 11 4144.0*/38, /* 12 4884.0*/38, /* 13 5757.0*/39, /* 14 6787.0*/39, /* 15 8000.0*/39, }, | |||
141 | {/* 4 46.200 *//* 0 700.0*/15, /* 1 850.0*/13, /* 2 943.0*/13, /* 3 1112.0*/18, /* 4 1310.0*/21, /* 5 1545.0*/24, /* 6 1821.0*/26, /* 7 2146.0*/29, /* 8 2530.0*/32, /* 9 2982.0*/33, /* 10 3515.0*/36, /* 11 4144.0*/37, /* 12 4884.0*/38, /* 13 5757.0*/38, /* 14 6787.0*/38, /* 15 8000.0*/39, }, | |||
142 | {/* 5 53.900 *//* 0 700.0*/15, /* 1 850.0*/14, /* 2 943.0*/14, /* 3 1112.0*/18, /* 4 1310.0*/21, /* 5 1545.0*/24, /* 6 1821.0*/26, /* 7 2146.0*/28, /* 8 2530.0*/30, /* 9 2982.0*/32, /* 10 3515.0*/34, /* 11 4144.0*/36, /* 12 4884.0*/37, /* 13 5757.0*/37, /* 14 6787.0*/38, /* 15 8000.0*/38, }, | |||
143 | {/* 6 62.800 *//* 0 700.0*/15, /* 1 850.0*/15, /* 2 943.0*/14, /* 3 1112.0*/19, /* 4 1310.0*/21, /* 5 1545.0*/23, /* 6 1821.0*/25, /* 7 2146.0*/27, /* 8 2530.0*/29, /* 9 2982.0*/31, /* 10 3515.0*/33, /* 11 4144.0*/34, /* 12 4884.0*/35, /* 13 5757.0*/36, /* 14 6787.0*/36, /* 15 8000.0*/37, }, | |||
144 | {/* 7 73.200 *//* 0 700.0*/16, /* 1 850.0*/16, /* 2 943.0*/15, /* 3 1112.0*/19, /* 4 1310.0*/21, /* 5 1545.0*/23, /* 6 1821.0*/24, /* 7 2146.0*/26, /* 8 2530.0*/28, /* 9 2982.0*/30, /* 10 3515.0*/31, /* 11 4144.0*/32, /* 12 4884.0*/33, /* 13 5757.0*/34, /* 14 6787.0*/34, /* 15 8000.0*/35, }, | |||
145 | {/* 8 85.400 *//* 0 700.0*/16, /* 1 850.0*/17, /* 2 943.0*/16, /* 3 1112.0*/19, /* 4 1310.0*/20, /* 5 1545.0*/22, /* 6 1821.0*/23, /* 7 2146.0*/24, /* 8 2530.0*/26, /* 9 2982.0*/28, /* 10 3515.0*/29, /* 11 4144.0*/31, /* 12 4884.0*/31, /* 13 5757.0*/32, /* 14 6787.0*/33, /* 15 8000.0*/33, }, | |||
146 | {/* 9 99.500 *//* 0 700.0*/16, /* 1 850.0*/16, /* 2 943.0*/17, /* 3 1112.0*/18, /* 4 1310.0*/19, /* 5 1545.0*/20, /* 6 1821.0*/21, /* 7 2146.0*/22, /* 8 2530.0*/23, /* 9 2982.0*/25, /* 10 3515.0*/26, /* 11 4144.0*/28, /* 12 4884.0*/28, /* 13 5757.0*/29, /* 14 6787.0*/30, /* 15 8000.0*/31, }, | |||
147 | {/* 10 116 *//* 0 700.0*/15, /* 1 850.0*/15, /* 2 943.0*/16, /* 3 1112.0*/16, /* 4 1310.0*/17, /* 5 1545.0*/18, /* 6 1821.0*/19, /* 7 2146.0*/20, /* 8 2530.0*/21, /* 9 2982.0*/23, /* 10 3515.0*/24, /* 11 4144.0*/25, /* 12 4884.0*/26, /* 13 5757.0*/27, /* 14 6787.0*/28, /* 15 8000.0*/29, }, | |||
148 | {/* 11 135.301 *//* 0 700.0*/13, /* 1 850.0*/13, /* 2 943.0*/14, /* 3 1112.0*/14, /* 4 1310.0*/15, /* 5 1545.0*/15, /* 6 1821.0*/17, /* 7 2146.0*/17, /* 8 2530.0*/19, /* 9 2982.0*/20, /* 10 3515.0*/22, /* 11 4144.0*/23, /* 12 4884.0*/24, /* 13 5757.0*/25, /* 14 6787.0*/26, /* 15 8000.0*/27, }, | |||
149 | {/* 12 157.699 *//* 0 700.0*/11, /* 1 850.0*/11, /* 2 943.0*/11, /* 3 1112.0*/12, /* 4 1310.0*/12, /* 5 1545.0*/13, /* 6 1821.0*/14, /* 7 2146.0*/15, /* 8 2530.0*/16, /* 9 2982.0*/17, /* 10 3515.0*/19, /* 11 4144.0*/20, /* 12 4884.0*/21, /* 13 5757.0*/22, /* 14 6787.0*/24, /* 15 8000.0*/25, }, | |||
150 | {/* 13 183.900 *//* 0 700.0*/8, /* 1 850.0*/8, /* 2 943.0*/9, /* 3 1112.0*/9, /* 4 1310.0*/9, /* 5 1545.0*/10, /* 6 1821.0*/11, /* 7 2146.0*/12, /* 8 2530.0*/13, /* 9 2982.0*/14, /* 10 3515.0*/16, /* 11 4144.0*/17, /* 12 4884.0*/18, /* 13 5757.0*/19, /* 14 6787.0*/21, /* 15 8000.0*/22, }, | |||
151 | {/* 14 214.400 *//* 0 700.0*/5, /* 1 850.0*/5, /* 2 943.0*/5, /* 3 1112.0*/5, /* 4 1310.0*/6, /* 5 1545.0*/7, /* 6 1821.0*/7, /* 7 2146.0*/8, /* 8 2530.0*/9, /* 9 2982.0*/10, /* 10 3515.0*/12, /* 11 4144.0*/13, /* 12 4884.0*/14, /* 13 5757.0*/16, /* 14 6787.0*/17, /* 15 8000.0*/18, }, | |||
152 | {/* 15 250 *//* 0 700.0*/1, /* 1 850.0*/1, /* 2 943.0*/1, /* 3 1112.0*/2, /* 4 1310.0*/2, /* 5 1545.0*/3, /* 6 1821.0*/3, /* 7 2146.0*/4, /* 8 2530.0*/5, /* 9 2982.0*/6, /* 10 3515.0*/7, /* 11 4144.0*/9, /* 12 4884.0*/10, /* 13 5757.0*/12, /* 14 6787.0*/13, /* 15 8000.0*/14, }, | |||
153 | }; | |||
154 | #endif | |||
155 | ||||
156 | ||||
157 | /* | |||
158 | #define MAF_TRANSFER_SIZE 8 | |||
159 | ||||
160 | static const float mafTransferVolts[MAF_TRANSFER_SIZE] = {1.365, | |||
161 | 1.569, | |||
162 | 2.028, | |||
163 | 2.35, | |||
164 | 2.611, | |||
165 | 2.959, | |||
166 | 3.499, | |||
167 | 4.011, | |||
168 | }; | |||
169 | ||||
170 | ||||
171 | according to internet this should be the Miata NB transfer function but in reality it seems off | |||
172 | this could be related to us not using proper signal conditioning hardware | |||
173 | static const float mafTransferKgH[MAF_TRANSFER_SIZE] = { | |||
174 | 0, | |||
175 | 3.9456, | |||
176 | 18.7308, | |||
177 | 45.4788, | |||
178 | 82.278, | |||
179 | 154.4328, | |||
180 | 329.8104, | |||
181 | 594.2772 | |||
182 | }; | |||
183 | ||||
184 | ||||
185 | */ | |||
186 | ||||
187 | #define MAF_TRANSFER_SIZE 10 | |||
188 | ||||
189 | // this transfer function somehow works with 1K pull-down | |||
190 | static const float mafTransferVolts[MAF_TRANSFER_SIZE] = { | |||
191 | 0.50, | |||
192 | 0.87, | |||
193 | 1.07, | |||
194 | 1.53, | |||
195 | 1.85, | |||
196 | 2.11, | |||
197 | 2.46, | |||
198 | 3.00, | |||
199 | 3.51, | |||
200 | 4.50 | |||
201 | }; | |||
202 | ||||
203 | static const float mafTransferKgH[MAF_TRANSFER_SIZE] = { | |||
204 | 0.00, | |||
205 | 0.00, | |||
206 | 1.00, | |||
207 | 3.00, | |||
208 | 8.00, | |||
209 | 19.00, | |||
210 | 45.00, | |||
211 | 100.00, | |||
212 | 175.00, | |||
213 | 350.00 | |||
214 | }; | |||
215 | ||||
216 | ||||
217 | 8 | static void setMAFTransferFunction() { | ||
218 | 8 | memcpy(config->mafDecoding, mafTransferKgH, sizeof(mafTransferKgH)); | ||
219 | 8 | memcpy(config->mafDecodingBins, mafTransferVolts, sizeof(mafTransferVolts)); | ||
220 |
2/2✓ Branch 0 taken 176 times.
✓ Branch 1 taken 8 times.
|
2/2✓ Decision 'true' taken 176 times.
✓ Decision 'false' taken 8 times.
|
184 | for (int i = MAF_TRANSFER_SIZE;i<MAF_DECODING_COUNT;i++) { |
221 | 176 | config->mafDecodingBins[i] = config->mafDecodingBins[MAF_TRANSFER_SIZE - 1] + i * 0.01; | ||
222 | 176 | config->mafDecoding[i] = config->mafDecoding[MAF_TRANSFER_SIZE - 1]; | ||
223 | } | |||
224 | 8 | } | ||
225 | ||||
226 | 8 | static void setMazdaMiataNbInjectorLag() { | ||
227 | #if VBAT_INJECTOR_CURVE_SIZE == 8 | |||
228 | static const float injectorLagVbattBins[VBAT_INJECTOR_CURVE_SIZE] = { | |||
229 | 6.0, 8.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0 | |||
230 | }; | |||
231 | 8 | copyArray(engineConfiguration->injector.battLagCorrBattBins, injectorLagVbattBins); | ||
232 | #endif // VBAT_INJECTOR_CURVE_SIZE | |||
233 | #if VBAT_INJECTOR_CURVE_PRESSURE_SIZE == 2 | |||
234 | static const float injectorLagPressureBins[VBAT_INJECTOR_CURVE_PRESSURE_SIZE] = { 300, 600 }; | |||
235 | 8 | copyArray(engineConfiguration->injector.battLagCorrPressBins, injectorLagPressureBins); | ||
236 | #endif // VBAT_INJECTOR_CURVE_PRESSURE_SIZE | |||
237 | #if (VBAT_INJECTOR_CURVE_PRESSURE_SIZE == 2) && (VBAT_INJECTOR_CURVE_SIZE == 8) | |||
238 | static const float injectorLagCorrection[VBAT_INJECTOR_CURVE_PRESSURE_SIZE][VBAT_INJECTOR_CURVE_SIZE] = { | |||
239 | { 4.0, 3.0, 2.0, 1.7, 1.5, 1.35, 1.25, 1.20 }, | |||
240 | { 4.0, 3.0, 2.0, 1.7, 1.5, 1.35, 1.25, 1.20 }, | |||
241 | }; | |||
242 | 8 | copyTable(engineConfiguration->injector.battLagCorrTable, injectorLagCorrection); | ||
243 | #endif | |||
244 | 8 | } | ||
245 | ||||
246 | /** | |||
247 | * stuff common between NB1 and NB2 | |||
248 | */ | |||
249 | 8 | static void setCommonMazdaNB() { | ||
250 | // Base engine | |||
251 | 8 | engineConfiguration->displacement = 1.839; | ||
252 | 8 | engineConfiguration->cylindersCount = 4; | ||
253 | 8 | engineConfiguration->firingOrder = FO_1_3_4_2; | ||
254 | ||||
255 | 8 | engineConfiguration->rpmHardLimit = 7200; | ||
256 | ||||
257 | 8 | engineConfiguration->cylinderBore = 83; | ||
258 | 8 | strcpy(engineConfiguration->engineMake, ENGINE_MAKE_MAZDA); | ||
259 | 8 | config->dynoCarCarMassKg = 1070; | ||
260 | ||||
261 | 8 | engineConfiguration->injectionMode = IM_SEQUENTIAL; | ||
262 | 8 | engineConfiguration->ignitionMode = IM_WASTED_SPARK; | ||
263 | ||||
264 | // Trigger | |||
265 | 8 | engineConfiguration->trigger.type = trigger_type_e::TT_MIATA_VVT; | ||
266 | 8 | engineConfiguration->vvtMode[0] = VVT_MIATA_NB; | ||
267 | 8 | engineConfiguration->vvtOffsets[0] = 98; | ||
268 | ||||
269 | // Cranking | |||
270 | 8 | engineConfiguration->ignitionDwellForCrankingMs = 4; | ||
271 | 8 | setTable(config->crankingCycleBaseFuel, 27.5); // this value for return-less NB miata fuel system, higher pressure | ||
272 | 8 | engineConfiguration->cranking.rpm = 400; | ||
273 | 8 | setArrayValues(config->cltCrankingCorr, 60); | ||
274 | 8 | setArrayValues(config->afterCrankingIACtaperDuration, 250); | ||
275 | ||||
276 | // Idle | |||
277 | 8 | engineConfiguration->idleMode = idle_mode_e::IM_AUTO; | ||
278 | 8 | engineConfiguration->iacByTpsTaper = 6; | ||
279 | 8 | engineConfiguration->acIdleExtraOffset = 15; | ||
280 | ||||
281 | 8 | engineConfiguration->useIdleTimingPidControl = true; | ||
282 | 8 | engineConfiguration->idlePidRpmUpperLimit = 350; | ||
283 | 8 | engineConfiguration->idlePidRpmDeadZone = 100; | ||
284 | ||||
285 | 8 | engineConfiguration->idleRpmPid.pFactor = 0.0065; | ||
286 | 8 | engineConfiguration->idleRpmPid.iFactor = 0.3; | ||
287 | 8 | engineConfiguration->idleRpmPid.dFactor = 0.002; | ||
288 | 8 | engineConfiguration->idleRpmPid.minValue = -8; | ||
289 | 8 | engineConfiguration->idleRpmPid.maxValue = 10; | ||
290 | 8 | engineConfiguration->idlerpmpid_iTermMin = -15; | ||
291 | 8 | engineConfiguration->idlerpmpid_iTermMax = 30; | ||
292 | ||||
293 | // Fan | |||
294 | 8 | engineConfiguration->enableFan1WithAc = true; | ||
295 | ||||
296 | // Alternator | |||
297 | 8 | engineConfiguration->isAlternatorControlEnabled = true; | ||
298 | 8 | setTable(config->alternatorVoltageTargetTable, 14.0f); | ||
299 | 8 | engineConfiguration->alternatorControl.offset = 20; | ||
300 | 8 | engineConfiguration->alternatorControl.pFactor = 16; | ||
301 | 8 | engineConfiguration->alternatorControl.iFactor = 8; | ||
302 | 8 | engineConfiguration->alternatorControl.dFactor = 0.1; | ||
303 | 8 | engineConfiguration->alternatorControl.periodMs = 10; | ||
304 | ||||
305 | // Tach | |||
306 | 8 | engineConfiguration->tachPulsePerRev = 2; | ||
307 | ||||
308 | #if (VE_RPM_COUNT == 16) && (VE_LOAD_COUNT == 16) | |||
309 | // Tables | |||
310 | 8 | copyArray(config->veRpmBins, mazda_miata_nb2_RpmBins); | ||
311 | 8 | copyArray(config->veLoadBins, mazda_miata_nb2_LoadBins); | ||
312 | 8 | copyTable(config->veTable, mapBased18vvtVeTable_NB_fuel_rail); | ||
313 | #endif | |||
314 | ||||
315 | #if (IGN_RPM_COUNT == 16) && (IGN_LOAD_COUNT == 16) | |||
316 | 8 | copyArray(config->ignitionRpmBins, ignition18vvtRpmBins); | ||
317 | 8 | copyArray(config->ignitionLoadBins, ignition18vvtLoadBins); | ||
318 | 8 | copyTable(config->ignitionTable, mapBased18vvtTimingTable); | ||
319 | #endif | |||
320 | ||||
321 | 8 | setMazdaMiataNbInjectorLag(); | ||
322 | ||||
323 | // Sensors | |||
324 | ||||
325 | // TPS | |||
326 | // set tps_min 90 | |||
327 | 8 | engineConfiguration->tpsMin = 100; // convert 12to10 bit (ADC/4) | ||
328 | // set tps_max 540 | |||
329 | 8 | engineConfiguration->tpsMax = 650; // convert 12to10 bit (ADC/4) | ||
330 | ||||
331 | // CLT/IAT | |||
332 | 8 | setCommonNTCSensorParameters(&engineConfiguration->clt); | ||
333 | 8 | setCommonNTCSensorParameters(&engineConfiguration->iat); | ||
334 | ||||
335 | // MAF (todo: do we use this?) | |||
336 | 8 | setMAFTransferFunction(); | ||
337 | ||||
338 | 8 | engineConfiguration->wwaeTau = 0.1; | ||
339 | ||||
340 | 8 | miataNA_setCltIdleCorrBins(); | ||
341 | 8 | miataNA_setCltIdleRpmBins(); | ||
342 | 8 | miataNA_setIacCoastingBins(); | ||
343 | ||||
344 | // All factory miata setups end up with 1.12 speed sensor turns | |||
345 | // per wheel turn, by matching the speedo sensor gear to the | |||
346 | // diff ratio | |||
347 | ||||
348 | // - 6 teeth on transmission output shaft | |||
349 | // - 23 teeth on speedometer sensor | |||
350 | // - 3.909 rear axle ratio | |||
351 | // 3.909 * 6 / 21 ~= 1.12 | |||
352 | 8 | engineConfiguration->vssGearRatio = 3.909 * 6 / 21; | ||
353 | 8 | engineConfiguration->vssToothCount = 4; | ||
354 | 8 | } | ||
355 | ||||
356 | 8 | static void setMazdaMiataEngineNB2Defaults() { | ||
357 | 8 | strcpy(engineConfiguration->engineCode, "NB2"); | ||
358 | ||||
359 | /** | |||
360 | * http://miataturbo.wikidot.com/fuel-injectors | |||
361 | * 01-05 (purple) - #195500-4060 | |||
362 | */ | |||
363 | 8 | engineConfiguration->injector.flow = 265; | ||
364 | 8 | engineConfiguration->fuelReferencePressure = 400; // 400 kPa, 58 psi | ||
365 | 8 | engineConfiguration->injectorCompensationMode = ICM_FixedRailPressure; | ||
366 | ||||
367 | 8 | setCommonMazdaNB(); | ||
368 | ||||
369 | #if VVT_TABLE_SIZE == 8 | |||
370 | 8 | copyArray(config->vvtTable1RpmBins, vvt18RpmBins); | ||
371 | 8 | copyArray(config->vvtTable1LoadBins, vvt18LoadBins); | ||
372 | 8 | copyTable(config->vvtTable1, SCRIPT_TABLE_vvt_target); | ||
373 | #endif // VVT_TABLE_SIZE | |||
374 | ||||
375 | // VVT closed loop | |||
376 | 8 | engineConfiguration->auxPid[0].pFactor = 2; | ||
377 | 8 | engineConfiguration->auxPid[0].iFactor = 0.005; | ||
378 | 8 | engineConfiguration->auxPid[0].dFactor = 0.002; | ||
379 | 8 | engineConfiguration->auxPid[0].offset = 33; | ||
380 | 8 | engineConfiguration->auxPid[0].minValue = 20; | ||
381 | 8 | engineConfiguration->auxPid[0].maxValue = 90; | ||
382 | ||||
383 | // Vehicle speed/gears | |||
384 | 8 | engineConfiguration->totalGearsCount = 6; | ||
385 | 8 | engineConfiguration->gearRatio[0] = 3.760; | ||
386 | 8 | engineConfiguration->gearRatio[1] = 2.269; | ||
387 | 8 | engineConfiguration->gearRatio[2] = 1.646; | ||
388 | 8 | engineConfiguration->gearRatio[3] = 1.257; | ||
389 | 8 | engineConfiguration->gearRatio[4] = 1.000; | ||
390 | 8 | engineConfiguration->gearRatio[5] = 0.843; | ||
391 | ||||
392 | // These may need to change based on your real car | |||
393 | 8 | engineConfiguration->driveWheelRevPerKm = 538; | ||
394 | 8 | engineConfiguration->finalGearRatio = 3.909; | ||
395 | 8 | } | ||
396 | #endif // HW_HELLEN | |||
397 | ||||
398 | /** | |||
399 | * https://github.com/rusefi/rusefi/wiki/HOWTO-TCU-A42DE-on-Proteus | |||
400 | */ | |||
401 | #if HW_PROTEUS | |||
402 | ✗ | void setMiataNB2_Proteus_TCU() { | ||
403 | ✗ | engineConfiguration->tcuEnabled = true; | ||
404 | ||||
405 | ✗ | strcpy(engineConfiguration->engineCode, "NB2"); | ||
406 | ✗ | strcpy(engineConfiguration->engineMake, ENGINE_MAKE_MAZDA); | ||
407 | ✗ | strcpy(engineConfiguration->vehicleName, "TCU test"); | ||
408 | ||||
409 | ✗ | engineConfiguration->trigger.type = trigger_type_e::TT_TOOTHED_WHEEL; | ||
410 | ✗ | engineConfiguration->trigger.customTotalToothCount = 10; | ||
411 | ✗ | engineConfiguration->trigger.customSkippedToothCount = 0; | ||
412 | ||||
413 | ||||
414 | ✗ | engineConfiguration->triggerInputPins[0] = Gpio::Unassigned; | ||
415 | ✗ | engineConfiguration->tcuInputSpeedSensorPin = PROTEUS_VR_1; | ||
416 | ||||
417 | ✗ | engineConfiguration->vehicleSpeedSensorInputPin = PROTEUS_VR_2; | ||
418 | ||||
419 | ✗ | engineConfiguration->driveWheelRevPerKm = 544; // 205/50R15 | ||
420 | ✗ | engineConfiguration->vssGearRatio = 4.3; | ||
421 | ✗ | engineConfiguration->vssToothCount = 22; | ||
422 | ||||
423 | // "Highside 2" | |||
424 | ✗ | engineConfiguration->tcu_solenoid[0] = Gpio::A8; | ||
425 | // "Highside 1" | |||
426 | ✗ | engineConfiguration->tcu_solenoid[1] = Gpio::A9; | ||
427 | ||||
428 | // "Digital 1" green | |||
429 | ✗ | engineConfiguration->tcuUpshiftButtonPin = Gpio::C6; | ||
430 | ✗ | engineConfiguration->tcuUpshiftButtonPinMode = PI_PULLUP; | ||
431 | // "Digital 6" white | |||
432 | ✗ | engineConfiguration->tcuDownshiftButtonPin = Gpio::E15; | ||
433 | ✗ | engineConfiguration->tcuDownshiftButtonPinMode = PI_PULLUP; | ||
434 | ||||
435 | // R | |||
436 | ✗ | config->tcuSolenoidTable[0][0] = 1; | ||
437 | ✗ | config->tcuSolenoidTable[0][1] = 0; | ||
438 | // P/N | |||
439 | ✗ | config->tcuSolenoidTable[1][0] = 1; | ||
440 | ✗ | config->tcuSolenoidTable[1][1] = 0; | ||
441 | // 1 | |||
442 | ✗ | config->tcuSolenoidTable[2][0] = 1; | ||
443 | ✗ | config->tcuSolenoidTable[2][1] = 0; | ||
444 | // 2 | |||
445 | ✗ | config->tcuSolenoidTable[3][0] = 1; | ||
446 | ✗ | config->tcuSolenoidTable[3][1] = 1; | ||
447 | // 3 | |||
448 | ✗ | config->tcuSolenoidTable[4][0] = 0; | ||
449 | ✗ | config->tcuSolenoidTable[4][1] = 1; | ||
450 | // 4 | |||
451 | ✗ | config->tcuSolenoidTable[5][0] = 0; | ||
452 | ✗ | config->tcuSolenoidTable[5][1] = 0; | ||
453 | ||||
454 | ✗ | } | ||
455 | #endif // HW_PROTEUS | |||
456 | ||||
457 | #if HW_HELLEN | |||
458 | ✗ | void setMazdaMiataNB1() { | ||
459 | ✗ | setCommonMazdaNB(); | ||
460 | ✗ | strcpy(engineConfiguration->engineCode, "NB1"); | ||
461 | ||||
462 | ✗ | engineConfiguration->injector.flow = 256; | ||
463 | ||||
464 | // Vehicle speed/gears | |||
465 | ✗ | engineConfiguration->totalGearsCount = 5; | ||
466 | ✗ | engineConfiguration->gearRatio[0] = 3.136; | ||
467 | ✗ | engineConfiguration->gearRatio[1] = 1.888; | ||
468 | ✗ | engineConfiguration->gearRatio[2] = 1.330; | ||
469 | ✗ | engineConfiguration->gearRatio[3] = 1.000; | ||
470 | ✗ | engineConfiguration->gearRatio[4] = 0.814; | ||
471 | ||||
472 | // These may need to change based on your real car | |||
473 | ✗ | engineConfiguration->driveWheelRevPerKm = 551; | ||
474 | ✗ | engineConfiguration->finalGearRatio = 4.3; | ||
475 | ✗ | } | ||
476 | ||||
477 | 8 | void setMazdaMiataNB2() { | ||
478 | 8 | setMazdaMiataEngineNB2Defaults(); | ||
479 | 8 | strcpy(engineConfiguration->vehicleName, "H72 test"); | ||
480 | ||||
481 | ||||
482 | // set tps_min 90 | |||
483 | 8 | engineConfiguration->tpsMin = 110; // convert 12to10 bit (ADC/4) | ||
484 | ||||
485 | 8 | } | ||
486 | ||||
487 | ✗ | void setMazdaMiataNB2_36() { | ||
488 | ✗ | setMazdaMiataNB2(); | ||
489 | ||||
490 | ✗ | engineConfiguration->trigger.type = trigger_type_e::TT_TOOTHED_WHEEL_36_1; | ||
491 | ✗ | engineConfiguration->globalTriggerAngleOffset = 76; | ||
492 | ✗ | } | ||
493 | ||||
494 | #endif // HW_HELLEN | |||
495 |