rusefi/firmware/config/engines/custom_engine.cpp

910 lines
30 KiB
C++
Raw Normal View History

2015-07-10 06:01:56 -07:00
/**
* @file custom_engine.cpp
*
2017-02-24 15:55:53 -08:00
*
2017-12-02 16:25:36 -08:00
* set engine_type 49
2017-12-03 14:26:15 -08:00
* FRANKENSO_QA_ENGINE
2017-12-02 16:25:36 -08:00
* See also DEFAULT_ENGINE_TYPE
* Frankenso QA 12 cylinder engine
2017-02-24 15:55:53 -08:00
*
2015-07-10 06:01:56 -07:00
* @date Jan 18, 2015
2020-01-07 21:02:40 -08:00
* @author Andrey Belomutskiy, (c) 2012-2020
2015-07-10 06:01:56 -07:00
*/
2019-12-28 20:22:16 -08:00
#include "pch.h"
2015-07-10 06:01:56 -07:00
#include "custom_engine.h"
2019-04-11 20:21:16 -07:00
#include "fsio_impl.h"
2021-10-27 16:54:45 -07:00
#include "mre_meta.h"
2021-11-10 19:27:21 -08:00
#include "proteus_meta.h"
2015-07-10 06:01:56 -07:00
#if EFI_ELECTRONIC_THROTTLE_BODY
#include "electronic_throttle.h"
#endif
2019-04-12 19:10:57 -07:00
#if EFI_PROD_CODE
2016-01-24 12:02:46 -08:00
#include "can_hw.h"
2018-01-28 11:03:58 -08:00
#include "scheduler.h"
2017-12-03 12:23:39 -08:00
#endif /* EFI_PROD_CODE */
2016-01-24 12:02:46 -08:00
#if HW_PROTEUS & EFI_PROD_CODE
#include "proteus_meta.h"
#endif
2018-01-28 11:03:58 -08:00
2019-04-12 19:10:57 -07:00
#if EFI_PROD_CODE
2018-01-28 11:03:58 -08:00
static int periodIndex = 0;
static OutputPin testPin;
2021-07-13 17:10:31 -07:00
static scheduling_s testScheduling;
2018-01-28 11:03:58 -08:00
2018-01-29 11:25:28 -08:00
static int test557[] = {5, 5, 10, 10, 20, 20, 50, 50, 100, 100, 200, 200, 500, 500, 500, 500};
#define TEST_LEN 16
2018-01-28 11:03:58 -08:00
efitimeus_t testTime;
static void toggleTestAndScheduleNext(void *) {
2018-01-28 11:03:58 -08:00
testPin.toggle();
periodIndex = (periodIndex + 1) % TEST_LEN;
testTime += test557[periodIndex];
engine->executor.scheduleByTimestamp("test", &testScheduling, testTime, &toggleTestAndScheduleNext);
2018-01-28 11:03:58 -08:00
}
2018-03-04 14:55:46 -08:00
/**
* https://github.com/rusefi/rusefi/issues/557 common rail / direct injection scheduling control test
*/
2019-01-10 21:03:42 -08:00
void runSchedulingPrecisionTestIfNeeded(void) {
if (!isBrainPinValid(engineConfiguration->test557pin)) {
2018-01-28 11:03:58 -08:00
return;
}
testPin.initPin("test", engineConfiguration->test557pin);
testPin.setValue(0);
testTime = getTimeNowUs();
toggleTestAndScheduleNext(/*unused*/ nullptr);
2018-01-28 11:03:58 -08:00
}
#endif /* EFI_PROD_CODE */
void setFrankenso_01_LCD(engine_configuration_s *engineConfiguration) {
engineConfiguration->HD44780_rs = GPIOE_7;
engineConfiguration->HD44780_e = GPIOE_9;
engineConfiguration->HD44780_db4 = GPIOE_11;
engineConfiguration->HD44780_db5 = GPIOE_13;
engineConfiguration->HD44780_db6 = GPIOE_15;
engineConfiguration->HD44780_db7 = GPIOB_10;
2016-04-03 16:01:59 -07:00
}
void disableLCD(engine_configuration_s *engineConfiguration) {
engineConfiguration->HD44780_rs = GPIO_UNASSIGNED;
engineConfiguration->HD44780_e = GPIO_UNASSIGNED;
engineConfiguration->HD44780_db4 = GPIO_UNASSIGNED;
engineConfiguration->HD44780_db5 = GPIO_UNASSIGNED;
engineConfiguration->HD44780_db6 = GPIO_UNASSIGNED;
engineConfiguration->HD44780_db7 = GPIO_UNASSIGNED;
2016-04-03 16:01:59 -07:00
}
2017-01-28 12:05:25 -08:00
// todo: should this be part of more default configurations?
2019-08-06 14:12:15 -07:00
void setFrankensoConfiguration(DECLARE_CONFIG_PARAMETER_SIGNATURE) {
setDefaultFrankensoConfiguration(PASS_CONFIG_PARAMETER_SIGNATURE);
2015-07-10 06:01:56 -07:00
engineConfiguration->trigger.type = TT_ONE_PLUS_ONE;
setFrankenso_01_LCD(engineConfiguration);
2019-08-12 21:03:31 -07:00
engineConfiguration->displayMode = DM_HD44780;
commonFrankensoAnalogInputs(engineConfiguration);
setFrankenso0_1_joystick(engineConfiguration);
2015-07-10 06:01:56 -07:00
/**
* Frankenso analog #1 PC2 ADC12 CLT
* Frankenso analog #2 PC1 ADC11 IAT
* Frankenso analog #3 PA0 ADC0 MAP
* Frankenso analog #4 PC3 ADC13 WBO / O2
* Frankenso analog #5 PA2 ADC2 TPS
* Frankenso analog #6 PA1 ADC1
* Frankenso analog #7 PA4 ADC4
* Frankenso analog #8 PA3 ADC3
* Frankenso analog #9 PA7 ADC7
* Frankenso analog #10 PA6 ADC6
* Frankenso analog #11 PC5 ADC15
* Frankenso analog #12 PC4 ADC14 VBatt
*/
engineConfiguration->tps1_1AdcChannel = EFI_ADC_2; // PA2
2015-07-10 06:01:56 -07:00
engineConfiguration->map.sensor.hwChannel = EFI_ADC_0;
engineConfiguration->clt.adcChannel = EFI_ADC_12;
engineConfiguration->iat.adcChannel = EFI_ADC_11;
engineConfiguration->afr.hwChannel = EFI_ADC_13;
setCommonNTCSensor(&engineConfiguration->clt, 2700);
setCommonNTCSensor(&engineConfiguration->iat, 2700);
2015-07-10 06:01:56 -07:00
/**
* http://rusefi.com/wiki/index.php?title=Manual:Hardware_Frankenso_board
*/
// Frankenso low out #1: PE6
// Frankenso low out #2: PE5
// Frankenso low out #3: PD7 Main Relay
// Frankenso low out #4: PC13 Idle valve solenoid
// Frankenso low out #5: PE3
// Frankenso low out #6: PE4 fuel pump relay
// Frankenso low out #7: PE1 (do not use with discovery!)
// Frankenso low out #8: PE2 injector #2
// Frankenso low out #9: PB9 injector #1
// Frankenso low out #10: PE0 (do not use with discovery!)
// Frankenso low out #11: PB8 injector #3
// Frankenso low out #12: PB7 injector #4
engineConfiguration->fuelPumpPin = GPIOE_4;
engineConfiguration->mainRelayPin = GPIOD_7;
engineConfiguration->idle.solenoidPin = GPIOC_13;
2015-07-10 06:01:56 -07:00
engineConfiguration->fanPin = GPIOE_5;
2015-07-10 06:01:56 -07:00
engineConfiguration->injectionPins[0] = GPIOB_9; // #1
engineConfiguration->injectionPins[1] = GPIOE_2; // #2
engineConfiguration->injectionPins[2] = GPIOB_8; // #3
2019-02-06 15:53:43 -08:00
#ifndef EFI_INJECTOR_PIN3
engineConfiguration->injectionPins[3] = GPIOB_7; // #4
2019-02-06 15:53:43 -08:00
#else /* EFI_INJECTOR_PIN3 */
engineConfiguration->injectionPins[3] = EFI_INJECTOR_PIN3; // #4
2019-02-06 15:53:43 -08:00
#endif /* EFI_INJECTOR_PIN3 */
2015-07-10 06:01:56 -07:00
setAlgorithm(LM_SPEED_DENSITY PASS_CONFIG_PARAMETER_SUFFIX);
2016-01-08 12:01:38 -08:00
2015-07-10 06:01:56 -07:00
#if EFI_PWM_TESTER
engineConfiguration->injectionPins[4] = GPIOC_8; // #5
engineConfiguration->injectionPins[5] = GPIOD_10; // #6
engineConfiguration->injectionPins[6] = GPIOD_9;
engineConfiguration->injectionPins[7] = GPIOD_11;
engineConfiguration->injectionPins[8] = GPIOD_0;
engineConfiguration->injectionPins[9] = GPIOB_11;
engineConfiguration->injectionPins[10] = GPIOC_7;
engineConfiguration->injectionPins[11] = GPIOE_4;
2015-07-10 06:01:56 -07:00
/**
* We want to initialize all outputs for test
*/
engineConfiguration->specs.cylindersCount = 12;
engineConfiguration->displayMode = DM_NONE;
2017-12-03 12:37:52 -08:00
#else /* EFI_PWM_TESTER */
engineConfiguration->injectionPins[4] = GPIO_UNASSIGNED;
engineConfiguration->injectionPins[5] = GPIO_UNASSIGNED;
engineConfiguration->injectionPins[6] = GPIO_UNASSIGNED;
engineConfiguration->injectionPins[7] = GPIO_UNASSIGNED;
engineConfiguration->injectionPins[8] = GPIO_UNASSIGNED;
engineConfiguration->injectionPins[9] = GPIO_UNASSIGNED;
engineConfiguration->injectionPins[10] = GPIO_UNASSIGNED;
engineConfiguration->injectionPins[11] = GPIO_UNASSIGNED;
engineConfiguration->ignitionPins[0] = GPIOE_14;
engineConfiguration->ignitionPins[1] = GPIOC_7;
engineConfiguration->ignitionPins[2] = GPIOC_9;
2017-03-21 19:45:15 -07:00
// set_ignition_pin 4 PE10
engineConfiguration->ignitionPins[3] = GPIOE_10;
2017-12-03 12:37:52 -08:00
#endif /* EFI_PWM_TESTER */
2015-07-10 06:01:56 -07:00
// todo: 8.2 or 10k?
engineConfiguration->vbattDividerCoeff = ((float) (10 + 33)) / 10 * 2;
2019-04-12 19:10:57 -07:00
#if EFI_CAN_SUPPORT
2016-01-24 12:02:46 -08:00
enableFrankensoCan();
#endif /* EFI_CAN_SUPPORT */
2015-07-10 06:01:56 -07:00
}
2020-02-18 14:53:56 -08:00
/**
* set engine_type 49
*/
void setFrankensoBoardTestConfiguration(DECLARE_CONFIG_PARAMETER_SIGNATURE) {
2019-08-06 14:12:15 -07:00
setFrankensoConfiguration(PASS_CONFIG_PARAMETER_SIGNATURE);
2017-02-24 15:55:53 -08:00
engineConfiguration->triggerSimulatorFrequency = 300;
2017-12-03 15:29:52 -08:00
engineConfiguration->cranking.rpm = 100;
2017-12-02 16:47:18 -08:00
2017-02-24 15:55:53 -08:00
engineConfiguration->specs.cylindersCount = 12;
2017-03-23 18:59:47 -07:00
engineConfiguration->specs.firingOrder = FO_1_7_5_11_3_9_6_12_2_8_4_10;
2017-02-24 15:55:53 -08:00
2017-03-21 19:45:15 -07:00
// set ignition_mode 1
engineConfiguration->ignitionMode = IM_INDIVIDUAL_COILS;
engineConfiguration->injectionPins[0] = GPIOB_7; // injector in default pinout
engineConfiguration->injectionPins[1] = GPIOB_8; // injector in default pinout
engineConfiguration->injectionPins[2] = GPIOB_9; // injector in default pinout
engineConfiguration->injectionPins[3] = GPIOC_13;
engineConfiguration->injectionPins[4] = GPIOD_3;
engineConfiguration->injectionPins[5] = GPIOD_5;
engineConfiguration->injectionPins[6] = GPIOD_7;
engineConfiguration->injectionPins[7] = GPIOE_2; // injector in default pinout
engineConfiguration->injectionPins[8] = GPIOE_3;
engineConfiguration->injectionPins[9] = GPIOE_4;
engineConfiguration->injectionPins[10] = GPIOE_5;
engineConfiguration->injectionPins[11] = GPIOE_6;
engineConfiguration->fuelPumpPin = GPIO_UNASSIGNED;
engineConfiguration->mainRelayPin = GPIO_UNASSIGNED;
engineConfiguration->idle.solenoidPin = GPIO_UNASSIGNED;
engineConfiguration->fanPin = GPIO_UNASSIGNED;
engineConfiguration->ignitionPins[0] = GPIOC_9; // coil in default pinout
engineConfiguration->ignitionPins[1] = GPIOC_7; // coil in default pinout
engineConfiguration->ignitionPins[2] = GPIOE_10; // coil in default pinout
engineConfiguration->ignitionPins[3] = GPIOE_8; // Miata VVT tach
engineConfiguration->ignitionPins[4] = GPIOE_14; // coil in default pinout
engineConfiguration->ignitionPins[5] = GPIOE_12;
engineConfiguration->ignitionPins[6] = GPIOD_8;
engineConfiguration->ignitionPins[7] = GPIOD_9;
engineConfiguration->ignitionPins[8] = GPIOE_0; // brain board, not discovery
engineConfiguration->ignitionPins[9] = GPIOE_1; // brain board, not discovery
2017-02-24 15:55:53 -08:00
}
2019-03-02 11:00:32 -08:00
// ETB_BENCH_ENGINE
2019-04-21 11:11:39 -07:00
// set engine_type 58
void setEtbTestConfiguration(DECLARE_CONFIG_PARAMETER_SIGNATURE) {
setDefaultFrankensoConfiguration(PASS_CONFIG_PARAMETER_SIGNATURE);
2019-03-02 10:21:12 -08:00
// VAG test ETB
// set tps_min 54
engineConfiguration->tpsMin = 54;
// by the way this ETB has default position of ADC=74 which is about 4%
// set tps_max 540
engineConfiguration->tpsMax = 540;
// yes, 30K - that's a test configuration
engineConfiguration->rpmHardLimit = 30000;
setOperationMode(engineConfiguration, FOUR_STROKE_CRANK_SENSOR);
engineConfiguration->trigger.type = TT_TOOTHED_WHEEL_60_2;
engineConfiguration->ignitionPins[0] = GPIO_UNASSIGNED;
engineConfiguration->ignitionPins[1] = GPIO_UNASSIGNED;
engineConfiguration->ignitionPins[2] = GPIO_UNASSIGNED;
engineConfiguration->ignitionPins[3] = GPIO_UNASSIGNED;
2019-02-27 06:57:03 -08:00
/**
* remember that some H-bridges require 5v control lines, not just 3v logic outputs we have on stm32
*/
CONFIG(etbIo[0].directionPin1) = GPIOC_7; // Frankenso high-side in order to get 5v control
CONFIG(etbIo[0].directionPin2) = GPIOC_9;
2021-06-05 13:19:01 -07:00
CONFIG(etbIo[0].controlPin) = GPIOE_14;
2019-02-27 14:54:25 -08:00
2019-04-12 19:10:57 -07:00
#if EFI_ELECTRONIC_THROTTLE_BODY
setBoschVNH2SP30Curve(PASS_CONFIG_PARAMETER_SIGNATURE);
// setDefaultEtbParameters(PASS_CONFIG_PARAMETER_SIGNATURE);
#endif /* EFI_ELECTRONIC_THROTTLE_BODY */
2019-02-27 06:57:03 -08:00
engineConfiguration->tps1_1AdcChannel = EFI_ADC_2; // PA2
2019-02-27 06:57:03 -08:00
engineConfiguration->throttlePedalPositionAdcChannel = EFI_ADC_9; // PB1
2019-02-27 14:54:25 -08:00
engineConfiguration->debugMode = DBG_ELECTRONIC_THROTTLE_PID;
2019-03-02 19:42:11 -08:00
// turning off other PWMs to simplify debugging
engineConfiguration->triggerSimulatorFrequency = 0;
2019-03-03 12:27:49 -08:00
engineConfiguration->stepperEnablePin = GPIO_UNASSIGNED;
CONFIG(idle).stepperStepPin = GPIO_UNASSIGNED;
CONFIG(idle).stepperDirectionPin = GPIO_UNASSIGNED;
engineConfiguration->useStepperIdle = true;
2019-03-02 19:42:11 -08:00
2019-05-04 08:01:05 -07:00
// no analog dividers - all sensors with 3v supply, naked discovery bench setup
engineConfiguration->analogInputDividerCoefficient = 1;
// EFI_ADC_15 = PC5
engineConfiguration->clt.adcChannel = EFI_ADC_15;
set10K_4050K(&engineConfiguration->clt, 10000);
2019-04-21 09:24:31 -07:00
// see also setDefaultEtbBiasCurve
2019-02-27 05:55:56 -08:00
}
2019-04-04 18:34:33 -07:00
2019-12-28 20:22:16 -08:00
#if EFI_UNIT_TEST
void setIssue898(DECLARE_CONFIG_PARAMETER_SIGNATURE) {
engineConfiguration->trigger.type = TT_MAZDA_MIATA_NA;
}
2019-12-28 20:22:16 -08:00
#endif /* EFI_UNIT_TEST */
2019-04-04 18:34:33 -07:00
// TLE8888_BENCH_ENGINE
2019-12-28 20:22:16 -08:00
// todo: remove this? this was used to play with "secret" red boards prior to MRE reality
2019-04-04 18:34:33 -07:00
// set engine_type 59
void setTle8888TestConfiguration(DECLARE_CONFIG_PARAMETER_SIGNATURE) {
2019-04-04 18:34:33 -07:00
engineConfiguration->specs.cylindersCount = 8;
engineConfiguration->specs.firingOrder = FO_1_8_7_2_6_5_4_3;
engineConfiguration->ignitionMode = IM_INDIVIDUAL_COILS;
engineConfiguration->crankingInjectionMode = IM_SEQUENTIAL;
#if defined(STM32_HAS_GPIOG) && STM32_HAS_GPIOG
engineConfiguration->ignitionPins[0] = GPIOG_3;
engineConfiguration->ignitionPins[1] = GPIOG_4;
engineConfiguration->ignitionPins[2] = GPIOG_5;
engineConfiguration->ignitionPins[3] = GPIOG_6;
engineConfiguration->ignitionPins[4] = GPIOG_7;
engineConfiguration->ignitionPins[5] = GPIOG_8;
#endif /* STM32_HAS_GPIOG */
engineConfiguration->ignitionPins[6] = GPIOC_6;
engineConfiguration->ignitionPins[7] = GPIOC_7;
2019-04-04 18:34:33 -07:00
#if (BOARD_TLE8888_COUNT > 0)
2019-04-04 18:34:33 -07:00
engineConfiguration->tle8888spiDevice = SPI_DEVICE_1;
engineConfiguration->tle8888_cs = GPIOD_5;
2019-04-04 18:34:33 -07:00
2019-04-06 04:38:02 -07:00
// PB3 is nicely both SWO and SPI1 SCK so logic analyzer could be used on SWO header
engineConfiguration->spi1mosiPin = GPIOB_5;
engineConfiguration->spi1misoPin = GPIOB_4;
engineConfiguration->spi1sckPin = GPIOB_3; // please note that this pin is also SWO/SWD - Single Wire debug Output
engineConfiguration->is_enabled_spi_1 = true;
2019-04-04 20:03:32 -07:00
engineConfiguration->debugMode = DBG_TLE8888;
2019-04-11 20:21:16 -07:00
engineConfiguration->fuelPumpPin = TLE8888_PIN_20;
#endif /* BOARD_TLE8888_COUNT */
2019-04-12 22:03:12 -07:00
engineConfiguration->throttlePedalPositionAdcChannel = EFI_ADC_9; // PB1 // just any non-empty value for now
2019-04-11 20:21:16 -07:00
// ETB #1 top one - closer to 121 connector
// DIS PF12
// EN PF13
// IN1 PF15
// IN2 PF14
// SF PF11
#if defined(STM32_HAS_GPIOF) && STM32_HAS_GPIOF
#if EFI_FSIO
setFsio(14, GPIOF_13, "1" PASS_CONFIG_PARAMETER_SUFFIX);
2019-08-14 22:59:15 -07:00
#endif /* EFI_FSIO */
CONFIG(etbIo[0].directionPin1) = GPIOF_15;
CONFIG(etbIo[0].directionPin2) = GPIOF_14;
CONFIG(etbIo[0].disablePin) = GPIOF_12;
#endif /* STM32_HAS_GPIOF */
2019-11-29 13:51:51 -08:00
CONFIG(etb_use_two_wires) = true;
engineConfiguration->isHip9011Enabled = false;
2019-04-11 20:21:16 -07:00
// ETB #2
// DIS PE5
// EN PE6
// IN1 PE2
// IN2 PE4
// SF PE3
#if EFI_FSIO
setFsio(15, GPIOE_6, "1" PASS_CONFIG_PARAMETER_SUFFIX);
#endif
CONFIG(etbIo[0].directionPin1) = GPIOE_2;
CONFIG(etbIo[0].directionPin2) = GPIOE_4;
CONFIG(etbIo[0].disablePin) = GPIOE_5;
2019-04-11 20:21:16 -07:00
engineConfiguration->tps1_1AdcChannel = EFI_ADC_3; // PA3
2019-04-24 20:46:49 -07:00
engineConfiguration->throttlePedalPositionAdcChannel = EFI_ADC_7; // PA7
2019-05-05 09:48:04 -07:00
// engineConfiguration->etb.pFactor = 1.07;
// engineConfiguration->etb.iFactor = 0.18;
// engineConfiguration->etb.dFactor = 0.24;
// engineConfiguration->etb.offset = 80;
engineConfiguration->etb.pFactor = 22;
engineConfiguration->etb.iFactor = 0;
engineConfiguration->etb.dFactor = 0;
engineConfiguration->etb.offset = 0;
2019-04-24 20:46:49 -07:00
engineConfiguration->etb_iTermMin = -300;
engineConfiguration->etb_iTermMax = 300;
// VAG test ETB, no divider on red board - direct 3v TPS sensor
// set tps_min 332
engineConfiguration->tpsMin = 332;
// by the way this ETB has default position of ADC=74 which is about 4%
// set tps_max 540
engineConfiguration->tpsMax = 799;
2019-04-04 18:34:33 -07:00
}
2019-08-05 20:00:35 -07:00
/**
2019-12-28 20:22:16 -08:00
* This configuration is used for MRE board Quality Assurance validation
2021-10-24 08:47:20 -07:00
* todo: inline
2019-08-05 20:00:35 -07:00
*/
2021-10-24 08:47:20 -07:00
static void mreBoardOldTest(DECLARE_CONFIG_PARAMETER_SIGNATURE) {
#if (BOARD_TLE8888_COUNT > 0)
engineConfiguration->debugMode = DBG_TLE8888;
engineConfiguration->triggerSimulatorFrequency = HW_CHECK_RPM;
// set cranking_rpm 500
2019-08-09 16:11:15 -07:00
engineConfiguration->cranking.rpm = 100;
// set cranking_dwell 200
engineConfiguration->ignitionDwellForCrankingMs = 200;
// set cranking_fuel 300
engineConfiguration->cranking.baseFuel = 190;
2019-08-09 16:11:15 -07:00
engineConfiguration->injectionMode = IM_SEQUENTIAL;
engineConfiguration->crankingInjectionMode = IM_SEQUENTIAL;
2019-08-05 20:00:35 -07:00
// EFI_ADC_1: "23 - AN temp 2"
// test harness: Red/Green, 2K PD. expected 2.0v
// iat in microrusefi/board_configuration.cpp
// EFI_ADC_2: "24 - AN temp 3"
// test harness: Blue/White, 2K PD. expected 2.0v
// EFI_ADC_10: "27 - AN volt 1"
// test harness: Blue/Red, 3.84K PD / 5.3 PU. expected 1.6v
engineConfiguration->mafAdcChannel = EFI_ADC_10;
// EFI_ADC_14: "32 - AN volt 6"
// test harness: Red/White 3.6K PD / 5.2 PU. expected 1.6v
engineConfiguration->throttlePedalPositionAdcChannel = EFI_ADC_14;
// EFI_ADC_4: "28 - AN volt 10"
// test harness: Red/Yellow
engineConfiguration->afr.hwChannel = EFI_ADC_4;
// EFI_ADC_7: "31 - AN volt 3"
// test harness: White/Red
engineConfiguration->map.sensor.hwChannel = EFI_ADC_7;
//engineConfiguration->baroSensor.hwChannel
//engineConfiguration->oilPressure.hwChannel
//engineConfiguration->fuelLevelSensor
// TPS tps1_1AdcChannel EFI_ADC_13
2019-08-09 16:11:15 -07:00
engineConfiguration->specs.cylindersCount = 10;
engineConfiguration->specs.firingOrder = FO_1_10_9_4_3_6_5_8_7_2;
2019-08-09 20:45:35 -07:00
// red LED #1
engineConfiguration->ignitionPins[1 - 1] = GPIOD_4;
engineConfiguration->ignitionPins[10 - 1] = GPIOD_3;
engineConfiguration->ignitionPins[9 - 1] = GPIOD_6;
engineConfiguration->ignitionPins[4 - 1] = GPIOD_7;
engineConfiguration->ignitionPins[3 - 1] = GPIOD_1;
engineConfiguration->ignitionPins[6 - 1] = GPIOD_2;
engineConfiguration->ignitionPins[1] = GPIO_UNASSIGNED;
engineConfiguration->ignitionPins[4] = GPIO_UNASSIGNED;
engineConfiguration->ignitionPins[6] = GPIO_UNASSIGNED;
engineConfiguration->ignitionPins[7] = GPIO_UNASSIGNED;
engineConfiguration->fuelPumpPin = GPIO_UNASSIGNED;
engineConfiguration->idle.solenoidPin = GPIO_UNASSIGNED;
engineConfiguration->fanPin = GPIO_UNASSIGNED;
2019-10-10 10:32:07 -07:00
// fuel pump is useful to test power on/off scenario
// engineConfiguration->fuelPumpPin = TLE8888_PIN_22;
// LED #1
Tle8888 big update 1 (#1892) * smart gpio: fix tle8888 direct pin mapping for MRE * MRE: use TLE8888 pins instead of MCU gpios that drives TLE8888 * TLE8888: cleanup * TLE8888: do not reset driver private data on WD/undervoltage reset * TLE8888: diagnostic updates * TLE8888 driver: BIG driver rework * TLE8888: check SPI answers for abnormal states Reply with other than requested register can be a sign of: -Power-On-Reset, then OpStat0 will be replyed -WatchDog reset, then FWDStat1 will be replyed -Invalid communication frame, then Diag0 will be replyed Keep tracking last accessed register and check with the next reply. * TLE8888: debug clean-up * TLE8888: implement spi array write This reduce CS inactive state time between two consequent accesses from 8.8 uS to 1.4 uS * TLE8888: fix PP outputs in OD mode * TLE8888: cleanup register definitions * TLE8888: run separate driver thread for each chip instance Calculating poll interval for few chips become more complex, avoid this running thread for each device. * TLE8888: fix cypress and kinetic compilation Both platforms define its own MAX and cause redifination error if common.h is included in driver. * MRE: update mapping.yaml and fix direct pin mapping for TLE8888 * TLE8888: diagnnostic: disable switch off in case of overcurrent For all output, use current limiting instead * TLE8888: check for overvoltage on OUT8..OUT13 * TLE8888: add TODO note about how to recover from failure condition Currently TLE8888 automaticly recovers only from overcurrent and (may be) overtemperature conditions. Short to bat cause output disable (bit in OECONFIG is reset) and needs driver/host intervention. * TLE8888: save few bytes of RAM * TLE8888: Lada Kalina is test mule for IDLE stepper on TLE8888 Don't forget to enable PP mode for TLE8888 outputs 21..24: uncomment line 1087 in tle8888.c * TLE8888: reorder code, cleanup * TLE8888: mode all debug/statisctic to per-chip struct * TLE8888: rework poll interval calculation * MRE: use TLE8888 pins instead of MCU gpios that drives TLE8888 #2
2020-10-23 09:25:30 -07:00
// TLE8888_PIN_22: "34 - GP Out 2"
engineConfiguration->injectionPins[1 - 1] = TLE8888_PIN_22;
// LED #2
// TLE8888_PIN_23: "33 - GP Out 3"
engineConfiguration->injectionPins[10 - 1] = TLE8888_PIN_23;
Tle8888 big update 1 (#1892) * smart gpio: fix tle8888 direct pin mapping for MRE * MRE: use TLE8888 pins instead of MCU gpios that drives TLE8888 * TLE8888: cleanup * TLE8888: do not reset driver private data on WD/undervoltage reset * TLE8888: diagnostic updates * TLE8888 driver: BIG driver rework * TLE8888: check SPI answers for abnormal states Reply with other than requested register can be a sign of: -Power-On-Reset, then OpStat0 will be replyed -WatchDog reset, then FWDStat1 will be replyed -Invalid communication frame, then Diag0 will be replyed Keep tracking last accessed register and check with the next reply. * TLE8888: debug clean-up * TLE8888: implement spi array write This reduce CS inactive state time between two consequent accesses from 8.8 uS to 1.4 uS * TLE8888: fix PP outputs in OD mode * TLE8888: cleanup register definitions * TLE8888: run separate driver thread for each chip instance Calculating poll interval for few chips become more complex, avoid this running thread for each device. * TLE8888: fix cypress and kinetic compilation Both platforms define its own MAX and cause redifination error if common.h is included in driver. * MRE: update mapping.yaml and fix direct pin mapping for TLE8888 * TLE8888: diagnnostic: disable switch off in case of overcurrent For all output, use current limiting instead * TLE8888: check for overvoltage on OUT8..OUT13 * TLE8888: add TODO note about how to recover from failure condition Currently TLE8888 automaticly recovers only from overcurrent and (may be) overtemperature conditions. Short to bat cause output disable (bit in OECONFIG is reset) and needs driver/host intervention. * TLE8888: save few bytes of RAM * TLE8888: Lada Kalina is test mule for IDLE stepper on TLE8888 Don't forget to enable PP mode for TLE8888 outputs 21..24: uncomment line 1087 in tle8888.c * TLE8888: reorder code, cleanup * TLE8888: mode all debug/statisctic to per-chip struct * TLE8888: rework poll interval calculation * MRE: use TLE8888 pins instead of MCU gpios that drives TLE8888 #2
2020-10-23 09:25:30 -07:00
// TLE8888_PIN_1: LED #3 - INJ#2
engineConfiguration->injectionPins[9 - 1] = TLE8888_PIN_1;
Tle8888 big update 1 (#1892) * smart gpio: fix tle8888 direct pin mapping for MRE * MRE: use TLE8888 pins instead of MCU gpios that drives TLE8888 * TLE8888: cleanup * TLE8888: do not reset driver private data on WD/undervoltage reset * TLE8888: diagnostic updates * TLE8888 driver: BIG driver rework * TLE8888: check SPI answers for abnormal states Reply with other than requested register can be a sign of: -Power-On-Reset, then OpStat0 will be replyed -WatchDog reset, then FWDStat1 will be replyed -Invalid communication frame, then Diag0 will be replyed Keep tracking last accessed register and check with the next reply. * TLE8888: debug clean-up * TLE8888: implement spi array write This reduce CS inactive state time between two consequent accesses from 8.8 uS to 1.4 uS * TLE8888: fix PP outputs in OD mode * TLE8888: cleanup register definitions * TLE8888: run separate driver thread for each chip instance Calculating poll interval for few chips become more complex, avoid this running thread for each device. * TLE8888: fix cypress and kinetic compilation Both platforms define its own MAX and cause redifination error if common.h is included in driver. * MRE: update mapping.yaml and fix direct pin mapping for TLE8888 * TLE8888: diagnnostic: disable switch off in case of overcurrent For all output, use current limiting instead * TLE8888: check for overvoltage on OUT8..OUT13 * TLE8888: add TODO note about how to recover from failure condition Currently TLE8888 automaticly recovers only from overcurrent and (may be) overtemperature conditions. Short to bat cause output disable (bit in OECONFIG is reset) and needs driver/host intervention. * TLE8888: save few bytes of RAM * TLE8888: Lada Kalina is test mule for IDLE stepper on TLE8888 Don't forget to enable PP mode for TLE8888 outputs 21..24: uncomment line 1087 in tle8888.c * TLE8888: reorder code, cleanup * TLE8888: mode all debug/statisctic to per-chip struct * TLE8888: rework poll interval calculation * MRE: use TLE8888 pins instead of MCU gpios that drives TLE8888 #2
2020-10-23 09:25:30 -07:00
// TLE8888_PIN_2: LED #4 - INJ#1
engineConfiguration->injectionPins[4 - 1] = TLE8888_PIN_2;
Tle8888 big update 1 (#1892) * smart gpio: fix tle8888 direct pin mapping for MRE * MRE: use TLE8888 pins instead of MCU gpios that drives TLE8888 * TLE8888: cleanup * TLE8888: do not reset driver private data on WD/undervoltage reset * TLE8888: diagnostic updates * TLE8888 driver: BIG driver rework * TLE8888: check SPI answers for abnormal states Reply with other than requested register can be a sign of: -Power-On-Reset, then OpStat0 will be replyed -WatchDog reset, then FWDStat1 will be replyed -Invalid communication frame, then Diag0 will be replyed Keep tracking last accessed register and check with the next reply. * TLE8888: debug clean-up * TLE8888: implement spi array write This reduce CS inactive state time between two consequent accesses from 8.8 uS to 1.4 uS * TLE8888: fix PP outputs in OD mode * TLE8888: cleanup register definitions * TLE8888: run separate driver thread for each chip instance Calculating poll interval for few chips become more complex, avoid this running thread for each device. * TLE8888: fix cypress and kinetic compilation Both platforms define its own MAX and cause redifination error if common.h is included in driver. * MRE: update mapping.yaml and fix direct pin mapping for TLE8888 * TLE8888: diagnnostic: disable switch off in case of overcurrent For all output, use current limiting instead * TLE8888: check for overvoltage on OUT8..OUT13 * TLE8888: add TODO note about how to recover from failure condition Currently TLE8888 automaticly recovers only from overcurrent and (may be) overtemperature conditions. Short to bat cause output disable (bit in OECONFIG is reset) and needs driver/host intervention. * TLE8888: save few bytes of RAM * TLE8888: Lada Kalina is test mule for IDLE stepper on TLE8888 Don't forget to enable PP mode for TLE8888 outputs 21..24: uncomment line 1087 in tle8888.c * TLE8888: reorder code, cleanup * TLE8888: mode all debug/statisctic to per-chip struct * TLE8888: rework poll interval calculation * MRE: use TLE8888 pins instead of MCU gpios that drives TLE8888 #2
2020-10-23 09:25:30 -07:00
// TLE8888_PIN_3: LED #5 - INJ#3
engineConfiguration->injectionPins[3 - 1] = TLE8888_PIN_3;
Tle8888 big update 1 (#1892) * smart gpio: fix tle8888 direct pin mapping for MRE * MRE: use TLE8888 pins instead of MCU gpios that drives TLE8888 * TLE8888: cleanup * TLE8888: do not reset driver private data on WD/undervoltage reset * TLE8888: diagnostic updates * TLE8888 driver: BIG driver rework * TLE8888: check SPI answers for abnormal states Reply with other than requested register can be a sign of: -Power-On-Reset, then OpStat0 will be replyed -WatchDog reset, then FWDStat1 will be replyed -Invalid communication frame, then Diag0 will be replyed Keep tracking last accessed register and check with the next reply. * TLE8888: debug clean-up * TLE8888: implement spi array write This reduce CS inactive state time between two consequent accesses from 8.8 uS to 1.4 uS * TLE8888: fix PP outputs in OD mode * TLE8888: cleanup register definitions * TLE8888: run separate driver thread for each chip instance Calculating poll interval for few chips become more complex, avoid this running thread for each device. * TLE8888: fix cypress and kinetic compilation Both platforms define its own MAX and cause redifination error if common.h is included in driver. * MRE: update mapping.yaml and fix direct pin mapping for TLE8888 * TLE8888: diagnnostic: disable switch off in case of overcurrent For all output, use current limiting instead * TLE8888: check for overvoltage on OUT8..OUT13 * TLE8888: add TODO note about how to recover from failure condition Currently TLE8888 automaticly recovers only from overcurrent and (may be) overtemperature conditions. Short to bat cause output disable (bit in OECONFIG is reset) and needs driver/host intervention. * TLE8888: save few bytes of RAM * TLE8888: Lada Kalina is test mule for IDLE stepper on TLE8888 Don't forget to enable PP mode for TLE8888 outputs 21..24: uncomment line 1087 in tle8888.c * TLE8888: reorder code, cleanup * TLE8888: mode all debug/statisctic to per-chip struct * TLE8888: rework poll interval calculation * MRE: use TLE8888 pins instead of MCU gpios that drives TLE8888 #2
2020-10-23 09:25:30 -07:00
// TLE8888_PIN_4: LED #6 - INJ#4
engineConfiguration->injectionPins[6 - 1] = TLE8888_PIN_4;
// LED #7
// TLE8888_PIN_24: "43 - GP Out 4"
engineConfiguration->injectionPins[5 - 1] = TLE8888_PIN_24;
// LED #8
2019-08-09 20:45:35 -07:00
// TLE8888 half bridges (pushpull, lowside, or high-low) IN12
Tle8888 big update 1 (#1892) * smart gpio: fix tle8888 direct pin mapping for MRE * MRE: use TLE8888 pins instead of MCU gpios that drives TLE8888 * TLE8888: cleanup * TLE8888: do not reset driver private data on WD/undervoltage reset * TLE8888: diagnostic updates * TLE8888 driver: BIG driver rework * TLE8888: check SPI answers for abnormal states Reply with other than requested register can be a sign of: -Power-On-Reset, then OpStat0 will be replyed -WatchDog reset, then FWDStat1 will be replyed -Invalid communication frame, then Diag0 will be replyed Keep tracking last accessed register and check with the next reply. * TLE8888: debug clean-up * TLE8888: implement spi array write This reduce CS inactive state time between two consequent accesses from 8.8 uS to 1.4 uS * TLE8888: fix PP outputs in OD mode * TLE8888: cleanup register definitions * TLE8888: run separate driver thread for each chip instance Calculating poll interval for few chips become more complex, avoid this running thread for each device. * TLE8888: fix cypress and kinetic compilation Both platforms define its own MAX and cause redifination error if common.h is included in driver. * MRE: update mapping.yaml and fix direct pin mapping for TLE8888 * TLE8888: diagnnostic: disable switch off in case of overcurrent For all output, use current limiting instead * TLE8888: check for overvoltage on OUT8..OUT13 * TLE8888: add TODO note about how to recover from failure condition Currently TLE8888 automaticly recovers only from overcurrent and (may be) overtemperature conditions. Short to bat cause output disable (bit in OECONFIG is reset) and needs driver/host intervention. * TLE8888: save few bytes of RAM * TLE8888: Lada Kalina is test mule for IDLE stepper on TLE8888 Don't forget to enable PP mode for TLE8888 outputs 21..24: uncomment line 1087 in tle8888.c * TLE8888: reorder code, cleanup * TLE8888: mode all debug/statisctic to per-chip struct * TLE8888: rework poll interval calculation * MRE: use TLE8888 pins instead of MCU gpios that drives TLE8888 #2
2020-10-23 09:25:30 -07:00
// TLE8888_PIN_21: "35 - GP Out 1"
engineConfiguration->injectionPins[8 - 1] = TLE8888_PIN_21;
2019-08-09 16:11:15 -07:00
// LED #9
// TLE8888 high current low side: IN10
Tle8888 big update 1 (#1892) * smart gpio: fix tle8888 direct pin mapping for MRE * MRE: use TLE8888 pins instead of MCU gpios that drives TLE8888 * TLE8888: cleanup * TLE8888: do not reset driver private data on WD/undervoltage reset * TLE8888: diagnostic updates * TLE8888 driver: BIG driver rework * TLE8888: check SPI answers for abnormal states Reply with other than requested register can be a sign of: -Power-On-Reset, then OpStat0 will be replyed -WatchDog reset, then FWDStat1 will be replyed -Invalid communication frame, then Diag0 will be replyed Keep tracking last accessed register and check with the next reply. * TLE8888: debug clean-up * TLE8888: implement spi array write This reduce CS inactive state time between two consequent accesses from 8.8 uS to 1.4 uS * TLE8888: fix PP outputs in OD mode * TLE8888: cleanup register definitions * TLE8888: run separate driver thread for each chip instance Calculating poll interval for few chips become more complex, avoid this running thread for each device. * TLE8888: fix cypress and kinetic compilation Both platforms define its own MAX and cause redifination error if common.h is included in driver. * MRE: update mapping.yaml and fix direct pin mapping for TLE8888 * TLE8888: diagnnostic: disable switch off in case of overcurrent For all output, use current limiting instead * TLE8888: check for overvoltage on OUT8..OUT13 * TLE8888: add TODO note about how to recover from failure condition Currently TLE8888 automaticly recovers only from overcurrent and (may be) overtemperature conditions. Short to bat cause output disable (bit in OECONFIG is reset) and needs driver/host intervention. * TLE8888: save few bytes of RAM * TLE8888: Lada Kalina is test mule for IDLE stepper on TLE8888 Don't forget to enable PP mode for TLE8888 outputs 21..24: uncomment line 1087 in tle8888.c * TLE8888: reorder code, cleanup * TLE8888: mode all debug/statisctic to per-chip struct * TLE8888: rework poll interval calculation * MRE: use TLE8888 pins instead of MCU gpios that drives TLE8888 #2
2020-10-23 09:25:30 -07:00
// TLE8888_PIN_6: "7 - Lowside 1"
engineConfiguration->injectionPins[7 - 1] = TLE8888_PIN_6;
2019-08-05 20:00:35 -07:00
// LED #10
// TLE8888 high current low side: VVT2 IN9 / OUT5
Tle8888 big update 1 (#1892) * smart gpio: fix tle8888 direct pin mapping for MRE * MRE: use TLE8888 pins instead of MCU gpios that drives TLE8888 * TLE8888: cleanup * TLE8888: do not reset driver private data on WD/undervoltage reset * TLE8888: diagnostic updates * TLE8888 driver: BIG driver rework * TLE8888: check SPI answers for abnormal states Reply with other than requested register can be a sign of: -Power-On-Reset, then OpStat0 will be replyed -WatchDog reset, then FWDStat1 will be replyed -Invalid communication frame, then Diag0 will be replyed Keep tracking last accessed register and check with the next reply. * TLE8888: debug clean-up * TLE8888: implement spi array write This reduce CS inactive state time between two consequent accesses from 8.8 uS to 1.4 uS * TLE8888: fix PP outputs in OD mode * TLE8888: cleanup register definitions * TLE8888: run separate driver thread for each chip instance Calculating poll interval for few chips become more complex, avoid this running thread for each device. * TLE8888: fix cypress and kinetic compilation Both platforms define its own MAX and cause redifination error if common.h is included in driver. * MRE: update mapping.yaml and fix direct pin mapping for TLE8888 * TLE8888: diagnnostic: disable switch off in case of overcurrent For all output, use current limiting instead * TLE8888: check for overvoltage on OUT8..OUT13 * TLE8888: add TODO note about how to recover from failure condition Currently TLE8888 automaticly recovers only from overcurrent and (may be) overtemperature conditions. Short to bat cause output disable (bit in OECONFIG is reset) and needs driver/host intervention. * TLE8888: save few bytes of RAM * TLE8888: Lada Kalina is test mule for IDLE stepper on TLE8888 Don't forget to enable PP mode for TLE8888 outputs 21..24: uncomment line 1087 in tle8888.c * TLE8888: reorder code, cleanup * TLE8888: mode all debug/statisctic to per-chip struct * TLE8888: rework poll interval calculation * MRE: use TLE8888 pins instead of MCU gpios that drives TLE8888 #2
2020-10-23 09:25:30 -07:00
// TLE8888_PIN_5: "3 - Lowside 2"
engineConfiguration->injectionPins[2 - 1] = TLE8888_PIN_5;
#endif /* BOARD_TLE8888_COUNT */
2019-08-05 20:00:35 -07:00
}
2020-02-25 18:35:21 -08:00
2020-12-25 21:57:23 -08:00
#if HW_PROTEUS
2020-12-26 07:41:33 -08:00
/**
* PROTEUS_QC_TEST_BOARD
* set engine_type 42
*/
2020-12-25 21:57:23 -08:00
void proteusBoardTest(DECLARE_CONFIG_PARAMETER_SIGNATURE) {
engineConfiguration->specs.cylindersCount = 12;
engineConfiguration->specs.firingOrder = FO_1_2_3_4_5_6_7_8_9_10_11_12;
2020-12-26 15:59:30 -08:00
engineConfiguration->triggerSimulatorFrequency = 600;
2020-12-25 21:57:23 -08:00
2020-12-26 10:41:33 -08:00
engineConfiguration->cranking.rpm = 100;
engineConfiguration->injectionMode = IM_SEQUENTIAL;
engineConfiguration->crankingInjectionMode = IM_SEQUENTIAL;
engineConfiguration->mainRelayPin = GPIO_UNASSIGNED;
CONFIG(fanPin) = GPIO_UNASSIGNED;
CONFIG(fuelPumpPin) = GPIO_UNASSIGNED;
#if EFI_PROD_CODE
engineConfiguration->injectionPins[0] = PROTEUS_LS_1;
engineConfiguration->injectionPins[1] = PROTEUS_LS_2;
engineConfiguration->injectionPins[2] = PROTEUS_LS_3;
engineConfiguration->injectionPins[3] = PROTEUS_LS_4;
2020-12-26 07:41:33 -08:00
engineConfiguration->injectionPins[4] = GPIOG_12;// "Lowside 5"
engineConfiguration->injectionPins[5] = GPIOG_13;// "Lowside 6"
2020-12-26 10:41:33 -08:00
engineConfiguration->injectionPins[6] = GPIOB_5;// "Lowside 9"
2020-12-26 07:41:33 -08:00
engineConfiguration->injectionPins[7] = GPIOB_4;// "Lowside 8"
2020-12-26 10:41:33 -08:00
engineConfiguration->injectionPins[8] = GPIOB_7;// "Lowside 11"
engineConfiguration->injectionPins[9] = PROTEUS_LS_10;
2020-12-26 15:59:30 -08:00
engineConfiguration->injectionPins[10] = GPIOB_8;// "Lowside 12"
2020-12-26 10:41:33 -08:00
engineConfiguration->injectionPins[11] = GPIOB_9;// "Lowside 13" # pin 10/black35
2020-12-26 07:41:33 -08:00
2021-10-28 19:11:26 -07:00
engineConfiguration->ignitionPins[0] = PROTEUS_IGN_1;
engineConfiguration->ignitionPins[1] = PROTEUS_IGN_2;
engineConfiguration->ignitionPins[2] = PROTEUS_IGN_4;
engineConfiguration->ignitionPins[3] = PROTEUS_IGN_5;
engineConfiguration->ignitionPins[4] = PROTEUS_IGN_6;
engineConfiguration->ignitionPins[5] = PROTEUS_IGN_7;
2020-12-26 15:59:30 -08:00
engineConfiguration->ignitionPins[6] = GPIOD_15;// "Highside 3" # pin 13/black35
2021-10-28 19:11:26 -07:00
engineConfiguration->ignitionPins[7] = PROTEUS_IGN_3;
engineConfiguration->ignitionPins[8] = PROTEUS_IGN_9;
engineConfiguration->ignitionPins[9] = PROTEUS_IGN_8;
engineConfiguration->ignitionPins[10] = PROTEUS_IGN_1;
engineConfiguration->ignitionPins[11] = PROTEUS_IGN_12;
2020-12-26 07:41:33 -08:00
2020-12-26 15:59:30 -08:00
engineConfiguration->fsioOutputPins[0] = GPIOE_2;// "Lowside 16" # pin 23/black35
engineConfiguration->fsioOutputPins[1] = GPIOG_14;// "Lowside 7"
engineConfiguration->fsioOutputPins[2] = GPIOE_0;// "Lowside 14" # pin 11/black35
engineConfiguration->fsioOutputPins[3] = GPIOE_1;// "Lowside 15" # pin 12/black35
2020-12-26 18:25:19 -08:00
engineConfiguration->fsioOutputPins[4] = GPIOG_3;// "Ign 11"
2020-12-26 10:41:33 -08:00
engineConfiguration->fsioOutputPins[5] = GPIOA_8;// "Highside 2" # pin 1/black35
2020-12-26 18:25:19 -08:00
engineConfiguration->fsioOutputPins[6] = GPIOD_14;// "Highside 4" # pin 14/black35
2020-12-26 15:59:30 -08:00
engineConfiguration->fsioOutputPins[7] = GPIOG_4;// "Ign 10"
2020-12-26 10:41:33 -08:00
#endif // EFI_PROD_CODE
2020-12-26 07:41:33 -08:00
2020-12-25 21:57:23 -08:00
setProteusHitachiEtbDefaults(PASS_CONFIG_PARAMETER_SIGNATURE);
}
#endif // HW_PROTEUS
2020-08-29 11:29:34 -07:00
void mreBCM(DECLARE_CONFIG_PARAMETER_SIGNATURE) {
for (int i = 0; i < MAX_CYLINDER_COUNT;i++) {
engineConfiguration->ignitionPins[i] = GPIO_UNASSIGNED;
engineConfiguration->injectionPins[i] = GPIO_UNASSIGNED;
}
engineConfiguration->fanPin = GPIO_UNASSIGNED;
engineConfiguration->consumeObdSensors = true;
engineConfiguration->fsio_setting[0] = 1500;
// simple warning light as default configuration
// set_fsio_expression 1 "rpm > fsio_setting(1)"
setFsio(0, GPIO_UNASSIGNED, RPM_ABOVE_USER_SETTING_1 PASS_CONFIG_PARAMETER_SUFFIX);
engineConfiguration->fsio_setting[2] = 1500;
setFsio(2, GPIO_UNASSIGNED, RPM_BELOW_USER_SETTING_3 PASS_CONFIG_PARAMETER_SUFFIX);
#if (BOARD_TLE8888_COUNT > 0)
Tle8888 big update 1 (#1892) * smart gpio: fix tle8888 direct pin mapping for MRE * MRE: use TLE8888 pins instead of MCU gpios that drives TLE8888 * TLE8888: cleanup * TLE8888: do not reset driver private data on WD/undervoltage reset * TLE8888: diagnostic updates * TLE8888 driver: BIG driver rework * TLE8888: check SPI answers for abnormal states Reply with other than requested register can be a sign of: -Power-On-Reset, then OpStat0 will be replyed -WatchDog reset, then FWDStat1 will be replyed -Invalid communication frame, then Diag0 will be replyed Keep tracking last accessed register and check with the next reply. * TLE8888: debug clean-up * TLE8888: implement spi array write This reduce CS inactive state time between two consequent accesses from 8.8 uS to 1.4 uS * TLE8888: fix PP outputs in OD mode * TLE8888: cleanup register definitions * TLE8888: run separate driver thread for each chip instance Calculating poll interval for few chips become more complex, avoid this running thread for each device. * TLE8888: fix cypress and kinetic compilation Both platforms define its own MAX and cause redifination error if common.h is included in driver. * MRE: update mapping.yaml and fix direct pin mapping for TLE8888 * TLE8888: diagnnostic: disable switch off in case of overcurrent For all output, use current limiting instead * TLE8888: check for overvoltage on OUT8..OUT13 * TLE8888: add TODO note about how to recover from failure condition Currently TLE8888 automaticly recovers only from overcurrent and (may be) overtemperature conditions. Short to bat cause output disable (bit in OECONFIG is reset) and needs driver/host intervention. * TLE8888: save few bytes of RAM * TLE8888: Lada Kalina is test mule for IDLE stepper on TLE8888 Don't forget to enable PP mode for TLE8888 outputs 21..24: uncomment line 1087 in tle8888.c * TLE8888: reorder code, cleanup * TLE8888: mode all debug/statisctic to per-chip struct * TLE8888: rework poll interval calculation * MRE: use TLE8888 pins instead of MCU gpios that drives TLE8888 #2
2020-10-23 09:25:30 -07:00
engineConfiguration->fsioOutputPins[0] = TLE8888_PIN_1; // "37 - Injector 1"
engineConfiguration->fsioOutputPins[1] = TLE8888_PIN_2; // "38 - Injector 2"
engineConfiguration->fsioOutputPins[2] = TLE8888_PIN_3; // "41 - Injector 3"
engineConfiguration->fsioOutputPins[3] = TLE8888_PIN_4; // "42 - Injector 4"
// engineConfiguration->fsioOutputPins[4] = TLE8888_PIN_5;
// engineConfiguration->fsioOutputPins[5] = TLE8888_PIN_6;
// engineConfiguration->fsioOutputPins[6] = TLE8888_PIN_21;
engineConfiguration->fsioOutputPins[7] = TLE8888_PIN_22; // "34 - GP Out 2"
engineConfiguration->fsioOutputPins[8] = TLE8888_PIN_23; // "33 - GP Out 3"
engineConfiguration->fsioOutputPins[9] = TLE8888_PIN_24; // "43 - GP Out 4"
#endif /* BOARD_TLE8888_COUNT */
2020-08-29 11:29:34 -07:00
}
2021-10-27 16:54:45 -07:00
void mreSecondaryCan(DECLARE_CONFIG_PARAMETER_SIGNATURE) {
engineConfiguration->tps1_1AdcChannel = EFI_ADC_NONE;
engineConfiguration->tps2_1AdcChannel = EFI_ADC_NONE;
engineConfiguration->clt.adcChannel = EFI_ADC_NONE;
engineConfiguration->iat.adcChannel = EFI_ADC_NONE;
engineConfiguration->map.sensor.hwChannel = EFI_ADC_NONE;
engineConfiguration->auxAnalogInputs[0] = MRE_IN_TPS;
engineConfiguration->auxAnalogInputs[1] = MRE_IN_MAP;
engineConfiguration->auxAnalogInputs[2] = MRE_IN_CLT;
engineConfiguration->auxAnalogInputs[3] = MRE_IN_IAT;
// engineConfiguration->auxAnalogInputs[0] =
// EFI_ADC_14: "32 - AN volt 6"
// engineConfiguration->afr.hwChannel = EFI_ADC_14;
2021-11-08 14:31:17 -08:00
strncpy(config->luaScript, R"(
txPayload = {}
function onTick()
auxV = getAuxAnalog(0)
print('Hello analog ' .. auxV )
-- first byte: integer part, would be autoboxed to int
txPayload[1] = auxV
-- second byte: fractional part, would be autoboxed to int, overflow would be ignored
txPayload[2] = auxV * 256;
auxV = getAuxAnalog(1)
print('Hello analog ' .. auxV )
txPayload[3] = auxV
txPayload[4] = auxV * 256;
auxV = getAuxAnalog(2)
print('Hello analog ' .. auxV )
txPayload[5] = auxV
txPayload[6] = auxV * 256;
txCan(1, 0x600, 1, txPayload)
end
)", efi::size(config->luaScript));
2021-10-27 16:54:45 -07:00
}
2020-05-21 18:45:01 -07:00
/**
* MRE_BOARD_NEW_TEST
* set engine_type 31
*/
void mreBoardNewTest(DECLARE_CONFIG_PARAMETER_SIGNATURE) {
mreBoardOldTest(PASS_CONFIG_PARAMETER_SIGNATURE);
engineConfiguration->specs.cylindersCount = 12;
engineConfiguration->specs.firingOrder = FO_1_2_3_4_5_6_7_8_9_10_11_12;
#if (BOARD_TLE8888_COUNT > 0)
2020-05-23 07:50:32 -07:00
engineConfiguration->ignitionPins[1 - 1] = GPIOD_6;
engineConfiguration->ignitionPins[2 - 1] = GPIOD_7;
engineConfiguration->ignitionPins[3 - 1] = GPIOD_1;
engineConfiguration->ignitionPins[4 - 1] = GPIOD_2;
engineConfiguration->ignitionPins[5 - 1] = GPIOD_3;
engineConfiguration->ignitionPins[6 - 1] = GPIOD_4;
engineConfiguration->ignitionPins[7 - 1] = TLE8888_PIN_11;
engineConfiguration->ignitionPins[8 - 1] = TLE8888_PIN_12;
2020-08-31 14:15:04 -07:00
// LED #8
// TLE8888 half bridges (pushpull, lowside, or high-low) IN12
Tle8888 big update 1 (#1892) * smart gpio: fix tle8888 direct pin mapping for MRE * MRE: use TLE8888 pins instead of MCU gpios that drives TLE8888 * TLE8888: cleanup * TLE8888: do not reset driver private data on WD/undervoltage reset * TLE8888: diagnostic updates * TLE8888 driver: BIG driver rework * TLE8888: check SPI answers for abnormal states Reply with other than requested register can be a sign of: -Power-On-Reset, then OpStat0 will be replyed -WatchDog reset, then FWDStat1 will be replyed -Invalid communication frame, then Diag0 will be replyed Keep tracking last accessed register and check with the next reply. * TLE8888: debug clean-up * TLE8888: implement spi array write This reduce CS inactive state time between two consequent accesses from 8.8 uS to 1.4 uS * TLE8888: fix PP outputs in OD mode * TLE8888: cleanup register definitions * TLE8888: run separate driver thread for each chip instance Calculating poll interval for few chips become more complex, avoid this running thread for each device. * TLE8888: fix cypress and kinetic compilation Both platforms define its own MAX and cause redifination error if common.h is included in driver. * MRE: update mapping.yaml and fix direct pin mapping for TLE8888 * TLE8888: diagnnostic: disable switch off in case of overcurrent For all output, use current limiting instead * TLE8888: check for overvoltage on OUT8..OUT13 * TLE8888: add TODO note about how to recover from failure condition Currently TLE8888 automaticly recovers only from overcurrent and (may be) overtemperature conditions. Short to bat cause output disable (bit in OECONFIG is reset) and needs driver/host intervention. * TLE8888: save few bytes of RAM * TLE8888: Lada Kalina is test mule for IDLE stepper on TLE8888 Don't forget to enable PP mode for TLE8888 outputs 21..24: uncomment line 1087 in tle8888.c * TLE8888: reorder code, cleanup * TLE8888: mode all debug/statisctic to per-chip struct * TLE8888: rework poll interval calculation * MRE: use TLE8888 pins instead of MCU gpios that drives TLE8888 #2
2020-10-23 09:25:30 -07:00
// TLE8888_PIN_21: "35 - GP Out 1"
engineConfiguration->ignitionPins[9 - 1] = TLE8888_PIN_21;
2020-08-31 14:15:04 -07:00
// LED #1
Tle8888 big update 1 (#1892) * smart gpio: fix tle8888 direct pin mapping for MRE * MRE: use TLE8888 pins instead of MCU gpios that drives TLE8888 * TLE8888: cleanup * TLE8888: do not reset driver private data on WD/undervoltage reset * TLE8888: diagnostic updates * TLE8888 driver: BIG driver rework * TLE8888: check SPI answers for abnormal states Reply with other than requested register can be a sign of: -Power-On-Reset, then OpStat0 will be replyed -WatchDog reset, then FWDStat1 will be replyed -Invalid communication frame, then Diag0 will be replyed Keep tracking last accessed register and check with the next reply. * TLE8888: debug clean-up * TLE8888: implement spi array write This reduce CS inactive state time between two consequent accesses from 8.8 uS to 1.4 uS * TLE8888: fix PP outputs in OD mode * TLE8888: cleanup register definitions * TLE8888: run separate driver thread for each chip instance Calculating poll interval for few chips become more complex, avoid this running thread for each device. * TLE8888: fix cypress and kinetic compilation Both platforms define its own MAX and cause redifination error if common.h is included in driver. * MRE: update mapping.yaml and fix direct pin mapping for TLE8888 * TLE8888: diagnnostic: disable switch off in case of overcurrent For all output, use current limiting instead * TLE8888: check for overvoltage on OUT8..OUT13 * TLE8888: add TODO note about how to recover from failure condition Currently TLE8888 automaticly recovers only from overcurrent and (may be) overtemperature conditions. Short to bat cause output disable (bit in OECONFIG is reset) and needs driver/host intervention. * TLE8888: save few bytes of RAM * TLE8888: Lada Kalina is test mule for IDLE stepper on TLE8888 Don't forget to enable PP mode for TLE8888 outputs 21..24: uncomment line 1087 in tle8888.c * TLE8888: reorder code, cleanup * TLE8888: mode all debug/statisctic to per-chip struct * TLE8888: rework poll interval calculation * MRE: use TLE8888 pins instead of MCU gpios that drives TLE8888 #2
2020-10-23 09:25:30 -07:00
// TLE8888_PIN_22: "34 - GP Out 2"
engineConfiguration->ignitionPins[10- 1] = TLE8888_PIN_22;
2020-08-31 14:15:04 -07:00
// LED #2
// TLE8888_PIN_23: "33 - GP Out 3"
engineConfiguration->ignitionPins[11 - 1] = TLE8888_PIN_23;
// LED #7
// TLE8888_PIN_24: "43 - GP Out 4"
engineConfiguration->ignitionPins[12 - 1] = TLE8888_PIN_24;
engineConfiguration->afr.hwChannel = EFI_ADC_6;
2020-08-31 11:26:34 -07:00
engineConfiguration->throttlePedalPositionAdcChannel = EFI_ADC_NONE;
2020-08-31 10:44:58 -07:00
2020-05-21 18:45:01 -07:00
// TLE8888 high current low side: IN10
Tle8888 big update 1 (#1892) * smart gpio: fix tle8888 direct pin mapping for MRE * MRE: use TLE8888 pins instead of MCU gpios that drives TLE8888 * TLE8888: cleanup * TLE8888: do not reset driver private data on WD/undervoltage reset * TLE8888: diagnostic updates * TLE8888 driver: BIG driver rework * TLE8888: check SPI answers for abnormal states Reply with other than requested register can be a sign of: -Power-On-Reset, then OpStat0 will be replyed -WatchDog reset, then FWDStat1 will be replyed -Invalid communication frame, then Diag0 will be replyed Keep tracking last accessed register and check with the next reply. * TLE8888: debug clean-up * TLE8888: implement spi array write This reduce CS inactive state time between two consequent accesses from 8.8 uS to 1.4 uS * TLE8888: fix PP outputs in OD mode * TLE8888: cleanup register definitions * TLE8888: run separate driver thread for each chip instance Calculating poll interval for few chips become more complex, avoid this running thread for each device. * TLE8888: fix cypress and kinetic compilation Both platforms define its own MAX and cause redifination error if common.h is included in driver. * MRE: update mapping.yaml and fix direct pin mapping for TLE8888 * TLE8888: diagnnostic: disable switch off in case of overcurrent For all output, use current limiting instead * TLE8888: check for overvoltage on OUT8..OUT13 * TLE8888: add TODO note about how to recover from failure condition Currently TLE8888 automaticly recovers only from overcurrent and (may be) overtemperature conditions. Short to bat cause output disable (bit in OECONFIG is reset) and needs driver/host intervention. * TLE8888: save few bytes of RAM * TLE8888: Lada Kalina is test mule for IDLE stepper on TLE8888 Don't forget to enable PP mode for TLE8888 outputs 21..24: uncomment line 1087 in tle8888.c * TLE8888: reorder code, cleanup * TLE8888: mode all debug/statisctic to per-chip struct * TLE8888: rework poll interval calculation * MRE: use TLE8888 pins instead of MCU gpios that drives TLE8888 #2
2020-10-23 09:25:30 -07:00
// TLE8888_PIN_6: "7 - Lowside 1"
engineConfiguration->injectionPins[1 - 1] = TLE8888_PIN_6;
2020-05-21 18:45:01 -07:00
// TLE8888 high current low side: VVT2 IN9 / OUT5
Tle8888 big update 1 (#1892) * smart gpio: fix tle8888 direct pin mapping for MRE * MRE: use TLE8888 pins instead of MCU gpios that drives TLE8888 * TLE8888: cleanup * TLE8888: do not reset driver private data on WD/undervoltage reset * TLE8888: diagnostic updates * TLE8888 driver: BIG driver rework * TLE8888: check SPI answers for abnormal states Reply with other than requested register can be a sign of: -Power-On-Reset, then OpStat0 will be replyed -WatchDog reset, then FWDStat1 will be replyed -Invalid communication frame, then Diag0 will be replyed Keep tracking last accessed register and check with the next reply. * TLE8888: debug clean-up * TLE8888: implement spi array write This reduce CS inactive state time between two consequent accesses from 8.8 uS to 1.4 uS * TLE8888: fix PP outputs in OD mode * TLE8888: cleanup register definitions * TLE8888: run separate driver thread for each chip instance Calculating poll interval for few chips become more complex, avoid this running thread for each device. * TLE8888: fix cypress and kinetic compilation Both platforms define its own MAX and cause redifination error if common.h is included in driver. * MRE: update mapping.yaml and fix direct pin mapping for TLE8888 * TLE8888: diagnnostic: disable switch off in case of overcurrent For all output, use current limiting instead * TLE8888: check for overvoltage on OUT8..OUT13 * TLE8888: add TODO note about how to recover from failure condition Currently TLE8888 automaticly recovers only from overcurrent and (may be) overtemperature conditions. Short to bat cause output disable (bit in OECONFIG is reset) and needs driver/host intervention. * TLE8888: save few bytes of RAM * TLE8888: Lada Kalina is test mule for IDLE stepper on TLE8888 Don't forget to enable PP mode for TLE8888 outputs 21..24: uncomment line 1087 in tle8888.c * TLE8888: reorder code, cleanup * TLE8888: mode all debug/statisctic to per-chip struct * TLE8888: rework poll interval calculation * MRE: use TLE8888 pins instead of MCU gpios that drives TLE8888 #2
2020-10-23 09:25:30 -07:00
// TLE8888_PIN_5: "3 - Lowside 2"
engineConfiguration->injectionPins[2 - 1] = TLE8888_PIN_5;
2020-05-21 18:45:01 -07:00
Tle8888 big update 1 (#1892) * smart gpio: fix tle8888 direct pin mapping for MRE * MRE: use TLE8888 pins instead of MCU gpios that drives TLE8888 * TLE8888: cleanup * TLE8888: do not reset driver private data on WD/undervoltage reset * TLE8888: diagnostic updates * TLE8888 driver: BIG driver rework * TLE8888: check SPI answers for abnormal states Reply with other than requested register can be a sign of: -Power-On-Reset, then OpStat0 will be replyed -WatchDog reset, then FWDStat1 will be replyed -Invalid communication frame, then Diag0 will be replyed Keep tracking last accessed register and check with the next reply. * TLE8888: debug clean-up * TLE8888: implement spi array write This reduce CS inactive state time between two consequent accesses from 8.8 uS to 1.4 uS * TLE8888: fix PP outputs in OD mode * TLE8888: cleanup register definitions * TLE8888: run separate driver thread for each chip instance Calculating poll interval for few chips become more complex, avoid this running thread for each device. * TLE8888: fix cypress and kinetic compilation Both platforms define its own MAX and cause redifination error if common.h is included in driver. * MRE: update mapping.yaml and fix direct pin mapping for TLE8888 * TLE8888: diagnnostic: disable switch off in case of overcurrent For all output, use current limiting instead * TLE8888: check for overvoltage on OUT8..OUT13 * TLE8888: add TODO note about how to recover from failure condition Currently TLE8888 automaticly recovers only from overcurrent and (may be) overtemperature conditions. Short to bat cause output disable (bit in OECONFIG is reset) and needs driver/host intervention. * TLE8888: save few bytes of RAM * TLE8888: Lada Kalina is test mule for IDLE stepper on TLE8888 Don't forget to enable PP mode for TLE8888 outputs 21..24: uncomment line 1087 in tle8888.c * TLE8888: reorder code, cleanup * TLE8888: mode all debug/statisctic to per-chip struct * TLE8888: rework poll interval calculation * MRE: use TLE8888 pins instead of MCU gpios that drives TLE8888 #2
2020-10-23 09:25:30 -07:00
// TLE8888_PIN_4: INJ#4
engineConfiguration->injectionPins[3 - 1] = TLE8888_PIN_4;
// TLE8888_PIN_3: INJ#3
engineConfiguration->injectionPins[4 - 1] = TLE8888_PIN_3;
// TLE8888_PIN_2: INJ#2
engineConfiguration->injectionPins[5 - 1] = TLE8888_PIN_2;
// TLE8888_PIN_1: LED #3 - INJ#1
engineConfiguration->injectionPins[6 - 1] = TLE8888_PIN_1;
2020-05-21 18:45:01 -07:00
2020-08-31 14:15:04 -07:00
engineConfiguration->injectionPins[7 - 1] = GPIOA_4; // AV10
engineConfiguration->injectionPins[8 - 1] = GPIOB_1; // AV9
engineConfiguration->injectionPins[9 - 1] = GPIOB_0; // AV8
engineConfiguration->injectionPins[10 - 1] = GPIOC_4; // AV6
2020-05-23 07:50:32 -07:00
2020-08-31 14:15:04 -07:00
engineConfiguration->injectionPins[11- 1] = TLE8888_PIN_13;
2020-05-23 07:50:32 -07:00
2020-08-31 14:15:04 -07:00
engineConfiguration->injectionPins[12- 1] = TLE8888_PIN_10;
2020-05-21 18:45:01 -07:00
#endif /* BOARD_TLE8888_COUNT */
}
2020-10-12 21:35:04 -07:00
void setBoschHDEV_5_injectors(DECLARE_CONFIG_PARAMETER_SIGNATURE) {
// This is the configuration for bosch HDEV 5 injectors
2020-11-21 22:14:34 -08:00
// all times in microseconds/us
2020-10-12 21:35:04 -07:00
CONFIG(mc33_hvolt) = 65;
CONFIG(mc33_i_boost) = 13000;
CONFIG(mc33_i_peak) = 9400;
CONFIG(mc33_i_hold) = 3700;
CONFIG(mc33_t_max_boost) = 470;
CONFIG(mc33_t_peak_off) = 10;
CONFIG(mc33_t_peak_tot) = 700;
CONFIG(mc33_t_bypass) = 15;
CONFIG(mc33_t_hold_off) = 60;
CONFIG(mc33_t_hold_tot) = 10000;
}
2021-09-25 23:21:21 -07:00
/**
* set engine_type 108
*/
void setVrThresholdTest(DECLARE_CONFIG_PARAMETER_SIGNATURE) {
2021-09-26 00:01:25 -07:00
engineConfiguration->trigger.type = TT_HONDA_1_24;
2021-09-25 23:21:21 -07:00
setHellenDefaultVrThresholds(PASS_CONFIG_PARAMETER_SIGNATURE);
engineConfiguration->vrThreshold[0].pin = GPIOB_4;
2021-10-02 12:18:45 -07:00
engineConfiguration->triggerInputPins[0] = GPIOA_5;
engineConfiguration->triggerInputPins[1] = GPIOC_6;
2021-09-25 23:21:21 -07:00
}
2021-07-21 16:55:14 -07:00
/**
* set engine_type 107
*/
void setRotary(DECLARE_CONFIG_PARAMETER_SIGNATURE) {
engineConfiguration->specs.cylindersCount = 2;
engineConfiguration->specs.firingOrder = FO_1_2;
engineConfiguration->trigger.type = TT_36_2_2_2;
setOperationMode(engineConfiguration, TWO_STROKE);
strcpy(CONFIG(engineMake), ENGINE_MAKE_MAZDA);
strcpy(CONFIG(engineCode), "13B");
strcpy(CONFIG(vehicleName), "test");
engineConfiguration->ignitionMode = IM_INDIVIDUAL_COILS;
engineConfiguration->injectionPins[2] = GPIO_UNASSIGNED; // injector in default pinout
engineConfiguration->injectionPins[3] = GPIO_UNASSIGNED;
engineConfiguration->enableTrailingSparks = true;
engineConfiguration->trailingCoilPins[0] = GPIOC_9;
engineConfiguration->trailingCoilPins[1] = GPIOE_10;
}
2020-05-21 18:45:01 -07:00
2020-02-25 19:38:08 -08:00
/**
* set engine_type 103
*/
2020-02-25 18:35:21 -08:00
void setTest33816EngineConfiguration(DECLARE_CONFIG_PARAMETER_SIGNATURE) {
2020-02-25 19:38:08 -08:00
// grey
// default spi3mosiPin PB5
// white
// default spi3misoPin PB4
// violet
// default spi3sckPin PB3
2020-04-14 16:23:53 -07:00
CONFIG(triggerSimulatorPins[0]) = GPIO_UNASSIGNED;
2020-04-14 16:36:25 -07:00
CONFIG(triggerSimulatorPins[1]) = GPIO_UNASSIGNED;
CONFIG(triggerSimulatorPins[2]) = GPIO_UNASSIGNED;
2020-04-14 16:23:53 -07:00
2020-04-15 13:20:18 -07:00
engineConfiguration->injectionPins[0] = GPIOB_9; // #1
engineConfiguration->injectionPins[1] = GPIOE_2; // #2
engineConfiguration->injectionPins[2] = GPIOB_8; // #3
engineConfiguration->injectionPins[3] = GPIOB_7; // #4
2020-02-25 19:38:08 -08:00
// blue
2020-02-25 18:35:21 -08:00
CONFIG(mc33816_cs) = GPIOD_7;
2020-02-25 19:38:08 -08:00
// green
2020-04-14 16:23:53 -07:00
CONFIG(mc33816_rstb) = GPIOD_4;
2020-02-25 19:38:08 -08:00
// yellow
2020-02-25 18:35:21 -08:00
CONFIG(mc33816_driven) = GPIOD_6;
2020-04-13 16:01:22 -07:00
CONFIG(mc33816_flag0) = GPIOD_3;
2020-02-25 19:38:08 -08:00
// enable_spi 3
CONFIG(is_enabled_spi_3) = true;
// Wire up spi3
engineConfiguration->spi3mosiPin = GPIOB_5;
engineConfiguration->spi3misoPin = GPIOB_4;
engineConfiguration->spi3sckPin = GPIOB_3;
2020-02-25 18:35:21 -08:00
CONFIG(isSdCardEnabled) = false;
CONFIG(mc33816spiDevice) = SPI_DEVICE_3;
2020-10-12 21:35:04 -07:00
setBoschHDEV_5_injectors(PASS_CONFIG_PARAMETER_SIGNATURE);
2020-02-25 18:35:21 -08:00
}
void setHellen72etb(DECLARE_CONFIG_PARAMETER_SIGNATURE) {
CONFIG(etbIo[0].directionPin1) = GPIOC_6;
CONFIG(etbIo[0].directionPin2) = GPIOC_7;
engineConfiguration->etb_use_two_wires = true;
}
2021-09-17 18:23:54 -07:00
void setHellenDefaultVrThresholds(DECLARE_CONFIG_PARAMETER_SIGNATURE) {
for (int i = 0;i<VR_THRESHOLD_COUNT;i++) {
2021-09-18 19:12:22 -07:00
setLinearCurve(engineConfiguration->vrThreshold[i].rpmBins, 600 / RPM_1_BYTE_PACKING_MULT, 7000 / RPM_1_BYTE_PACKING_MULT, 100 / RPM_1_BYTE_PACKING_MULT);
2021-09-18 18:27:17 -07:00
setLinearCurve(engineConfiguration->vrThreshold[i].values, PACK_PERCENT_BYTE_MULT * 0.6, PACK_PERCENT_BYTE_MULT * 1.2, PACK_PERCENT_BYTE_MULT * 0.1);
2021-09-17 18:23:54 -07:00
}
}
2021-11-08 14:31:17 -08:00
void proteusLuaDemo(DECLARE_CONFIG_PARAMETER_SIGNATURE) {
#if HW_PROTEUS
engineConfiguration->tpsMin = 889;
engineConfiguration->tpsMax = 67;
engineConfiguration->tps1SecondaryMin = 105;
engineConfiguration->tps1SecondaryMax = 933;
2021-11-10 19:27:21 -08:00
strcpy(engineConfiguration->scriptCurveName[2 - 1], "rateofchange");
2021-11-08 14:31:17 -08:00
strcpy(engineConfiguration->scriptCurveName[3 - 1], "bias");
/**
* for this demo I use ETB just a sample object to control with PID. No reasonable person should consider actually using
* Lua for actual intake ETB control while driving around the racing track - hard-coded ETB control is way smarter!
*/
static const float defaultBiasBins[] = {
0, 1, 2, 4, 7, 98, 99, 100
};
static const float defaultBiasValues[] = {
-20, -18, -17, 0, 20, 21, 22, 25
};
engineConfiguration->luaOutputPins[0] = GPIOD_12;
2021-11-08 18:29:09 -08:00
engineConfiguration->luaOutputPins[1] = GPIOD_10;
engineConfiguration->luaOutputPins[2] = GPIOD_11;
2021-11-08 14:31:17 -08:00
2021-11-10 19:27:21 -08:00
setLinearCurve(CONFIG(scriptCurve2Bins), 0, 8000, 1);
setLinearCurve(CONFIG(scriptCurve2), 0, 100, 1);
2021-11-08 14:31:17 -08:00
copyArray(CONFIG(scriptCurve3Bins), defaultBiasBins);
copyArray(CONFIG(scriptCurve3), defaultBiasValues);
2021-11-10 19:27:21 -08:00
engineConfiguration->auxAnalogInputs[0] = PROTEUS_IN_ANALOG_VOLT_10;
engineConfiguration->afr.hwChannel = EFI_ADC_NONE;
2021-11-08 14:31:17 -08:00
// ETB direction #1 PD10
// ETB control PD12
// ETB disable PD11
auto script = R"(
2021-11-08 18:29:09 -08:00
startPwm(0, 800, 0.3)
-- direction
startPwm(1, 80, 1.0)
-- disable
startPwm(2, 80, 0.0)
function onTick()
2021-11-10 19:27:21 -08:00
analog1 = getAuxAnalog(0)
position = interpolate(1, 0, 4, 100, analog1)
2021-11-08 18:29:09 -08:00
end
2021-11-08 14:31:17 -08:00
)";
#endif
}
#if HW_HELLEN
void setHellen144LedPins(DECLARE_CONFIG_PARAMETER_SIGNATURE) {
#ifdef EFI_COMMUNICATION_PIN
engineConfiguration->communicationLedPin = EFI_COMMUNICATION_PIN;
#else
engineConfiguration->communicationLedPin = GPIOE_7;
#endif /* EFI_COMMUNICATION_PIN */
engineConfiguration->runningLedPin = GPIOG_1;
engineConfiguration->warningLedPin = GPIOE_8;
}
void setHellen176LedPins(DECLARE_CONFIG_PARAMETER_SIGNATURE) {
#ifdef EFI_COMMUNICATION_PIN
engineConfiguration->communicationLedPin = EFI_COMMUNICATION_PIN;
#else
engineConfiguration->communicationLedPin = GPIOH_10;
#endif /* EFI_COMMUNICATION_PIN */
engineConfiguration->runningLedPin = GPIOH_9; // green
engineConfiguration->warningLedPin = GPIOH_11; // yellow
}
#endif //HW_HELLEN