rusEFI
The most advanced open source ECU
Loading...
Searching...
No Matches
Public Member Functions | Private Attributes
InjectorModelBase Class Referenceabstract

#include <injector_model.h>

Inheritance diagram for InjectorModelBase:
Inheritance graph
[legend]
Collaboration diagram for InjectorModelBase:
Collaboration graph
[legend]

Public Member Functions

void prepare () override
 
floatms_t getInjectionDuration (float fuelMassGram) const override
 
float getFuelMassForDuration (floatms_t duration) const override
 
virtual float getInjectorFlowRatio ()=0
 
virtual void updateState ()=0
 
virtual expected< floatgetFuelDifferentialPressure () const =0
 
virtual expected< floatgetFuelPressure () const =0
 
virtual float getBaseFlowRate () const =0
 
virtual InjectorNonlinearMode getNonlinearMode () const =0
 
floatms_t getBaseDurationImpl (float fuelMassGram) const
 
virtual floatms_t correctInjectionPolynomial (float floatms_t) const
 
virtual float getSmallPulseFlowRate () const =0
 
virtual float getSmallPulseBreakPoint () const =0
 
- Public Member Functions inherited from IInjectorModel
virtual floatms_t getDeadtime () const =0
 
- Public Member Functions inherited from EngineModule
virtual void initNoConfiguration ()
 
virtual void setDefaultConfiguration ()
 
virtual void onConfigurationChange (engine_configuration_s const *)
 
virtual void onSlowCallback ()
 
virtual void onFastCallback ()
 
virtual void onEngineStop ()
 
virtual void onIgnitionStateChanged (bool)
 
virtual bool needsDelayedShutoff ()
 
virtual void onEnginePhase (float, efitick_t, angle_t, angle_t)
 

Private Attributes

float m_massFlowRate = 0
 
float m_smallPulseBreakPoint = 0
 
float m_smallPulseFlowRate = 0
 
float m_smallPulseOffset = 0
 

Additional Inherited Members

- Data Fields inherited from injector_model_s
float m_deadtime = (float)0
 
float pressureDelta = (float)0
 
float pressureRatio = (float)0
 
float pressureCorrectionReference = (float)0
 

Detailed Description

Definition at line 14 of file injector_model.h.

Member Function Documentation

◆ correctInjectionPolynomial()

floatms_t InjectorModelBase::correctInjectionPolynomial ( float  floatms_t) const
virtual

Definition at line 264 of file injector_model.cpp.

264 {
265 if (baseDuration > engineConfiguration->applyNonlinearBelowPulse) {
266 // Large pulse, skip correction.
267 return baseDuration;
268 }
269
271 float xi = 1;
272
273 float adder = 0;
274
275 // Add polynomial terms, starting with x^0
276 for (size_t i = 0; i < efi::size(is); i++) {
277 adder += is[i] * xi;
278 xi *= baseDuration;
279 }
280
281 return baseDuration + adder;
282}
static constexpr engine_configuration_s * engineConfiguration

Referenced by getBaseDurationImpl().

Here is the caller graph for this function:

◆ getBaseDurationImpl()

floatms_t InjectorModelBase::getBaseDurationImpl ( float  fuelMassGram) const

Definition at line 244 of file injector_model.cpp.

244 {
245 floatms_t baseDuration = fuelMassGram / m_massFlowRate * 1000;
246
247 switch (getNonlinearMode()) {
248 case INJ_FordModel:
249 if (fuelMassGram < m_smallPulseBreakPoint) {
250 // Small pulse uses a different slope, and adds the "zero fuel pulse" offset
251 return (fuelMassGram / m_smallPulseFlowRate * 1000) + m_smallPulseOffset;
252 } else {
253 // Large pulse
254 return baseDuration;
255 }
256 case INJ_PolynomialAdder:
257 return correctInjectionPolynomial(baseDuration);
258 case INJ_None:
259 default:
260 return baseDuration;
261 }
262}
virtual floatms_t correctInjectionPolynomial(float floatms_t) const
virtual InjectorNonlinearMode getNonlinearMode() const =0
float floatms_t

Referenced by getInjectionDuration(), and InjectorModelWithConfig::getInjectionDuration().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ getBaseFlowRate()

virtual float InjectorModelBase::getBaseFlowRate ( ) const
pure virtual

Implemented in InjectorModelWithConfig.

