premiere ebauche

Dependencies:   mbed PinDetect

Committer:
LipSer
Date:
Mon Dec 17 20:15:19 2018 +0000
Revision:
15:e9560502e463
Parent:
13:47806f4dbfcd
fin

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