//----------------------------------------------------------------------------

//модуль реализации управления шаговым двигателем,
//заголовочный файл.

//----------------------------------------------------------------------------

#ifndef StepH
#define StepH

//------------------------------- Константы: ---------------------------------

#define MS_MAX          2  //максимальное количество микрошагов на шаг
#define I_MAX        4000  //максимальный ток, мА
#define V_MAX       32000  //максимальная скорость, микрошаг/сек
#define A_MAX       32000  //максимальное ускорение, микрошаг/сек^2
#define N_MAX  2000000000L //максимальная координата
#define N_MIN -2000000000L //минимальная координата

#define MS_NOM          1  //номинальный режим - full step
#define I_NOM         500  //номинальный ток, мА
#define V_NOM         400  //номинальная скорость, микрошаг/сек
#define VM_NOM         25  //номинальная минимальная скорость, микрошаг/сек
#define A_NOM         500  //номинальное ускорение, микрошаг/сек^2
#define N_NOM           0  //номинальная координата

//режимы движения шагового двигателя:
enum
{
  MD_STOP, //двигатель остановлен
  MD_ROTL, //двигатель вращается назад
  MD_ROTR, //двигатель вращается вперед
  MD_POSL, //двигатель выполняет позиционирование назад
  MD_POSR, //двигатель выполняет позиционирование вперед
};

//состояния шагового двигателя:
enum
{
  SS_STOP, //двигатель остановлен
  SS_HALT, //остановка двигателя после позиционирования
  SS_ROTL, //вращение назад
  SS_ROTR  //вращение вперед
}; 

//--------------------------- Прототипы функций: -----------------------------

void Step_Init(void);       //инициализация подсистемы шагового двигател
void Step_Update_V(bool t); //обновление текущей скорости

bool Step_SetSM(char sm);   //задание режима микрошага
char Step_GetSM(void);      //чтение режима микрошага

bool Step_SetVm(int vm);    //задание минимальной скорости
int  Step_GetVm(void);      //чтение минимальной скорости
bool Step_SetVw(int v);     //задание рабочей скорости
int  Step_GetVw(void);      //чтение рабочей скорости
int  Step_GetVc(void);      //чтение текущей скорости
bool Step_StartV(int v);    //запуск двигателя на заданной скорости
void Step_StartD(int dir);  //запуск двигателя в заданном направлении
void Step_StartW(int dir);  //запуск двиг. в заданном напр. без ускорения
void Step_Stop(void);       //мгновенная остановка двигателя

bool Step_SetAw(int aw);    //задание рабочего ускорения
int  Step_GetAw(void);      //чтение рабочего ускорения
int  Step_GetAc(void);      //чтение текущего ускорения

bool Step_SetIa(int ia);    //задание тока ускорения двигателя
int  Step_GetIa(void);      //чтение тока ускорения двигателя
bool Step_SetIh(int ia);    //задание тока удержания двигателя
int  Step_GetIh(void);      //чтение тока удержания двигателя
bool Step_SetIw(int iw);    //задание рабочего тока двигателя
int  Step_GetIw(void);      //чтение рабочего тока двигателя
int  Step_GetIc(void);      //чтение текущего тока двигателя

bool Step_SetNc(long n);    //задание текущей координаты
long Step_GetNc(void);      //чтение текущей координаты
bool Step_StartN(long n);   //запуск двигателя на заданную координату

char Step_GetMode(void);    //чтение режима движения
char Step_GetState(void);   //чтение состояния двигателя

//----------------------------------------------------------------------------

#endif

