Tried to optimize BASE_PERIOD but 12000 ns (83 kHz) is the best it can do right now
This commit is contained in:
@@ -31,25 +31,25 @@ typedef struct
|
|||||||
volatile int num_phases; /* number of phases for types 2 and up */
|
volatile int num_phases; /* number of phases for types 2 and up */
|
||||||
volatile int phase[5]; /* pins for output signals */
|
volatile int phase[5]; /* pins for output signals */
|
||||||
volatile const unsigned char *lut; /* pointer to state lookup table */
|
volatile const unsigned char *lut; /* pointer to state lookup table */
|
||||||
/* stuff that is not accessed by makepulses */
|
/* stuff that is not accessed by makepulses */
|
||||||
volatile int pos_mode; /* 1 = position mode, 0 = velocity mode */
|
int pos_mode; /* 1 = position mode, 0 = velocity mode */
|
||||||
volatile unsigned int step_space; /* parameter: min step pulse spacing */
|
unsigned int step_space; /* parameter: min step pulse spacing */
|
||||||
volatile double old_pos_cmd; /* previous position command (counts) */
|
double old_pos_cmd; /* previous position command (counts) */
|
||||||
volatile int count; /* pin: captured feedback in counts */
|
int count; /* pin: captured feedback in counts */
|
||||||
volatile double pos_scale; /* param: steps per position unit */
|
double pos_scale; /* param: steps per position unit */
|
||||||
double old_scale; /* stored scale value */
|
double old_scale; /* stored scale value */
|
||||||
double scale_recip; /* reciprocal value used for scaling */
|
double scale_recip; /* reciprocal value used for scaling */
|
||||||
volatile double vel_cmd; /* pin: velocity command (pos units/sec) */
|
double vel_cmd; /* pin: velocity command (pos units/sec) */
|
||||||
volatile double pos_cmd; /* pin: position command (position units) */
|
double pos_cmd; /* pin: position command (position units) */
|
||||||
volatile double pos_fb; /* pin: position feedback (position units) */
|
double pos_fb; /* pin: position feedback (position units) */
|
||||||
volatile double freq; /* param: frequency command */
|
double freq; /* param: frequency command */
|
||||||
volatile double maxvel; /* param: max velocity, (pos units/sec) */
|
double maxvel; /* param: max velocity, (pos units/sec) */
|
||||||
volatile double maxaccel; /* param: max accel (pos units/sec^2) */
|
double maxaccel; /* param: max accel (pos units/sec^2) */
|
||||||
volatile unsigned int old_step_len; /* used to detect parameter changes */
|
unsigned int old_step_len; /* used to detect parameter changes */
|
||||||
volatile unsigned int old_step_space;
|
unsigned int old_step_space;
|
||||||
volatile unsigned int old_dir_hold_dly;
|
unsigned int old_dir_hold_dly;
|
||||||
volatile unsigned int old_dir_setup;
|
unsigned int old_dir_setup;
|
||||||
volatile int printed_error; /* flag to avoid repeated printing */
|
int printed_error; /* flag to avoid repeated printing */
|
||||||
} stepgen_t;
|
} stepgen_t;
|
||||||
|
|
||||||
#define MAX_STEP_TYPE 15
|
#define MAX_STEP_TYPE 15
|
||||||
@@ -71,23 +71,23 @@ typedef enum CONTROL
|
|||||||
class StepGen3
|
class StepGen3
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
volatile int step_type[MAX_CHAN] = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}; // stepping types for up to 16 channels
|
int step_type[MAX_CHAN] = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}; // stepping types for up to 16 channels
|
||||||
char *ctrl_type[MAX_CHAN] = {0}; // control type ("p"pos or "v"vel) for up to 16 channels
|
char *ctrl_type[MAX_CHAN] = {0}; // control type ("p"pos or "v"vel) for up to 16 channels
|
||||||
volatile int user_step_type[MAX_CYCLE] = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}; // lookup table for user-defined step type
|
int user_step_type[MAX_CYCLE] = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}; // lookup table for user-defined step type
|
||||||
uint32_t stepPin[MAX_CHAN] = {0};
|
uint32_t stepPin[MAX_CHAN] = {0};
|
||||||
uint32_t dirPin[MAX_CHAN] = {0};
|
uint32_t dirPin[MAX_CHAN] = {0};
|
||||||
|
|
||||||
stepgen_t *stepgen_array = 0;
|
stepgen_t *stepgen_array = 0;
|
||||||
|
|
||||||
volatile int num_chan = 0; // number of step generators configured */
|
int num_chan = 0; // number of step generators configured */
|
||||||
volatile long periodns; // makepulses function period in nanosec */
|
long periodns; // makepulses function period in nanosec */
|
||||||
volatile long old_periodns; // used to detect changes in periodns */
|
long old_periodns; // used to detect changes in periodns */
|
||||||
volatile double periodfp; // makepulses function period in seconds */
|
double periodfp; // makepulses function period in seconds */
|
||||||
volatile double freqscale; // conv. factor from Hz to addval counts */
|
double freqscale; // conv. factor from Hz to addval counts */
|
||||||
volatile double accelscale; // conv. Hz/sec to addval cnts/period */
|
double accelscale; // conv. Hz/sec to addval cnts/period */
|
||||||
volatile long old_dtns; // update_freq funct period in nsec */
|
long old_dtns; // update_freq funct period in nsec */
|
||||||
volatile double dt; // update_freq period in seconds */
|
double dt; // update_freq period in seconds */
|
||||||
volatile double recip_dt; // recprocal of period, avoids divides */
|
double recip_dt; // recprocal of period, avoids divides */
|
||||||
|
|
||||||
StepGen3(void);
|
StepGen3(void);
|
||||||
void updateStepGen(double *pos_cmd);
|
void updateStepGen(double *pos_cmd);
|
||||||
@@ -143,7 +143,7 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
// For the example
|
// For the example
|
||||||
#define BASE_PERIOD 15000 // 12 i smax
|
#define BASE_PERIOD 12000 // 12 is max
|
||||||
#define SERVO_PERIOD 1000000
|
#define SERVO_PERIOD 1000000
|
||||||
#define JOINT_X_STEPGEN_MAXACCEL 520.0
|
#define JOINT_X_STEPGEN_MAXACCEL 520.0
|
||||||
#define JOINT_X_SCALE -200
|
#define JOINT_X_SCALE -200
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ extern "C"
|
|||||||
{
|
{
|
||||||
#include "esc.h"
|
#include "esc.h"
|
||||||
}
|
}
|
||||||
extern extend32to64 longTime;
|
|
||||||
|
|
||||||
////////////////////////////////////////////////
|
////////////////////////////////////////////////
|
||||||
/********************************************************************
|
/********************************************************************
|
||||||
|
|||||||
Reference in New Issue
Block a user