a

Dependencies:   mbed mbed-rtos

Committer:
alexpirciu
Date:
Thu Mar 28 07:44:42 2019 +0000
Revision:
1:ceee5a608e7c
assa

Who changed what in which revision?

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