Alex Pirciu
/
BFMC
a
include/Encoders/quadratureencodertask.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 | * @file quadratureencodertask.hpp |
alexpirciu | 1:ceee5a608e7c | 3 | * @author RBRO/PJ-IU |
alexpirciu | 1:ceee5a608e7c | 4 | * @brief |
alexpirciu | 1:ceee5a608e7c | 5 | * @version 0.1 |
alexpirciu | 1:ceee5a608e7c | 6 | * @date 2018-10-23 |
alexpirciu | 1:ceee5a608e7c | 7 | * |
alexpirciu | 1:ceee5a608e7c | 8 | * @copyright Copyright (c) 2018 |
alexpirciu | 1:ceee5a608e7c | 9 | * |
alexpirciu | 1:ceee5a608e7c | 10 | */ |
alexpirciu | 1:ceee5a608e7c | 11 | #ifndef QUADRATURE_ENCODER_TASK_HPP |
alexpirciu | 1:ceee5a608e7c | 12 | #define QUADRATURE_ENCODER_TASK_HPP |
alexpirciu | 1:ceee5a608e7c | 13 | |
alexpirciu | 1:ceee5a608e7c | 14 | #include <Encoders/encoderinterface.hpp> |
alexpirciu | 1:ceee5a608e7c | 15 | #include <Encoders/QuadratureEncoder.hpp> |
alexpirciu | 1:ceee5a608e7c | 16 | #include <Filter/Filter.hpp> |
alexpirciu | 1:ceee5a608e7c | 17 | |
alexpirciu | 1:ceee5a608e7c | 18 | #include <rtos.h> |
alexpirciu | 1:ceee5a608e7c | 19 | |
alexpirciu | 1:ceee5a608e7c | 20 | namespace encoders{ |
alexpirciu | 1:ceee5a608e7c | 21 | |
alexpirciu | 1:ceee5a608e7c | 22 | /** |
alexpirciu | 1:ceee5a608e7c | 23 | * @brief Rotary encoder with filter interface class |
alexpirciu | 1:ceee5a608e7c | 24 | * |
alexpirciu | 1:ceee5a608e7c | 25 | */ |
alexpirciu | 1:ceee5a608e7c | 26 | class CQuadratureEncoderNonFilteredGetterInterface{ |
alexpirciu | 1:ceee5a608e7c | 27 | public: |
alexpirciu | 1:ceee5a608e7c | 28 | virtual int16_t getNonFilteredCount()=0; |
alexpirciu | 1:ceee5a608e7c | 29 | virtual float getNonFilteredSpeedRps() = 0; |
alexpirciu | 1:ceee5a608e7c | 30 | }; |
alexpirciu | 1:ceee5a608e7c | 31 | |
alexpirciu | 1:ceee5a608e7c | 32 | /** |
alexpirciu | 1:ceee5a608e7c | 33 | * @brief It implements a periodic task, which get the value from the counter and reset it to zero. |
alexpirciu | 1:ceee5a608e7c | 34 | * |
alexpirciu | 1:ceee5a608e7c | 35 | */ |
alexpirciu | 1:ceee5a608e7c | 36 | class CQuadratureEncoderTask:public IEncoderGetter{ |
alexpirciu | 1:ceee5a608e7c | 37 | public: |
alexpirciu | 1:ceee5a608e7c | 38 | CQuadratureEncoderTask(float,encoders::CQuadratureEncoder_TIMX*,uint16_t); |
alexpirciu | 1:ceee5a608e7c | 39 | static void static_callback(void* obj); |
alexpirciu | 1:ceee5a608e7c | 40 | |
alexpirciu | 1:ceee5a608e7c | 41 | void startTimer(); |
alexpirciu | 1:ceee5a608e7c | 42 | protected: |
alexpirciu | 1:ceee5a608e7c | 43 | virtual void _run(); |
alexpirciu | 1:ceee5a608e7c | 44 | virtual int16_t getCount(); |
alexpirciu | 1:ceee5a608e7c | 45 | virtual float getSpeedRps(); |
alexpirciu | 1:ceee5a608e7c | 46 | virtual bool isAbs(){return false;} |
alexpirciu | 1:ceee5a608e7c | 47 | protected: |
alexpirciu | 1:ceee5a608e7c | 48 | encoders::CQuadratureEncoder_TIMX *m_Quadratureencoder; |
alexpirciu | 1:ceee5a608e7c | 49 | int16_t m_encoderCnt; |
alexpirciu | 1:ceee5a608e7c | 50 | const float m_taskperiod_s; |
alexpirciu | 1:ceee5a608e7c | 51 | const uint16_t m_resolution; |
alexpirciu | 1:ceee5a608e7c | 52 | RtosTimer m_timer; |
alexpirciu | 1:ceee5a608e7c | 53 | }; |
alexpirciu | 1:ceee5a608e7c | 54 | |
alexpirciu | 1:ceee5a608e7c | 55 | /** |
alexpirciu | 1:ceee5a608e7c | 56 | * @brief It implements the same functionality than CQuadratureEncoderTask class, but in additional it can filter the values. |
alexpirciu | 1:ceee5a608e7c | 57 | * |
alexpirciu | 1:ceee5a608e7c | 58 | */ |
alexpirciu | 1:ceee5a608e7c | 59 | class CQuadratureEncoderWithFilterTask: public CQuadratureEncoderTask, public CQuadratureEncoderNonFilteredGetterInterface{ |
alexpirciu | 1:ceee5a608e7c | 60 | public: |
alexpirciu | 1:ceee5a608e7c | 61 | CQuadratureEncoderWithFilterTask(float,encoders::CQuadratureEncoder_TIMX *, uint16_t,filter::CFilterFunction<float>&); |
alexpirciu | 1:ceee5a608e7c | 62 | virtual void _run(); |
alexpirciu | 1:ceee5a608e7c | 63 | virtual int16_t getCount(); |
alexpirciu | 1:ceee5a608e7c | 64 | virtual float getSpeedRps(); |
alexpirciu | 1:ceee5a608e7c | 65 | virtual int16_t getNonFilteredCount(); |
alexpirciu | 1:ceee5a608e7c | 66 | virtual float getNonFilteredSpeedRps(); |
alexpirciu | 1:ceee5a608e7c | 67 | protected: |
alexpirciu | 1:ceee5a608e7c | 68 | double m_encoderCntFiltered; |
alexpirciu | 1:ceee5a608e7c | 69 | filter::CFilterFunction<float>& m_filter; |
alexpirciu | 1:ceee5a608e7c | 70 | |
alexpirciu | 1:ceee5a608e7c | 71 | }; |
alexpirciu | 1:ceee5a608e7c | 72 | |
alexpirciu | 1:ceee5a608e7c | 73 | }; // namespace encoders |
alexpirciu | 1:ceee5a608e7c | 74 | |
alexpirciu | 1:ceee5a608e7c | 75 | #endif |