encoder and tachometer class for EW3XX single board computer

Committer:
lddevrie
Date:
Mon Sep 16 23:34:45 2019 +0000
Revision:
2:6cf351721d86
Parent:
0:1d5bf13d7dbb
Child:
3:b05d231c9549
Added getAngle method.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lddevrie 0:1d5bf13d7dbb 1 /* C Library for the WRC-305-SBC
lddevrie 0:1d5bf13d7dbb 2 J Bradshaw
lddevrie 0:1d5bf13d7dbb 3 L DeVries
lddevrie 0:1d5bf13d7dbb 4 20140912
lddevrie 0:1d5bf13d7dbb 5 20140918 J Bradshaw - Found CS mistake in Encoder routines
lddevrie 0:1d5bf13d7dbb 6 Added comments in Init function, encoder functions
lddevrie 0:1d5bf13d7dbb 7 20150210 J Bradshaw - Initialized DigitalOuts with pre-defined logic
lddevrie 0:1d5bf13d7dbb 8 levels (CS's high, etc)
lddevrie 0:1d5bf13d7dbb 9 20161011 J Bradshaw - Changed MAX1270 ADC SCLK to 5MHz and format(12, 0)
lddevrie 0:1d5bf13d7dbb 10 for conversion mode to match datasheet (200ns SCLK max PW high and low)
lddevrie 0:1d5bf13d7dbb 11 20190814 L DeVries - revised mbedWSEsbc to create EW305-specific library
lddevrie 0:1d5bf13d7dbb 12 */
lddevrie 0:1d5bf13d7dbb 13 #ifndef TACH_H
lddevrie 0:1d5bf13d7dbb 14 #define TACH_H
lddevrie 0:1d5bf13d7dbb 15
lddevrie 0:1d5bf13d7dbb 16
lddevrie 0:1d5bf13d7dbb 17
lddevrie 0:1d5bf13d7dbb 18
lddevrie 0:1d5bf13d7dbb 19 /**
lddevrie 0:1d5bf13d7dbb 20 * Includes
lddevrie 0:1d5bf13d7dbb 21 */
lddevrie 0:1d5bf13d7dbb 22 #include "mbed.h"
lddevrie 0:1d5bf13d7dbb 23
lddevrie 0:1d5bf13d7dbb 24 // LS7366 ENCODER IC DEFINITIONS
lddevrie 0:1d5bf13d7dbb 25 //=============================================================================
lddevrie 0:1d5bf13d7dbb 26 // Four commands for the Instruction Register (B7,B6) - LS7366
lddevrie 0:1d5bf13d7dbb 27 //=============================================================================
lddevrie 0:1d5bf13d7dbb 28 #define CLR 0x00 //Clear Instruction
lddevrie 0:1d5bf13d7dbb 29 #define RD 0x01 //Read Instruction
lddevrie 0:1d5bf13d7dbb 30 #define WR 0x02 //Write Instruction
lddevrie 0:1d5bf13d7dbb 31 #define LOAD 0x03 //Load Instruction
lddevrie 0:1d5bf13d7dbb 32
lddevrie 0:1d5bf13d7dbb 33 //=============================================================================
lddevrie 0:1d5bf13d7dbb 34 // Register to Select from the Instruction Register (B5,B4,B3) - LS7366
lddevrie 0:1d5bf13d7dbb 35 //=============================================================================
lddevrie 0:1d5bf13d7dbb 36 #define NONE 0x00 //No Register Selected
lddevrie 0:1d5bf13d7dbb 37 #define MDR0 0x01 //Mode Register 0
lddevrie 0:1d5bf13d7dbb 38 #define MDR1 0x02 //Mode Register 1
lddevrie 0:1d5bf13d7dbb 39 #define DTR 0x03 //Data Transfer Register
lddevrie 0:1d5bf13d7dbb 40 #define CNTR 0x04 //Software Configurable Counter Register
lddevrie 0:1d5bf13d7dbb 41 #define OTR 0x05 //Output Transfer Register
lddevrie 0:1d5bf13d7dbb 42 #define STR 0x06 //Status Register
lddevrie 0:1d5bf13d7dbb 43 #define NONE_REG 0x07 //No Register Selected
lddevrie 0:1d5bf13d7dbb 44
lddevrie 0:1d5bf13d7dbb 45
lddevrie 0:1d5bf13d7dbb 46
lddevrie 0:1d5bf13d7dbb 47 /**
lddevrie 0:1d5bf13d7dbb 48 * Tach Interface.
lddevrie 0:1d5bf13d7dbb 49 */
lddevrie 0:1d5bf13d7dbb 50 class EW305sbc
lddevrie 0:1d5bf13d7dbb 51 {
lddevrie 0:1d5bf13d7dbb 52
lddevrie 0:1d5bf13d7dbb 53 public:
lddevrie 0:1d5bf13d7dbb 54
lddevrie 0:1d5bf13d7dbb 55 /**
lddevrie 0:1d5bf13d7dbb 56 * Constructor.
lddevrie 0:1d5bf13d7dbb 57 *
lddevrie 0:1d5bf13d7dbb 58 * Tracks encoder position and speed, provides
lddevrie 0:1d5bf13d7dbb 59 * rotations per second (Hz) output
lddevrie 0:1d5bf13d7dbb 60 *
lddevrie 0:1d5bf13d7dbb 61 * @param Channel input channel from SPI chip.
lddevrie 0:1d5bf13d7dbb 62 * @param pulsesPerRev Number of pulses in one revolution (quadrature encoder).
lddevrie 0:1d5bf13d7dbb 63 */
lddevrie 0:1d5bf13d7dbb 64 EW305sbc(int ch, int pulsesPerRev);
lddevrie 0:1d5bf13d7dbb 65
lddevrie 0:1d5bf13d7dbb 66 /**
lddevrie 0:1d5bf13d7dbb 67 * Read the speed of the motor shaft
lddevrie 0:1d5bf13d7dbb 68 */
lddevrie 0:1d5bf13d7dbb 69 float getSpeed(void);
lddevrie 0:1d5bf13d7dbb 70
lddevrie 0:1d5bf13d7dbb 71 /**
lddevrie 0:1d5bf13d7dbb 72 * Read the speed of the motor shaft
lddevrie 0:1d5bf13d7dbb 73 */
lddevrie 0:1d5bf13d7dbb 74 int getCount(void);
lddevrie 0:1d5bf13d7dbb 75
lddevrie 2:6cf351721d86 76 /**
lddevrie 2:6cf351721d86 77 * Read angle of the motor shaft
lddevrie 2:6cf351721d86 78 */
lddevrie 2:6cf351721d86 79 float getAngle(void);
lddevrie 2:6cf351721d86 80
lddevrie 0:1d5bf13d7dbb 81 /**
lddevrie 0:1d5bf13d7dbb 82 * Read the state of the motor shaft
lddevrie 0:1d5bf13d7dbb 83 */
lddevrie 0:1d5bf13d7dbb 84 long LS7366_read_counter(int chan_num);
lddevrie 0:1d5bf13d7dbb 85
lddevrie 0:1d5bf13d7dbb 86 /**
lddevrie 0:1d5bf13d7dbb 87 * Read the state of the motor shaft, quadrature??
lddevrie 0:1d5bf13d7dbb 88 */
lddevrie 0:1d5bf13d7dbb 89 void LS7366_quad_mode_x4(int chan_num);
lddevrie 0:1d5bf13d7dbb 90
lddevrie 0:1d5bf13d7dbb 91 /**
lddevrie 0:1d5bf13d7dbb 92 * Reset the encoder counts
lddevrie 0:1d5bf13d7dbb 93 */
lddevrie 0:1d5bf13d7dbb 94 void LS7366_reset_counter(int chan_num);
lddevrie 0:1d5bf13d7dbb 95
lddevrie 0:1d5bf13d7dbb 96
lddevrie 0:1d5bf13d7dbb 97
lddevrie 0:1d5bf13d7dbb 98 private:
lddevrie 0:1d5bf13d7dbb 99
lddevrie 0:1d5bf13d7dbb 100 // Set-up hardwired IO
lddevrie 0:1d5bf13d7dbb 101 Ticker updater;
lddevrie 0:1d5bf13d7dbb 102
lddevrie 0:1d5bf13d7dbb 103 int ch_;
lddevrie 0:1d5bf13d7dbb 104 int pulsesPerRev_;
lddevrie 0:1d5bf13d7dbb 105
lddevrie 0:1d5bf13d7dbb 106
lddevrie 0:1d5bf13d7dbb 107 //SPI spi_max1270(PinName p5,PinName p6,PinName p7);
lddevrie 0:1d5bf13d7dbb 108 SPI spi;//(PinName p5,PinName p6,PinName p7);
lddevrie 0:1d5bf13d7dbb 109 DigitalOut ls7166_cs1;//(PinName p19,int tmp=1); //CS for LS7366-1 (U8)
lddevrie 0:1d5bf13d7dbb 110 DigitalOut ls7166_cs2;//(PinName p20, int tmp=1); //CS for LS7366-2 (U9)
lddevrie 0:1d5bf13d7dbb 111
lddevrie 0:1d5bf13d7dbb 112 long count_;
lddevrie 0:1d5bf13d7dbb 113 float speed_;
lddevrie 0:1d5bf13d7dbb 114 long countp_;
lddevrie 0:1d5bf13d7dbb 115 int dt_;
lddevrie 0:1d5bf13d7dbb 116
lddevrie 0:1d5bf13d7dbb 117 /**
lddevrie 0:1d5bf13d7dbb 118 * internal encoder cmd
lddevrie 0:1d5bf13d7dbb 119 */
lddevrie 0:1d5bf13d7dbb 120 void LS7366_cmd(int inst, int reg);
lddevrie 0:1d5bf13d7dbb 121
lddevrie 0:1d5bf13d7dbb 122 /**
lddevrie 0:1d5bf13d7dbb 123 * write to DTR pin?
lddevrie 0:1d5bf13d7dbb 124 */
lddevrie 0:1d5bf13d7dbb 125 void LS7366_write_DTR(int chan_num,long enc_value);
lddevrie 0:1d5bf13d7dbb 126
lddevrie 0:1d5bf13d7dbb 127 /**
lddevrie 0:1d5bf13d7dbb 128 * initialization
lddevrie 0:1d5bf13d7dbb 129 */
lddevrie 0:1d5bf13d7dbb 130 void init();
lddevrie 0:1d5bf13d7dbb 131
lddevrie 0:1d5bf13d7dbb 132
lddevrie 0:1d5bf13d7dbb 133 /**
lddevrie 0:1d5bf13d7dbb 134 * update current speed estimate
lddevrie 0:1d5bf13d7dbb 135 */
lddevrie 0:1d5bf13d7dbb 136 void recalc(void);
lddevrie 0:1d5bf13d7dbb 137 };
lddevrie 0:1d5bf13d7dbb 138
lddevrie 0:1d5bf13d7dbb 139 #endif /* TACH_H */