![]() |
Speeduino
|
Crank revolution based mathematical functions. More...
Go to the source code of this file.
Classes | |
| struct | angle_converter_factors_t |
| The factors used to convert between crank angle & time. These are derived from the crank revolution time. More... | |
Functions | |
| static uint16_t | RpmFromRevolutionTimeUs (uint32_t revolutionTime) |
| Converts a crank revolution time to engine speed. | |
| static int16_t | ignitionLimits (int16_t angle) |
| Makes one pass at nudging the angle to within [0,CRANK_ANGLE_MAX_IGN]. | |
| angle_converter_factors_t | calculateAngleConverterFactors (uint32_t revolutionTime) noexcept |
| Calculate the angle<-->time conversion factors for a crank revolution time. | |
| void | applyAngleConverterFactors (const angle_converter_factors_t &factors) noexcept |
| Set the factors used by the degree<-->angle conversions. | |
| void | setAngleConverterRevolutionTime (uint32_t revolutionTime) noexcept |
| Set the revolution time, from which some of the degree<-->angle conversions are derived. | |
| uint32_t | angleToTime (uint16_t angle) noexcept |
| Converts angular degrees to the time interval that amount of rotation will take at current RPM. | |
| COMPARE_TYPE | angleToTimerTicks (uint16_t angle) noexcept |
| Converts angular degrees to the equivalent timer ticks at current RPM. | |
| uint16_t | timeToAngle (uint32_t time) noexcept |
| Converts a time interval in microsecods to the equivalent degrees of angular (crank) rotation at current RPM. | |
Variables | |
| static constexpr uint32_t | MICROS_PER_DEG_1_RPM = UDIV_ROUND_CLOSEST(MICROS_PER_MIN, 360UL, uint32_t) |
| At 1 RPM, each degree of angular rotation takes this many microseconds. | |
| static constexpr uint16_t | MAX_RPM = 18000U |
| The maximum rpm that the ECU will attempt to run at. | |
| static constexpr uint16_t | MIN_RPM = (uint16_t)UDIV_ROUND_UP(MICROS_PER_DEG_1_RPM, (uint32_t)UINT16_MAX/16UL, uint32_t) |
| Absolute minimum RPM that the crank math (& therefore all of Speeduino) can be used with. | |
| static constexpr uint16_t | MIN_REVOLUTION_TIME = MICROS_PER_MIN/MAX_RPM |
| Minimum time in µS that one crank revolution can take. | |
| static constexpr uint32_t | MAX_REVOLUTION_TIME = MICROS_PER_MIN/MIN_RPM |
| Maximum time in µS that one crank revolution can take. | |
| int16_t | CRANK_ANGLE_MAX_IGN |
| The number of crank degrees that the system tracks ignition over. | |
| int16_t | CRANK_ANGLE_MAX_INJ |
| The number of crank degrees that the system tracks fuel injection over. | |
Crank revolution based mathematical functions.
|
noexcept |
Converts angular degrees to the time interval that amount of rotation will take at current RPM.
Based on angle of [0,720] and min/max RPM, result ranges from 9 (MAX_RPM, 1 deg) to 2926828 (MIN_RPM, 720 deg)
| angle | Angle in degrees |
|
noexcept |
Converts angular degrees to the equivalent timer ticks at current RPM.
| angle | Angle in degrees |
|
noexcept |
Set the factors used by the degree<-->angle conversions.
| factors | The factors to use. See calculateAngleConverterFactors() |
|
noexcept |
Calculate the angle<-->time conversion factors for a crank revolution time.
This does not change the factors in use (see applyAngleConverterFactors()), so the (relatively slow) divisions can be done outside of a critical section.
| revolutionTime | The crank revolution time in uS. Zero results in zero factors. |
|
inlinestatic |
Makes one pass at nudging the angle to within [0,CRANK_ANGLE_MAX_IGN].
| angle | A crank angle in degrees |
|
inlinestatic |
Converts a crank revolution time to engine speed.
| revolutionTime | The time in µS that one crank revolution takes. Zero if the engine speed is unknown |
|
noexcept |
Set the revolution time, from which some of the degree<-->angle conversions are derived.
Shorthand for applyAngleConverterFactors(calculateAngleConverterFactors(revolutionTime))
| revolutionTime | The crank revolution time. |
|
noexcept |
Converts a time interval in microsecods to the equivalent degrees of angular (crank) rotation at current RPM.
Inverse of angleToTime
| time | Time interval in uS |
|
extern |
The number of crank degrees that the system tracks ignition over.
|
extern |
The number of crank degrees that the system tracks fuel injection over.
|
staticconstexpr |
Maximum time in µS that one crank revolution can take.
|
staticconstexpr |
The maximum rpm that the ECU will attempt to run at.
It is NOT related to the rev limiter, but is instead dictates how fast certain operations will be allowed to run. Lower number gives better performance
|
staticconstexpr |
At 1 RPM, each degree of angular rotation takes this many microseconds.
|
staticconstexpr |
Minimum time in µS that one crank revolution can take.
|
staticconstexpr |
Absolute minimum RPM that the crank math (& therefore all of Speeduino) can be used with.
This is dictated by the use of uint16_t as the base type for storing time --> angle conversion factor (degreesPerMicro)