Alex Pirciu
/
BFMC
a
Embed:
(wiki syntax)
Show/hide line numbers
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
Generated on Tue Jul 12 2022 22:40:51 by 1.7.2