mirror of https://github.com/FOME-Tech/fome-fw.git
lambda monitor wiring
This commit is contained in:
parent
9caf52bbb1
commit
a63930a5c4
|
@ -49,6 +49,7 @@
|
|||
#include "fuel_schedule.h"
|
||||
#include "prime_injection.h"
|
||||
#include "throttle_model.h"
|
||||
#include "lambda_monitor.h"
|
||||
|
||||
#ifndef EFI_UNIT_TEST
|
||||
#error EFI_UNIT_TEST must be defined!
|
||||
|
@ -182,6 +183,8 @@ public:
|
|||
BoostController boostController;
|
||||
#endif // EFI_BOOST_CONTROL
|
||||
|
||||
LambdaMonitor lambdaMonitor;
|
||||
|
||||
IgnitionState ignitionState;
|
||||
void resetLua();
|
||||
|
||||
|
|
|
@ -156,6 +156,7 @@ void EngineState::periodicFastCallback() {
|
|||
|
||||
float fuelLoad = getFuelingLoad();
|
||||
injectionOffset = getInjectionOffset(rpm, fuelLoad);
|
||||
engine->lambdaMonitor.update(rpm, fuelLoad);
|
||||
|
||||
float ignitionLoad = getIgnitionLoad();
|
||||
float advance = getAdvance(rpm, ignitionLoad) * engine->ignitionState.luaTimingMult + engine->ignitionState.luaTimingAdd;
|
||||
|
|
|
@ -80,6 +80,10 @@ void LimpManager::updateState(int rpm, efitick_t nowNt) {
|
|||
}
|
||||
}
|
||||
|
||||
if (engine->lambdaMonitor.isCut()) {
|
||||
allowFuel.clear(ClearReason::LambdaProtection);
|
||||
}
|
||||
|
||||
#if EFI_SHAFT_POSITION_INPUT
|
||||
if (noFiringUntilVvtSync(engineConfiguration->vvtMode[0])
|
||||
&& !engine->triggerCentral.triggerState.hasSynchronizedPhase()) {
|
||||
|
|
|
@ -12,21 +12,29 @@ float LambdaMonitor::getMaxAllowedLambda(float rpm, float load) const {
|
|||
);
|
||||
}
|
||||
|
||||
bool LambdaMonitorBase::isCut() const {
|
||||
return m_isCut;
|
||||
}
|
||||
|
||||
void LambdaMonitorBase::update(float rpm, float load) {
|
||||
if (isCurrentlyGood(rpm, load)) {
|
||||
m_timeSinceGoodLambda.reset();
|
||||
}
|
||||
|
||||
float timeout = engineConfiguration->lambdaProtectionTimeout;
|
||||
if (m_timeSinceGoodLambda.hasElapsedSec(engineConfiguration->lambdaProtectionTimeout)) {
|
||||
// Things have been bad long enough, cut!
|
||||
m_isCut = true;
|
||||
}
|
||||
|
||||
if (m_timeSinceGoodLambda.hasElapsedSec(timeout)) {
|
||||
// Things have been bad long enough, respond!
|
||||
|
||||
// TODO
|
||||
if (m_isCut) {
|
||||
// If things are back to normal, cancel the cut and force a reset
|
||||
if (restoreConditionsMet(rpm, load)) {
|
||||
m_isCut = false;
|
||||
m_timeSinceGoodLambda.reset();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool LambdaMonitorBase::isCurrentlyGood(float rpm, float load) const {
|
||||
// Lambda is always good if disabled
|
||||
if (!engineConfiguration->lambdaProtectionEnable) {
|
||||
|
@ -77,3 +85,9 @@ bool LambdaMonitorBase::isCurrentlyGood(float rpm, float load) const {
|
|||
// All checks failed, lambda is currently bad.
|
||||
return false;
|
||||
}
|
||||
|
||||
bool LambdaMonitorBase::restoreConditionsMet(float rpm, float load) const {
|
||||
// TODO #75
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
struct LambdaMonitorBase {
|
||||
void update(float rpm, float load);
|
||||
bool isCut() const;
|
||||
|
||||
protected:
|
||||
// Returns whether lambda checking should happen at all
|
||||
|
@ -12,9 +13,13 @@ protected:
|
|||
bool isCurrentlyGood(float rpm, float load) const;
|
||||
virtual float getMaxAllowedLambda(float rpm, float load) const = 0;
|
||||
|
||||
// Determine whether fuel should be restored after a cut occurs
|
||||
// Returns true if OK to leave the "cut" state
|
||||
bool restoreConditionsMet(float rpm, float load) const;
|
||||
|
||||
private:
|
||||
Timer m_timeSinceGoodLambda;
|
||||
|
||||
bool m_isCut = false;
|
||||
};
|
||||
|
||||
class LambdaMonitor : public LambdaMonitorBase {
|
||||
|
|
Loading…
Reference in New Issue