Nathaniel Honka / Mbed 2 deprecated Motion-Control

Dependencies:   FiniteStateMachine HipControl Knee LinearBlend1 LocalFileSystem_Read dataComm hapticFeedback initExoVars mbed Blend_Generator Brad_poly_gait Gait_Generator MM_gait Encoders IMUdriver

Fork of Motion Control by HEL's Angels

Knee/StepperDriver/StepperDriver.h

Committer:
perr1940
Date:
2014-11-14
Revision:
0:d38d627c922f
Child:
3:9719ad064a2c

File content as of revision 0:d38d627c922f:

/* L6482 Driver code communicated via SPI
 * file name: StepperDriver.h
 * 07/15/2014 edited by Grace 
 */

#ifndef STEPPERDRIVER_H
#define STEPPERDRIVER_H

#include "mbed.h"

class StepperDriver
{
    public:
    // Constructor
    StepperDriver(PinName CSPin, PinName mosi, PinName miso, PinName sck);
         
    // Provide access to the parameter
    void setParam (char param, unsigned long value);
    unsigned long getParam(char param);
    void setAcc(float stepsPerSecPerSec);
    void setDec(float stepsPerSecPerSec);
    void setMaxSpeed(float stepsPerSecond);
    void setDecTVAL(char tvalInput);
    void setAccTVAL(char tvalInput);
    void setRunTVAL(char tvalInput);
    void setHoldTVAL(char tvalInput);
    int getStatus();
    void resetDev();
    void hardHiZ();
    void softHiZ();
    
    // Operational commands
    void run (char dir, float stepsPerSec);
    void move(char dir, unsigned long numSteps);
    
    private:
    
    char SPIWrite (char data);
    unsigned long writeParam (unsigned long value, char bitLength);
    unsigned long paramHandler (char param, unsigned long value);
    
    // converting the units to L6482 units
    
    unsigned long accCalc (float stepsPerSecPerSec);
    unsigned long decCalc (float stepsPerSecPerSec);
    unsigned long spdCalc (float stepsPerSec);
    unsigned long maxSpdCalc(float stepsPerSec);
    unsigned long minSpdCalc(float stepsPerSec);
    void setFullSpeed(float stepsPerSecond);
    unsigned long FSCalc(float stepsPerSec);
    DigitalOut _CSPin;
    SPI SPIPin;
    //Serial pcS;  
};

#define FWD  0x01
#define REV  0x00

#define BUSY_PIN   0x00     // !BUSY/SYNC pin set to !BUSY mode
#define SYNC_PIN   0x80     // pin set to SYNC mode

// configStepMode() options: select the microsteps per full step

#define STEP_FS    0x00
#define STEP_FS_2  0x01
#define STEP_FS_4  0x02
#define STEP_FS_8  0x03
#define STEP_FS_16 0x04

//cSPIN commands
#define NOP                  0x00
#define SET_PARAM            0x00
#define GET_PARAM            0x20
#define RUN                  0x50
#define STEP_CLOCK           0x58
#define MOVE                 0x40
#define GOTO                 0x60
#define GOTO_DIR             0x68
#define GO_UNTIL             0x82
#define RELEASE_SW           0x92
#define GO_HOME              0x70
#define GO_MARK              0x78
#define RESET_POS            0xD8
#define RESET_DEVICE         0xC0
#define SOFT_STOP            0xB0
#define HARD_STOP            0xB8
#define SOFT_HIZ             0xA0
#define HARD_HIZ             0xA8
#define GET_STATUS           0xD0

