rusEFI
The most advanced open source ECU
Loading...
Searching...
No Matches
boost_control.h
Go to the documentation of this file.
1/*
2 * boost_control.h
3 *
4 * Created on: 18. aug. 2019
5 * Author: Ola Ruud
6 */
7#pragma once
8
10#include "efi_pid.h"
12
13#include "Map2D.h"
14
15struct IPwm;
16
17class BoostController : public EngineModule, public boost_control_s, public ClosedLoopController<float, percent_t> {
18public:
19 void init(
20 IPwm* const pmw,
21 const ValueProvider3D* const openLoopMap,
22 const ValueProvider3D* const closedLoopTargetMap,
23 const ValueProvider2D& cltMultiplierProvider,
24 const ValueProvider2D& iatMultiplierProvider,
25 const ValueProvider2D& cltAdderProvider,
26 const ValueProvider2D& iatAdderProvider,
27 pid_s* const pidParams
28 );
29
30 void onFastCallback() override;
31 void setDefaultConfiguration() override;
32 void resetLua();
33
34 // Called when the configuration may have changed. Controller will
35 // reset if necessary.
36 void onConfigurationChange(engine_configuration_s const * previousConfig) override;
37
38 // Helpers for individual parts of boost control
39 expected<float> observePlant() override;
40 expected<float> getSetpoint() override;
41
42 expected<percent_t> getOpenLoop(float target) override;
43 expected<percent_t> getClosedLoop(float target, float manifoldPressure) override;
44
45 void setOutput(expected<percent_t> outputValue) override;
46
47private:
48 percent_t getClosedLoopImpl(float target, float manifoldPressure);
49
50 float getBoostControlDutyCycleWithTemperatureCorrections(const float rpm, const float driverIntent) const;
51 std::optional<float> getBoostControlTargetTemperatureAdder() const;
52 std::optional<float> getBoostTemperatureCorrection(
53 const SensorType sensorType,
54 const ValueProvider2D& correctionCurve
55 ) const;
56
58
65 IPwm* m_pwm = nullptr;
66};
67
68void startBoostPin();
69void initBoostCtrl();
void initBoostCtrl()
void setDefaultBoostParameters()
void startBoostPin()
const ValueProvider3D * m_closedLoopTargetMap
const ValueProvider2D * m_cltBoostCorrMap
expected< percent_t > getClosedLoop(float target, float manifoldPressure) override
void setOutput(expected< percent_t > outputValue) override
const ValueProvider2D * m_iatBoostCorrMap
float getBoostControlDutyCycleWithTemperatureCorrections(const float rpm, const float driverIntent) const
percent_t getClosedLoopImpl(float target, float manifoldPressure)
std::optional< float > getBoostControlTargetTemperatureAdder() const
void setDefaultConfiguration() override
std::optional< float > getBoostTemperatureCorrection(const SensorType sensorType, const ValueProvider2D &correctionCurve) const
const ValueProvider2D * m_iatBoostAdderMap
const ValueProvider3D * m_openLoopMap
expected< percent_t > getOpenLoop(float target) override
const ValueProvider2D * m_cltBoostAdderMap
expected< float > getSetpoint() override
void onConfigurationChange(engine_configuration_s const *previousConfig) override
expected< float > observePlant() override
void init(IPwm *const pmw, const ValueProvider3D *const openLoopMap, const ValueProvider3D *const closedLoopTargetMap, const ValueProvider2D &cltMultiplierProvider, const ValueProvider2D &iatMultiplierProvider, const ValueProvider2D &cltAdderProvider, const ValueProvider2D &iatAdderProvider, pid_s *const pidParams)
void onFastCallback() override
Definition efi_pid.h:34
static ProxySensor driverIntent(SensorType::DriverThrottleIntent)
SensorType
Definition sensor_type.h:18