a

Dependencies:   mbed mbed-rtos

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers quadratureencodertask.hpp Source File

quadratureencodertask.hpp

Go to the documentation of this file.
00001 /**
00002  * @file quadratureencodertask.hpp
00003  * @author  RBRO/PJ-IU
00004  * @brief 
00005  * @version 0.1
00006  * @date 2018-10-23
00007  * 
00008  * @copyright Copyright (c) 2018
00009  * 
00010  */
00011 #ifndef QUADRATURE_ENCODER_TASK_HPP
00012 #define QUADRATURE_ENCODER_TASK_HPP
00013 
00014 #include <Encoders/encoderinterface.hpp >
00015 #include <Encoders/QuadratureEncoder.hpp>
00016 #include <Filter/Filter.hpp>
00017 
00018 #include <rtos.h>
00019 
00020 namespace encoders{
00021 
00022 /**
00023  * @brief Rotary encoder with filter interface class
00024  * 
00025  */
00026 class CQuadratureEncoderNonFilteredGetterInterface{
00027     public:
00028       virtual int16_t  getNonFilteredCount()=0;
00029       virtual float getNonFilteredSpeedRps() = 0;
00030 };
00031 
00032 /**
00033  * @brief It implements a periodic task, which get the value from the counter and reset it to zero.
00034  * 
00035  */
00036 class CQuadratureEncoderTask:public IEncoderGetter{
00037     public:
00038       CQuadratureEncoderTask(float,encoders::CQuadratureEncoder_TIMX*,uint16_t);
00039       static void static_callback(void* obj);
00040 
00041       void startTimer();
00042   protected:
00043     virtual void _run();
00044     virtual int16_t getCount();
00045     virtual float getSpeedRps();
00046     virtual bool isAbs(){return false;}
00047   protected:
00048       encoders::CQuadratureEncoder_TIMX *m_Quadratureencoder;
00049       int16_t           m_encoderCnt;
00050       const float       m_taskperiod_s;
00051       const uint16_t    m_resolution;
00052       RtosTimer         m_timer;
00053 };
00054 
00055 /**
00056  * @brief It implements the same functionality than CQuadratureEncoderTask class, but in additional it can filter the values. 
00057  * 
00058  */
00059 class CQuadratureEncoderWithFilterTask: public CQuadratureEncoderTask, public CQuadratureEncoderNonFilteredGetterInterface{
00060     public:
00061       CQuadratureEncoderWithFilterTask(float,encoders::CQuadratureEncoder_TIMX *, uint16_t,filter::CFilterFunction<float> &);
00062       virtual void _run();
00063       virtual int16_t getCount();
00064       virtual float getSpeedRps();
00065       virtual int16_t  getNonFilteredCount();
00066       virtual float getNonFilteredSpeedRps();
00067     protected:
00068       double m_encoderCntFiltered;
00069       filter::CFilterFunction<float> & m_filter;
00070 
00071 };
00072 
00073 }; // namespace encoders
00074 
00075 #endif