// Register address redefines.
//  See the Param_Handler() function for more info about these.
#define ABS_POS              0x01
#define EL_POS               0x02
#define MARK                 0x03
#define SPEED                0x04
#define ACC                  0x05
#define DEC                  0x06
#define MAX_SPEED            0x07
#define MIN_SPEED            0x08
#define FS_SPD               0x15
#define TVAL_HOLD            0x09
#define TVAL_RUN             0x0A
#define TVAL_ACC             0x0B
#define TVAL_DEC             0x0C
#define RESERVED             0x0D
#define T_FAST               0x0E
#define TON_MIN              0x0F
#define TOFF_MIN             0x10
#define GATECFG1             0x18
#define GATECFG2             0x19
#define ADC_OUT              0x12
#define OCD_TH               0x13
#define STEP_MODE            0x16
#define ALARM_EN             0x17
#define GATECFG1             0x18
#define GATECFG2             0x19
#define CONFIG               0x1A
#define STATUS               0x1B

// STEP_MODE option values.

#define STEP_SEL_1     0x08
#define STEP_SEL_1_2   0x09
#define STEP_SEL_1_4   0x0A
#define STEP_SEL_1_8   0x0B
#define STEP_SEL_1_16  0x0C


//  When SYNC_EN is high, the BUSYN pin will instead
//  output a clock related to the full-step frequency as defined by the
//  SYNC_SEL bits below.
#define BUSYPIN  0x00  
#define SYNC_EN 0x80

//  The clock output is defined by the full-step frequency 
//  see the datasheet(page 51).
#define SYNC_SEL_1_2 0x00
#define SYNC_SEL_1   0x10
#define SYNC_SEL_2   0x20
#define SYNC_SEL_4   0x30
#define SYNC_SEL_8   0x40

#define CONFIG_OSC_SEL                 0x000F // Mask for this bit field.
#define CONFIG_INT_16MHZ               0x0000 // Internal 16MHz, no output
#define CONFIG_INT_16MHZ_OSCOUT_2MHZ   0x0008 // Default; internal 16MHz, 2MHz output
#define CONFIG_INT_16MHZ_OSCOUT_4MHZ   0x0009 // Internal 16MHz, 4MHz output
#define CONFIG_INT_16MHZ_OSCOUT_8MHZ   0x000A // Internal 16MHz, 8MHz output
#define CONFIG_INT_16MHZ_OSCOUT_16MHZ  0x000B // Internal 16MHz, 16MHz output
#define CONFIG_EXT_8MHZ_XTAL_DRIVE     0x0004 // External 8MHz crystal
#define CONFIG_EXT_16MHZ_XTAL_DRIVE    0x0005 // External 16MHz crystal
#define CONFIG_EXT_24MHZ_XTAL_DRIVE    0x0006 // External 24MHz crystal
#define CONFIG_EXT_32MHZ_XTAL_DRIVE    0x0007 // External 32MHz crystal
#define CONFIG_EXT_8MHZ_OSCOUT_INVERT  0x000C // External 8MHz crystal, output inverted
#define CONFIG_EXT_16MHZ_OSCOUT_INVERT 0x000D // External 16MHz crystal, output inverted
#define CONFIG_EXT_24MHZ_OSCOUT_INVERT 0x000E // External 24MHz crystal, output inverted
#define CONFIG_EXT_32MHZ_OSCOUT_INVERT 0x000F // External 32MHz crystal, output inverted

#define CONFIG_SW_HARD_STOP            0x0000 // Default; hard stop motor on switch.
#define CONFIG_SW_USER                 0x0010 // Tie to the GoUntil and ReleaseSW

#define CONFIG_OC_SD_DISABLE           0x0000  // Bridges do NOT shutdown on OC detect
#define CONFIG_OC_SD_ENABLE            0x0080  // Bridges shutdown on OC detect

#define CONFIG_UVLOVAL_LOW             0x0000
#define CONFIG_UVLOVAL_HIGH            0x0100

#define CONFIG_VCCVAL_LOW              0x0000
#define CONFIG_VCCVAL_HIGH             0x0200

#define CONFIG_EN_TQREG_DISABLE         0x0000
#define CONFIG_EN_TQREG_ENABLE          0x0010

#define CONFIG_TSW_250KHZ               0x0000
#define CONFIG_PRED_EN_DISABLE          0x0000
#define CONFIG_PRED_EN_ENABLE           0x8000
                                   
#endif