premiere ebauche

Dependencies:   mbed PinDetect

Committer:
shovelcat
Date:
Sun Nov 18 03:30:57 2018 +0000
Revision:
12:cf97590d9df2
Parent:
10:f0b382368614
Child:
13:47806f4dbfcd
"Plan B" samedi avec Sophia. Ajoute le timestamp, ajouter du code pas encore test pour le CAN (Energy SoC, motorCurrent)

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 4:a8c9f6a13633 33 void ipControllerTransferFunction();
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 4:a8c9f6a13633 59
shovelcat 5:aef1fc6c0df1 60 float ecoEnabledAlgorithm();
shovelcat 5:aef1fc6c0df1 61
shovelcat 6:1a4ed88c9a4b 62 inline float readAdcTest() {
shovelcat 6:1a4ed88c9a4b 63 AnalogIn adc(PF_3);
shovelcat 6:1a4ed88c9a4b 64 return adc.read();
shovelcat 6:1a4ed88c9a4b 65 }
shovelcat 6:1a4ed88c9a4b 66
shovelcat 2:06f128641b62 67 private:
shovelcat 3:4da392d2bae8 68 float readAdcPedalHi();
shovelcat 3:4da392d2bae8 69 float readAdcPedalLo();
shovelcat 3:4da392d2bae8 70 void writeAdcPedalHi(const float voltage);
shovelcat 3:4da392d2bae8 71 void writeAdcPedalLo(const float voltage);
shovelcat 3:4da392d2bae8 72 float ecoDisabledAlgorithm();
shovelcat 4:a8c9f6a13633 73
shovelcat 3:4da392d2bae8 74 float boundValue(float value, const float lowerBound, const float upperBound);
shovelcat 3:4da392d2bae8 75 float voltageToDecimal(const float decimal, const float reference);
shovelcat 4:a8c9f6a13633 76
shovelcat 3:4da392d2bae8 77 inline void setOutputPedalVoltageHi(const float voltage) {
shovelcat 3:4da392d2bae8 78 _outputPedalVoltageHi = voltage;
shovelcat 3:4da392d2bae8 79 }
shovelcat 3:4da392d2bae8 80 inline void setOutputPedalVoltageLo(const float voltage) {
shovelcat 3:4da392d2bae8 81 _outputPedalVoltageLo = voltage;
shovelcat 3:4da392d2bae8 82 }
shovelcat 3:4da392d2bae8 83 inline float getOutputPedalVoltageHi() {
shovelcat 3:4da392d2bae8 84 return _outputPedalVoltageHi;
shovelcat 3:4da392d2bae8 85 }
shovelcat 3:4da392d2bae8 86 inline float getOutputPedalVoltageLo() {
shovelcat 3:4da392d2bae8 87 return _outputPedalVoltageLo;
shovelcat 3:4da392d2bae8 88 }
shovelcat 2:06f128641b62 89
shovelcat 2:06f128641b62 90 protected:
shovelcat 2:06f128641b62 91 AnalogIn _pedalInHi;
shovelcat 2:06f128641b62 92 AnalogIn _pedalInLo;
shovelcat 2:06f128641b62 93 AnalogOut _pedalOutHi;
shovelcat 2:06f128641b62 94 AnalogOut _pedalOutLo;
shovelcat 2:06f128641b62 95
shovelcat 3:4da392d2bae8 96 volatile float _referenceSpeed;
shovelcat 3:4da392d2bae8 97 volatile float _measuredSpeed;
shovelcat 3:4da392d2bae8 98 volatile float _outputPedalVoltageHi;
shovelcat 3:4da392d2bae8 99 volatile float _outputPedalVoltageLo;
shovelcat 10:f0b382368614 100
shovelcat 10:f0b382368614 101 Parcours *_parcours;
shovelcat 3:4da392d2bae8 102
shovelcat 3:4da392d2bae8 103 static Serial* pc; // for communication / debugging
shovelcat 3:4da392d2bae8 104 };
shovelcat 3:4da392d2bae8 105
shovelcat 3:4da392d2bae8 106 #endif