/** * @file boards/Prometheus/board_configuration.h * * @brief In this file we can override engine_configuration.cpp. * * @date Apr 22, 2017 * @author andreika, (c) 2017 */ #include "pch.h" #ifdef STM32F469xx static bool is469 = true; #else static bool is469 = false; #endif static void setPrometheusDefaults() { engineConfiguration->useCicPidForIdle = true; engineConfiguration->specs.cylindersCount = 4; engineConfiguration->specs.firingOrder = FO_1_3_4_2; engineConfiguration->ignitionMode = IM_INDIVIDUAL_COILS; // IM_WASTED_SPARK engineConfiguration->crankingInjectionMode = IM_SIMULTANEOUS; engineConfiguration->injectionMode = IM_SIMULTANEOUS;//IM_BATCH;// IM_SEQUENTIAL; engineConfiguration->globalTriggerAngleOffset = 114; // the end of 19th tooth? engineConfiguration->specs.displacement = 1.645; engineConfiguration->injector.flow = 200; engineConfiguration->cranking.baseFuel = 25; // ??? engineConfiguration->cranking.rpm = 600; engineConfiguration->rpmHardLimit = 8500; // yes, 3k. let's play it safe for now engineConfiguration->map.sensor.type = MT_MPX4250; engineConfiguration->idleStepperReactionTime = 10; engineConfiguration->stepperDirectionPinMode = OM_INVERTED; engineConfiguration->useLinearCltSensor = true; //engineConfiguration->canNbcType = CAN_BUS_NBC_BMW; engineConfiguration->canNbcType = CAN_BUS_MAZDA_RX8; engineConfiguration->canReadEnabled = true; engineConfiguration->canWriteEnabled = false; engineConfiguration->tpsMin = convertVoltageTo10bitADC(0.250); engineConfiguration->tpsMax = convertVoltageTo10bitADC(4.538); engineConfiguration->tpsErrorDetectionTooLow = -10; // -10% open engineConfiguration->tpsErrorDetectionTooHigh = 110; // 110% open engineConfiguration->mapMinBufferLength = 4; } void setPinConfigurationOverrides() { #if 0 engineConfiguration->injectionPins[0] = is469 ? Gpio::D9 : Gpio::B14; // #1 engineConfiguration->injectionPins[1] = is469 ? Gpio::D15 : Gpio::C7; // #2 engineConfiguration->injectionPins[2] = is469 ? Gpio::D10 : Gpio::B15; // #3 engineConfiguration->injectionPins[3] = is469 ? Gpio::D14 : Gpio::C6; // #4 engineConfiguration->ignitionPins[0] = Gpio::A10; engineConfiguration->ignitionPins[1] = Gpio::A9; engineConfiguration->ignitionPins[2] = Gpio::A8; engineConfiguration->ignitionPins[3] = Gpio::A11; engineConfiguration->ignitionPinMode = OM_INVERTED; enginePins.startInjectionPins(); enginePins.startIgnitionPins(); for (int i = 0; i < 4; i++) { enginePins.injectors[i].setLow(); enginePins.coils[i].setLow(); } #else palSetPadMode(GPIOA, 10, PAL_MODE_OUTPUT_PUSHPULL); palWritePad(GPIOA, 10, 1); palSetPadMode(GPIOA, 9, PAL_MODE_OUTPUT_PUSHPULL); palWritePad(GPIOA, 9, 1); palSetPadMode(GPIOA, 8, PAL_MODE_OUTPUT_PUSHPULL); palWritePad(GPIOA, 8, 1); palSetPadMode(GPIOA, 11, PAL_MODE_OUTPUT_PUSHPULL); palWritePad(GPIOA, 11, 1); palSetPadMode(GPIOD, 9, PAL_MODE_OUTPUT_PUSHPULL); palWritePad(GPIOD, 9, 0); palSetPadMode(GPIOD, 15, PAL_MODE_OUTPUT_PUSHPULL); palWritePad(GPIOD, 15, 0); palSetPadMode(GPIOD, 10, PAL_MODE_OUTPUT_PUSHPULL); palWritePad(GPIOD, 10, 0); palSetPadMode(GPIOD, 14, PAL_MODE_OUTPUT_PUSHPULL); palWritePad(GPIOD, 14, 0); #endif } void setSerialConfigurationOverrides() { engineConfiguration->useSerialPort = true; engineConfiguration->binarySerialTxPin = Gpio::A0; engineConfiguration->binarySerialRxPin = Gpio::A1; // engineConfiguration->consoleSerialTxPin = Gpio::A0; // engineConfiguration->consoleSerialRxPin = Gpio::A1; engineConfiguration->tunerStudioSerialSpeed = SERIAL_SPEED; engineConfiguration->uartConsoleSerialSpeed = SERIAL_SPEED; } void setSdCardConfigurationOverrides() { engineConfiguration->is_enabled_spi_1 = true; engineConfiguration->sdCardSpiDevice = SPI_DEVICE_1; engineConfiguration->sdCardCsPin = Gpio::A2; engineConfiguration->isSdCardEnabled = true; } /** * @brief Board-specific configuration defaults. * @todo Add your board-specific code, if any. */ void setBoardDefaultConfiguration() { // give a chance to trigger SWD programmer... Wait for 2 secs (=2000 ms). // TODO: remove it when the bootloader is ready chThdSleepMilliseconds(2000); setSerialConfigurationOverrides(); engineConfiguration->vbattAdcChannel = EFI_ADC_13; engineConfiguration->tps1_1AdcChannel = is469 ? EFI_ADC_7 : EFI_ADC_14; engineConfiguration->map.sensor.hwChannel = is469 ? EFI_ADC_8 : EFI_ADC_15; engineConfiguration->clt.adcChannel = EFI_ADC_3; engineConfiguration->iat.adcChannel = EFI_ADC_4; engineConfiguration->afr.hwChannel = is469 ? EFI_ADC_9 : EFI_ADC_8; engineConfiguration->adcVcc = ADC_VCC; engineConfiguration->baroSensor.hwChannel = EFI_ADC_NONE; engineConfiguration->throttlePedalPositionAdcChannel = EFI_ADC_NONE; engineConfiguration->injectionPins[0] = is469 ? Gpio::D9 : Gpio::B14; // #1 engineConfiguration->injectionPins[1] = is469 ? Gpio::D15 : Gpio::C7; // #2 engineConfiguration->injectionPins[2] = is469 ? Gpio::D10 : Gpio::B15; // #3 engineConfiguration->injectionPins[3] = is469 ? Gpio::D14 : Gpio::C6; // #4 engineConfiguration->ignitionPins[0] = Gpio::A10; engineConfiguration->ignitionPins[1] = Gpio::A9; engineConfiguration->ignitionPins[2] = Gpio::A8; engineConfiguration->ignitionPins[3] = Gpio::A11; engineConfiguration->ignitionPinMode = OM_INVERTED; engineConfiguration->vbattDividerCoeff = ((float) (2 + 10)) / 2; engineConfiguration->clt.config.bias_resistor = 2700; engineConfiguration->iat.config.bias_resistor = 2700; engineConfiguration->useStepperIdle = true; engineConfiguration->idle.stepperDirectionPin = is469 ? Gpio::B14 : Gpio::B12; engineConfiguration->idle.stepperStepPin = is469 ? Gpio::B15 : Gpio::B13; engineConfiguration->stepperEnablePin = Gpio::Unassigned; engineConfiguration->stepperEnablePinMode = OM_DEFAULT; engineConfiguration->communicationLedPin = Gpio::Unassigned;// Gpio::A13; // yellow LED engineConfiguration->runningLedPin = Gpio::A13; //Gpio::A13; // yellow LED engineConfiguration->warningLedPin = Gpio::Unassigned; engineConfiguration->triggerInputPins[0] = Gpio::A5; engineConfiguration->triggerInputPins[1] = Gpio::Unassigned; engineConfiguration->camInputs[0] = is469 ? Gpio::E9 : Gpio::A6; engineConfiguration->tachOutputPin = Gpio::C8; engineConfiguration->tachOutputPinMode = OM_DEFAULT; engineConfiguration->fuelPumpPin = is469 ? Gpio::D6 : Gpio::B7; engineConfiguration->fuelPumpPinMode = OM_DEFAULT; engineConfiguration->mainRelayPin = is469 ? Gpio::B11 : Gpio::B2; engineConfiguration->mainRelayPinMode = OM_DEFAULT; engineConfiguration->fanPin = Gpio::C9; engineConfiguration->fanPinMode = OM_DEFAULT; engineConfiguration->malfunctionIndicatorPin = Gpio::C1; engineConfiguration->malfunctionIndicatorPinMode = OM_DEFAULT; // debug pad engineConfiguration->triggerSimulatorPins[0] = Gpio::D8; engineConfiguration->triggerSimulatorPinModes[0] = OM_DEFAULT; // not used engineConfiguration->displayMode = DM_NONE; 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; for (int i = 0; i < DIGIPOT_COUNT ; i++) { engineConfiguration->digitalPotentiometerChipSelect[i] = Gpio::Unassigned; } engineConfiguration->triggerSimulatorPins[1] = Gpio::Unassigned; engineConfiguration->triggerSimulatorPins[2] = Gpio::Unassigned; engineConfiguration->triggerSimulatorPinModes[1] = OM_DEFAULT; engineConfiguration->triggerSimulatorPinModes[2] = OM_DEFAULT; engineConfiguration->vehicleSpeedSensorInputPin = Gpio::Unassigned; ///////////////////////////////////////////////////////// engineConfiguration->is_enabled_spi_1 = true; engineConfiguration->is_enabled_spi_2 = false; engineConfiguration->is_enabled_spi_3 = true; engineConfiguration->spi1mosiPin = Gpio::B5; engineConfiguration->spi1MosiMode = PO_DEFAULT; // PAL_STM32_OTYPE_PUSHPULL engineConfiguration->spi1misoPin = Gpio::B4; engineConfiguration->spi1MisoMode = PO_DEFAULT; // PAL_STM32_OTYPE_PUSHPULL engineConfiguration->spi1sckPin = Gpio::B3; engineConfiguration->spi1SckMode = PO_DEFAULT; // PAL_STM32_OTYPE_PUSHPULL engineConfiguration->spi3mosiPin = Gpio::C12; engineConfiguration->spi3MosiMode = PO_OPENDRAIN; // 4 engineConfiguration->spi3misoPin = Gpio::C11; engineConfiguration->spi3MisoMode = PO_PULLUP; // 32 engineConfiguration->spi3sckPin = Gpio::C10; engineConfiguration->spi3SckMode = PO_OPENDRAIN; // 4 engineConfiguration->hip9011SpiDevice = SPI_DEVICE_3; engineConfiguration->hip9011CsPin = is469 ? Gpio::D1 : Gpio::D2; engineConfiguration->hip9011CsPinMode = OM_OPENDRAIN; engineConfiguration->hip9011IntHoldPin = Gpio::C14; engineConfiguration->hip9011IntHoldPinMode = OM_OPENDRAIN; engineConfiguration->hipOutputChannel = EFI_ADC_10; // PC0 engineConfiguration->isHip9011Enabled = true; engineConfiguration->cj125SpiDevice = SPI_DEVICE_3; engineConfiguration->cj125ua = is469 ? EFI_ADC_9 : EFI_ADC_8; engineConfiguration->cj125ur = EFI_ADC_12; engineConfiguration->cj125CsPin = Gpio::A15; engineConfiguration->cj125CsPinMode = OM_OPENDRAIN; engineConfiguration->wboHeaterPin = Gpio::C13; engineConfiguration->o2heaterPin = Gpio::C13; //engineConfiguration->isCJ125Enabled = true; engineConfiguration->isCJ125Enabled = false; engineConfiguration->canTxPin = Gpio::B9; engineConfiguration->canRxPin = Gpio::B8; //!!!!!!!!!!!!!!! #if 1 setPrometheusDefaults(); #endif //!!!!!!!!!!!!!!!!!!! //engineConfiguration->silentTriggerError = true; //!!!!!!!!!!!!! //engineConfiguration->isEngineChartEnabled = false; }