2019-02-01 20:16:34 -08:00
|
|
|
/*
|
|
|
|
* @file CJ125_logic.cpp
|
|
|
|
*
|
|
|
|
* @date Feb 1, 2019
|
|
|
|
* @author Andrey Belomutskiy, (c) 2012-2019
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "CJ125_logic.h"
|
|
|
|
#include "engine.h"
|
|
|
|
|
|
|
|
EXTERN_ENGINE;
|
|
|
|
|
|
|
|
CJ125::CJ125() : wboHeaterControl("wbo") {
|
|
|
|
}
|
|
|
|
|
|
|
|
void CJ125::SetHeater(float value DECLARE_ENGINE_PARAMETER_SUFFIX) {
|
|
|
|
// limit duty cycle for sensor safety
|
|
|
|
// todo: would be much nicer to have continuous function (vBatt)
|
|
|
|
float maxDuty = (engine->sensors.vBatt > CJ125_HEATER_LIMITING_VOLTAGE) ? CJ125_HEATER_LIMITING_RATE : 1.0f;
|
|
|
|
heaterDuty = (value < CJ125_HEATER_MIN_DUTY) ? 0.0f : minF(maxF(value, 0.0f), maxDuty);
|
|
|
|
#ifdef CJ125_DEBUG
|
|
|
|
scheduleMsg(logger, "cjSetHeater: %.2f", heaterDuty);
|
|
|
|
#endif
|
|
|
|
// a little trick to disable PWM if needed.
|
|
|
|
// todo: this should be moved to wboHeaterControl.setPwmDutyCycle()
|
|
|
|
// todo: is this really needed?!
|
|
|
|
wboHeaterControl.setFrequency(heaterDuty == 0.0f ? NAN : CJ125_HEATER_PWM_FREQ);
|
|
|
|
wboHeaterControl.setSimplePwmDutyCycle(heaterDuty);
|
|
|
|
}
|
|
|
|
|
|
|
|
void CJ125::SetIdleHeater(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
|
|
|
|
// small preheat for faster start & moisture anti-shock therapy for the sensor
|
|
|
|
SetHeater(CJ125_HEATER_IDLE_RATE PASS_ENGINE_PARAMETER_SUFFIX);
|
|
|
|
}
|
|
|
|
|
|
|
|
bool CJ125::isWorkingState(void) {
|
|
|
|
return state != CJ125_ERROR && state != CJ125_INIT && state != CJ125_IDLE;
|
|
|
|
}
|
2019-02-01 20:48:11 -08:00
|
|
|
|
|
|
|
void CJ125::StartHeaterControl(pwm_gen_callback *stateChangeCallback DECLARE_ENGINE_PARAMETER_SUFFIX) {
|
|
|
|
// todo: use custom pin state method, turn pin off while not running
|
|
|
|
startSimplePwmExt(&wboHeaterControl, "wboHeaterPin",
|
|
|
|
&engine->executor,
|
|
|
|
CONFIGB(wboHeaterPin),
|
|
|
|
&wboHeaterPin, CJ125_HEATER_PWM_FREQ, 0.0f, stateChangeCallback);
|
|
|
|
SetIdleHeater(PASS_ENGINE_PARAMETER_SIGNATURE);
|
|
|
|
}
|