mirror of https://github.com/rusefi/rusefi-1.git
set 50% target for ETB autotune (#2459)
* 50% target for autotne * pass target in Co-authored-by: Matthew Kennedy <makenne@microsoft.com>
This commit is contained in:
parent
046f486b62
commit
a9c8b39dac
|
@ -269,6 +269,11 @@ expected<percent_t> EtbController::getSetpointWastegate() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
expected<percent_t> EtbController::getSetpointEtb() const {
|
expected<percent_t> EtbController::getSetpointEtb() const {
|
||||||
|
// Autotune runs with 50% target position
|
||||||
|
if (m_isAutotune) {
|
||||||
|
return 50.0f;
|
||||||
|
}
|
||||||
|
|
||||||
// A few extra preconditions if throttle control is invalid
|
// A few extra preconditions if throttle control is invalid
|
||||||
if (startupPositionError) {
|
if (startupPositionError) {
|
||||||
return unexpected;
|
return unexpected;
|
||||||
|
@ -326,9 +331,10 @@ expected<percent_t> EtbController::getOpenLoop(percent_t target) const {
|
||||||
return ff;
|
return ff;
|
||||||
}
|
}
|
||||||
|
|
||||||
expected<percent_t> EtbController::getClosedLoopAutotune(percent_t actualThrottlePosition) {
|
expected<percent_t> EtbController::getClosedLoopAutotune(percent_t target, percent_t actualThrottlePosition) {
|
||||||
// Estimate gain at 60% position - this should be well away from the spring and in the linear region
|
// Estimate gain at current position - this should be well away from the spring and in the linear region
|
||||||
bool isPositive = actualThrottlePosition > 60.0f;
|
// GetSetpoint sets this to 50%
|
||||||
|
bool isPositive = actualThrottlePosition > target;
|
||||||
|
|
||||||
float autotuneAmplitude = 20;
|
float autotuneAmplitude = 20;
|
||||||
|
|
||||||
|
@ -444,10 +450,8 @@ expected<percent_t> EtbController::getClosedLoop(percent_t target, percent_t obs
|
||||||
}
|
}
|
||||||
|
|
||||||
// Only allow autotune with stopped engine, and on the first throttle
|
// Only allow autotune with stopped engine, and on the first throttle
|
||||||
if (GET_RPM() == 0
|
if (m_isAutotune) {
|
||||||
&& engine->etbAutoTune
|
return getClosedLoopAutotune(target, observation);
|
||||||
&& m_function == ETB_Throttle1) {
|
|
||||||
return getClosedLoopAutotune(observation);
|
|
||||||
} else {
|
} else {
|
||||||
// Check that we're not over the error limit
|
// Check that we're not over the error limit
|
||||||
float errorIntegral = m_errorAccumulator.accumulate(target - observation);
|
float errorIntegral = m_errorAccumulator.accumulate(target - observation);
|
||||||
|
@ -539,6 +543,11 @@ void EtbController::update() {
|
||||||
m_pid.showPidStatus(&logger, "ETB");
|
m_pid.showPidStatus(&logger, "ETB");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Update local state about autotune
|
||||||
|
m_isAutotune = GET_RPM() == 0
|
||||||
|
&& engine->etbAutoTune
|
||||||
|
&& m_function == ETB_Throttle1;
|
||||||
|
|
||||||
ClosedLoopController::update();
|
ClosedLoopController::update();
|
||||||
|
|
||||||
DISPLAY_STATE(Engine)
|
DISPLAY_STATE(Engine)
|
||||||
|
|
|
@ -52,7 +52,7 @@ public:
|
||||||
|
|
||||||
expected<percent_t> getOpenLoop(percent_t target) const override;
|
expected<percent_t> getOpenLoop(percent_t target) const override;
|
||||||
expected<percent_t> getClosedLoop(percent_t setpoint, percent_t observation) override;
|
expected<percent_t> getClosedLoop(percent_t setpoint, percent_t observation) override;
|
||||||
expected<percent_t> getClosedLoopAutotune(percent_t actualThrottlePosition);
|
expected<percent_t> getClosedLoopAutotune(percent_t setpoint, percent_t actualThrottlePosition);
|
||||||
|
|
||||||
void setOutput(expected<percent_t> outputValue) override;
|
void setOutput(expected<percent_t> outputValue) override;
|
||||||
|
|
||||||
|
@ -83,6 +83,9 @@ private:
|
||||||
float m_idlePosition = 0;
|
float m_idlePosition = 0;
|
||||||
float m_wastegatePosition = 0;
|
float m_wastegatePosition = 0;
|
||||||
|
|
||||||
|
// This is set if automatic PID cal shoudl be run
|
||||||
|
bool m_isAutotune = false;
|
||||||
|
|
||||||
// Autotune helpers
|
// Autotune helpers
|
||||||
bool m_lastIsPositive = false;
|
bool m_lastIsPositive = false;
|
||||||
efitick_t m_cycleStartTime = 0;
|
efitick_t m_cycleStartTime = 0;
|
||||||
|
|
Loading…
Reference in New Issue