premiere ebauche

Dependencies:   mbed PinDetect

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?

UserRevisionLine numberNew 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