//--------------------------------------------------------------------------- #include "sio_util.h" //--------------------- Stepper Module specific stuff --------------------------- typedef struct _STEPMOD { long pos; //current position byte ad; //a/d value unsigned short int st; //current step time byte inbyte; //input bits long home; //home position //The following data is stored locally for reference long cmdpos; //last commanded position byte cmdspeed; //last commanded speed byte cmdacc; //last commanded acceleration short int cmdst; //last commanded step time double st_period; byte move_mode; //last commanded move mode byte min_speed; //minimum running speed byte stopctrl; //stop control byte byte outbyte; //output bits byte homectrl; //homing control byte byte ctrlmode; //operating control mode byte byte run_pwm; //pwm for running current limit byte hold_pwm; //pwm for holding current limit byte therm_limit; //thermal limit byte emergency_acc; byte stat_io; //IO byte, returned in status packet } STEPMOD; //Step Module Command set: #define RESET_POS 0x00 //Reset encoder counter to 0 (0 bytes) #define SET_ADDR 0x01 //Set address and group address (2 bytes) #define DEF_STAT 0x02 //Define status items to return (1 byte) #define READ_STAT 0x03 //Read value of current status items #define LOAD_TRAJ 0x04 //Load trajectory data #define START_MOVE 0x05 //Start pre-loaded trajectory (0 bytes) #define SET_PARAM 0x06 //Set operating parameters (6 bytes) #define STOP_MOTOR 0x07 //Stop motor (1 byte) #define SET_OUTPUTS 0x08 //Set output bits (1 byte) #define SET_HOMING 0x09 //Define homing mode (1 byte) #define SET_BAUD 0x0A //Set the baud rate (1 byte) #define RESERVED 0x0B // #define SAVE_AS_HOME 0x0C //Store the input bytes and timer val (0 bytes) #define NOT_USED 0x0D #define NOP 0x0E //No operation - returns prev. defined status (0 bytes) #define HARD_RESET 0x0F //RESET - no status is returned //Step Module STATUSITEMS bit definitions: #define SEND_POS 0x01 //4 bytes data #define SEND_AD 0x02 //1 byte #define SEND_ST 0x04 //2 bytes #define SEND_INBYTE 0x08 //1 byte #define SEND_HOME 0x10 //4 bytes #define SEND_ID 0x20 //2 bytes #define SEND_OUT 0x40 //1 byte //Step Module LOAD_TRAJ control byte bit definitions: #define LOAD_POS 0x01 //+4 bytes #define LOAD_SPEED 0x02 //+1 bytes #define LOAD_ACC 0x04 //+1 bytes #define LOAD_ST 0x08 //+3 bytes #define STEP_REV 0x10 //reverse dir #define START_NOW 0x80 //1 = start now, 0 = wait for START_MOVE command //Step Module SET_PARAM operating mode byte bit definitions: #define SPEED_8X 0x00 //use 8x timing #define SPEED_4X 0x01 //use 4x timing #define SPEED_2X 0x02 //use 2x timing #define SPEED_1X 0x03 //use 1x timing #define IGNORE_LIMITS 0x04 //Do not stop automatically on limit switches #define MOFF_LIMIT 0x08 //Turn Off Motor on Limit #define MOFF_STOP 0x10 //Turn Off motor on Stop //Step Module STOP_MOTOR control byte bit definitions: #define STP_ENABLE_AMP 0x01 //1 = raise amp enable output, 0 = lower amp enable #define STOP_ABRUPT 0x04 //set to stop motor immediately #define STOP_SMOOTH 0x08 //set to decellerate motor smoothly //Step Module SET_HOMING control byte bit definitions: #define ON_LIMIT1 0x01 //home on change in limit 1 #define ON_LIMIT2 0x02 //home on change in limit 2 #define HOME_MOTOR_OFF 0x04 //turn motor off when homed #define ON_HOMESW 0x08 //home on change in index #define HOME_STOP_ABRUPT 0x10 //stop abruptly when homed #define HOME_STOP_SMOOTH 0x20 //stop smoothly when homed //Step Module Status byte bit definitions: #define MOTOR_MOVING 0x01 //Set when motor is moving #define CKSUM_ERROR 0x02 //checksum error in received command #define STP_AMP_ENABLED 0x04 //set if amplifier is enabled #define POWER_ON 0x08 //set when motor power is on #define AT_SPEED 0x10 //set if the commanded velocity is reached. #define VEL_MODE 0x20 //set when in velocity profile mode #define TRAP_MODE 0x40 //set when in trap. profile mode #define HOME_IN_PROG 0x80 //set while searching for home, cleared when home found //Step Module Input byte bit definitions: #define ESTOP 0x01 //emergency stop input #define AUX_IN1 0x02 //auxilliary input #1 #define AUX_IN2 0x04 //auxilliary input #2 #define FWD_LIMIT 0x08 //forward limit switch #define REV_LIMIT 0x10 //reverse limit switch #define HOME_SWITCH 0x20 //homing limit switch //Step module function prototypes: STEPMOD * StepNewMod(); DLLENTRY(BOOL) StepGetStat(byte addr); DLLENTRY(long) StepGetPos(byte addr); DLLENTRY(byte) StepGetAD(byte addr); DLLENTRY(unsigned short int) StepGetStepTime(byte addr); DLLENTRY(byte) StepGetInbyte(byte addr); DLLENTRY(long) StepGetHome(byte addr); DLLENTRY(byte) StepGetIObyte(byte addr); DLLENTRY(byte) StepGetMvMode(byte addr); DLLENTRY(long) StepGetCmdPos(byte addr); DLLENTRY(byte) StepGetCmdSpeed(byte addr); DLLENTRY(byte) StepGetCmdAcc(byte addr); DLLENTRY(unsigned short int) StepGetCmdST(byte addr); DLLENTRY(double) StepGetStepPeriod(byte addr); DLLENTRY(byte) StepGetCtrlMode(byte addr); DLLENTRY(byte) StepGetMinSpeed(byte addr); DLLENTRY(byte) StepGetRunCurrent(byte addr); DLLENTRY(byte) StepGetHoldCurrent(byte addr); DLLENTRY(byte) StepGetThermLimit(byte addr); DLLENTRY(byte) StepGetEmAcc(byte addr); DLLENTRY(byte) StepGetOutputs(byte addr); DLLENTRY(byte) StepGetHomeCtrl(byte addr); DLLENTRY(byte) StepGetStopCtrl(byte addr); DLLENTRY(BOOL) StepSetParam(byte addr, byte mode, byte minspeed, byte runcur, byte holdcur, byte thermlim, byte em_acc = 255); DLLENTRY(BOOL) StepLoadTraj(byte addr, byte mode, long pos, byte speed, byte acc, unsigned short int steptime); DLLENTRY(BOOL) StepLoadUnprofiledTraj(byte addr, byte mode, long pos, double step_period); DLLENTRY(BOOL) StepResetPos(byte addr); DLLENTRY(BOOL) StepStopMotor(byte addr, byte mode); DLLENTRY(BOOL) StepSetOutputs(byte addr, byte outbyte); DLLENTRY(BOOL) StepSetHoming(byte addr, byte mode); DLLENTRY(int) StepsPerSec2StepTime(double StepsPerSecond, int SpeedFactor); DLLENTRY(double) StepTime2StepsPerSec(int InitialTimerCount, int SpeedFactor); DLLENTRY(double) StepsPerSec2mSecPerStep(double StepsPerSecond); DLLENTRY(double) mSecPerStep2StepsPerSec(double mSecPerStep); DLLENTRY(double) MinStepPeriod(int SpeedFactor); DLLENTRY(double) MaxStepPeriod(int SpeedFactor);