Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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
Knee/StepperDriver/StepperDriver.h
- Committer:
- cashdollar
- Date:
- 2015-02-25
- Revision:
- 5:498c9bfc56f0
- Parent:
- 3:9719ad064a2c
File content as of revision 5:498c9bfc56f0:
/* 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:
int hey1;
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 // L6482 Manual page 59
// 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
