rusEFI
The most advanced open source ECU
Loading...
Searching...
No Matches
flex_sensor.h
Go to the documentation of this file.
1/**
2 * @file flex_sensor.h
3 */
4#include "sensor_type.h"
5#include "functional_sensor.h"
7#include "biquad.h"
8#include <rusefi/timer.h>
9
11public:
13 // Update rate is 50-150hz, so this actually filters at 0.5-1.5hz -3db depending on E%, which is ok
15 }
16
17 SensorResult convert(float frequency) const override {
18 // Sensor should only report 50-150hz, significantly outside that range indicates a problem
19 // it changes to 200hz+ to indicate methanol "contamination"
20 if (frequency < 45) {
21 return UnexpectedCode::Low;
22 }
23
24 if (frequency > 155) {
25 return UnexpectedCode::High;
26 }
27
28 float flexPct = clampF(0, frequency - 50, 100);
29
30 return m_filter.filter(flexPct);
31 }
32
33private:
35};
36
38public:
39 FlexSensor(efidur_t timeoutPeriod)
41 , flexFuelTemp(SensorType::FuelTemperature, timeoutPeriod)
42 {
43 // 0.01 means filter bandwidth of ~1hz with ~100hz sensor
46 }
47 void Register(bool withTempSensor);
48 void unregister();
49 void callback(efitick_t nowNt, bool value);
50 void debug();
51
52private:
56
58
60
61 bool gotRising = false;
62
65
66 float frequency;
69};
float filter(float input)
Definition biquad.cpp:74
void configureLowpass(float samplingFrequency, float cutoffFrequency, float Q=0.54f)
Definition biquad.cpp:48
Biquad m_filter
Definition flex_sensor.h:34
SensorResult convert(float frequency) const override
Definition flex_sensor.h:17
FlexConverter converter
Definition flex_sensor.h:55
float frequency
Definition flex_sensor.h:66
Timer flexFreq
Definition flex_sensor.h:59
Timer flexPulse
Definition flex_sensor.h:59
FunctionalSensor flexSensor
Definition flex_sensor.h:53
FlexSensor(efidur_t timeoutPeriod)
Definition flex_sensor.h:39
int lowFlexCallbackCounter
Definition flex_sensor.h:63
bool gotRising
Definition flex_sensor.h:61
StoredValueSensor flexFuelTemp
Definition flex_sensor.h:54
void callback(efitick_t nowNt, bool value)
efitick_t latestCallbackTime
Definition flex_sensor.h:68
float pulseWidthUs
Definition flex_sensor.h:67
Biquad flexTempFilter
Definition flex_sensor.h:57
void Register(bool withTempSensor)
void unregister()
int flexCallbackCounter
Definition flex_sensor.h:64
Class for sensors that convert from some raw floating point value (ex: voltage, frequency,...
void setFunction(ConverterType &func)
Base class for sensors that compute a value on one thread, and want to make it available to consumers...
efitick_t efidur_t
expected< float > SensorResult
Definition sensor.h:46
Enumeration of sensors supported by the ECU.
SensorType
Definition sensor_type.h:18
@ FuelEthanolPercent