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 270 of file injector_model.cpp.

270 {
271 if (baseDuration > engineConfiguration->applyNonlinearBelowPulse) {
272 // Large pulse, skip correction.
273 return baseDuration;
274 }
275
277 float xi = 1;
278
279 float adder = 0;
280
281 // Add polynomial terms, starting with x^0
282 for (size_t i = 0; i < efi::size(is); i++) {
283 adder += is[i] * xi;
284 xi *= baseDuration;
285 }
286
287 return baseDuration + adder;
288}
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 250 of file injector_model.cpp.

250 {
251 floatms_t baseDuration = fuelMassGram / m_massFlowRate * 1000;
252
253 switch (getNonlinearMode()) {
254 case INJ_FordModel:
255 if (fuelMassGram < m_smallPulseBreakPoint) {
256 // Small pulse uses a different slope, and adds the "zero fuel pulse" offset
257 return (fuelMassGram / m_smallPulseFlowRate * 1000) + m_smallPulseOffset;
258 } else {
259 // Large pulse
260 return baseDuration;
261 }
262 case INJ_PolynomialAdder:
263 return correctInjectionPolynomial(baseDuration);
264 case INJ_None:
265 default:
266 return baseDuration;
267 }
268}
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 244 of file injector_model.cpp.

244 {
245 // Convert from ms -> grams
246 return duration * m_massFlowRate * 0.001f;
247}

◆ 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 192 of file injector_model.cpp.

192 {
193 if (fuelMassGram <= 0) {
194 // If 0 mass, don't do any math, just skip the injection.
195 return 0.0f;
196 }
197
198 // Get the no-offset duration
199 floatms_t baseDuration = getBaseDurationImpl(fuelMassGram);
200
201 return baseDuration + m_deadtime;
202}
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: