Alex Pirciu
/
BFMC
a
include/Encoders/encoder.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 | ****************************************************************************** |
alexpirciu | 1:ceee5a608e7c | 3 | * @file Encoder.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 encoder |
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 | #ifndef MAG_ENCODER_HPP |
alexpirciu | 1:ceee5a608e7c | 14 | #define MAG_ENCODER_HPP |
alexpirciu | 1:ceee5a608e7c | 15 | |
alexpirciu | 1:ceee5a608e7c | 16 | #include <mbed.h> |
alexpirciu | 1:ceee5a608e7c | 17 | #include<TaskManager/taskmanager.hpp> |
alexpirciu | 1:ceee5a608e7c | 18 | #include<Encoders/encoderinterface.hpp> |
alexpirciu | 1:ceee5a608e7c | 19 | |
alexpirciu | 1:ceee5a608e7c | 20 | //! CCounter class. |
alexpirciu | 1:ceee5a608e7c | 21 | /*! |
alexpirciu | 1:ceee5a608e7c | 22 | * It is used for counting encoder steps. |
alexpirciu | 1:ceee5a608e7c | 23 | */ |
alexpirciu | 1:ceee5a608e7c | 24 | class CCounter |
alexpirciu | 1:ceee5a608e7c | 25 | { |
alexpirciu | 1:ceee5a608e7c | 26 | public: |
alexpirciu | 1:ceee5a608e7c | 27 | /* Constructor */ |
alexpirciu | 1:ceee5a608e7c | 28 | CCounter(PinName f_pin); |
alexpirciu | 1:ceee5a608e7c | 29 | /* Reset method */ |
alexpirciu | 1:ceee5a608e7c | 30 | void reset(); |
alexpirciu | 1:ceee5a608e7c | 31 | /* Increment method */ |
alexpirciu | 1:ceee5a608e7c | 32 | void increment(); |
alexpirciu | 1:ceee5a608e7c | 33 | /* Get counts method */ |
alexpirciu | 1:ceee5a608e7c | 34 | int32_t getCount(); |
alexpirciu | 1:ceee5a608e7c | 35 | /* Increment */ |
alexpirciu | 1:ceee5a608e7c | 36 | static void staticIncrement(void* obj); |
alexpirciu | 1:ceee5a608e7c | 37 | private: |
alexpirciu | 1:ceee5a608e7c | 38 | /* Interrupt object */ |
alexpirciu | 1:ceee5a608e7c | 39 | InterruptIn m_interrupt; |
alexpirciu | 1:ceee5a608e7c | 40 | /* Counts member */ |
alexpirciu | 1:ceee5a608e7c | 41 | volatile int32_t m_count; |
alexpirciu | 1:ceee5a608e7c | 42 | }; |
alexpirciu | 1:ceee5a608e7c | 43 | |
alexpirciu | 1:ceee5a608e7c | 44 | //! CEncoder class. |
alexpirciu | 1:ceee5a608e7c | 45 | /*! |
alexpirciu | 1:ceee5a608e7c | 46 | * It inherits class task::CTask. |
alexpirciu | 1:ceee5a608e7c | 47 | * It is used for computing revolustions per second. |
alexpirciu | 1:ceee5a608e7c | 48 | */ |
alexpirciu | 1:ceee5a608e7c | 49 | class CEncoder: public task::CTask, public:: encoders::IEncoderGetter |
alexpirciu | 1:ceee5a608e7c | 50 | { |
alexpirciu | 1:ceee5a608e7c | 51 | public: |
alexpirciu | 1:ceee5a608e7c | 52 | /* Constructor */ |
alexpirciu | 1:ceee5a608e7c | 53 | CEncoder(uint32_t f_period |
alexpirciu | 1:ceee5a608e7c | 54 | ,float f_period_sec |
alexpirciu | 1:ceee5a608e7c | 55 | ,uint32_t f_cpr |
alexpirciu | 1:ceee5a608e7c | 56 | ,PinName f_pinName); |
alexpirciu | 1:ceee5a608e7c | 57 | /* Get rotations per second */ |
alexpirciu | 1:ceee5a608e7c | 58 | virtual float getSpeedRps(); |
alexpirciu | 1:ceee5a608e7c | 59 | virtual int16_t getCount(); |
alexpirciu | 1:ceee5a608e7c | 60 | virtual bool isAbs(){return true;} |
alexpirciu | 1:ceee5a608e7c | 61 | |
alexpirciu | 1:ceee5a608e7c | 62 | protected: |
alexpirciu | 1:ceee5a608e7c | 63 | /* Run method */ |
alexpirciu | 1:ceee5a608e7c | 64 | virtual void _run(); |
alexpirciu | 1:ceee5a608e7c | 65 | |
alexpirciu | 1:ceee5a608e7c | 66 | /* Counter values */ |
alexpirciu | 1:ceee5a608e7c | 67 | CCounter m_counter; |
alexpirciu | 1:ceee5a608e7c | 68 | /* Period in seconds */ |
alexpirciu | 1:ceee5a608e7c | 69 | const float m_period_sec; |
alexpirciu | 1:ceee5a608e7c | 70 | /* Value of counts per revolution */ |
alexpirciu | 1:ceee5a608e7c | 71 | const uint32_t m_cpr;//count per revolution (rise and fall edges) |
alexpirciu | 1:ceee5a608e7c | 72 | /* Value of rotation per second */ |
alexpirciu | 1:ceee5a608e7c | 73 | float m_rps; |
alexpirciu | 1:ceee5a608e7c | 74 | }; |
alexpirciu | 1:ceee5a608e7c | 75 | |
alexpirciu | 1:ceee5a608e7c | 76 | //! CMagEncoderTime class. |
alexpirciu | 1:ceee5a608e7c | 77 | /*! |
alexpirciu | 1:ceee5a608e7c | 78 | * It is used for computing high/low periods. |
alexpirciu | 1:ceee5a608e7c | 79 | */ |
alexpirciu | 1:ceee5a608e7c | 80 | class CMagEncoderTime |
alexpirciu | 1:ceee5a608e7c | 81 | { |
alexpirciu | 1:ceee5a608e7c | 82 | public: |
alexpirciu | 1:ceee5a608e7c | 83 | /* Constructor */ |
alexpirciu | 1:ceee5a608e7c | 84 | CMagEncoderTime(PinName f_pin); |
alexpirciu | 1:ceee5a608e7c | 85 | /* Callback for rising edge interrupt */ |
alexpirciu | 1:ceee5a608e7c | 86 | void riseCallback(); |
alexpirciu | 1:ceee5a608e7c | 87 | /* Callback for falling edge interrupt */ |
alexpirciu | 1:ceee5a608e7c | 88 | void fallCallback(); |
alexpirciu | 1:ceee5a608e7c | 89 | /* Callback for rising edge interrupt attached to pbject */ |
alexpirciu | 1:ceee5a608e7c | 90 | static void staticRise(void* obj); |
alexpirciu | 1:ceee5a608e7c | 91 | /* Callback for falling edge interrupt attached to pbject */ |
alexpirciu | 1:ceee5a608e7c | 92 | static void staticFall(void* obj); |
alexpirciu | 1:ceee5a608e7c | 93 | /* Get high time */ |
alexpirciu | 1:ceee5a608e7c | 94 | float getHighTime(); |
alexpirciu | 1:ceee5a608e7c | 95 | /* Get low time */ |
alexpirciu | 1:ceee5a608e7c | 96 | float getLowTime(); |
alexpirciu | 1:ceee5a608e7c | 97 | private: |
alexpirciu | 1:ceee5a608e7c | 98 | /* General purpose timer */ |
alexpirciu | 1:ceee5a608e7c | 99 | Timer m_Timer,m_fallTimer; |
alexpirciu | 1:ceee5a608e7c | 100 | /* Digital interrupt input */ |
alexpirciu | 1:ceee5a608e7c | 101 | InterruptIn m_interrupt; |
alexpirciu | 1:ceee5a608e7c | 102 | /* High time */ |
alexpirciu | 1:ceee5a608e7c | 103 | volatile float m_highTime; |
alexpirciu | 1:ceee5a608e7c | 104 | /* Low time */ |
alexpirciu | 1:ceee5a608e7c | 105 | volatile float m_lowTime; |
alexpirciu | 1:ceee5a608e7c | 106 | }; |
alexpirciu | 1:ceee5a608e7c | 107 | #endif |