diff --git a/firmware/config/engines/mazda_miata_1_6.cpp b/firmware/config/engines/mazda_miata_1_6.cpp index 59b648d2f5..45b0ef5534 100644 --- a/firmware/config/engines/mazda_miata_1_6.cpp +++ b/firmware/config/engines/mazda_miata_1_6.cpp @@ -86,7 +86,7 @@ void miataNAcommonEngineSettings() { strcpy(engineConfiguration->engineMake, ENGINE_MAKE_MAZDA); strcpy(engineConfiguration->engineCode, "NA6"); engineConfiguration->vehicleWeight = 950; - engineConfiguration->compressionRatio = 9.1; + engineConfiguration->compressionRatio = 9.0; engineConfiguration->injectionMode = IM_BATCH; engineConfiguration->ignitionMode = IM_WASTED_SPARK; @@ -95,21 +95,23 @@ void miataNAcommonEngineSettings() { engineConfiguration->trigger.type = trigger_type_e::TT_MAZDA_MIATA_NA; // Cranking + engineConfiguration->primingDelay = 1.0; + engineConfiguration->cranking.rpm = 400; engineConfiguration->crankingTimingAngle = 10; engineConfiguration->cranking.baseFuel = 27.5; - config->crankingFuelCoef[0] = 2.8; // base cranking fuel adjustment coefficient + config->crankingFuelCoef[0] = 3.36; // base cranking fuel adjustment coefficient config->crankingFuelBins[0] = -20; // temperature in C - config->crankingFuelCoef[1] = 2.2; + config->crankingFuelCoef[1] = 2.97; config->crankingFuelBins[1] = -10; - config->crankingFuelCoef[2] = 1.8; + config->crankingFuelCoef[2] = 2.69; config->crankingFuelBins[2] = 5; - config->crankingFuelCoef[3] = 1.5; + config->crankingFuelCoef[3] = 2.15; config->crankingFuelBins[3] = 30; - config->crankingFuelCoef[4] = 1.0; - config->crankingFuelBins[4] = 35; - config->crankingFuelCoef[5] = 1.0; + config->crankingFuelCoef[4] = 1.78; + config->crankingFuelBins[4] = 40; + config->crankingFuelCoef[5] = 1.47; config->crankingFuelBins[5] = 50; config->crankingFuelCoef[6] = 1.0; config->crankingFuelBins[6] = 65; @@ -135,6 +137,11 @@ void miataNAcommonEngineSettings() { engineConfiguration->idleTimingPid.minValue = -15; engineConfiguration->idleTimingPid.maxValue = 15; + // Idle timing + static const uint16_t idleAdvanceBins[] = { 500, 650, 800, 950, 1050, 1200, 1350, 1500 }; + copyArray(config->idleAdvanceBins, idleAdvanceBins); + setArrayValues(config->idleAdvance, 15); + // Fan engineConfiguration->enableFan1WithAc = true; engineConfiguration->enableFan2WithAc = true; @@ -154,17 +161,25 @@ void miataNAcommonEngineSettings() { setMapVeTable(); setTable(config->injectionPhase, 400); + static const float cltFuelMultValues[] = { 1.25, 1.23, 1.2, 1.18, 1.16, 1.14, 1.11, 1.09, 1.07, 1.05, 1.02, 1, 1, 1, 1, 1 }; + copyArray(config->cltFuelCorr, cltFuelMultValues); + /** * http://miataturbo.wikidot.com/fuel-injectors * 90-93 (Blue) - #195500-1970 */ engineConfiguration->injector.flow = 212; + static const float deadtimeBins[] = { 8, 9.6, 11.2, 12.8, 13.2, 14.4, 15.3, 16 }; + static const float deadtimeValues[] = { 1.97, 1.52, 1.23, 1.04, 0.99, 0.9, 0.85, 0.73 }; + copyArray(engineConfiguration->injector.battLagCorrBins, deadtimeBins); + copyArray(engineConfiguration->injector.battLagCorr, deadtimeValues); + // Sensors // TPS // my car was originally a manual so proper TPS - engineConfiguration->tpsMin = 100; // convert 12to10 bit (ADC/4) - engineConfiguration->tpsMax = 650; // convert 12to10 bit (ADC/4) + engineConfiguration->tpsMin = 92; + engineConfiguration->tpsMax = 872; // CLT/IAT engineConfiguration->clt.config = { -20, 40, 80, 16150, 1150, 330, 2700 }; @@ -193,6 +208,14 @@ void miataNAcommonEngineSettings() { // 4.3 * 6 / 23 ~= 1.12 engineConfiguration->vssGearRatio = 4.3 * 6 / 23; engineConfiguration->vssToothCount = 4; + + // Set up closed loop fuel + engineConfiguration->fuelClosedLoopCorrectionEnabled = true; + engineConfiguration->stft.minAfr = 10; + engineConfiguration->stft.cellCfgs[0] = { 5, -5, 5 }; + engineConfiguration->stft.cellCfgs[1] = { 15, -15, 10 }; + engineConfiguration->stft.cellCfgs[2] = { 15, -15, 1 }; + engineConfiguration->stft.cellCfgs[3] = { 5, -5, 30 }; } static void miataNAcommon() { @@ -360,9 +383,10 @@ void setHellenNA6() { engineConfiguration->map.sensor.type = MT_MPX4250; } +#if HW_PROTEUS #include "proteus_meta.h" -void setMiataNa6_Proteus() { +void setMiataNa6_Polygonus() { miataNAcommonEngineSettings(); // Triggers @@ -379,11 +403,22 @@ void setMiataNa6_Proteus() { engineConfiguration->tps1_1AdcChannel = PROTEUS_IN_ANALOG_VOLT_2; - engineConfiguration->acSwitch = PROTEUS_DIGITAL_4; +#if EFI_PROD_CODE + engineConfiguration->clutchDownPin = getAdcChannelBrainPin("", PROTEUS_IN_ANALOG_VOLT_5); +#endif // EFI_PROD_CODE + engineConfiguration->clutchDownPinInverted = true; + + // Fuel pressure + engineConfiguration->lowPressureFuel.hwChannel = PROTEUS_IN_ANALOG_VOLT_6; + engineConfiguration->lowPressureFuel.v1 = 0.5; + engineConfiguration->lowPressureFuel.value1 = 0; + engineConfiguration->lowPressureFuel.v2 = 4.5; + engineConfiguration->lowPressureFuel.value2 = 689.5; // Built in wideband controller on bus 2 engineConfiguration->enableAemXSeries = true; engineConfiguration->widebandOnSecondBus = true; + engineConfiguration->enableVerboseCanTx = true; // Outputs engineConfiguration->fuelPumpPin = PROTEUS_LS_9; @@ -391,11 +426,17 @@ void setMiataNa6_Proteus() { engineConfiguration->idle.solenoidPin = PROTEUS_LS_7; // TODO: which is fan 1 or 2? - engineConfiguration->fanPin = PROTEUS_LS_5; - // engineConfiguration->fan2Pin = PROTEUS_LS_5; + engineConfiguration->fanPin = PROTEUS_LS_8; + engineConfiguration->fanOnTemperature = 90; + engineConfiguration->fanOffTemperature = 84; + + engineConfiguration->acSwitch = PROTEUS_DIGITAL_4; engineConfiguration->acRelayPin = PROTEUS_LS_10; - engineConfiguration->tachOutputPin = PROTEUS_LS_12; - engineConfiguration->malfunctionIndicatorPin = PROTEUS_LS_11; + + // Disable ETBs + engineConfiguration->etbFunctions[0] = dc_function_e::DC_None; + engineConfiguration->etbFunctions[1] = dc_function_e::DC_None; } +#endif diff --git a/firmware/config/engines/mazda_miata_1_6.h b/firmware/config/engines/mazda_miata_1_6.h index 39ff017db7..043bf822f1 100644 --- a/firmware/config/engines/mazda_miata_1_6.h +++ b/firmware/config/engines/mazda_miata_1_6.h @@ -29,4 +29,4 @@ void setHellenNA6(); void setHellenNA94(); -void setMiataNa6_Proteus(); +void setMiataNa6_Polygonus(); diff --git a/firmware/config/engines/mazda_miata_vvt.cpp b/firmware/config/engines/mazda_miata_vvt.cpp index ca7eb07150..aadf583c04 100644 --- a/firmware/config/engines/mazda_miata_vvt.cpp +++ b/firmware/config/engines/mazda_miata_vvt.cpp @@ -59,34 +59,18 @@ #include "mre_meta.h" -static const float injectorLagBins[VBAT_INJECTOR_CURVE_SIZE] = { - 6.0, 8.0, 10.0, 11.0, - 12.0, 13.0, 14.0, 15.0 -}; +static const uint16_t vvt18fsioRpmBins[] = { 950, 1800, 2500, 3300, 4200, 5000, 6000, 7200 }; +static const uint8_t vvt18fsioLoadBins[] = { 30, 40, 50, 60, 70, 75, 82, 100 }; -static const float injectorLagCorrection[VBAT_INJECTOR_CURVE_SIZE] = { - 4.0 , 3.0 , 2.0 , 1.7, - 1.5 , 1.35, 1.25 , 1.20 -}; - -static const float vvt18fsioRpmBins[SCRIPT_TABLE_8] = -{700.0, 1000.0, 2000.0, 3000.0, 3500.0, 4500.0, 5500.0, 6500.0} -; - -static const float vvt18fsioLoadBins[SCRIPT_TABLE_8] = -{30.0, 40.0, 50.0, 60.0, 70.0, 75.0, 82.0, 85.0} -; - -static const uint8_t SCRIPT_TABLE_vvt_target[SCRIPT_TABLE_8][SCRIPT_TABLE_8] = { - /* Generated by TS2C on Mon Feb 13 19:11:32 EST 2017*/ - {/* 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, }, - {/* 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, }, - {/* 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, }, - {/* 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, }, - {/* 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, }, - {/* 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, }, - {/* 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, }, - {/* 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, }, +static const uint8_t SCRIPT_TABLE_vvt_target[8][8] = { + { 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 15, 15, 15, 15, 0, 0 }, + { 0, 0, 15, 20, 20, 15, 0, 0 }, + { 8, 15, 18, 20, 20, 18, 15, 8 }, + { 8, 15, 20, 20, 20, 18, 15, 8 }, + { 8, 15, 25, 25, 23, 20, 12, 8 }, + { 12, 19, 29, 29, 27, 20, 4, 0 }, + { 12, 19, 29, 29, 27, 20, 5, 1 }, }; const float mazda_miata_nb2_RpmBins[FUEL_RPM_COUNT] = {700.0, 820.0, 950.0, 1100.0, @@ -228,8 +212,10 @@ static void setMAFTransferFunction() { } static void setMazdaMiataNbInjectorLag() { - copyArray(engineConfiguration->injector.battLagCorr, injectorLagCorrection); - copyArray(engineConfiguration->injector.battLagCorrBins, injectorLagBins); + static const float deadtimeBins[] = { 8, 9.6, 11.2, 12.8, 13.2, 14.4, 15.3, 16 }; + static const float deadtimeValues[] = { 1.97, 1.52, 1.23, 1.04, 0.99, 0.9, 0.85, 0.73 }; + copyArray(engineConfiguration->injector.battLagCorrBins, deadtimeBins); + copyArray(engineConfiguration->injector.battLagCorr, deadtimeValues); } /** @@ -245,15 +231,27 @@ static void setCommonMazdaNB() { engineConfiguration->cylinderBore = 83; strcpy(engineConfiguration->engineMake, ENGINE_MAKE_MAZDA); - engineConfiguration->vehicleWeight = 1070; + engineConfiguration->vehicleWeight = 950; + + /** + * http://miataturbo.wikidot.com/fuel-injectors + * 01-05 (purple) - #195500-4060 + */ + engineConfiguration->injector.flow = 265; + engineConfiguration->fuelReferencePressure = 400; // 400 kPa, 58 psi + engineConfiguration->injectorCompensationMode = ICM_FixedRailPressure; + engineConfiguration->injectionMode = IM_SEQUENTIAL; engineConfiguration->ignitionMode = IM_WASTED_SPARK; + static const float cltFuelMultValues[] = { 1.25, 1.23, 1.2, 1.18, 1.16, 1.14, 1.11, 1.09, 1.07, 1.05, 1.02, 1, 1, 1, 1, 1 }; + copyArray(config->cltFuelCorr, cltFuelMultValues); + // Trigger engineConfiguration->trigger.type = trigger_type_e::TT_MIATA_VVT; + engineConfiguration->globalTriggerAngleOffset = 10; engineConfiguration->vvtMode[0] = VVT_MIATA_NB; - engineConfiguration->vvtOffsets[0] = 98; // Cranking engineConfiguration->ignitionDwellForCrankingMs = 4; @@ -262,6 +260,25 @@ static void setCommonMazdaNB() { engineConfiguration->crankingIACposition = 60; engineConfiguration->afterCrankingIACtaperDuration = 250; + engineConfiguration->primingDelay = 1; + + config->crankingFuelCoef[0] = 3.36; + config->crankingFuelBins[0] = -20; + config->crankingFuelCoef[1] = 2.97; + config->crankingFuelBins[1] = -10; + config->crankingFuelCoef[2] = 2.69; + config->crankingFuelBins[2] = 5; + config->crankingFuelCoef[3] = 2.15; + config->crankingFuelBins[3] = 30; + config->crankingFuelCoef[4] = 1.78; + config->crankingFuelBins[4] = 40; + config->crankingFuelCoef[5] = 1.47; + config->crankingFuelBins[5] = 50; + config->crankingFuelCoef[6] = 1.0; + config->crankingFuelBins[6] = 65; + config->crankingFuelCoef[7] = 1.0; + config->crankingFuelBins[7] = 90; + // Idle engineConfiguration->idle.solenoidFrequency = 500; engineConfiguration->idleMode = IM_AUTO; @@ -283,6 +300,11 @@ static void setCommonMazdaNB() { engineConfiguration->idlerpmpid_iTermMin = -15; engineConfiguration->idlerpmpid_iTermMax = 30; + // Idle timing + static const uint16_t idleAdvanceBins[] = { 500, 650, 800, 950, 1050, 1200, 1350, 1500 }; + copyArray(config->idleAdvanceBins, idleAdvanceBins); + setArrayValues(config->idleAdvance, 15); + // Fan engineConfiguration->enableFan1WithAc = true; @@ -290,11 +312,17 @@ static void setCommonMazdaNB() { engineConfiguration->isAlternatorControlEnabled = true; engineConfiguration->targetVBatt = 14.0f; engineConfiguration->alternatorControl.offset = 20; - engineConfiguration->alternatorControl.pFactor = 16; + engineConfiguration->alternatorControl.pFactor = 20; engineConfiguration->alternatorControl.iFactor = 8; engineConfiguration->alternatorControl.dFactor = 0.1; engineConfiguration->alternatorControl.periodMs = 10; + // AC + engineConfiguration->acDelay = 0.5; + engineConfiguration->maxAcClt = 105; + engineConfiguration->acIdleExtraOffset = 8; + engineConfiguration->acIdleRpmBump = 150; + // Tach engineConfiguration->tachPulsePerRev = 2; @@ -320,8 +348,8 @@ static void setCommonMazdaNB() { engineConfiguration->tpsMax = 650; // convert 12to10 bit (ADC/4) // CLT/IAT - setCommonNTCSensor(&engineConfiguration->clt, 2700); - setCommonNTCSensor(&engineConfiguration->iat, 2700); + engineConfiguration->clt.config = { -10, 20, 80, 9000, 2500, 320, 0 }; + engineConfiguration->iat.config = { -20, 40, 80, 16150, 1150, 330, 0 }; // MAF (todo: do we use this?) setMAFTransferFunction(); @@ -349,7 +377,9 @@ static void setCommonMazdaNB() { static void setMazdaMiataEngineNB1Defaults() { setCommonMazdaNB(); + strcpy(engineConfiguration->engineCode, "NB1"); + engineConfiguration->compressionRatio = 9.5; // Vehicle speed/gears engineConfiguration->totalGearsCount = 5; @@ -365,29 +395,25 @@ static void setMazdaMiataEngineNB1Defaults() { } static void setMazdaMiataEngineNB2Defaults() { - strcpy(engineConfiguration->engineCode, "NB2"); - - /** - * http://miataturbo.wikidot.com/fuel-injectors - * 01-05 (purple) - #195500-4060 - */ - engineConfiguration->injector.flow = 265; - engineConfiguration->fuelReferencePressure = 400; // 400 kPa, 58 psi - engineConfiguration->injectorCompensationMode = ICM_FixedRailPressure; - setCommonMazdaNB(); + strcpy(engineConfiguration->engineCode, "NB2"); + engineConfiguration->compressionRatio = 10; + copyArray(config->vvtTable1RpmBins, vvt18fsioRpmBins); copyArray(config->vvtTable1LoadBins, vvt18fsioLoadBins); copyTable(config->vvtTable1, SCRIPT_TABLE_vvt_target); + engineConfiguration->vvtOffsets[0] = 95; + // VVT closed loop engineConfiguration->auxPid[0].pFactor = 2; engineConfiguration->auxPid[0].iFactor = 0.005; engineConfiguration->auxPid[0].dFactor = 0.002; engineConfiguration->auxPid[0].offset = 33; - engineConfiguration->auxPid[0].minValue = 20; + engineConfiguration->auxPid[0].minValue = 10; engineConfiguration->auxPid[0].maxValue = 90; + engineConfiguration->vvtControlMinRpm = 400; // Vehicle speed/gears engineConfiguration->totalGearsCount = 6; @@ -426,9 +452,6 @@ void setMazdaMiata2003EngineConfiguration() { // high-side driver with +12v VP jumper engineConfiguration->tachOutputPin = Gpio::E8; // tachometer - // set global_trigger_offset_angle 0 - engineConfiguration->globalTriggerAngleOffset = 0; - // enable trigger_details engineConfiguration->verboseTriggerSynchDetails = false; @@ -527,24 +550,6 @@ void setMazdaMiata2003EngineConfiguration() { engineConfiguration->etb.offset = 40; engineConfiguration->etb.minValue = -60; engineConfiguration->etb.maxValue = 50; - - config->crankingFuelCoef[0] = 2.8; // base cranking fuel adjustment coefficient - config->crankingFuelBins[0] = -20; // temperature in C - config->crankingFuelCoef[1] = 2.2; - config->crankingFuelBins[1] = -10; - config->crankingFuelCoef[2] = 1.8; - config->crankingFuelBins[2] = 5; - config->crankingFuelCoef[3] = 1.5; - config->crankingFuelBins[3] = 30; - - config->crankingFuelCoef[4] = 1.0; - config->crankingFuelBins[4] = 35; - config->crankingFuelCoef[5] = 1.0; - config->crankingFuelBins[5] = 50; - config->crankingFuelCoef[6] = 1.0; - config->crankingFuelBins[6] = 65; - config->crankingFuelCoef[7] = 1.0; - config->crankingFuelBins[7] = 90; } /** @@ -687,68 +692,149 @@ void setMiataNB2_Proteus_TCU() { } -/** - * https://github.com/rusefi/rusefi/wiki/HOWTO-Miata-NB2-on-Proteus - */ -void setMiataNB2_Proteus() { - setMazdaMiataEngineNB2Defaults(); +void setMiataNbPolygonusCommon() { + engineConfiguration->triggerInputPins[0] = PROTEUS_VR_1; + engineConfiguration->vehicleSpeedSensorInputPin = PROTEUS_DIGITAL_3; - engineConfiguration->triggerInputPins[0] = Gpio::C6; // pin 10/black23 - engineConfiguration->triggerInputPins[1] = Gpio::Unassigned; - engineConfiguration->camInputs[0] = Gpio::E11; // pin 1/black23 + engineConfiguration->alternatorControlPin = PROTEUS_HS_1; - engineConfiguration->alternatorControlPin = Gpio::A8; // "Highside 2" # pin 1/black35 + // high-side driver with +12v VP jumper + engineConfiguration->tachOutputPin = PROTEUS_LS_14; // tachometer + engineConfiguration->tachPulsePerRev = 2; - engineConfiguration->vvtPins[0] = Gpio::B5; // VVT solenoid control # pin 8/black35 + engineConfiguration->ignitionMode = IM_WASTED_SPARK; - // high-side driver with +12v VP jumper - engineConfiguration->tachOutputPin = Gpio::A9; // tachometer - engineConfiguration->tachPulsePerRev = 2; + engineConfiguration->ignitionPins[0] = PROTEUS_IGN_1; + engineConfiguration->ignitionPins[1] = PROTEUS_IGN_2; + engineConfiguration->ignitionPins[2] = PROTEUS_IGN_3; + engineConfiguration->ignitionPins[3] = PROTEUS_IGN_4; - engineConfiguration->ignitionMode = IM_WASTED_SPARK; - - #if EFI_PROD_CODE - engineConfiguration->ignitionPins[0] = PROTEUS_IGN_1; - engineConfiguration->ignitionPins[1] = Gpio::Unassigned; - engineConfiguration->ignitionPins[2] = PROTEUS_IGN_3; - engineConfiguration->ignitionPins[3] = Gpio::Unassigned; - - engineConfiguration->crankingInjectionMode = IM_SIMULTANEOUS; - engineConfiguration->injectionMode = IM_SEQUENTIAL; + engineConfiguration->crankingInjectionMode = IM_SIMULTANEOUS; + engineConfiguration->injectionMode = IM_SEQUENTIAL; - engineConfiguration->injectionPins[0] = PROTEUS_LS_1; // BLU # pin 3/black35 - engineConfiguration->injectionPins[1] = PROTEUS_LS_2; // BLK - engineConfiguration->injectionPins[2] = PROTEUS_LS_3; // GRN - engineConfiguration->injectionPins[3] = PROTEUS_LS_4; // WHT + engineConfiguration->injectionPins[0] = PROTEUS_LS_1; // BLU # pin 3/black35 + engineConfiguration->injectionPins[1] = PROTEUS_LS_2; // BLK + engineConfiguration->injectionPins[2] = PROTEUS_LS_3; // GRN + engineConfiguration->injectionPins[3] = PROTEUS_LS_4; // WHT - engineConfiguration->enableSoftwareKnock = true; + engineConfiguration->enableSoftwareKnock = true; + engineConfiguration->cylinderBore = 78; + engineConfiguration->knockBandCustom = 6.8; - engineConfiguration->malfunctionIndicatorPin = PROTEUS_LS_10; + engineConfiguration->malfunctionIndicatorPin = PROTEUS_LS_11; - engineConfiguration->map.sensor.hwChannel = PROTEUS_IN_MAP; + engineConfiguration->map.sensor.hwChannel = PROTEUS_IN_ANALOG_VOLT_1; + engineConfiguration->map.sensor.type = MT_MPXH6400; - engineConfiguration->afr.hwChannel = EFI_ADC_11; + engineConfiguration->tps1_1AdcChannel = PROTEUS_IN_ANALOG_VOLT_3; - engineConfiguration->mafAdcChannel = EFI_ADC_13; // PA6 W46 <> W46 + engineConfiguration->clt.adcChannel = PROTEUS_IN_ANALOG_TEMP_3; + engineConfiguration->iat.adcChannel = PROTEUS_IN_ANALOG_TEMP_2; - engineConfiguration->tps1_1AdcChannel = EFI_ADC_12; + engineConfiguration->fuelPumpPin = PROTEUS_LS_7; - engineConfiguration->clt.adcChannel = PROTEUS_IN_ANALOG_TEMP_1; - engineConfiguration->iat.adcChannel = PROTEUS_IN_ANALOG_TEMP_3; + engineConfiguration->idle.solenoidPin = PROTEUS_LS_10; - engineConfiguration->fuelPumpPin = PROTEUS_LS_6; + // Built in wideband controller on bus 2 + engineConfiguration->enableAemXSeries = true; + engineConfiguration->widebandOnSecondBus = true; + engineConfiguration->enableVerboseCanTx = true; - engineConfiguration->idle.solenoidPin = PROTEUS_LS_7; + engineConfiguration->fanPin = PROTEUS_LS_6; + engineConfiguration->fanOnTemperature = 90; + engineConfiguration->fanOffTemperature = 84; + engineConfiguration->fan2Pin = PROTEUS_LS_5; + engineConfiguration->enableFan2WithAc = true; - engineConfiguration->fanPin = Gpio::B7; + engineConfiguration->clutchDownPin = PROTEUS_DIGITAL_4; + engineConfiguration->clutchDownPinInverted = true; - engineConfiguration->mainRelayPin = Gpio::G12; +#if EFI_PROD_CODE + engineConfiguration->brakePedalPin = getAdcChannelBrainPin("", PROTEUS_IN_ANALOG_VOLT_5); #endif // EFI_PROD_CODE + engineConfiguration->acRelayPin = PROTEUS_LS_8; + // Disable ETBs + engineConfiguration->etbFunctions[0] = dc_function_e::DC_None; + engineConfiguration->etbFunctions[1] = dc_function_e::DC_None; +} + +void setMiataNB1_Polygonus() { + setMazdaMiataEngineNB1Defaults(); + setMiataNbPolygonusCommon(); + + engineConfiguration->camInputs[0] = PROTEUS_VR_2; + + engineConfiguration->tpsMin = 102; + engineConfiguration->tpsMax = 727; + + engineConfiguration->acSwitch = PROTEUS_DIGITAL_6; + + // Fuel pressure + engineConfiguration->lowPressureFuel.hwChannel = PROTEUS_IN_ANALOG_VOLT_6; + engineConfiguration->lowPressureFuel.v1 = 0.5; + engineConfiguration->lowPressureFuel.value1 = 0; + engineConfiguration->lowPressureFuel.v2 = 4.5; + engineConfiguration->lowPressureFuel.value2 = 689.5; + + // GPPWM1: VICS variable intake flap + engineConfiguration->gppwm[0].pin = PROTEUS_LS_16; + engineConfiguration->gppwm[0].pwmFrequency = 0; + engineConfiguration->gppwm[0].loadAxis = GPPWM_Tps; + engineConfiguration->gppwm[0].onAboveDuty = 60; + engineConfiguration->gppwm[0].offBelowDuty = 40; + strcpy(engineConfiguration->gpPwmNote[0], "VICS"); + copyArray(engineConfiguration->gppwm[0].rpmBins, { 0, 1000, 2000, 2500, 3500, 5500, 6500, 7000 }); + for (size_t i = 0; i < efi::size(engineConfiguration->gppwm[0].table); i++) + { + // Set the 3500 and 5500 rpm columns to 100 + engineConfiguration->gppwm[0].table[i][4] = 100; + engineConfiguration->gppwm[0].table[i][5] = 100; + } +} + +// Both NB2 and MSM +void setMiataPolygonusNB2Common() { + engineConfiguration->camInputs[0] = PROTEUS_DIGITAL_1; + + engineConfiguration->tpsMin = 92; + engineConfiguration->tpsMax = 872; + + // NB2 has a main relay output, unlike NB1 + engineConfiguration->mainRelayPin = PROTEUS_LS_16; + +#if EFI_PROD_CODE + engineConfiguration->acSwitch = getAdcChannelBrainPin("", PROTEUS_IN_ANALOG_VOLT_6); +#endif // EFI_PROD_CODE +} + +void setMiataNB2_Polygonus() { + setMazdaMiataEngineNB2Defaults(); + setMiataNbPolygonusCommon(); + setMiataPolygonusNB2Common(); + + // NB2 has VVT! + engineConfiguration->vvtPins[0] = PROTEUS_LS_13; +} + +void setMiataNB_MSM_Polygonus() { + setMazdaMiataEngineNB1Defaults(); + setMiataNbPolygonusCommon(); + setMiataPolygonusNB2Common(); + + strcpy(engineConfiguration->engineCode, "NB1"); + engineConfiguration->compressionRatio = 9.5; + engineConfiguration->isForcedInduction = true; + + // MSM has boost control! + engineConfiguration->boostControlPin = PROTEUS_HS_3; + + // MSM gets a different IAT from the other NBs + engineConfiguration->iat.config = { 0, 40, 60, 112000, 17000, 8000, 0 }; } #endif // HW_PROTEUS diff --git a/firmware/config/engines/mazda_miata_vvt.h b/firmware/config/engines/mazda_miata_vvt.h index ecb1a992d1..c24c505dee 100644 --- a/firmware/config/engines/mazda_miata_vvt.h +++ b/firmware/config/engines/mazda_miata_vvt.h @@ -29,10 +29,9 @@ void setMazdaMiata2003EngineConfigurationBoardTest(); */ void setMiataNB2_Proteus_TCU(); -/** - * set engine_type 67 - */ -void setMiataNB2_Proteus(); +void setMiataNB1_Polygonus(); +void setMiataNB2_Polygonus(); +void setMiataNB_MSM_Polygonus(); /** * set engine_type 69 diff --git a/firmware/controllers/algo/defaults/default_fuel.cpp b/firmware/controllers/algo/defaults/default_fuel.cpp index f2b147d397..affa148c2f 100644 --- a/firmware/controllers/algo/defaults/default_fuel.cpp +++ b/firmware/controllers/algo/defaults/default_fuel.cpp @@ -136,15 +136,14 @@ static void setDefaultStftSettings() { } static const uint8_t tpsTpsTable[TPS_TPS_ACCEL_TABLE][TPS_TPS_ACCEL_TABLE] = { -/* Generated by TS2C on Tue Apr 18 21:29:16 EDT 2017*/ -{/* 0 0 *//* 0 0.0*/0, /* 1 10.0*/0, /* 2 20.0*/0, /* 3 35.0*/0, /* 4 50.0*/0, /* 5 65.0*/0, /* 6 80.0*/0, /* 7 100.0*/0, }, -{/* 1 10 *//* 0 0.0*/10, /* 1 10.0*/0, /* 2 20.0*/0, /* 3 35.0*/0, /* 4 50.0*/0, /* 5 65.0*/0, /* 6 80.0*/0, /* 7 100.0*/0, }, -{/* 2 20 *//* 0 0.0*/17, /* 1 10.0*/10, /* 2 20.0*/0, /* 3 35.0*/0, /* 4 50.0*/0, /* 5 65.0*/0, /* 6 80.0*/0, /* 7 100.0*/0, }, -{/* 3 35 *//* 0 0.0*/23, /* 1 10.0*/17, /* 2 20.0*/10, /* 3 35.0*/0, /* 4 50.0*/0, /* 5 65.0*/0, /* 6 80.0*/0, /* 7 100.0*/0, }, -{/* 4 50 *//* 0 0.0*/28, /* 1 10.0*/23, /* 2 20.0*/17, /* 3 35.0*/10, /* 4 50.0*/0, /* 5 65.0*/0, /* 6 80.0*/0, /* 7 100.0*/0, }, -{/* 5 65 *//* 0 0.0*/32, /* 1 10.0*/28, /* 2 20.0*/23, /* 3 35.0*/17, /* 4 50.0*/10, /* 5 65.0*/0, /* 6 80.0*/0, /* 7 100.0*/0, }, -{/* 6 80 *//* 0 0.0*/35, /* 1 10.0*/32, /* 2 20.0*/28, /* 3 35.0*/23, /* 4 50.0*/17, /* 5 65.0*/10, /* 6 80.0*/0, /* 7 100.0*/0, }, -{/* 7 100 *//* 0 0.0*/37, /* 1 10.0*/35, /* 2 20.0*/32, /* 3 35.0*/28, /* 4 50.0*/23, /* 5 65.0*/17, /* 6 80.0*/10, /* 7 100.0*/0, }, + { 0, 0, 0, 0, 0, 0, 0, 0 }, + { 2, 0, 0, 0, 0, 0, 0, 0 }, + { 3, 2, 0, 0, 0, 0, 0, 0 }, + { 4, 3, 2, 0, 0, 0, 0, 0 }, + { 5, 4, 3, 2, 0, 0, 0, 0 }, + { 5, 5, 4, 3, 2, 0, 0, 0 }, + { 6, 5, 5, 4, 3, 2, 0, 0 }, + { 7, 6, 5, 5, 4, 3, 2, 0 }, }; static void setMazdaMiataNbTpsTps() { diff --git a/firmware/controllers/algo/engine_configuration.cpp b/firmware/controllers/algo/engine_configuration.cpp index 0b8b62957e..62a4887e66 100644 --- a/firmware/controllers/algo/engine_configuration.cpp +++ b/firmware/controllers/algo/engine_configuration.cpp @@ -731,11 +731,17 @@ void resetConfigurationExt(configuration_callback_t boardCallback, engine_type_e case engine_type_e::PROTEUS_E65_6H_MAN_IN_THE_MIDDLE: setEngineProteusGearboxManInTheMiddle(); break; - case engine_type_e::PROTEUS_MIATA_NA6: - setMiataNa6_Proteus(); + case engine_type_e::POLYGONUS_MIATA_NA6: + setMiataNa6_Polygonus(); break; - case engine_type_e::PROTEUS_MIATA_NB2: - setMiataNB2_Proteus(); + case engine_type_e::POLYGONUS_MIATA_NB1: + setMiataNB1_Polygonus(); + break; + case engine_type_e::POLYGONUS_MIATA_NB2: + setMiataNB2_Polygonus(); + break; + case engine_type_e::POLYGONUS_MIATA_MSM: + setMiataNB_MSM_Polygonus(); break; #ifdef HARDWARE_CI case engine_type_e::PROTEUS_ANALOG_PWM_TEST: diff --git a/firmware/controllers/algo/engine_types.h b/firmware/controllers/algo/engine_types.h index a285de141c..65c8ec8273 100644 --- a/firmware/controllers/algo/engine_types.h +++ b/firmware/controllers/algo/engine_types.h @@ -146,7 +146,6 @@ enum class engine_type_e : uint32_t { DODGE_RAM = 64, CITROEN_TU3JP = 65, - PROTEUS_MIATA_NB2 = 67, MRE_M111 = 68, HELLEN_NB2 = 69, @@ -196,12 +195,16 @@ enum class engine_type_e : uint32_t { HELLEN_154_HYUNDAI_COUPE_BK2 = 95, WASTEGATE_PROTEUS_TEST = 96, - PROTEUS_MIATA_NA6 = 4, + + // Polygonus PnP presets + POLYGONUS_MIATA_NA6 = 4, + POLYGONUS_MIATA_NB1 = 11, + POLYGONUS_MIATA_NB2 = 67, + POLYGONUS_MIATA_MSM = 12, + ET_UNUSED_97 = 97, ET_UNUSED_98 = 98, ET_UNUSED_17 = 17, - ET_UNUSED_11 = 11, - ET_UNUSED_12 = 12, ET_UNUSED_13 = 13, ET_UNUSED_15 = 15, ET_UNUSED_33 = 33, diff --git a/firmware/tunerstudio/rusefi.input b/firmware/tunerstudio/rusefi.input index fa49c82914..8b9825e4db 100644 --- a/firmware/tunerstudio/rusefi.input +++ b/firmware/tunerstudio/rusefi.input @@ -2099,11 +2099,13 @@ cmd_set_engine_type_PROTEUS_VW_B6 = "@@TS_IO_TEST_COMMAND_char@@@@ts_command cmd_set_engine_type_PROTEUS_GM_LS_4 = "@@TS_IO_TEST_COMMAND_char@@@@ts_command_e_TS_SET_ENGINE_TYPE_16_hex@@@@engine_type_e_PROTEUS_GM_LS_4_16_hex@@" cmd_set_engine_type_PROTEUS_HONDA_K = "@@TS_IO_TEST_COMMAND_char@@@@ts_command_e_TS_SET_ENGINE_TYPE_16_hex@@@@engine_type_e_PROTEUS_HONDA_K_16_hex@@" cmd_set_engine_type_PROTEUS_HONDA_OBD2A = "@@TS_IO_TEST_COMMAND_char@@@@ts_command_e_TS_SET_ENGINE_TYPE_16_hex@@@@engine_type_e_PROTEUS_HONDA_OBD2A_16_hex@@" -cmd_set_engine_type_PROTEUS_MIATA_NB2 = "@@TS_IO_TEST_COMMAND_char@@@@ts_command_e_TS_SET_ENGINE_TYPE_16_hex@@@@engine_type_e_PROTEUS_MIATA_NB2_16_hex@@" cmd_set_engine_type_Proteus_Miata_TCU = "@@TS_IO_TEST_COMMAND_char@@@@ts_command_e_TS_SET_ENGINE_TYPE_16_hex@@@@engine_type_e_MIATA_PROTEUS_TCU_16_hex@@" cmd_set_engine_type_PROTEUS_LUA_DEMO = "@@TS_IO_TEST_COMMAND_char@@@@ts_command_e_TS_SET_ENGINE_TYPE_16_hex@@@@engine_type_e_PROTEUS_LUA_DEMO_16_hex@@" cmd_set_engine_type_PROTEUS_HARLEY = "@@TS_IO_TEST_COMMAND_char@@@@ts_command_e_TS_SET_ENGINE_TYPE_16_hex@@@@engine_type_e_PROTEUS_HARLEY_16_hex@@" -cmd_set_engine_type_PROTEUS_MIATA_NA6 = "@@TS_IO_TEST_COMMAND_char@@@@ts_command_e_TS_SET_ENGINE_TYPE_16_hex@@@@engine_type_e_PROTEUS_MIATA_NA6_16_hex@@" +cmd_set_engine_type_POLYGONUS_MIATA_NA6 = "@@TS_IO_TEST_COMMAND_char@@@@ts_command_e_TS_SET_ENGINE_TYPE_16_hex@@@@engine_type_e_POLYGONUS_MIATA_NA6_16_hex@@" +cmd_set_engine_type_POLYGONUS_MIATA_NB1 = "@@TS_IO_TEST_COMMAND_char@@@@ts_command_e_TS_SET_ENGINE_TYPE_16_hex@@@@engine_type_e_POLYGONUS_MIATA_NB1_16_hex@@" +cmd_set_engine_type_POLYGONUS_MIATA_NB2 = "@@TS_IO_TEST_COMMAND_char@@@@ts_command_e_TS_SET_ENGINE_TYPE_16_hex@@@@engine_type_e_POLYGONUS_MIATA_NB2_16_hex@@" +cmd_set_engine_type_POLYGONUS_MIATA_MSM = "@@TS_IO_TEST_COMMAND_char@@@@ts_command_e_TS_SET_ENGINE_TYPE_16_hex@@@@engine_type_e_POLYGONUS_MIATA_MSM_16_hex@@" ; ETB_BENCH_ENGINE = 58 @@ -4203,14 +4205,19 @@ dialog = tcuControls, "Transmission Settings" commandButton = "microRusEFI BCM", cmd_set_engine_type_microRusEFI_MRE_BODY_CONTROL@@if_show_microRusEFI_presets commandButton = "microRusEFI Subaru EJ18", cmd_set_engine_type_MRE_SUBARU_EJ18@@if_show_microRusEFI_presets - commandButton = "FOME PnP Miata NA6", cmd_set_engine_type_PROTEUS_MIATA_NA6@@if_show_Proteus_presets + commandButton = "FOME PnP Miata NA6", cmd_set_engine_type_POLYGONUS_MIATA_NA6@@if_show_Proteus_presets + ; commandButton = "FOME PnP Miata NA6 VVT Swap", cmd_set_engine_type_POLYGONUS_MIATA_NA6@@if_show_Proteus_presets + ; commandButton = "FOME PnP Miata 94 ???", cmd_set_engine_type_POLYGONUS_MIATA_NA6@@if_show_Proteus_presets + ; commandButton = "FOME PnP Miata NA8 96", cmd_set_engine_type_POLYGONUS_MIATA_NA6@@if_show_Proteus_presets + commandButton = "FOME PnP Miata NB1", cmd_set_engine_type_POLYGONUS_MIATA_NB1@@if_show_Proteus_presets + commandButton = "FOME PnP Miata NB2 VVT", cmd_set_engine_type_POLYGONUS_MIATA_NB2@@if_show_Proteus_presets + commandButton = "FOME PnP Miata MSM", cmd_set_engine_type_POLYGONUS_MIATA_MSM@@if_show_Proteus_presets commandButton = "Proteus M73 v12", cmd_set_engine_type_Proteus_M73@@if_show_Proteus_presets commandButton = "Proteus GDI VAG B6 test", cmd_set_engine_type_PROTEUS_VW_B6@@if_show_Proteus_presets commandButton = "Proteus GM Gen4", cmd_set_engine_type_PROTEUS_GM_LS_4@@if_show_Proteus_presets commandButton = "Proteus Miata TCU", cmd_set_engine_type_Proteus_Miata_TCU@@if_show_Proteus_presets commandButton = "Proteus Lua Demo", cmd_set_engine_type_PROTEUS_LUA_DEMO@@if_show_Proteus_presets - commandButton = "Proteus Miata NB2", cmd_set_engine_type_PROTEUS_MIATA_NB2@@if_show_Proteus_presets commandButton = "Proteus Honda K", cmd_set_engine_type_PROTEUS_HONDA_K@@if_show_Proteus_presets commandButton = "Proteus Honda OBD2A", cmd_set_engine_type_PROTEUS_HONDA_OBD2A@@if_show_Proteus_presets commandButton = "Proteus Harley", cmd_set_engine_type_PROTEUS_HARLEY@@if_show_Proteus_presets diff --git a/unit_tests/tests/test_accel_enrichment.cpp b/unit_tests/tests/test_accel_enrichment.cpp index e2b4458d62..6ea47be8ad 100644 --- a/unit_tests/tests/test_accel_enrichment.cpp +++ b/unit_tests/tests/test_accel_enrichment.cpp @@ -63,7 +63,7 @@ TEST(fuel, testTpsAccelEnrichmentScheduling) { Sensor::setMockValue(SensorType::Tps1, 70); eth.fireTriggerEvents2(/* count */ 1, 25 /* ms */); - float expectedAEValue = 7; + float expectedAEValue = 1.4; // it does not matter how many times we invoke 'getTpsEnrichment' - state does not change for (int i = 0; i <20;i++) { ASSERT_NEAR(expectedAEValue, engine->tpsAccelEnrichment.getTpsEnrichment(), EPS4D); diff --git a/unit_tests/tests/trigger/test_cam_vvt_input.cpp b/unit_tests/tests/trigger/test_cam_vvt_input.cpp index dee9bbabdd..e263b637a8 100644 --- a/unit_tests/tests/trigger/test_cam_vvt_input.cpp +++ b/unit_tests/tests/trigger/test_cam_vvt_input.cpp @@ -182,7 +182,7 @@ TEST(trigger, testNB2CamInput) { eth.moveTimeForwardUs(MS2US( 30)); hwHandleVvtCamSignal(true, getTimeNowNt(), 0); - EXPECT_NEAR(290.5f, engine->triggerCentral.getVVTPosition(0, 0), EPS2D); + EXPECT_NEAR(297.5f, engine->triggerCentral.getVVTPosition(0, 0), EPS2D); // actually position based on VVT! ASSERT_EQ(totalRevolutionCountBeforeVvtSync + 3, engine->triggerCentral.triggerState.getCrankSynchronizationCounter()); diff --git a/unit_tests/tests/trigger/test_real_nb2_cranking.cpp b/unit_tests/tests/trigger/test_real_nb2_cranking.cpp index 3e0db3526e..13c63413c6 100644 --- a/unit_tests/tests/trigger/test_real_nb2_cranking.cpp +++ b/unit_tests/tests/trigger/test_real_nb2_cranking.cpp @@ -20,7 +20,7 @@ TEST(realCrankingNB2, normalCranking) { } // VVT position nearly zero! - EXPECT_NEAR(engine->triggerCentral.getVVTPosition(0, 0), 4.2627f, 1e-4); + EXPECT_NEAR(engine->triggerCentral.getVVTPosition(0, 0), 11.2627f, 1e-4); // Check the number of times VVT information was used to adjust crank phase // This should happen exactly once: once we sync, we shouldn't lose it. @@ -45,7 +45,7 @@ TEST(realCrankingNB2, crankingMissingInjector) { } // VVT position nearly zero! - EXPECT_NEAR(engine->triggerCentral.getVVTPosition(0, 0), -2.5231f, 1e-4); + EXPECT_NEAR(engine->triggerCentral.getVVTPosition(0, 0), 4.476928f, 1e-4); ASSERT_EQ(316, round(Sensor::getOrZero(SensorType::Rpm)));