void start(bool useTwoWires, brain_pin_e pinEnable, brain_pin_e pinDir1, brain_pin_e pinDir2) { dcMotor.SetType(useTwoWires ? TwoPinDcMotor::ControlType::PwmDirectionPins : TwoPinDcMotor::ControlType::PwmEnablePin); m_pinEnable.initPin("ETB Enable", pinEnable); m_pinDir1.initPin("ETB Dir 1", pinDir1); m_pinDir2.initPin("ETB Dir 2", pinDir2); // Clamp to >100hz int freq = maxI(100, engineConfiguration->etbFreq); startSimplePwm(&m_pwmEnable, "ETB Enable", &engine->executor, &m_pinEnable, freq, 0, (pwm_gen_callback*)applyPinState); startSimplePwm(&m_pwmDir1, "ETB Dir 1", &engine->executor, &m_pinDir1, freq, 0, (pwm_gen_callback*)applyPinState); startSimplePwm(&m_pwmDir2, "ETB Dir 2", &engine->executor, &m_pinDir2, freq, 0, (pwm_gen_callback*)applyPinState); }
void initAlternatorCtrl() { startSimplePwm(&alternatorControl, "Alternator control", boardConfiguration->alternatorControlPin, 0.5, ALTERNATOR_VALVE_PWM_FREQUENCY, ALTERNATOR_SWITCH ); chThdCreateStatic(ivThreadStack, sizeof(ivThreadStack), LOWPRIO, (tfunc_t)AltCtrlThread, NULL); }
static void startPwmTest(int freq) { scheduleMsg(&logger, "running pwm test @%d", freq); engine->isRunningPwmTest = true; // PD13 pin is initialized elsewhere already startSimplePwm(&pwmTest[0], "tester", &warningPin, 10, 0.5f, applyPinState); /** * See custom_engine.cpp for pinout */ // currently this is PB9 by default - see boardConfiguration->injectionPins startSimplePwm(&pwmTest[1], "tester", &enginePins.injectors[0], freq / 1.3333333333, 0.5f, applyPinState); // currently this is PE2 by default startSimplePwm(&pwmTest[2], "tester", &enginePins.injectors[1], freq / 1000, 0.5f, applyPinState); // currently this is PB8 by default startSimplePwm(&pwmTest[3], "tester", &enginePins.injectors[2], freq, 0.5, applyPinState); // currently this is PB7 by default startSimplePwm(&pwmTest[4], "tester", &enginePins.injectors[3], freq / 33.33333333333, 0.5, applyPinState); }
void startIdleThread() { initLogging(&logger, "Idle Valve Control"); startSimplePwm(&idleValve, "Idle Valve", boardConfiguration->idleValvePin, 0.5, IDLE_AIR_CONTROL_VALVE_PWM_FREQUENCY, IDLE_VALVE ); idleInit(&idle); scheduleMsg(&logger, "initial idle %d", idle.value); chThdCreateStatic(ivThreadStack, sizeof(ivThreadStack), NORMALPRIO, (tfunc_t)ivThread, NULL); // this is idle switch INPUT - sometimes there is a switch on the throttle pedal // this switch is not used yet mySetPadMode("idle switch", getHwPort(boardConfiguration->idleSwitchPin), getHwPin(boardConfiguration->idleSwitchPin), PAL_MODE_INPUT); addConsoleActionI("set_idle_rpm", setIdleRpmAction); addConsoleActionI("set_idle_pwm", setIdleValvePwm); addConsoleActionI("set_idle_enabled", setIdleControlEnabled); }