encoder and tachometer class for EW3XX single board computer

Revision:
0:1d5bf13d7dbb
Child:
2:6cf351721d86
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/EW305sbc.h	Thu Aug 15 19:21:44 2019 +0000
@@ -0,0 +1,135 @@
+/* C Library for the WRC-305-SBC
+ J Bradshaw
+ L DeVries
+ 20140912
+ 20140918 J Bradshaw - Found CS mistake in Encoder routines
+    Added comments in Init function, encoder functions
+ 20150210 J Bradshaw - Initialized DigitalOuts with pre-defined logic
+   levels (CS's high, etc)
+ 20161011 J Bradshaw - Changed MAX1270 ADC SCLK to 5MHz and format(12, 0)
+   for conversion mode to match datasheet (200ns SCLK max PW high and low)
+ 20190814 L DeVries - revised mbedWSEsbc to create EW305-specific library
+*/
+#ifndef TACH_H
+#define TACH_H
+
+
+
+
+/**
+ * Includes
+ */
+#include "mbed.h"
+
+// LS7366 ENCODER IC DEFINITIONS
+//=============================================================================
+// Four commands for the Instruction Register (B7,B6) - LS7366
+//=============================================================================
+#define CLR     0x00    //Clear Instruction
+#define RD      0x01    //Read Instruction
+#define WR      0x02    //Write Instruction
+#define LOAD    0x03    //Load Instruction
+
+//=============================================================================
+// Register to Select from the Instruction Register (B5,B4,B3) - LS7366
+//=============================================================================
+#define NONE        0x00    //No Register Selected
+#define MDR0        0x01    //Mode Register 0
+#define MDR1        0x02    //Mode Register 1
+#define DTR         0x03    //Data Transfer Register
+#define CNTR        0x04    //Software Configurable Counter Register
+#define OTR         0x05    //Output Transfer Register
+#define STR         0x06    //Status Register
+#define NONE_REG    0x07    //No Register Selected
+
+
+
+/**
+ * Tach Interface.
+ */
+class EW305sbc
+{
+
+public:
+
+    /**
+     * Constructor.
+     *
+     * Tracks encoder position and speed, provides
+     * rotations per second (Hz) output
+     *
+     * @param Channel input channel from SPI chip.
+     * @param pulsesPerRev Number of pulses in one revolution (quadrature encoder).
+     */
+    EW305sbc(int ch, int pulsesPerRev);
+
+    /**
+     * Read the speed of the motor shaft
+     */
+    float getSpeed(void);
+    
+    /**
+     * Read the speed of the motor shaft
+     */
+    int getCount(void);
+    
+    
+    /**
+     * Read the state of the motor shaft
+     */
+    long LS7366_read_counter(int chan_num);
+    
+    /**
+     * Read the state of the motor shaft, quadrature??
+     */
+    void LS7366_quad_mode_x4(int chan_num);
+    
+    /**
+     * Reset the encoder counts
+     */
+    void LS7366_reset_counter(int chan_num);
+    
+    
+    
+private:
+
+    // Set-up hardwired IO
+    Ticker updater;
+    
+    int          ch_;
+    int          pulsesPerRev_;
+    
+    
+    //SPI spi_max1270(PinName p5,PinName p6,PinName p7);
+    SPI spi;//(PinName p5,PinName p6,PinName p7);
+    DigitalOut ls7166_cs1;//(PinName p19,int tmp=1); //CS for LS7366-1 (U8)
+    DigitalOut ls7166_cs2;//(PinName p20, int tmp=1); //CS for LS7366-2 (U9)
+    
+    long         count_;
+    float        speed_;
+    long         countp_;
+    int          dt_;
+    
+    /**
+     * internal encoder cmd
+     */
+    void LS7366_cmd(int inst,  int reg);
+    
+    /**
+     * write to DTR pin?
+     */
+    void LS7366_write_DTR(int chan_num,long enc_value);
+    
+    /**
+     * initialization
+     */
+    void init();
+    
+    
+    /**
+     * update current speed estimate
+     */
+    void recalc(void);
+};
+
+#endif /* TACH_H */
\ No newline at end of file