premiere ebauche

Dependencies:   mbed PinDetect

Committer:
shovelcat
Date:
Tue Oct 23 14:19:54 2018 +0000
Revision:
4:a8c9f6a13633
Parent:
3:4da392d2bae8
Child:
5:aef1fc6c0df1
updated

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 4:a8c9f6a13633 12 public:
shovelcat 4:a8c9f6a13633 13
shovelcat 3:4da392d2bae8 14 static const float TRANSFER_FUNCTION_PERIOD = 0.1; // seconds
shovelcat 3:4da392d2bae8 15 static const float DISABLE_ECO_ALGO_TRIGGER = 999; // TODO: probably defined somewhere else.
shovelcat 3:4da392d2bae8 16
shovelcat 3:4da392d2bae8 17 static const float ADC_INPUT_MAX_VALUE = 3.3; // Volts
shovelcat 3:4da392d2bae8 18 static const float ADC_OUTPUT_MAX_VALUE = 3.3; // Volts
shovelcat 3:4da392d2bae8 19
shovelcat 3:4da392d2bae8 20 static const float PEDAL_HI_MIN_VALUE = 0.48; // Volts
shovelcat 3:4da392d2bae8 21 static const float PEDAL_HI_MAX_VALUE = 2.96; // Volts
shovelcat 3:4da392d2bae8 22 static const float PEDAL_LO_MIN_VALUE = PEDAL_HI_MIN_VALUE / 2;
shovelcat 3:4da392d2bae8 23 static const float PEDAL_LO_MAX_VALUE = PEDAL_HI_MAX_VALUE / 2;
shovelcat 4:a8c9f6a13633 24
shovelcat 3:4da392d2bae8 25 static const float TORQUE_MAX = 20.0; // Newtons
shovelcat 4:a8c9f6a13633 26
shovelcat 3:4da392d2bae8 27 static const float SPEED_MAX = 40.0;
shovelcat 3:4da392d2bae8 28
shovelcat 2:06f128641b62 29 SpeedLimiter(const PinName& pedalInHi, const PinName& pedalInLo, const PinName& pedalOutHi, const PinName& pedalOutLo);
shovelcat 3:4da392d2bae8 30 ~SpeedLimiter();
shovelcat 4:a8c9f6a13633 31
shovelcat 4:a8c9f6a13633 32 void ipControllerTransferFunction();
shovelcat 2:06f128641b62 33
shovelcat 3:4da392d2bae8 34 inline float getReferenceSpeed() {
shovelcat 3:4da392d2bae8 35 float retval = _referenceSpeed;
shovelcat 3:4da392d2bae8 36 return retval;
shovelcat 3:4da392d2bae8 37 }
shovelcat 3:4da392d2bae8 38 inline float getMeasuredSpeed() {
shovelcat 3:4da392d2bae8 39 float retval = _measuredSpeed;
shovelcat 3:4da392d2bae8 40 return retval;
shovelcat 3:4da392d2bae8 41 }
shovelcat 3:4da392d2bae8 42 inline void setReferenceSpeed(const float speed) {
shovelcat 3:4da392d2bae8 43 _referenceSpeed = speed;
shovelcat 3:4da392d2bae8 44 }
shovelcat 3:4da392d2bae8 45 inline void setMeasuredSpeed(const float speed) {
shovelcat 3:4da392d2bae8 46 _measuredSpeed = speed;
shovelcat 3:4da392d2bae8 47 }
shovelcat 4:a8c9f6a13633 48
shovelcat 4:a8c9f6a13633 49
shovelcat 4:a8c9f6a13633 50
shovelcat 2:06f128641b62 51 private:
shovelcat 3:4da392d2bae8 52 float readAdcPedalHi();
shovelcat 3:4da392d2bae8 53 float readAdcPedalLo();
shovelcat 3:4da392d2bae8 54 void writeAdcPedalHi(const float voltage);
shovelcat 3:4da392d2bae8 55 void writeAdcPedalLo(const float voltage);
shovelcat 3:4da392d2bae8 56 float ecoDisabledAlgorithm();
shovelcat 3:4da392d2bae8 57 float ecoEnabledAlgorithm();
shovelcat 4:a8c9f6a13633 58
shovelcat 3:4da392d2bae8 59 float boundValue(float value, const float lowerBound, const float upperBound);
shovelcat 3:4da392d2bae8 60 float voltageToDecimal(const float decimal, const float reference);
shovelcat 4:a8c9f6a13633 61
shovelcat 3:4da392d2bae8 62 inline void setOutputPedalVoltageHi(const float voltage) {
shovelcat 3:4da392d2bae8 63 _outputPedalVoltageHi = voltage;
shovelcat 3:4da392d2bae8 64 }
shovelcat 3:4da392d2bae8 65 inline void setOutputPedalVoltageLo(const float voltage) {
shovelcat 3:4da392d2bae8 66 _outputPedalVoltageLo = voltage;
shovelcat 3:4da392d2bae8 67 }
shovelcat 3:4da392d2bae8 68 inline float getOutputPedalVoltageHi() {
shovelcat 3:4da392d2bae8 69 return _outputPedalVoltageHi;
shovelcat 3:4da392d2bae8 70 }
shovelcat 3:4da392d2bae8 71 inline float getOutputPedalVoltageLo() {
shovelcat 3:4da392d2bae8 72 return _outputPedalVoltageLo;
shovelcat 3:4da392d2bae8 73 }
shovelcat 2:06f128641b62 74
shovelcat 2:06f128641b62 75 protected:
shovelcat 2:06f128641b62 76 AnalogIn _pedalInHi;
shovelcat 2:06f128641b62 77 AnalogIn _pedalInLo;
shovelcat 2:06f128641b62 78 AnalogOut _pedalOutHi;
shovelcat 2:06f128641b62 79 AnalogOut _pedalOutLo;
shovelcat 2:06f128641b62 80
shovelcat 3:4da392d2bae8 81 volatile float _referenceSpeed;
shovelcat 3:4da392d2bae8 82 volatile float _measuredSpeed;
shovelcat 3:4da392d2bae8 83 volatile float _outputPedalVoltageHi;
shovelcat 3:4da392d2bae8 84 volatile float _outputPedalVoltageLo;
shovelcat 3:4da392d2bae8 85
shovelcat 3:4da392d2bae8 86 static Serial* pc; // for communication / debugging
shovelcat 3:4da392d2bae8 87 };
shovelcat 3:4da392d2bae8 88
shovelcat 3:4da392d2bae8 89 #endif