Hesu-eco
/
limiteur_vitesse
premiere ebauche
speedlimiter.hpp@15:e9560502e463, 2018-12-17 (annotated)
- Committer:
- LipSer
- Date:
- Mon Dec 17 20:15:19 2018 +0000
- Revision:
- 15:e9560502e463
- Parent:
- 13:47806f4dbfcd
fin
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 | 10:f0b382368614 | 9 | #include "recommendedspeed.hpp" |
shovelcat | 2:06f128641b62 | 10 | |
shovelcat | 3:4da392d2bae8 | 11 | class SpeedLimiter |
shovelcat | 2:06f128641b62 | 12 | { |
shovelcat | 4:a8c9f6a13633 | 13 | public: |
shovelcat | 4:a8c9f6a13633 | 14 | |
shovelcat | 3:4da392d2bae8 | 15 | static const float TRANSFER_FUNCTION_PERIOD = 0.1; // seconds |
shovelcat | 3:4da392d2bae8 | 16 | static const float DISABLE_ECO_ALGO_TRIGGER = 999; // TODO: probably defined somewhere else. |
shovelcat | 3:4da392d2bae8 | 17 | |
shovelcat | 3:4da392d2bae8 | 18 | static const float ADC_INPUT_MAX_VALUE = 3.3; // Volts |
shovelcat | 3:4da392d2bae8 | 19 | static const float ADC_OUTPUT_MAX_VALUE = 3.3; // Volts |
shovelcat | 3:4da392d2bae8 | 20 | |
shovelcat | 3:4da392d2bae8 | 21 | static const float PEDAL_HI_MIN_VALUE = 0.48; // Volts |
shovelcat | 3:4da392d2bae8 | 22 | static const float PEDAL_HI_MAX_VALUE = 2.96; // Volts |
shovelcat | 3:4da392d2bae8 | 23 | static const float PEDAL_LO_MIN_VALUE = PEDAL_HI_MIN_VALUE / 2; |
shovelcat | 3:4da392d2bae8 | 24 | static const float PEDAL_LO_MAX_VALUE = PEDAL_HI_MAX_VALUE / 2; |
shovelcat | 4:a8c9f6a13633 | 25 | |
shovelcat | 3:4da392d2bae8 | 26 | static const float TORQUE_MAX = 20.0; // Newtons |
shovelcat | 4:a8c9f6a13633 | 27 | |
shovelcat | 3:4da392d2bae8 | 28 | static const float SPEED_MAX = 40.0; |
shovelcat | 3:4da392d2bae8 | 29 | |
shovelcat | 2:06f128641b62 | 30 | SpeedLimiter(const PinName& pedalInHi, const PinName& pedalInLo, const PinName& pedalOutHi, const PinName& pedalOutLo); |
shovelcat | 3:4da392d2bae8 | 31 | ~SpeedLimiter(); |
shovelcat | 5:aef1fc6c0df1 | 32 | |
shovelcat | 13:47806f4dbfcd | 33 | void controllerCallbackFunction(); |
shovelcat | 2:06f128641b62 | 34 | |
shovelcat | 10:f0b382368614 | 35 | inline float getReferenceSpeed(bool increment = false) { |
shovelcat | 10:f0b382368614 | 36 | //float retval = _referenceSpeed; |
shovelcat | 10:f0b382368614 | 37 | Segment& segment = _parcours->getSegment(); |
shovelcat | 10:f0b382368614 | 38 | float retval = segment.getSpeed(); |
shovelcat | 10:f0b382368614 | 39 | if (increment) |
shovelcat | 10:f0b382368614 | 40 | { |
shovelcat | 10:f0b382368614 | 41 | segment.incrementIndex(); |
shovelcat | 10:f0b382368614 | 42 | } |
shovelcat | 3:4da392d2bae8 | 43 | return retval; |
shovelcat | 3:4da392d2bae8 | 44 | } |
shovelcat | 3:4da392d2bae8 | 45 | inline float getMeasuredSpeed() { |
shovelcat | 3:4da392d2bae8 | 46 | float retval = _measuredSpeed; |
shovelcat | 3:4da392d2bae8 | 47 | return retval; |
shovelcat | 3:4da392d2bae8 | 48 | } |
shovelcat | 3:4da392d2bae8 | 49 | inline void setReferenceSpeed(const float speed) { |
shovelcat | 3:4da392d2bae8 | 50 | _referenceSpeed = speed; |
shovelcat | 3:4da392d2bae8 | 51 | } |
shovelcat | 3:4da392d2bae8 | 52 | inline void setMeasuredSpeed(const float speed) { |
shovelcat | 3:4da392d2bae8 | 53 | _measuredSpeed = speed; |
shovelcat | 3:4da392d2bae8 | 54 | } |
shovelcat | 10:f0b382368614 | 55 | |
shovelcat | 10:f0b382368614 | 56 | inline void setParcours(Parcours* parcours) { |
shovelcat | 10:f0b382368614 | 57 | _parcours = parcours; |
shovelcat | 10:f0b382368614 | 58 | } |
shovelcat | 5:aef1fc6c0df1 | 59 | |
shovelcat | 6:1a4ed88c9a4b | 60 | inline float readAdcTest() { |
shovelcat | 13:47806f4dbfcd | 61 | AnalogIn adc(PF_10); |
shovelcat | 6:1a4ed88c9a4b | 62 | return adc.read(); |
shovelcat | 6:1a4ed88c9a4b | 63 | } |
shovelcat | 6:1a4ed88c9a4b | 64 | |
shovelcat | 2:06f128641b62 | 65 | private: |
shovelcat | 3:4da392d2bae8 | 66 | float readAdcPedalHi(); |
shovelcat | 3:4da392d2bae8 | 67 | float readAdcPedalLo(); |
shovelcat | 3:4da392d2bae8 | 68 | void writeAdcPedalHi(const float voltage); |
shovelcat | 3:4da392d2bae8 | 69 | void writeAdcPedalLo(const float voltage); |
shovelcat | 3:4da392d2bae8 | 70 | float ecoDisabledAlgorithm(); |
shovelcat | 13:47806f4dbfcd | 71 | float ecoEnabledAlgorithm(); |
shovelcat | 13:47806f4dbfcd | 72 | double ipControlFunction(const double reference, const double measured, const bool reset = false); |
shovelcat | 13:47806f4dbfcd | 73 | double piControlFunction(const double reference, const double measured, const bool reset = false); |
shovelcat | 4:a8c9f6a13633 | 74 | |
shovelcat | 3:4da392d2bae8 | 75 | float boundValue(float value, const float lowerBound, const float upperBound); |
shovelcat | 3:4da392d2bae8 | 76 | float voltageToDecimal(const float decimal, const float reference); |
shovelcat | 4:a8c9f6a13633 | 77 | |
shovelcat | 3:4da392d2bae8 | 78 | inline void setOutputPedalVoltageHi(const float voltage) { |
shovelcat | 3:4da392d2bae8 | 79 | _outputPedalVoltageHi = voltage; |
shovelcat | 3:4da392d2bae8 | 80 | } |
shovelcat | 3:4da392d2bae8 | 81 | inline void setOutputPedalVoltageLo(const float voltage) { |
shovelcat | 3:4da392d2bae8 | 82 | _outputPedalVoltageLo = voltage; |
shovelcat | 3:4da392d2bae8 | 83 | } |
shovelcat | 3:4da392d2bae8 | 84 | inline float getOutputPedalVoltageHi() { |
shovelcat | 3:4da392d2bae8 | 85 | return _outputPedalVoltageHi; |
shovelcat | 3:4da392d2bae8 | 86 | } |
shovelcat | 3:4da392d2bae8 | 87 | inline float getOutputPedalVoltageLo() { |
shovelcat | 3:4da392d2bae8 | 88 | return _outputPedalVoltageLo; |
shovelcat | 3:4da392d2bae8 | 89 | } |
shovelcat | 2:06f128641b62 | 90 | |
shovelcat | 2:06f128641b62 | 91 | protected: |
shovelcat | 2:06f128641b62 | 92 | AnalogIn _pedalInHi; |
shovelcat | 2:06f128641b62 | 93 | AnalogIn _pedalInLo; |
shovelcat | 2:06f128641b62 | 94 | AnalogOut _pedalOutHi; |
shovelcat | 2:06f128641b62 | 95 | AnalogOut _pedalOutLo; |
shovelcat | 2:06f128641b62 | 96 | |
shovelcat | 3:4da392d2bae8 | 97 | volatile float _referenceSpeed; |
shovelcat | 3:4da392d2bae8 | 98 | volatile float _measuredSpeed; |
shovelcat | 3:4da392d2bae8 | 99 | volatile float _outputPedalVoltageHi; |
shovelcat | 3:4da392d2bae8 | 100 | volatile float _outputPedalVoltageLo; |
shovelcat | 10:f0b382368614 | 101 | |
shovelcat | 10:f0b382368614 | 102 | Parcours *_parcours; |
shovelcat | 3:4da392d2bae8 | 103 | |
shovelcat | 3:4da392d2bae8 | 104 | static Serial* pc; // for communication / debugging |
shovelcat | 3:4da392d2bae8 | 105 | }; |
shovelcat | 3:4da392d2bae8 | 106 | |
shovelcat | 3:4da392d2bae8 | 107 | #endif |