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
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};
243#endif
244}
245
246/**
247 * stuff common between NB1 and NB2
248 */
249static void setCommonMazdaNB() {
250 // Base engine
253 engineConfiguration->firingOrder = FO_1_3_4_2;
254
256
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;
268
269 // Cranking
271 setTable(config->crankingCycleBaseFuel, 27.5); // this value for return-less NB miata fuel system, higher pressure
275
276 // Idle
280
284
292
293 // Fan
295
296 // Alternator
304
305 // Tach
307
308#if (VE_RPM_COUNT == 16) && (VE_LOAD_COUNT == 16)
309 // Tables
313#endif
314
315#if (IGN_RPM_COUNT == 16) && (IGN_LOAD_COUNT == 16)
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
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;
354}
355
357 strcpy(engineConfiguration->engineCode, "NB2");
358
359 /**
360 * http://miataturbo.wikidot.com/fuel-injectors
361 * 01-05 (purple) - #195500-4060
362 */
364 engineConfiguration->fuelReferencePressure = 400; // 400 kPa, 58 psi
365 engineConfiguration->injectorCompensationMode = ICM_FixedRailPressure;
366
368
369#if VVT_TABLE_SIZE == 8
373#endif // VVT_TABLE_SIZE
374
375 // VVT closed loop
382
383 // Vehicle speed/gears
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
395}
396#endif // HW_HELLEN
397
398/**
399 * https://github.com/rusefi/rusefi/wiki/HOWTO-TCU-A42DE-on-Proteus
400 */
401#if HW_PROTEUS
404
405 strcpy(engineConfiguration->engineCode, "NB2");
406 strcpy(engineConfiguration->engineMake, ENGINE_MAKE_MAZDA);
407 strcpy(engineConfiguration->vehicleName, "TCU test");
408
412
413
416
418
419 engineConfiguration->driveWheelRevPerKm = 544; // 205/50R15
422
423 // "Highside 2"
425 // "Highside 1"
427
428 // "Digital 1" green
431 // "Digital 6" white
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
463
464 // Vehicle speed/gears
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
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
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]
scaled_channel< uint16_t, 100, 1 > gearRatio[TCU_GEAR_COUNT]
brain_input_pin_e triggerInputPins[TRIGGER_INPUT_PIN_COUNT]
scaled_channel< int16_t, 100, 1 > battLagCorrBattBins[VBAT_INJECTOR_CURVE_SIZE]
scaled_channel< uint32_t, 10, 1 > battLagCorrPressBins[VBAT_INJECTOR_CURVE_PRESSURE_SIZE]
scaled_channel< int16_t, 100, 1 > battLagCorrTable[VBAT_INJECTOR_CURVE_PRESSURE_SIZE][VBAT_INJECTOR_CURVE_SIZE]
uint16_t afterCrankingIACtaperDuration[CLT_CRANKING_TAPER_CURVE_SIZE]
float crankingCycleBaseFuel[CRANKING_CYCLE_CLT_SIZE][CRANKING_CURVE_SIZE]
uint8_t tcuSolenoidTable[TCU_SOLENOID_COUNT][TCU_GEAR_COUNT]
scaled_channel< uint16_t, 10, 1 > veTable[VE_LOAD_COUNT][VE_RPM_COUNT]
scaled_channel< int16_t, 10, 1 > alternatorVoltageTargetTable[ALTERNATOR_VOLTAGE_TARGET_SIZE][ALTERNATOR_VOLTAGE_TARGET_SIZE]
scaled_channel< int16_t, 10, 1 > ignitionTable[IGN_LOAD_COUNT][IGN_RPM_COUNT]
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)