Referenced by prepare().

Here is the caller graph for this function:

◆ getFuelDifferentialPressure()

virtual expected< float > InjectorModelBase::getFuelDifferentialPressure ( ) const
pure virtual

Implemented in InjectorModelWithConfig.

◆ getFuelMassForDuration()

float InjectorModelBase::getFuelMassForDuration ( floatms_t  duration) const
overridevirtual

Implements IInjectorModel.

Definition at line 238 of file injector_model.cpp.

238 {
239 // Convert from ms -> grams
240 return duration * m_massFlowRate * 0.001f;
241}

◆ getFuelPressure()

virtual expected< float > InjectorModelBase::getFuelPressure ( ) const
pure virtual

Implemented in InjectorModelWithConfig.

◆ getInjectionDuration()

floatms_t InjectorModelBase::getInjectionDuration ( float  fuelMassGram) const
overridevirtual

Implements IInjectorModel.

Reimplemented in InjectorModelWithConfig.

Definition at line 186 of file injector_model.cpp.

186 {
187 if (fuelMassGram <= 0) {
188 // If 0 mass, don't do any math, just skip the injection.
189 return 0.0f;
190 }
191
192 // Get the no-offset duration
193 floatms_t baseDuration = getBaseDurationImpl(fuelMassGram);
194
195 return baseDuration + m_deadtime;
196}
floatms_t getBaseDurationImpl(float fuelMassGram) const
Here is the call graph for this function:

◆ getInjectorFlowRatio()

virtual float InjectorModelBase::getInjectorFlowRatio ( )
pure virtual

Implemented in InjectorModelWithConfig.

Referenced by prepare().

Here is the caller graph for this function:

◆ getNonlinearMode()

virtual InjectorNonlinearMode InjectorModelBase::getNonlinearMode ( ) const
pure virtual

Implemented in InjectorModelPrimary, and InjectorModelSecondary.

Referenced by getBaseDurationImpl(), and prepare().

Here is the caller graph for this function:

◆ getSmallPulseBreakPoint()

virtual float InjectorModelBase::getSmallPulseBreakPoint ( ) const
pure virtual

Implemented in InjectorModelPrimary, and InjectorModelSecondary.

Referenced by prepare().

Here is the caller graph for this function:

◆ getSmallPulseFlowRate()

virtual float InjectorModelBase::getSmallPulseFlowRate ( ) const
pure virtual

Implemented in InjectorModelPrimary, and InjectorModelSecondary.

Referenced by prepare().

Here is the caller graph for this function:

◆ prepare()

void InjectorModelBase::prepare ( )
overridevirtual

Implements IInjectorModel.

Definition at line 6 of file injector_model.cpp.

6 {
7 float flowRatio = getInjectorFlowRatio();
8
9 // "large pulse" flow rate
10 m_massFlowRate = flowRatio * getBaseFlowRate();
12
13 if (getNonlinearMode() == INJ_FordModel) {
16
17 // amount added to small pulses to correct for the "kink" from low flow region
19 }
20}
virtual float getInjectorFlowRatio()=0
virtual float getBaseFlowRate() const =0
virtual float getSmallPulseFlowRate() const =0
virtual float getSmallPulseBreakPoint() const =0
virtual floatms_t getDeadtime() const =0
Here is the call graph for this function:

◆ updateState()

virtual void InjectorModelBase::updateState ( )
pure virtual

Implemented in InjectorModelWithConfig.

Field Documentation

◆ m_massFlowRate

float InjectorModelBase::m_massFlowRate = 0
private

Definition at line 37 of file injector_model.h.

Referenced by getBaseDurationImpl(), getFuelMassForDuration(), and prepare().

◆ m_smallPulseBreakPoint

float InjectorModelBase::m_smallPulseBreakPoint = 0
private

Definition at line 40 of file injector_model.h.

Referenced by getBaseDurationImpl(), and prepare().

◆ m_smallPulseFlowRate

float InjectorModelBase::m_smallPulseFlowRate = 0
private

Definition at line 43 of file injector_model.h.

Referenced by getBaseDurationImpl(), and prepare().

◆ m_smallPulseOffset

float InjectorModelBase::m_smallPulseOffset = 0
private

Definition at line 46 of file injector_model.h.

Referenced by getBaseDurationImpl(), and prepare().


The documentation for this class was generated from the following files: