12#if EFI_ALTERNATOR_CONTROL
18#if defined(HAS_OS_ACCESS)
19#error "Unexpected OS ACCESS HERE"
static SimplePwm alternatorControl("alt")
void initAlternatorCtrl()
expected< percent_t > getOpenLoop(float target) override
expected< float > getSetpoint() override
expected< float > observePlant() override
void onConfigurationChange(engine_configuration_s const *previousConfiguration) override
void setOutput(expected< percent_t > outputValue) override
void onFastCallback() override
expected< percent_t > getClosedLoop(float setpoint, float observation) override
SingleTimerExecutor scheduler
TunerStudioOutputChannels outputChannels
constexpr auto & module()
RegisteredOutputPin alternatorPin
bool isSame(const pid_s *parameters) const
void postState(pid_status_s &pidStatus) const
void initPidClass(pid_s *parameters)
float getOutput(float target, float input)
virtual SensorResult get() const =0
static float getOrZero(SensorType type)
void setSimplePwmDutyCycle(float dutyCycle) override
EngineState * getEngineState()
static EngineAccessor engine
static constexpr persistent_config_s * config
static constexpr engine_configuration_s * engineConfiguration
bool isBrainPinValid(brain_pin_e brainPin)
void startSimplePwm(SimplePwm *state, const char *msg, Scheduler *executor, OutputPin *output, float frequency, float dutyCycle, pwm_gen_callback *callback)
bool isAlternatorControlEnabled
int16_t alternator_iTermMin
cranking_parameters_s cranking
uint8_t acRelayAlternatorDutyAdder
int16_t alternator_iTermMax
output_pin_e alternatorControlPin
int alternatorPwmFrequency
pid_status_s alternatorStatus
uint16_t alternatorVoltageTargetLoadBins[ALTERNATOR_VOLTAGE_TARGET_SIZE]
scaled_channel< int16_t, 10, 1 > alternatorVoltageTargetTable[ALTERNATOR_VOLTAGE_TARGET_SIZE][ALTERNATOR_VOLTAGE_TARGET_SIZE]
uint16_t alternatorVoltageTargetRpmBins[ALTERNATOR_VOLTAGE_TARGET_SIZE]