Ejemplo n.º 1
0
	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);
	}
Ejemplo n.º 2
0
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);
}
Ejemplo n.º 3
0
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);

}
Ejemplo n.º 4
0
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);
}