Interface with a single channel encoder (eg IR emitter/detector on a slotted wheel). Requires a digital input and counts per revolution. Provides speed in Hz
Dependents: ES202FinalProject ES202_straight1 ES202_Final_Turn ES202_Turn ... more
Tach.h@0:c165325c9e3f, 2018-03-02 (annotated)
- Committer:
- jdonnal
- Date:
- Fri Mar 02 16:52:58 2018 +0000
- Revision:
- 0:c165325c9e3f
Initial Commit
Who changed what in which revision?
User | Revision | Line number | New 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 */ |