Hesu-eco
/
limiteur_vitesse
premiere ebauche
speedlimiter.hpp@3:4da392d2bae8, 2018-10-18 (annotated)
- Committer:
- shovelcat
- Date:
- Thu Oct 18 17:31:03 2018 +0000
- Revision:
- 3:4da392d2bae8
- Parent:
- 2:06f128641b62
- Child:
- 4:a8c9f6a13633
version avec Objet. version sans eco-conduite (eco disabled) fonctionne sur le vehicule. Reste a valider la fonction de transfert et fonctionner sur le vehicule.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
shovelcat | 2:06f128641b62 | 1 | /* |
shovelcat | 2:06f128641b62 | 2 | author: Sebastian Pelchat |
shovelcat | 2:06f128641b62 | 3 | date: october 2018 |
shovelcat | 2:06f128641b62 | 4 | */ |
shovelcat | 3:4da392d2bae8 | 5 | #ifndef SPEED_LIMITER_HPP |
shovelcat | 3:4da392d2bae8 | 6 | #define SPEED_LIMITER_HPP |
shovelcat | 3:4da392d2bae8 | 7 | |
shovelcat | 2:06f128641b62 | 8 | #include "mbed.h" |
shovelcat | 2:06f128641b62 | 9 | |
shovelcat | 3:4da392d2bae8 | 10 | class SpeedLimiter |
shovelcat | 2:06f128641b62 | 11 | { |
shovelcat | 3:4da392d2bae8 | 12 | static const float TRANSFER_FUNCTION_PERIOD = 0.1; // seconds |
shovelcat | 3:4da392d2bae8 | 13 | static const float DISABLE_ECO_ALGO_TRIGGER = 999; // TODO: probably defined somewhere else. |
shovelcat | 3:4da392d2bae8 | 14 | |
shovelcat | 3:4da392d2bae8 | 15 | static const float ADC_INPUT_MAX_VALUE = 3.3; // Volts |
shovelcat | 3:4da392d2bae8 | 16 | static const float ADC_OUTPUT_MAX_VALUE = 3.3; // Volts |
shovelcat | 3:4da392d2bae8 | 17 | |
shovelcat | 3:4da392d2bae8 | 18 | static const float PEDAL_HI_MIN_VALUE = 0.48; // Volts |
shovelcat | 3:4da392d2bae8 | 19 | static const float PEDAL_HI_MAX_VALUE = 2.96; // Volts |
shovelcat | 3:4da392d2bae8 | 20 | static const float PEDAL_LO_MIN_VALUE = PEDAL_HI_MIN_VALUE / 2; |
shovelcat | 3:4da392d2bae8 | 21 | static const float PEDAL_LO_MAX_VALUE = PEDAL_HI_MAX_VALUE / 2; |
shovelcat | 3:4da392d2bae8 | 22 | |
shovelcat | 3:4da392d2bae8 | 23 | static const float TORQUE_MAX = 20.0; // Newtons |
shovelcat | 3:4da392d2bae8 | 24 | |
shovelcat | 3:4da392d2bae8 | 25 | static const float SPEED_MAX = 40.0; |
shovelcat | 3:4da392d2bae8 | 26 | |
shovelcat | 2:06f128641b62 | 27 | public: |
shovelcat | 2:06f128641b62 | 28 | SpeedLimiter(const PinName& pedalInHi, const PinName& pedalInLo, const PinName& pedalOutHi, const PinName& pedalOutLo); |
shovelcat | 3:4da392d2bae8 | 29 | ~SpeedLimiter(); |
shovelcat | 3:4da392d2bae8 | 30 | void start(); |
shovelcat | 2:06f128641b62 | 31 | |
shovelcat | 3:4da392d2bae8 | 32 | inline float getReferenceSpeed() { |
shovelcat | 3:4da392d2bae8 | 33 | _mutex->lock(); |
shovelcat | 3:4da392d2bae8 | 34 | float retval = _referenceSpeed; |
shovelcat | 3:4da392d2bae8 | 35 | _mutex->unlock(); |
shovelcat | 3:4da392d2bae8 | 36 | return retval; |
shovelcat | 3:4da392d2bae8 | 37 | } |
shovelcat | 3:4da392d2bae8 | 38 | inline float getMeasuredSpeed() { |
shovelcat | 3:4da392d2bae8 | 39 | _mutex->lock(); |
shovelcat | 3:4da392d2bae8 | 40 | float retval = _measuredSpeed; |
shovelcat | 3:4da392d2bae8 | 41 | _mutex->unlock(); |
shovelcat | 3:4da392d2bae8 | 42 | return retval; |
shovelcat | 3:4da392d2bae8 | 43 | } |
shovelcat | 3:4da392d2bae8 | 44 | inline void setReferenceSpeed(const float speed) { |
shovelcat | 3:4da392d2bae8 | 45 | _mutex->lock(); |
shovelcat | 3:4da392d2bae8 | 46 | _referenceSpeed = speed; |
shovelcat | 3:4da392d2bae8 | 47 | _mutex->unlock(); |
shovelcat | 3:4da392d2bae8 | 48 | } |
shovelcat | 3:4da392d2bae8 | 49 | inline void setMeasuredSpeed(const float speed) { |
shovelcat | 3:4da392d2bae8 | 50 | _mutex->lock(); |
shovelcat | 3:4da392d2bae8 | 51 | _measuredSpeed = speed; |
shovelcat | 3:4da392d2bae8 | 52 | _mutex->unlock(); |
shovelcat | 3:4da392d2bae8 | 53 | } |
shovelcat | 3:4da392d2bae8 | 54 | |
shovelcat | 3:4da392d2bae8 | 55 | |
shovelcat | 3:4da392d2bae8 | 56 | |
shovelcat | 2:06f128641b62 | 57 | private: |
shovelcat | 3:4da392d2bae8 | 58 | float readAdcPedalHi(); |
shovelcat | 3:4da392d2bae8 | 59 | float readAdcPedalLo(); |
shovelcat | 3:4da392d2bae8 | 60 | void writeAdcPedalHi(const float voltage); |
shovelcat | 3:4da392d2bae8 | 61 | void writeAdcPedalLo(const float voltage); |
shovelcat | 3:4da392d2bae8 | 62 | float ecoDisabledAlgorithm(); |
shovelcat | 3:4da392d2bae8 | 63 | float ecoEnabledAlgorithm(); |
shovelcat | 3:4da392d2bae8 | 64 | void tickerCallback(); |
shovelcat | 3:4da392d2bae8 | 65 | void ipControllerTransferFunction(); |
shovelcat | 3:4da392d2bae8 | 66 | |
shovelcat | 3:4da392d2bae8 | 67 | float boundValue(float value, const float lowerBound, const float upperBound); |
shovelcat | 3:4da392d2bae8 | 68 | float voltageToDecimal(const float decimal, const float reference); |
shovelcat | 3:4da392d2bae8 | 69 | |
shovelcat | 3:4da392d2bae8 | 70 | inline void setOutputPedalVoltageHi(const float voltage) { |
shovelcat | 3:4da392d2bae8 | 71 | _outputPedalVoltageHi = voltage; |
shovelcat | 3:4da392d2bae8 | 72 | } |
shovelcat | 3:4da392d2bae8 | 73 | inline void setOutputPedalVoltageLo(const float voltage) { |
shovelcat | 3:4da392d2bae8 | 74 | _outputPedalVoltageLo = voltage; |
shovelcat | 3:4da392d2bae8 | 75 | } |
shovelcat | 3:4da392d2bae8 | 76 | inline float getOutputPedalVoltageHi() { |
shovelcat | 3:4da392d2bae8 | 77 | return _outputPedalVoltageHi; |
shovelcat | 3:4da392d2bae8 | 78 | } |
shovelcat | 3:4da392d2bae8 | 79 | inline float getOutputPedalVoltageLo() { |
shovelcat | 3:4da392d2bae8 | 80 | return _outputPedalVoltageLo; |
shovelcat | 3:4da392d2bae8 | 81 | } |
shovelcat | 2:06f128641b62 | 82 | |
shovelcat | 2:06f128641b62 | 83 | protected: |
shovelcat | 2:06f128641b62 | 84 | AnalogIn _pedalInHi; |
shovelcat | 2:06f128641b62 | 85 | AnalogIn _pedalInLo; |
shovelcat | 2:06f128641b62 | 86 | AnalogOut _pedalOutHi; |
shovelcat | 2:06f128641b62 | 87 | AnalogOut _pedalOutLo; |
shovelcat | 2:06f128641b62 | 88 | |
shovelcat | 3:4da392d2bae8 | 89 | volatile float _referenceSpeed; |
shovelcat | 3:4da392d2bae8 | 90 | volatile float _measuredSpeed; |
shovelcat | 3:4da392d2bae8 | 91 | volatile float _outputPedalVoltageHi; |
shovelcat | 3:4da392d2bae8 | 92 | volatile float _outputPedalVoltageLo; |
shovelcat | 3:4da392d2bae8 | 93 | |
shovelcat | 3:4da392d2bae8 | 94 | Ticker* _ticker; |
shovelcat | 3:4da392d2bae8 | 95 | Mutex* _mutex; |
shovelcat | 2:06f128641b62 | 96 | |
shovelcat | 3:4da392d2bae8 | 97 | static Serial* pc; // for communication / debugging |
shovelcat | 3:4da392d2bae8 | 98 | }; |
shovelcat | 3:4da392d2bae8 | 99 | |
shovelcat | 3:4da392d2bae8 | 100 | #endif |