| 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 |