Tachometer library

Dependents:   ES202_FinalProject_workingExample DREAMTEAM

Fork of Tach by John Donnal

Committer:
jdonnal
Date:
Fri Mar 02 16:52:58 2018 +0000
Revision:
0:c165325c9e3f
Child:
1:b17c9f1d9d5c
Initial Commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jdonnal 0:c165325c9e3f 1
jdonnal 0:c165325c9e3f 2 /* Single Channel Encoder as Speedometer
jdonnal 0:c165325c9e3f 3 John Donnal 2018
jdonnal 0:c165325c9e3f 4 */
jdonnal 0:c165325c9e3f 5
jdonnal 0:c165325c9e3f 6 #ifndef TACH_H
jdonnal 0:c165325c9e3f 7 #define TACH_H
jdonnal 0:c165325c9e3f 8
jdonnal 0:c165325c9e3f 9 /**
jdonnal 0:c165325c9e3f 10 * Includes
jdonnal 0:c165325c9e3f 11 */
jdonnal 0:c165325c9e3f 12 #include "mbed.h"
jdonnal 0:c165325c9e3f 13
jdonnal 0:c165325c9e3f 14 /**
jdonnal 0:c165325c9e3f 15 * Defines
jdonnal 0:c165325c9e3f 16 */
jdonnal 0:c165325c9e3f 17 #define NSAMP 3
jdonnal 0:c165325c9e3f 18
jdonnal 0:c165325c9e3f 19 /**
jdonnal 0:c165325c9e3f 20 * Tach Interface.
jdonnal 0:c165325c9e3f 21 */
jdonnal 0:c165325c9e3f 22 class Tach {
jdonnal 0:c165325c9e3f 23
jdonnal 0:c165325c9e3f 24 public:
jdonnal 0:c165325c9e3f 25
jdonnal 0:c165325c9e3f 26 /**
jdonnal 0:c165325c9e3f 27 * Constructor.
jdonnal 0:c165325c9e3f 28 *
jdonnal 0:c165325c9e3f 29 * Tracks rising and falling edges with interrupts, provides
jdonnal 0:c165325c9e3f 30 * rotations per second (Hz) output
jdonnal 0:c165325c9e3f 31 *
jdonnal 0:c165325c9e3f 32 * @param input mbed pin for input channel.
jdonnal 0:c165325c9e3f 33 * @param pulsesPerRev Number of pulses in one revolution.
jdonnal 0:c165325c9e3f 34 * @param encoding The encoding to use. Uses X2 encoding by default. X2
jdonnal 0:c165325c9e3f 35 */
jdonnal 0:c165325c9e3f 36 Tach(PinName input, int pulsesPerRev);
jdonnal 0:c165325c9e3f 37
jdonnal 0:c165325c9e3f 38 /**
jdonnal 0:c165325c9e3f 39 * Read the state of the encoder.
jdonnal 0:c165325c9e3f 40 *
jdonnal 0:c165325c9e3f 41 * @return The current state of the encoder as a 2-bit number, where:
jdonnal 0:c165325c9e3f 42 * bit 1 = The reading from channel B
jdonnal 0:c165325c9e3f 43 * bit 2 = The reading from channel A
jdonnal 0:c165325c9e3f 44 */
jdonnal 0:c165325c9e3f 45 float getSpeed(void);
jdonnal 0:c165325c9e3f 46 int getCount(void);
jdonnal 0:c165325c9e3f 47
jdonnal 0:c165325c9e3f 48 private:
jdonnal 0:c165325c9e3f 49
jdonnal 0:c165325c9e3f 50 /**
jdonnal 0:c165325c9e3f 51 * Update the pulse count.
jdonnal 0:c165325c9e3f 52 *
jdonnal 0:c165325c9e3f 53 * Called on every rising/falling edge of input
jdonnal 0:c165325c9e3f 54 *
jdonnal 0:c165325c9e3f 55 * update current speed estimate
jdonnal 0:c165325c9e3f 56 */
jdonnal 0:c165325c9e3f 57 void update(void);
jdonnal 0:c165325c9e3f 58
jdonnal 0:c165325c9e3f 59 /**
jdonnal 0:c165325c9e3f 60 * Called on every rising edge of channel index to update revolution
jdonnal 0:c165325c9e3f 61 * count by one.
jdonnal 0:c165325c9e3f 62 */
jdonnal 0:c165325c9e3f 63 void index(void);
jdonnal 0:c165325c9e3f 64
jdonnal 0:c165325c9e3f 65 InterruptIn input_;
jdonnal 0:c165325c9e3f 66 Timer timer_;
jdonnal 0:c165325c9e3f 67
jdonnal 0:c165325c9e3f 68 int pulsesPerRev_;
jdonnal 0:c165325c9e3f 69 float speed_;
jdonnal 0:c165325c9e3f 70 int count_;
jdonnal 0:c165325c9e3f 71 int dt_;
jdonnal 0:c165325c9e3f 72 float speedBuffer_[NSAMP];
jdonnal 0:c165325c9e3f 73 };
jdonnal 0:c165325c9e3f 74
jdonnal 0:c165325c9e3f 75 #endif /* TACH_H */