Blame | Last modification | View Log | Download
/*
* Copyright (C) 2004 Darren Hutchinson (dbh@gbdt.com.au)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Library General Public License as published by
* the Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
* License for more details.
*
* You should have received a copy of the GNU Library General Public License
* along with this software; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
* MA 02111-1307, USA.
*
* $Id: stepper.h,v 1.7 2004/04/05 06:42:15 dbh Exp $
*/
#ifndef _STEPPER_H_
#define _STEPPER_H_
/* Define the encoding used to hold the exictation values for each
* stepper coil.
*/
#define _EX_ENTRY(c1, c2) (((c1) << 4) | (c2))
#define _GET_C1(e) ((e) >> 4)
#define _GET_C2(e) ((e) & 0xf)
#define EX_0 0x0 // Inactive
#define EX_P_0_2 0x1 // +0.2 active
#define EX_P_0_4 0x2 // +0.4 active
#define EX_P_0_67 0x3 // +0.67 active
#define EX_P_1 0x4 // +Active
#define EX_M_0_2 0x9 // -0.2 active
#define EX_M_0_4 0xa // -0.4 active
#define EX_M_0_67 0xb // -0.67 active
#define EX_M_1 0xc // -Active
/* Define the struture used to pass excitation information from
* the stepper module to the excitation module
*/
struct excitation_s
{
uint8_t excitation;
uint8_t useRelay;
};
extern struct excitation_s raExcitation;
extern struct excitation_s decExcitation;
/* Define a structure to hold the current "state" for each axis. This
* allows up to use the same code for both axis, so I don't feel
* tempted to skimp on the features
*/
struct stepState_s
{
// Input (from the combiner)
int8_t reqSpeed; // Rate requested
// Output (to the driver)
struct excitation_s *pExcite;
// Configuration
uint16_t backlash; // #steps to counteract backlash
uint8_t finPos; // Finish movement in positive direction
uint8_t finNeg; // Finish movement in negative direction
// Machine state
uint8_t stepCtr; // Current step in cycle
int8_t curSpeed; // Current rate (when moving after spin)
void *pState; // State pointer
uint16_t count; // Counter used in states
uint8_t *pTable; // Current step table
// Support function state
uint8_t clkDivRatio; // Current clock div
uint8_t divCtr; // Clock division counter
};
/* These are held in stepper.c */
extern struct stepState_s raState;
extern struct stepState_s decState;
extern int8_t trackingRate;
extern uint8_t transRatio;
/* Prototypes */
void stepperInit(void);
void setRaSpeed(int8_t speed);
void setDecSpeed(int8_t speed);
void setupRateTable(uint8_t transRatio);
void setTrackRate(int8_t rate);
/* DEBUG: Uses half step instread of microstep if true */
extern uint8_t doHalfStep;
#endif /* _STEPPER_H_ */