Alex Pirciu
/
BFMC
a
include/Controllers/controller.hpp@1:ceee5a608e7c, 2019-03-28 (annotated)
- Committer:
- alexpirciu
- Date:
- Thu Mar 28 07:44:42 2019 +0000
- Revision:
- 1:ceee5a608e7c
assa
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
alexpirciu | 1:ceee5a608e7c | 1 | /** |
alexpirciu | 1:ceee5a608e7c | 2 | ****************************************************************************** |
alexpirciu | 1:ceee5a608e7c | 3 | * @file Controller.hpp |
alexpirciu | 1:ceee5a608e7c | 4 | * @author RBRO/PJ-IU |
alexpirciu | 1:ceee5a608e7c | 5 | * @version V1.0.0 |
alexpirciu | 1:ceee5a608e7c | 6 | * @date day-month-year |
alexpirciu | 1:ceee5a608e7c | 7 | * @brief This file contains the class declaration for the controller |
alexpirciu | 1:ceee5a608e7c | 8 | * functionality. |
alexpirciu | 1:ceee5a608e7c | 9 | ****************************************************************************** |
alexpirciu | 1:ceee5a608e7c | 10 | */ |
alexpirciu | 1:ceee5a608e7c | 11 | |
alexpirciu | 1:ceee5a608e7c | 12 | /* Include guard */ |
alexpirciu | 1:ceee5a608e7c | 13 | |
alexpirciu | 1:ceee5a608e7c | 14 | #ifndef CONTROLLER_HPP |
alexpirciu | 1:ceee5a608e7c | 15 | #define CONTROLLER_HPP |
alexpirciu | 1:ceee5a608e7c | 16 | #include<cmath> |
alexpirciu | 1:ceee5a608e7c | 17 | #include<Controllers/pidcontroller.hpp> |
alexpirciu | 1:ceee5a608e7c | 18 | |
alexpirciu | 1:ceee5a608e7c | 19 | #include <Encoders/encoderinterface.hpp> |
alexpirciu | 1:ceee5a608e7c | 20 | #include <Controllers/converters.hpp> |
alexpirciu | 1:ceee5a608e7c | 21 | |
alexpirciu | 1:ceee5a608e7c | 22 | #include <mbed.h> |
alexpirciu | 1:ceee5a608e7c | 23 | |
alexpirciu | 1:ceee5a608e7c | 24 | namespace controllers |
alexpirciu | 1:ceee5a608e7c | 25 | { |
alexpirciu | 1:ceee5a608e7c | 26 | |
alexpirciu | 1:ceee5a608e7c | 27 | /** CControllerSiso class |
alexpirciu | 1:ceee5a608e7c | 28 | * @brief It implements a controller with a single input and a single output. It needs an encoder getter interface to get the measured values, a controller to calculate the control signal. It can be completed with a converter to convert the measaurment unit of the control signal. |
alexpirciu | 1:ceee5a608e7c | 29 | * |
alexpirciu | 1:ceee5a608e7c | 30 | */ |
alexpirciu | 1:ceee5a608e7c | 31 | class CControllerSiso |
alexpirciu | 1:ceee5a608e7c | 32 | { |
alexpirciu | 1:ceee5a608e7c | 33 | /* PID controller declaration*/ |
alexpirciu | 1:ceee5a608e7c | 34 | template <class T> |
alexpirciu | 1:ceee5a608e7c | 35 | using ControllerType=siso::IController<T>; |
alexpirciu | 1:ceee5a608e7c | 36 | |
alexpirciu | 1:ceee5a608e7c | 37 | public: |
alexpirciu | 1:ceee5a608e7c | 38 | /* Construnctor */ |
alexpirciu | 1:ceee5a608e7c | 39 | CControllerSiso(encoders::IEncoderGetter& f_encoder |
alexpirciu | 1:ceee5a608e7c | 40 | ,ControllerType<double>& f_pid |
alexpirciu | 1:ceee5a608e7c | 41 | ,controllers::IConverter* f_converter=NULL); |
alexpirciu | 1:ceee5a608e7c | 42 | /* Set controller reference value */ |
alexpirciu | 1:ceee5a608e7c | 43 | void setRef(double f_RefRps); |
alexpirciu | 1:ceee5a608e7c | 44 | /* Get controller reference value */ |
alexpirciu | 1:ceee5a608e7c | 45 | double getRef(); |
alexpirciu | 1:ceee5a608e7c | 46 | /* Get control value */ |
alexpirciu | 1:ceee5a608e7c | 47 | double get(); |
alexpirciu | 1:ceee5a608e7c | 48 | /* Get error */ |
alexpirciu | 1:ceee5a608e7c | 49 | double getError(); |
alexpirciu | 1:ceee5a608e7c | 50 | /* Clear PID parameters */ |
alexpirciu | 1:ceee5a608e7c | 51 | void clear(); |
alexpirciu | 1:ceee5a608e7c | 52 | /* Control action */ |
alexpirciu | 1:ceee5a608e7c | 53 | bool control(); |
alexpirciu | 1:ceee5a608e7c | 54 | |
alexpirciu | 1:ceee5a608e7c | 55 | private: |
alexpirciu | 1:ceee5a608e7c | 56 | /* PWM onverter */ |
alexpirciu | 1:ceee5a608e7c | 57 | double converter(double f_u); |
alexpirciu | 1:ceee5a608e7c | 58 | |
alexpirciu | 1:ceee5a608e7c | 59 | /* Enconder object reference */ |
alexpirciu | 1:ceee5a608e7c | 60 | encoders::IEncoderGetter& m_encoder; |
alexpirciu | 1:ceee5a608e7c | 61 | /* PID object reference */ |
alexpirciu | 1:ceee5a608e7c | 62 | ControllerType<double>& m_pid; |
alexpirciu | 1:ceee5a608e7c | 63 | /* Controller reference */ |
alexpirciu | 1:ceee5a608e7c | 64 | double m_RefRps; |
alexpirciu | 1:ceee5a608e7c | 65 | /* Control value */ |
alexpirciu | 1:ceee5a608e7c | 66 | double m_u; |
alexpirciu | 1:ceee5a608e7c | 67 | /* Error */ |
alexpirciu | 1:ceee5a608e7c | 68 | double m_error; |
alexpirciu | 1:ceee5a608e7c | 69 | /* Converter */ |
alexpirciu | 1:ceee5a608e7c | 70 | controllers::IConverter* m_converter; |
alexpirciu | 1:ceee5a608e7c | 71 | /* Scaled PWM control signal limits */ |
alexpirciu | 1:ceee5a608e7c | 72 | const float m_control_sup; |
alexpirciu | 1:ceee5a608e7c | 73 | const float m_control_inf; |
alexpirciu | 1:ceee5a608e7c | 74 | /* Inferior limit of absolut reference */ |
alexpirciu | 1:ceee5a608e7c | 75 | const float m_ref_abs_inf; |
alexpirciu | 1:ceee5a608e7c | 76 | /* Inferior and superior limits of absolute speed measurment for standing state */ |
alexpirciu | 1:ceee5a608e7c | 77 | const float m_mes_abs_inf; |
alexpirciu | 1:ceee5a608e7c | 78 | const float m_mes_abs_sup; |
alexpirciu | 1:ceee5a608e7c | 79 | |
alexpirciu | 1:ceee5a608e7c | 80 | }; |
alexpirciu | 1:ceee5a608e7c | 81 | }; // namespace controllers |
alexpirciu | 1:ceee5a608e7c | 82 | |
alexpirciu | 1:ceee5a608e7c | 83 | #endif |