Speed profile working
Fork of Easyspin_lib by
easyspin.h
- Committer:
- julientiron
- Date:
- 2015-08-26
- Revision:
- 1:9efe863db15e
- Parent:
- 0:cba942f8172a
File content as of revision 1:9efe863db15e:
/******************************************************//**
* @file easyspin.h
* @version V1.0
* @date June 29, 2015
* @brief Header for easyspin library for mbed
*
* This file is free software; you can redistribute it and/or modify
* it under the terms of either the GNU General Public License version 2
* or the GNU Lesser General Public License version 2.1, both as
* published by the Free Software Foundation.
**********************************************************/
#ifndef __Easyspin_H_INCLUDED
#define __Easyspin_H_INCLUDED
#include "easyspin_config.h"
#include "mbed.h"
/// Define to print debug logs via the UART
#ifndef _DEBUG_Easyspin
//#define _DEBUG_Easyspin
#endif
/// Clear bit Macro
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
/// Set bit Macro
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif
/// Current FW version
#define Easyspin_FW_VERSION (1)
/// Digital Pins used for the Easyspin MOSI pin
#define Easyspin_MOSI_Pin PA_7
/// Digital Pins used for the Easyspin MISO pin
#define Easyspin_MISO_Pin PA_6
/// Digital Pins used for the Easyspin SCK pin
#define Easyspin_SCK_Pin PA_5
/// Digital Pins used for the Easyspin flag pin
#define Easyspin_FLAG_Pin PA_10 //(2)
/// Digital Pins used for the Easyspin chip select pin
#define Easyspin_CS_Pin PB_6
/// Digital Pins used for the Easyspin step clock pin of shield 0
#define Easyspin_PWM_1_Pin PC_7 //(9)
/// Digital Pins used for the Easyspin step clock pin of shield 1
#define Easyspin_PWM_2_Pin PB_3 //(3)
/// Digital Pins used for the Easyspin step clock pin of shield 2
#define Easyspin_PWM_3_Pin PB_10 //(6)
/// Digital Pins used for the Easyspin direction pin of shield 0
#define Easyspin_DIR_1_Pin PA_8 //(7)
/// Digital Pins used for the Easyspin direction pin of shield 1
#define Easyspin_DIR_2_Pin PB_5 //(4)
/// Digital Pins used for the Easyspin direction pin of shield 2
#define Easyspin_DIR_3_Pin PB_4 //(5)
/// Digital Pins used for the Easyspin reset pin
#define Easyspin_Reset_Pin PA_9 //(8)
/// Maximum number of steps
#define MAX_STEPS (0x7FFFFFFF)
/// uint8_t max value
#define UINT8_MAX (uint8_t)(0XFF)
/// uint16_t max value
#define UINT16_MAX (uint16_t)(0XFFFF)
/// Pwm prescaler array size for timer 0 & 1
#define PRESCALER_ARRAY_TIMER0_1_SIZE (6)
/// Pwm prescaler array size for timer 2
#define PRESCALER_ARRAY_TIMER2_SIZE (8)
/// Maximum frequency of the PWMs
#define Easyspin_MAX_PWM_FREQ (10000)
/// Minimum frequency of the PWMs
#define Easyspin_MIN_PWM_FREQ (30)
/// Easyspin max number of bytes of command & arguments to set a parameter
#define Easyspin_CMD_ARG_MAX_NB_BYTES (4)
/// Easyspin command + argument bytes number for NOP command
#define Easyspin_CMD_ARG_NB_BYTES_NOP (1)
/// Easyspin command + argument bytes number for ENABLE command
#define Easyspin_CMD_ARG_NB_BYTES_ENABLE (1)
/// Easyspin command + argument bytes number for DISABLE command
#define Easyspin_CMD_ARG_NB_BYTES_DISABLE (1)
/// Easyspin command + argument bytes number for GET_STATUS command
#define Easyspin_CMD_ARG_NB_BYTES_GET_STATUS (1)
/// Easyspin response bytes number
#define Easyspin_RSP_NB_BYTES_GET_STATUS (2)
/// Daisy chain command mask
#define DAISY_CHAIN_COMMAND_MASK (0xFA)
/// Easyspin value mask for ABS_POS register
#define Easyspin_ABS_POS_VALUE_MASK ((uint32_t) 0x003FFFFF)
/// Easyspin sign bit mask for ABS_POS register
#define Easyspin_ABS_POS_SIGN_BIT_MASK ((uint32_t) 0x00200000)
/// Easyspin step mask for electrical position (EL_POS) register
#define Easyspin_ELPOS_STEP_MASK ((uint8_t)0xC0)
/// Easyspin microstep mask for electrical position (EL_POS) register
#define Easyspin_ELPOS_MICROSTEP_MASK ((uint8_t)0x3F)
/// Easyspin fast decay time option (TOFF_FAST values for T_FAST register )
typedef enum {
Easyspin_TOFF_FAST_2us = ((uint8_t) 0x00 << 4),
Easyspin_TOFF_FAST_4us = ((uint8_t) 0x01 << 4),
Easyspin_TOFF_FAST_6us = ((uint8_t) 0x02 << 4),
Easyspin_TOFF_FAST_8us = ((uint8_t) 0x03 << 4),
Easyspin_TOFF_FAST_10us = ((uint8_t) 0x04 << 4),
Easyspin_TOFF_FAST_12us = ((uint8_t) 0x05 << 4),
Easyspin_TOFF_FAST_14us = ((uint8_t) 0x06 << 4),
Easyspin_TOFF_FAST_16us = ((uint8_t) 0x07 << 4),
Easyspin_TOFF_FAST_18us = ((uint8_t) 0x08 << 4),
Easyspin_TOFF_FAST_20us = ((uint8_t) 0x09 << 4),
Easyspin_TOFF_FAST_22us = ((uint8_t) 0x0A << 4),
Easyspin_TOFF_FAST_24us = ((uint8_t) 0x0B << 4),
Easyspin_TOFF_FAST_26us = ((uint8_t) 0x0C << 4),
Easyspin_TOFF_FAST_28us = ((uint8_t) 0x0D << 4),
Easyspin_TOFF_FAST_30us = ((uint8_t) 0x0E << 4),
Easyspin_TOFF_FAST_32us = ((uint8_t) 0x0F << 4)
} Easyspin_TOFF_FAST_t;
/// Easyspin fall step time options (FAST_STEP values for T_FAST register )
typedef enum {
Easyspin_FAST_STEP_2us = ((uint8_t) 0x00),
Easyspin_FAST_STEP_4us = ((uint8_t) 0x01),
Easyspin_FAST_STEP_6us = ((uint8_t) 0x02),
Easyspin_FAST_STEP_8us = ((uint8_t) 0x03),
Easyspin_FAST_STEP_10us = ((uint8_t) 0x04),
Easyspin_FAST_STEP_12us = ((uint8_t) 0x05),
Easyspin_FAST_STEP_14us = ((uint8_t) 0x06),
Easyspin_FAST_STEP_16us = ((uint8_t) 0x07),
Easyspin_FAST_STEP_18us = ((uint8_t) 0x08),
Easyspin_FAST_STEP_20us = ((uint8_t) 0x09),
Easyspin_FAST_STEP_22us = ((uint8_t) 0x0A),
Easyspin_FAST_STEP_24us = ((uint8_t) 0x0B),
Easyspin_FAST_STEP_26us = ((uint8_t) 0x0C),
Easyspin_FAST_STEP_28us = ((uint8_t) 0x0D),
Easyspin_FAST_STEP_30us = ((uint8_t) 0x0E),
Easyspin_FAST_STEP_32us = ((uint8_t) 0x0F)
} Easyspin_FAST_STEP_t;
/// Easyspin overcurrent threshold options (OCD_TH register)
typedef enum {
Easyspin_OCD_TH_375mA = ((uint8_t) 0x00),
Easyspin_OCD_TH_750mA = ((uint8_t) 0x01),
Easyspin_OCD_TH_1125mA = ((uint8_t) 0x02),
Easyspin_OCD_TH_1500mA = ((uint8_t) 0x03),
Easyspin_OCD_TH_1875mA = ((uint8_t) 0x04),
Easyspin_OCD_TH_2250mA = ((uint8_t) 0x05),
Easyspin_OCD_TH_2625mA = ((uint8_t) 0x06),
Easyspin_OCD_TH_3000mA = ((uint8_t) 0x07),
Easyspin_OCD_TH_3375mA = ((uint8_t) 0x08),
Easyspin_OCD_TH_3750mA = ((uint8_t) 0x09),
Easyspin_OCD_TH_4125mA = ((uint8_t) 0x0A),
Easyspin_OCD_TH_4500mA = ((uint8_t) 0x0B),
Easyspin_OCD_TH_4875mA = ((uint8_t) 0x0C),
Easyspin_OCD_TH_5250mA = ((uint8_t) 0x0D),
Easyspin_OCD_TH_5625mA = ((uint8_t) 0x0E),
Easyspin_OCD_TH_6000mA = ((uint8_t) 0x0F)
} Easyspin_OCD_TH_t;
/// Easyspin STEP_MODE register masks
typedef enum {
Easyspin_STEP_MODE_STEP_SEL = ((uint8_t) 0x07),
Easyspin_STEP_MODE_SYNC_SEL = ((uint8_t) 0x70)
} Easyspin_STEP_MODE_Masks_t;
/// Easyspin STEP_SEL options for STEP_MODE register
typedef enum {
Easyspin_STEP_SEL_1 = ((uint8_t) 0x08), //full step
Easyspin_STEP_SEL_1_2 = ((uint8_t) 0x09), //half step
Easyspin_STEP_SEL_1_4 = ((uint8_t) 0x0A), //1/4 microstep
Easyspin_STEP_SEL_1_8 = ((uint8_t) 0x0B), //1/8 microstep
Easyspin_STEP_SEL_1_16 = ((uint8_t) 0x0C) //1/16 microstep
} Easyspin_STEP_SEL_t;
/// Easyspin SYNC_SEL options for STEP_MODE register
typedef enum {
Easyspin_SYNC_SEL_1_2 = ((uint8_t) 0x80),
Easyspin_SYNC_SEL_1 = ((uint8_t) 0x90),
Easyspin_SYNC_SEL_2 = ((uint8_t) 0xA0),
Easyspin_SYNC_SEL_4 = ((uint8_t) 0xB0),
Easyspin_SYNC_SEL_8 = ((uint8_t) 0xC0),
Easyspin_SYNC_SEL_UNUSED = ((uint8_t) 0xD0)
} Easyspin_SYNC_SEL_t;
/// Easyspin ALARM_EN register options
typedef enum {
Easyspin_ALARM_EN_OVERCURRENT = ((uint8_t) 0x01),
Easyspin_ALARM_EN_THERMAL_SHUTDOWN = ((uint8_t) 0x02),
Easyspin_ALARM_EN_THERMAL_WARNING = ((uint8_t) 0x04),
Easyspin_ALARM_EN_UNDERVOLTAGE = ((uint8_t) 0x08),
Easyspin_ALARM_EN_SW_TURN_ON = ((uint8_t) 0x40),
Easyspin_ALARM_EN_WRONG_NPERF_CMD = ((uint8_t) 0x80)
} Easyspin_ALARM_EN_t;
/// Easyspin CONFIG register masks
typedef enum {
Easyspin_CONFIG_OSC_SEL = ((uint16_t) 0x0007),
Easyspin_CONFIG_EXT_CLK = ((uint16_t) 0x0008),
Easyspin_CONFIG_EN_TQREG = ((uint16_t) 0x0020),
Easyspin_CONFIG_OC_SD = ((uint16_t) 0x0080),
Easyspin_CONFIG_POW_SR = ((uint16_t) 0x0300),
Easyspin_CONFIG_TOFF = ((uint16_t) 0x7C00)
} Easyspin_CONFIG_Masks_t;
/// Easyspin clock source options for CONFIG register
typedef enum {
Easyspin_CONFIG_INT_16MHZ = ((uint16_t) 0x0000),
Easyspin_CONFIG_INT_16MHZ_OSCOUT_2MHZ = ((uint16_t) 0x0008),
Easyspin_CONFIG_INT_16MHZ_OSCOUT_4MHZ = ((uint16_t) 0x0009),
Easyspin_CONFIG_INT_16MHZ_OSCOUT_8MHZ = ((uint16_t) 0x000A),
Easyspin_CONFIG_INT_16MHZ_OSCOUT_16MHZ = ((uint16_t) 0x000B),
Easyspin_CONFIG_EXT_8MHZ_XTAL_DRIVE = ((uint16_t) 0x0004),
Easyspin_CONFIG_EXT_16MHZ_XTAL_DRIVE = ((uint16_t) 0x0005),
Easyspin_CONFIG_EXT_24MHZ_XTAL_DRIVE = ((uint16_t) 0x0006),
Easyspin_CONFIG_EXT_32MHZ_XTAL_DRIVE = ((uint16_t) 0x0007),
Easyspin_CONFIG_EXT_8MHZ_OSCOUT_INVERT = ((uint16_t) 0x000C),
Easyspin_CONFIG_EXT_16MHZ_OSCOUT_INVERT = ((uint16_t) 0x000D),
Easyspin_CONFIG_EXT_24MHZ_OSCOUT_INVERT = ((uint16_t) 0x000E),
Easyspin_CONFIG_EXT_32MHZ_OSCOUT_INVERT = ((uint16_t) 0x000F)
} Easyspin_CONFIG_OSC_MGMT_t;
/// Easyspin external torque regulation options for CONFIG register
typedef enum {
Easyspin_CONFIG_EN_TQREG_TVAL_USED = ((uint16_t) 0x0000),
Easyspin_CONFIG_EN_TQREG_ADC_OUT = ((uint16_t) 0x0020)
} Easyspin_CONFIG_EN_TQREG_t;
/// Easyspin over current shutdown options for CONFIG register
typedef enum {
Easyspin_CONFIG_OC_SD_DISABLE = ((uint16_t) 0x0000),
Easyspin_CONFIG_OC_SD_ENABLE = ((uint16_t) 0x0080)
} Easyspin_CONFIG_OC_SD_t;
/// Easyspin power bridge output slew_rates options (POW_SR values for CONFIG register)
typedef enum {
Easyspin_CONFIG_SR_320V_us =((uint16_t)0x0000),
Easyspin_CONFIG_SR_075V_us =((uint16_t)0x0100),
Easyspin_CONFIG_SR_110V_us =((uint16_t)0x0200),
Easyspin_CONFIG_SR_260V_us =((uint16_t)0x0300)
} Easyspin_CONFIG_POW_SR_t;
/// Easyspin Off time options (TOFF values for CONFIG register)
typedef enum {
Easyspin_CONFIG_TOFF_004us = (((uint16_t) 0x01) << 10),
Easyspin_CONFIG_TOFF_008us = (((uint16_t) 0x02) << 10),
Easyspin_CONFIG_TOFF_012us = (((uint16_t) 0x03) << 10),
Easyspin_CONFIG_TOFF_016us = (((uint16_t) 0x04) << 10),
Easyspin_CONFIG_TOFF_020us = (((uint16_t) 0x05) << 10),
Easyspin_CONFIG_TOFF_024us = (((uint16_t) 0x06) << 10),
Easyspin_CONFIG_TOFF_028us = (((uint16_t) 0x07) << 10),
Easyspin_CONFIG_TOFF_032us = (((uint16_t) 0x08) << 10),
Easyspin_CONFIG_TOFF_036us = (((uint16_t) 0x09) << 10),
Easyspin_CONFIG_TOFF_040us = (((uint16_t) 0x0A) << 10),
Easyspin_CONFIG_TOFF_044us = (((uint16_t) 0x0B) << 10),
Easyspin_CONFIG_TOFF_048us = (((uint16_t) 0x0C) << 10),
Easyspin_CONFIG_TOFF_052us = (((uint16_t) 0x0D) << 10),
Easyspin_CONFIG_TOFF_056us = (((uint16_t) 0x0E) << 10),
Easyspin_CONFIG_TOFF_060us = (((uint16_t) 0x0F) << 10),
Easyspin_CONFIG_TOFF_064us = (((uint16_t) 0x10) << 10),
Easyspin_CONFIG_TOFF_068us = (((uint16_t) 0x11) << 10),
Easyspin_CONFIG_TOFF_072us = (((uint16_t) 0x12) << 10),
Easyspin_CONFIG_TOFF_076us = (((uint16_t) 0x13) << 10),
Easyspin_CONFIG_TOFF_080us = (((uint16_t) 0x14) << 10),
Easyspin_CONFIG_TOFF_084us = (((uint16_t) 0x15) << 10),
Easyspin_CONFIG_TOFF_088us = (((uint16_t) 0x16) << 10),
Easyspin_CONFIG_TOFF_092us = (((uint16_t) 0x17) << 10),
Easyspin_CONFIG_TOFF_096us = (((uint16_t) 0x18) << 10),
Easyspin_CONFIG_TOFF_100us = (((uint16_t) 0x19) << 10),
Easyspin_CONFIG_TOFF_104us = (((uint16_t) 0x1A) << 10),
Easyspin_CONFIG_TOFF_108us = (((uint16_t) 0x1B) << 10),
Easyspin_CONFIG_TOFF_112us = (((uint16_t) 0x1C) << 10),
Easyspin_CONFIG_TOFF_116us = (((uint16_t) 0x1D) << 10),
Easyspin_CONFIG_TOFF_120us = (((uint16_t) 0x1E) << 10),
Easyspin_CONFIG_TOFF_124us = (((uint16_t) 0x1F) << 10)
} Easyspin_CONFIG_TOFF_t;
/// Easyspin STATUS register bit masks
typedef enum {
Easyspin_STATUS_HIZ = (((uint16_t) 0x0001)),
Easyspin_STATUS_DIR = (((uint16_t) 0x0010)),
Easyspin_STATUS_NOTPERF_CMD = (((uint16_t) 0x0080)),
Easyspin_STATUS_WRONG_CMD = (((uint16_t) 0x0100)),
Easyspin_STATUS_UVLO = (((uint16_t) 0x0200)),
Easyspin_STATUS_TH_WRN = (((uint16_t) 0x0400)),
Easyspin_STATUS_TH_SD = (((uint16_t) 0x0800)),
Easyspin_STATUS_OCD = (((uint16_t) 0x1000))
} Easyspin_STATUS_Masks_t;
/// Easyspin STATUS register options
typedef enum {
Easyspin_STATUS_DIR_FORWARD = (((uint16_t) 0x0001) << 4),
Easyspin_STATUS_DIR_REVERSE = (((uint16_t) 0x0000) << 4)
} Easyspin_STATUS_DIR_t;
/// Easyspin internal register addresses
typedef enum {
Easyspin_ABS_POS = ((uint8_t) 0x01),
Easyspin_EL_POS = ((uint8_t) 0x02),
Easyspin_MARK = ((uint8_t) 0x03),
Easyspin_RESERVED_REG01 = ((uint8_t) 0x04),
Easyspin_RESERVED_REG02 = ((uint8_t) 0x05),
Easyspin_RESERVED_REG03 = ((uint8_t) 0x06),
Easyspin_RESERVED_REG04 = ((uint8_t) 0x07),
Easyspin_RESERVED_REG05 = ((uint8_t) 0x08),
Easyspin_RESERVED_REG06 = ((uint8_t) 0x15),
Easyspin_TVAL = ((uint8_t) 0x09),
Easyspin_RESERVED_REG07 = ((uint8_t) 0x0A),
Easyspin_RESERVED_REG08 = ((uint8_t) 0x0B),
Easyspin_RESERVED_REG09 = ((uint8_t) 0x0C),
Easyspin_RESERVED_REG10 = ((uint8_t) 0x0D),
Easyspin_T_FAST = ((uint8_t) 0x0E),
Easyspin_TON_MIN = ((uint8_t) 0x0F),
Easyspin_TOFF_MIN = ((uint8_t) 0x10),
Easyspin_RESERVED_REG11 = ((uint8_t) 0x11),
Easyspin_ADC_OUT = ((uint8_t) 0x12),
Easyspin_OCD_TH = ((uint8_t) 0x13),
Easyspin_RESERVED_REG12 = ((uint8_t) 0x14),
Easyspin_STEP_MODE = ((uint8_t) 0x16),
Easyspin_ALARM_EN = ((uint8_t) 0x17),
Easyspin_CONFIG = ((uint8_t) 0x18),
Easyspin_STATUS = ((uint8_t) 0x19),
Easyspin_RESERVED_REG13 = ((uint8_t) 0x1A),
Easyspin_RESERVED_REG14 = ((uint8_t) 0x1B),
Easyspin_INEXISTENT_REG = ((uint8_t) 0x1F)
} Easyspin_Registers_t;
/// Easyspin command set
typedef enum {
Easyspin_NOP = ((uint8_t) 0x00),
Easyspin_SET_PARAM = ((uint8_t) 0x00),
Easyspin_GET_PARAM = ((uint8_t) 0x20),
Easyspin_ENABLE = ((uint8_t) 0xB8),
Easyspin_DISABLE = ((uint8_t) 0xA8),
Easyspin_GET_STATUS = ((uint8_t) 0xD0),
Easyspin_RESERVED_CMD1 = ((uint8_t) 0xEB),
Easyspin_RESERVED_CMD2 = ((uint8_t) 0xF8)
} Easyspin_Commands_t;
/// Direction options
typedef enum {
FORWARD = 1,
BACKWARD = 0
} dir_t;
/// Rotation options
typedef enum {
RIGHT = 1,
LEFT = 0
} rot_t;
/// Shield state
typedef enum {
ACCELERATING = 0,
DECELERATING = 1,
STEADY = 2,
INACTIVE= 3
} shieldState_t;
/// Shield Commands
typedef enum {
RUN_CMD,
MOVE_CMD,
SOFT_STOP_CMD,
NO_CMD
} shieldCommand_t;
/// Easyspin shield parameters
typedef struct {
/// accumulator used to store speed increase smaller than 1 pps
volatile uint32_t accu;
/// Position in steps at the start of the goto or move commands
volatile int32_t currentPosition;
/// position in step at the end of the accelerating phase
volatile uint32_t endAccPos;
/// nb steps performed from the beggining of the goto or the move command
volatile uint32_t relativePos;
/// position in step at the start of the decelerating phase
volatile uint32_t startDecPos;
/// nb steps to perform for the goto or move commands
volatile uint32_t stepsToTake;
/// acceleration in pps^2
volatile uint16_t acceleration;
/// deceleration in pps^2
volatile uint16_t deceleration;
/// max speed in pps (speed use for goto or move command)
volatile uint16_t maxSpeed;
/// min speed in pps
volatile uint16_t minSpeed;
/// current speed in pps
volatile uint16_t speed;
/// command under execution
volatile shieldCommand_t commandExecuted;
/// FORWARD or BACKWARD direction
volatile dir_t direction;
/// Current State of the shield
volatile shieldState_t motionState;
}shieldParams_t;
/// Easyspin library class
class Easyspin {
public:
// constructor:
Easyspin();
/// @defgroup group1 Shield control functions
///@{
void AttachFlagInterrupt(void (*callback)(void)); //Attach a user callback to the flag Interrupt
void Begin(uint8_t nbShields); //Start the Easyspin library
uint16_t GetAcceleration(uint8_t shieldId); //Return the acceleration in pps^2
uint16_t GetCurrentSpeed(uint8_t shieldId); //Return the current speed in pps
uint16_t GetDeceleration(uint8_t shieldId); //Return the deceleration in pps^2
shieldState_t GetShieldState(uint8_t shieldId); //Return the shield state
uint8_t GetFwVersion(void); //Return the FW version
int32_t GetMark(uint8_t shieldId); //Return the mark position
uint16_t GetMaxSpeed(uint8_t shieldId); //Return the max speed in pps
uint16_t GetMinSpeed(uint8_t shieldId); //Return the min speed in pps
int32_t GetPosition(uint8_t shieldId); //Return the ABS_POSITION (32b signed)
void GoHome(uint8_t shieldId); //Move to the home position
void GoMark(uint8_t shieldId); //Move to the Mark position
void GoTo(uint8_t shieldId, int32_t targetPosition); //Go to the specified position
void HardStop(uint8_t shieldId); //Stop the motor and disable the power bridge
void Move(uint8_t shieldId, //Move the motor of the specified number of steps
dir_t direction,
uint32_t stepCount);
void ResetAllShields(void); //Reset all Easyspin shields
void Run(uint8_t shieldId, dir_t direction); //Run the motor
bool SetAcceleration(uint8_t shieldId,uint16_t newAcc); //Set the acceleration in pps^2
bool SetDeceleration(uint8_t shieldId,uint16_t newDec); //Set the deceleration in pps^2
void SetHome(uint8_t shieldId); //Set current position to be the home position
void SetMark(uint8_t shieldId); //Set current position to be the Markposition
bool SetMaxSpeed(uint8_t shieldId,uint16_t newMaxSpeed); //Set the max speed in pps
bool SetMinSpeed(uint8_t shieldId,uint16_t newMinSpeed); //Set the min speed in pps
bool SoftStop(uint8_t shieldId); //Progressively stops the motor
void WaitWhileActive(uint8_t shieldId); //Wait for the shield state becomes Inactive
void Turn(rot_t rotation, uint16_t angle); //Turn left or right with the specified angle
void Move_cm(dir_t direction, uint16_t distance); //Go forward or backward with the specified distance
///@}
/// @defgroup group2 Easyspin control functions
///@{
void CmdDisable(uint8_t shieldId); //Send the Easyspin_DISABLE command
void CmdEnable(uint8_t shieldId); //Send the Easyspin_ENABLE command
uint32_t CmdGetParam(uint8_t shieldId, //Send the Easyspin_GET_PARAM command
Easyspin_Registers_t param);
uint16_t CmdGetStatus(uint8_t shieldId); // Send the Easyspin_GET_STATUS command
void CmdNop(uint8_t shieldId); //Send the Easyspin_NOP command
void CmdSetParam(uint8_t shieldId, //Send the Easyspin_SET_PARAM command
Easyspin_Registers_t param,
uint32_t value);
uint16_t ReadStatusRegister(uint8_t shieldId); // Read the Easyspin_STATUS register without
// clearing the flags
void Reset(void); //Set the Easyspin reset pin
void ReleaseReset(void); //Release the Easyspin reset pin
void SelectStepMode(uint8_t shieldId, // Step mode selection
Easyspin_STEP_SEL_t stepMod);
void SetDirection(uint8_t shieldId, //Set the Easyspin direction pin
dir_t direction);
///@}
/// @defgroup group4 Functions for timer ISRs only
/// @brief To be used inside the library by the timer ISRs only
/// Must not be used elsewhere.
///@{
static class Easyspin *GetInstancePtr(void);
void StepClockHandler(uint8_t shieldId);
///@}
private:
void ApplySpeed(uint8_t pwmId, uint16_t newSpeed);
void ComputeSpeedProfile(uint8_t shieldId, uint32_t nbSteps);
int32_t ConvertPosition(uint32_t abs_position_reg);
static void FlagInterruptHandler(void);
void SendCommand(uint8_t shieldId, uint8_t param);
void SetRegisterToPredefinedValues(uint8_t shieldId);
void WriteBytes(uint8_t *pByteToTransmit, uint8_t *pReceivedByte);
void PwmInit(uint8_t pwmId);
void Pwm1SetFreq(uint16_t newFreq);
void Pwm2SetFreq(uint16_t newFreq);
void Pwm3SetFreq(uint16_t newFreq);
void PwmStop(uint8_t pwmId);
void SetShieldParamsToPredefinedValues(void);
void StartMovement(uint8_t shieldId);
uint8_t Tval_Current_to_Par(double Tval);
uint8_t Tmin_Time_to_Par(double Tmin);
void tick1();
void tick2();
// variable members
DigitalOut dir1;
DigitalOut dir2;
DigitalOut dir3;
DigitalOut pwm1;
DigitalOut pwm2;
DigitalOut pwm3;
DigitalOut reset;
DigitalOut CS;
Ticker ticker1;
Ticker ticker2;
Ticker ticker3;
InterruptIn flag;
SPI spi;
shieldParams_t shieldPrm[MAX_NUMBER_OF_SHIELDS];
static volatile class Easyspin *instancePtr;
static volatile void(*flagInterruptCallback)(void);
static volatile bool isrFlag;
static volatile bool spiPreemtionByIsr;
static volatile uint8_t numberOfShields;
static const uint16_t prescalerArrayTimer0_1[PRESCALER_ARRAY_TIMER0_1_SIZE];
static const uint16_t prescalerArrayTimer2[PRESCALER_ARRAY_TIMER2_SIZE];
static uint8_t spiTxBursts[Easyspin_CMD_ARG_MAX_NB_BYTES][MAX_NUMBER_OF_SHIELDS];
static uint8_t spiRxBursts[Easyspin_CMD_ARG_MAX_NB_BYTES][MAX_NUMBER_OF_SHIELDS];
};
#ifdef _DEBUG_Easyspin
uint16_t GetFreeRam (void);
#endif
#endif /* #ifndef __Easyspin_H_INCLUDED */
Robotique FIP
