a

Dependencies:   mbed mbed-rtos

Committer:
alexpirciu
Date:
Thu Mar 28 07:44:42 2019 +0000
Revision:
1:ceee5a608e7c
assa

Who changed what in which revision?

UserRevisionLine numberNew 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