premiere ebauche

Dependencies:   mbed PinDetect

Committer:
shovelcat
Date:
Thu Oct 25 22:30:50 2018 +0000
Revision:
6:1a4ed88c9a4b
Parent:
5:aef1fc6c0df1
Child:
10:f0b382368614
PI calibr? et fonctionnel ! :D

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 5:aef1fc6c0df1 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 5:aef1fc6c0df1 49 float ecoEnabledAlgorithm();
shovelcat 5:aef1fc6c0df1 50
shovelcat 6:1a4ed88c9a4b 51 inline float readAdcTest() {
shovelcat 6:1a4ed88c9a4b 52 AnalogIn adc(PF_3);
shovelcat 6:1a4ed88c9a4b 53 return adc.read();
shovelcat 6:1a4ed88c9a4b 54 }
shovelcat 6:1a4ed88c9a4b 55
shovelcat 2:06f128641b62 56 private:
shovelcat 3:4da392d2bae8 57 float readAdcPedalHi();
shovelcat 3:4da392d2bae8 58 float readAdcPedalLo();
shovelcat 3:4da392d2bae8 59 void writeAdcPedalHi(const float voltage);
shovelcat 3:4da392d2bae8 60 void writeAdcPedalLo(const float voltage);
shovelcat 3:4da392d2bae8 61 float ecoDisabledAlgorithm();
shovelcat 4:a8c9f6a13633 62
shovelcat 3:4da392d2bae8 63 float boundValue(float value, const float lowerBound, const float upperBound);
shovelcat 3:4da392d2bae8 64 float voltageToDecimal(const float decimal, const float reference);
shovelcat 4:a8c9f6a13633 65
shovelcat 3:4da392d2bae8 66 inline void setOutputPedalVoltageHi(const float voltage) {
shovelcat 3:4da392d2bae8 67 _outputPedalVoltageHi = voltage;
shovelcat 3:4da392d2bae8 68 }
shovelcat 3:4da392d2bae8 69 inline void setOutputPedalVoltageLo(const float voltage) {
shovelcat 3:4da392d2bae8 70 _outputPedalVoltageLo = voltage;
shovelcat 3:4da392d2bae8 71 }
shovelcat 3:4da392d2bae8 72 inline float getOutputPedalVoltageHi() {
shovelcat 3:4da392d2bae8 73 return _outputPedalVoltageHi;
shovelcat 3:4da392d2bae8 74 }
shovelcat 3:4da392d2bae8 75 inline float getOutputPedalVoltageLo() {
shovelcat 3:4da392d2bae8 76 return _outputPedalVoltageLo;
shovelcat 3:4da392d2bae8 77 }
shovelcat 2:06f128641b62 78
shovelcat 2:06f128641b62 79 protected:
shovelcat 2:06f128641b62 80 AnalogIn _pedalInHi;
shovelcat 2:06f128641b62 81 AnalogIn _pedalInLo;
shovelcat 2:06f128641b62 82 AnalogOut _pedalOutHi;
shovelcat 2:06f128641b62 83 AnalogOut _pedalOutLo;
shovelcat 2:06f128641b62 84
shovelcat 3:4da392d2bae8 85 volatile float _referenceSpeed;
shovelcat 3:4da392d2bae8 86 volatile float _measuredSpeed;
shovelcat 3:4da392d2bae8 87 volatile float _outputPedalVoltageHi;
shovelcat 3:4da392d2bae8 88 volatile float _outputPedalVoltageLo;
shovelcat 3:4da392d2bae8 89
shovelcat 3:4da392d2bae8 90 static Serial* pc; // for communication / debugging
shovelcat 3:4da392d2bae8 91 };
shovelcat 3:4da392d2bae8 92
shovelcat 3:4da392d2bae8 93 #endif