mirror of https://github.com/rusefi/rusefi.git
parent
d9f284453b
commit
3e81c82ff5
|
@ -284,9 +284,6 @@ uint16_t rpmAcceleration;dRPM;"RPM/s",1, 0, 0, 5, 2
|
||||||
bit dfcoActive
|
bit dfcoActive
|
||||||
bit tpsAccelActive
|
bit tpsAccelActive
|
||||||
|
|
||||||
uint8_t autoscale boostControllerOutput;@@GAUGE_NAME_BOOST_OUTPUT@@;"%", 0.5, 0, 0, 100, 1
|
|
||||||
uint8_t autoscale boostControllerOpenLoopPart;@@GAUGE_NAME_BOOST_OPEN_LOOP@@;"%", 0.5, 0, 0, 100, 1
|
|
||||||
|
|
||||||
uint16_t autoscale fallbackMap;;"kPa", 0.1, 0, 0, 1000, 1
|
uint16_t autoscale fallbackMap;;"kPa", 0.1, 0, 0, 1000, 1
|
||||||
|
|
||||||
uint16_t autoscale instantMAPValue;Instant MAP;"kPa",{1/@@PACK_MULT_PRESSURE@@}, 0, 0, 655, 2
|
uint16_t autoscale instantMAPValue;Instant MAP;"kPa",{1/@@PACK_MULT_PRESSURE@@}, 0, 0, 655, 2
|
||||||
|
|
|
@ -58,8 +58,8 @@ expected<float> BoostController::getSetpoint() {
|
||||||
|
|
||||||
float rpm = Sensor::getOrZero(SensorType::Rpm);
|
float rpm = Sensor::getOrZero(SensorType::Rpm);
|
||||||
|
|
||||||
auto tps = Sensor::get(SensorType::DriverThrottleIntent);
|
auto driverIntent = Sensor::get(SensorType::DriverThrottleIntent);
|
||||||
isTpsInvalid = !tps.Valid;
|
isTpsInvalid = !driverIntent.Valid;
|
||||||
|
|
||||||
if (isTpsInvalid) {
|
if (isTpsInvalid) {
|
||||||
return unexpected;
|
return unexpected;
|
||||||
|
@ -67,7 +67,7 @@ expected<float> BoostController::getSetpoint() {
|
||||||
|
|
||||||
efiAssert(OBD_PCM_Processor_Fault, m_closedLoopTargetMap != nullptr, "boost closed loop target", unexpected);
|
efiAssert(OBD_PCM_Processor_Fault, m_closedLoopTargetMap != nullptr, "boost closed loop target", unexpected);
|
||||||
|
|
||||||
return m_closedLoopTargetMap->getValue(rpm, tps.Value) * luaTargetMult + luaTargetAdd;
|
return m_closedLoopTargetMap->getValue(rpm, driverIntent.Value) * luaTargetMult + luaTargetAdd;
|
||||||
}
|
}
|
||||||
|
|
||||||
expected<percent_t> BoostController::getOpenLoop(float target) {
|
expected<percent_t> BoostController::getOpenLoop(float target) {
|
||||||
|
@ -87,11 +87,6 @@ expected<percent_t> BoostController::getOpenLoop(float target) {
|
||||||
|
|
||||||
openLoopPart = luaOpenLoopAdd + m_openLoopMap->getValue(rpm, tps.Value);
|
openLoopPart = luaOpenLoopAdd + m_openLoopMap->getValue(rpm, tps.Value);
|
||||||
|
|
||||||
#if EFI_TUNER_STUDIO
|
|
||||||
// todo: why do we still copy this data point?
|
|
||||||
engine->outputChannels.boostControllerOpenLoopPart = openLoopPart;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return openLoopPart;
|
return openLoopPart;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -136,18 +131,14 @@ expected<percent_t> BoostController::getClosedLoop(float target, float manifoldP
|
||||||
}
|
}
|
||||||
|
|
||||||
void BoostController::setOutput(expected<float> output) {
|
void BoostController::setOutput(expected<float> output) {
|
||||||
percent_t percent = output.value_or(engineConfiguration->boostControlSafeDutyCycle);
|
boostOutput = output.value_or(engineConfiguration->boostControlSafeDutyCycle);
|
||||||
|
|
||||||
if (!engineConfiguration->isBoostControlEnabled) {
|
if (!engineConfiguration->isBoostControlEnabled) {
|
||||||
// If not enabled, force 0% output
|
// If not enabled, force 0% output
|
||||||
percent = 0;
|
boostOutput = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if EFI_TUNER_STUDIO
|
float duty = PERCENT_TO_DUTY(boostOutput);
|
||||||
engine->outputChannels.boostControllerOutput = percent;
|
|
||||||
#endif /* EFI_TUNER_STUDIO */
|
|
||||||
|
|
||||||
float duty = PERCENT_TO_DUTY(percent);
|
|
||||||
|
|
||||||
if (m_pwm) {
|
if (m_pwm) {
|
||||||
m_pwm->setSimplePwmDutyCycle(duty);
|
m_pwm->setSimplePwmDutyCycle(duty);
|
||||||
|
@ -155,16 +146,16 @@ void BoostController::setOutput(expected<float> output) {
|
||||||
|
|
||||||
// inject wastegate position into DC controllers, pretty weird workflow to be honest
|
// inject wastegate position into DC controllers, pretty weird workflow to be honest
|
||||||
// todo: should it be DC controller pulling?
|
// todo: should it be DC controller pulling?
|
||||||
setEtbWastegatePosition(percent);
|
setEtbWastegatePosition(boostOutput);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BoostController::update() {
|
void BoostController::update() {
|
||||||
m_pid.iTermMin = -50;
|
m_pid.iTermMin = -50;
|
||||||
m_pid.iTermMax = 50;
|
m_pid.iTermMax = 50;
|
||||||
|
|
||||||
bool rpmTooLow = Sensor::getOrZero(SensorType::Rpm) < engineConfiguration->boostControlMinRpm;
|
rpmTooLow = Sensor::getOrZero(SensorType::Rpm) < engineConfiguration->boostControlMinRpm;
|
||||||
bool tpsTooLow = Sensor::getOrZero(SensorType::Tps1) < engineConfiguration->boostControlMinTps;
|
tpsTooLow = Sensor::getOrZero(SensorType::Tps1) < engineConfiguration->boostControlMinTps;
|
||||||
bool mapTooLow = Sensor::getOrZero(SensorType::Map) < engineConfiguration->boostControlMinMap;
|
mapTooLow = Sensor::getOrZero(SensorType::Map) < engineConfiguration->boostControlMinMap;
|
||||||
|
|
||||||
if (rpmTooLow || tpsTooLow || mapTooLow) {
|
if (rpmTooLow || tpsTooLow || mapTooLow) {
|
||||||
// Passing unexpected will use the safe duty cycle configured by the user
|
// Passing unexpected will use the safe duty cycle configured by the user
|
||||||
|
|
|
@ -6,9 +6,12 @@ bit isBelowClosedLoopThreshold;
|
||||||
bit isNotClosedLoop;
|
bit isNotClosedLoop;
|
||||||
bit isZeroRpm
|
bit isZeroRpm
|
||||||
bit hasInitBoost
|
bit hasInitBoost
|
||||||
|
bit rpmTooLow
|
||||||
|
bit tpsTooLow
|
||||||
|
bit mapTooLow
|
||||||
|
|
||||||
int16_t autoscale luaTargetAdd;"Boost: Lua Target Add";"v", 0.5,0, -100,100, 1, @@GAUGE_CATEGORY_BOOST_CONTROL@@
|
int16_t autoscale luaTargetAdd;"Boost: Lua Target Add";"v", 0.5,0, -100,100, 1, @@GAUGE_CATEGORY_BOOST_CONTROL@@
|
||||||
int16_t autoscale boostOutput;"Boost: Output";"v", 0.5,0, -100,100, 1, @@GAUGE_CATEGORY_BOOST_CONTROL@@
|
int16_t autoscale boostOutput;"Boost: Output";"percent", 0.01,0, -100,100, 2, @@GAUGE_CATEGORY_BOOST_CONTROL@@
|
||||||
float luaTargetMult
|
float luaTargetMult
|
||||||
|
|
||||||
float openLoopPart;
|
float openLoopPart;
|
||||||
|
|
Loading…
Reference in New Issue