Hesu-eco
/
limiteur_vitesse
premiere ebauche
speedlimiter.hpp
- Committer:
- shovelcat
- Date:
- 2018-11-18
- Revision:
- 12:cf97590d9df2
- Parent:
- 10:f0b382368614
- Child:
- 13:47806f4dbfcd
File content as of revision 12:cf97590d9df2:
/* author: Sebastian Pelchat date: october 2018 */ #ifndef SPEED_LIMITER_HPP #define SPEED_LIMITER_HPP #include "mbed.h" #include "recommendedspeed.hpp" class SpeedLimiter { public: static const float TRANSFER_FUNCTION_PERIOD = 0.1; // seconds static const float DISABLE_ECO_ALGO_TRIGGER = 999; // TODO: probably defined somewhere else. static const float ADC_INPUT_MAX_VALUE = 3.3; // Volts static const float ADC_OUTPUT_MAX_VALUE = 3.3; // Volts static const float PEDAL_HI_MIN_VALUE = 0.48; // Volts static const float PEDAL_HI_MAX_VALUE = 2.96; // Volts static const float PEDAL_LO_MIN_VALUE = PEDAL_HI_MIN_VALUE / 2; static const float PEDAL_LO_MAX_VALUE = PEDAL_HI_MAX_VALUE / 2; static const float TORQUE_MAX = 20.0; // Newtons static const float SPEED_MAX = 40.0; SpeedLimiter(const PinName& pedalInHi, const PinName& pedalInLo, const PinName& pedalOutHi, const PinName& pedalOutLo); ~SpeedLimiter(); void ipControllerTransferFunction(); inline float getReferenceSpeed(bool increment = false) { //float retval = _referenceSpeed; Segment& segment = _parcours->getSegment(); float retval = segment.getSpeed(); if (increment) { segment.incrementIndex(); } return retval; } inline float getMeasuredSpeed() { float retval = _measuredSpeed; return retval; } inline void setReferenceSpeed(const float speed) { _referenceSpeed = speed; } inline void setMeasuredSpeed(const float speed) { _measuredSpeed = speed; } inline void setParcours(Parcours* parcours) { _parcours = parcours; } float ecoEnabledAlgorithm(); inline float readAdcTest() { AnalogIn adc(PF_3); return adc.read(); } private: float readAdcPedalHi(); float readAdcPedalLo(); void writeAdcPedalHi(const float voltage); void writeAdcPedalLo(const float voltage); float ecoDisabledAlgorithm(); float boundValue(float value, const float lowerBound, const float upperBound); float voltageToDecimal(const float decimal, const float reference); inline void setOutputPedalVoltageHi(const float voltage) { _outputPedalVoltageHi = voltage; } inline void setOutputPedalVoltageLo(const float voltage) { _outputPedalVoltageLo = voltage; } inline float getOutputPedalVoltageHi() { return _outputPedalVoltageHi; } inline float getOutputPedalVoltageLo() { return _outputPedalVoltageLo; } protected: AnalogIn _pedalInHi; AnalogIn _pedalInLo; AnalogOut _pedalOutHi; AnalogOut _pedalOutLo; volatile float _referenceSpeed; volatile float _measuredSpeed; volatile float _outputPedalVoltageHi; volatile float _outputPedalVoltageLo; Parcours *_parcours; static Serial* pc; // for communication / debugging }; #endif