rusEFI
The most advanced open source ECU
Loading...
Searching...
No Matches
mazda_miata_vvt.cpp
Go to the documentation of this file.
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"
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
65static 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
69static 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
73static 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)
87static 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
107const 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
113const 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)
121static 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
128static 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
135static 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
160static 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
171according to internet this should be the Miata NB transfer function but in reality it seems off
172this could be related to us not using proper signal conditioning hardware
173static 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
190static 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
203static 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
218 memcpy(config->mafDecoding, mafTransferKgH, sizeof(mafTransferKgH));
219 memcpy(config->mafDecodingBins, mafTransferVolts, sizeof(mafTransferVolts));
220 for (int i = MAF_TRANSFER_SIZE;i<MAF_DECODING_COUNT;i++) {
221 config->mafDecodingBins[i] = config->mafDecodingBins[MAF_TRANSFER_SIZE - 1] + i * 0.01;
222 config->mafDecoding[i] = config->mafDecoding[MAF_TRANSFER_SIZE - 1];
223 }
224}
225
227#if VBAT_INJECTOR_CURVE_SIZE == 8
228static 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 copyArray(engineConfiguration->injector.battLagCorrBattBins, injectorLagVbattBins);
232#endif // VBAT_INJECTOR_CURVE_SIZE
233#if VBAT_INJECTOR_CURVE_PRESSURE_SIZE == 2
234static const float injectorLagPressureBins[VBAT_INJECTOR_CURVE_PRESSURE_SIZE] = { 300, 600 };
235 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)
238static 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 copyTable(engineConfiguration->injector.battLagCorrTable, injectorLagCorrection);
243#endif
244}
245
246/**
247 * stuff common between NB1 and NB2
248 */
249static void setCommonMazdaNB() {
250 // Base engine
251 engineConfiguration->displacement = 1.839;
252 engineConfiguration->cylindersCount = 4;
253 engineConfiguration->firingOrder = FO_1_3_4_2;
254
255 engineConfiguration->rpmHardLimit = 7200;
256
257 engineConfiguration->cylinderBore = 83;
258 strcpy(engineConfiguration->engineMake, ENGINE_MAKE_MAZDA);
259 config->dynoCarCarMassKg = 1070;
260
261 engineConfiguration->injectionMode = IM_SEQUENTIAL;
262 engineConfiguration->ignitionMode = IM_WASTED_SPARK;
263
264 // Trigger
266 engineConfiguration->vvtMode[0] = VVT_MIATA_NB;
267 engineConfiguration->vvtOffsets[0] = 98;
268
269 // Cranking
270 engineConfiguration->ignitionDwellForCrankingMs = 4;
271 setTable(config->crankingCycleBaseFuel, 27.5); // this value for return-less NB miata fuel system, higher pressure
272 engineConfiguration->cranking.rpm = 400;
273 setArrayValues(config->cltCrankingCorr, 60);
274 setArrayValues(config->afterCrankingIACtaperDuration, 250);
275
276 // Idle
278 engineConfiguration->iacByTpsTaper = 6;
279 engineConfiguration->acIdleExtraOffset = 15;
280
281 engineConfiguration->useIdleTimingPidControl = true;
282 engineConfiguration->idlePidRpmUpperLimit = 350;
283 engineConfiguration->idlePidRpmDeadZone = 100;
284
285 engineConfiguration->idleRpmPid.pFactor = 0.0065;
286 engineConfiguration->idleRpmPid.iFactor = 0.3;
287 engineConfiguration->idleRpmPid.dFactor = 0.002;
288 engineConfiguration->idleRpmPid.minValue = -8;
289 engineConfiguration->idleRpmPid.maxValue = 10;
290 engineConfiguration->idlerpmpid_iTermMin = -15;
291 engineConfiguration->idlerpmpid_iTermMax = 30;
292
293 // Fan
294 engineConfiguration->enableFan1WithAc = true;
295
296 // Alternator
297 engineConfiguration->isAlternatorControlEnabled = true;
298 setTable(config->alternatorVoltageTargetTable, 14.0f);
299 engineConfiguration->alternatorControl.offset = 20;
300 engineConfiguration->alternatorControl.pFactor = 16;
301 engineConfiguration->alternatorControl.iFactor = 8;
302 engineConfiguration->alternatorControl.dFactor = 0.1;
303 engineConfiguration->alternatorControl.periodMs = 10;
304
305 // Tach
306 engineConfiguration->tachPulsePerRev = 2;
307
308#if (VE_RPM_COUNT == 16) && (VE_LOAD_COUNT == 16)
309 // Tables
310 copyArray(config->veRpmBins, mazda_miata_nb2_RpmBins);
311 copyArray(config->veLoadBins, mazda_miata_nb2_LoadBins);
313#endif
314
315#if (IGN_RPM_COUNT == 16) && (IGN_LOAD_COUNT == 16)
316 copyArray(config->ignitionRpmBins, ignition18vvtRpmBins);
317 copyArray(config->ignitionLoadBins, ignition18vvtLoadBins);
319#endif
320
322
323 // Sensors
324
325 // TPS
326 // set tps_min 90
327 engineConfiguration->tpsMin = 100; // convert 12to10 bit (ADC/4)
328 // set tps_max 540
329 engineConfiguration->tpsMax = 650; // convert 12to10 bit (ADC/4)
330
331 // CLT/IAT
334
335 // MAF (todo: do we use this?)
337
338 engineConfiguration->wwaeTau = 0.1;
339
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 engineConfiguration->vssGearRatio = 3.909 * 6 / 21;
353 engineConfiguration->vssToothCount = 4;
354}
355
357 strcpy(engineConfiguration->engineCode, "NB2");
358
359 /**
360 * http://miataturbo.wikidot.com/fuel-injectors
361 * 01-05 (purple) - #195500-4060
362 */
363 engineConfiguration->injector.flow = 265;
364 engineConfiguration->fuelReferencePressure = 400; // 400 kPa, 58 psi
365 engineConfiguration->injectorCompensationMode = ICM_FixedRailPressure;
366
368
369#if VVT_TABLE_SIZE == 8
370 copyArray(config->vvtTable1RpmBins, vvt18RpmBins);
371 copyArray(config->vvtTable1LoadBins, vvt18LoadBins);
373#endif // VVT_TABLE_SIZE
374
375 // VVT closed loop
376 engineConfiguration->auxPid[0].pFactor = 2;
377 engineConfiguration->auxPid[0].iFactor = 0.005;
378 engineConfiguration->auxPid[0].dFactor = 0.002;
379 engineConfiguration->auxPid[0].offset = 33;
380 engineConfiguration->auxPid[0].minValue = 20;
381 engineConfiguration->auxPid[0].maxValue = 90;
382
383 // Vehicle speed/gears
384 engineConfiguration->totalGearsCount = 6;
385 engineConfiguration->gearRatio[0] = 3.760;
386 engineConfiguration->gearRatio[1] = 2.269;
387 engineConfiguration->gearRatio[2] = 1.646;
388 engineConfiguration->gearRatio[3] = 1.257;
389 engineConfiguration->gearRatio[4] = 1.000;
390 engineConfiguration->gearRatio[5] = 0.843;
391
392 // These may need to change based on your real car
393 engineConfiguration->driveWheelRevPerKm = 538;
394 engineConfiguration->finalGearRatio = 3.909;
395}
396#endif // HW_HELLEN
397
398/**
399 * https://wiki.rusefi.com/HOWTO-TCU-A42DE-on-Proteus
400 */
401#if HW_PROTEUS
403 engineConfiguration->tcuEnabled = true;
404
405 strcpy(engineConfiguration->engineCode, "NB2");
406 strcpy(engineConfiguration->engineMake, ENGINE_MAKE_MAZDA);
407 strcpy(engineConfiguration->vehicleName, "TCU test");
408
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
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
479 strcpy(engineConfiguration->vehicleName, "H72 test");
480
481
482 // set tps_min 90
483 engineConfiguration->tpsMin = 110; // convert 12to10 bit (ADC/4)
484
485}
486
489
491 engineConfiguration->globalTriggerAngleOffset = 76;
492}
493
494#endif // HW_HELLEN
@ Unassigned
static constexpr persistent_config_s * config
static constexpr engine_configuration_s * engineConfiguration
void miataNA_setCltIdleRpmBins()
void miataNA_setCltIdleCorrBins()
void miataNA_setIacCoastingBins()
void setMiataNB2_Proteus_TCU()
static const float ignition18vvtRpmBins[IGN_RPM_COUNT]
static const int8_t mapBased18vvtVeTable_NB_fuel_rail[16][16]
static void setCommonMazdaNB()
const float mazda_miata_nb2_RpmBins[VE_RPM_COUNT]
static const float vvt18LoadBins[VVT_TABLE_SIZE]
void setMazdaMiataNB2()
static const uint8_t mapBased18vvtTimingTable[16][16]
static const float mafTransferKgH[MAF_TRANSFER_SIZE]
static void setMazdaMiataNbInjectorLag()
static void setMAFTransferFunction()
static void setMazdaMiataEngineNB2Defaults()
void setMazdaMiataNB2_36()
static const uint8_t SCRIPT_TABLE_vvt_target[VVT_TABLE_SIZE][VVT_TABLE_SIZE]
static const float ignition18vvtLoadBins[IGN_LOAD_COUNT]
const float mazda_miata_nb2_LoadBins[VE_LOAD_COUNT]
static const float vvt18RpmBins[VVT_TABLE_SIZE]
void setMazdaMiataNB1()
static const float mafTransferVolts[MAF_TRANSFER_SIZE]
constexpr void copyTable(TDest(&dest)[N][M], const TSource(&source)[N][M], float multiply=1.0f)
constexpr void setTable(TElement(&dest)[N][M], const VElement value)
void setArrayValues(TValue(&array)[TSize], float value)
void setCommonNTCSensorParameters(ThermistorConf *thermistorConf)