a

Dependencies:   mbed mbed-rtos

include/Controllers/controller.hpp

Committer:
alexpirciu
Date:
2019-03-28
Revision:
1:ceee5a608e7c

File content as of revision 1:ceee5a608e7c:

/**
  ******************************************************************************
  * @file    Controller.hpp
  * @author  RBRO/PJ-IU
  * @version V1.0.0
  * @date    day-month-year
  * @brief   This file contains the class declaration for the controller
  *          functionality.
  ******************************************************************************
 */

/* Include guard */

#ifndef CONTROLLER_HPP
#define CONTROLLER_HPP
#include<cmath>
#include<Controllers/pidcontroller.hpp>

#include <Encoders/encoderinterface.hpp>
#include <Controllers/converters.hpp>

#include <mbed.h>

namespace controllers
{

   /** CControllerSiso class
    * @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. 
    * 
    */
    class CControllerSiso
    {
        /* PID controller declaration*/
        template <class T>
        using  ControllerType=siso::IController<T>;

        public:
            /* Construnctor */
            CControllerSiso(encoders::IEncoderGetter&               f_encoder
                            ,ControllerType<double>&                f_pid
                            ,controllers::IConverter*                   f_converter=NULL);
            /* Set controller reference value */
            void setRef(double                       f_RefRps);
            /* Get controller reference value */
            double getRef();
            /* Get control value */
            double get();
            /* Get error */
            double getError();
            /* Clear PID parameters */
            void clear();
            /* Control action */
            bool control();

        private:
            /* PWM onverter */
            double converter(double f_u);

            /* Enconder object reference */
            encoders::IEncoderGetter&               m_encoder;
            /* PID object reference */
            ControllerType<double>&                 m_pid;
            /* Controller reference */
            double                                  m_RefRps;
            /* Control value */
            double                                  m_u;
            /* Error */
            double                                  m_error;
            /* Converter */
            controllers::IConverter*                m_converter;
            /* Scaled PWM control signal limits */
            const float                                     m_control_sup;
            const float                                     m_control_inf;
            /* Inferior limit of absolut reference */
            const float                                     m_ref_abs_inf;
            /* Inferior and superior limits of absolute speed measurment for standing state */
            const float                                     m_mes_abs_inf;
            const float                                     m_mes_abs_sup;

    };
}; // namespace controllers

#endif