/** * \file * * * \brief Stepper hardware-specific definitions * * * \author Daniele Basile */ #ifndef HW_STEPPER_H #define HW_STEPPER_H #include #include #include #warning TODO:This is an example implentation, you must implement it! #define STEPPER_STROBE_INIT \ do { \ /* put init code for strobe */ \ } while (0) #define STEPPER_STROBE_ON do { /* Implement me! */ } while(0) #define STEPPER_STROBE_OFF do { /* Implement me! */ } while(0) /** * CPU clock frequency is divided by 2^STEPPER_PRESCALER_LOG2 to * obtain stepper clock. */ #define STEPPER_PRESCALER_LOG2 1 /** * Stepper timer clock frequency. */ #define STEPPER_CLOCK ((CPU_FREQ) >> STEPPER_PRESCALER_LOG2) /** * us delay to reset a stepper motor. * This is the time neccessary to reset * the stepper controll chip. (see datasheet for more detail). */ #define STEPPER_RESET_DELAY 1 /* * Pins define for each stepper */ #define STEPPER_1_CW_CCW_PIN 0 #define STEPPER_1_HALF_FULL_PIN 0 #define STEPPER_1_CONTROL_PIN 0 #define STEPPER_1_ENABLE_PIN 0 #define STEPPER_1_RESET_PIN 0 /* put here other stepper motor */ #define STEPPER_1_SET do { /* Implement me! */ } while(0) /* add here the set for other stepper motor */ #define STEPPER_1_CLEAR do { /* Implement me! */ } while(0) /* add here the clear for other stepper motor */ /* * Generic macro definition */ /* * Stepper init macro */ #define STEPPER_PIN_INIT_MACRO(port, index) do { \ /* Add here init pin code */ \ } while (0) /* * Stepper commands macros */ #define STEPPER_SET_CW(index) do { /* Implement me! */ } while (0) #define STEPPER_SET_CCW(index) do { /* Implement me! */ } while (0) #define STEPPER_SET_HALF(index) do { /* Implement me! */ } while (0) #define STEPPER_SET_FULL(index) do { /* Implement me! */ } while (0) #define STEPPER_SET_CONTROL_LOW(index) do { /* Implement me! */ } while (0) #define STEPPER_SET_CONTROL_HIGHT(index) do { /* Implement me! */ } while (0) #define STEPPER_SET_ENABLE(index) do { /* Implement me! */ } while (0) #define STEPPER_SET_DISABLE(index) do { /* Implement me! */ } while (0) #define STEPPER_SET_RESET_ENABLE(index) do { /* Implement me! */ } while (0) #define STEPPER_SET_RESET_DISABLE(index) do { /* Implement me! */ } while (0) /* * Reset stepper macro */ #define STEPPER_RESET_MACRO(index) do { \ STEPPER_SET_RESET_ENABLE(index); \ timer_udelay(STEPPER_RESET_DELAY); \ STEPPER_SET_RESET_DISABLE(index); \ } while (0) /* * Set half or full step macro */ #define STEPPER_SET_STEP_MODE_MACRO(index, flag) do { \ if (flag) \ STEPPER_SET_HALF(index); \ else \ STEPPER_SET_FULL(index); \ } while (0) /* * Set control status macro */ #warning TODO: This macro is not implemented (see below) #define STEPPER_SET_CONTROL_BIT_MACRO(index, flag) do { \ /* if (flag) */ \ /* WARNING This macros not implemented */ \ /* else */ \ /* WARNING This macros not implemented */ \ } while (0) /* * Set current power macro */ #warning TODO: This macro is not implemented (see below) #define STEPPER_SET_POWER_CURRENT_MACRO(index, flag) do { \ /* if (flag) */ \ /* WARNING This macrois not implemented */ \ /* else */ \ /* WARNING This macrois not implemented */ \ } while (0) /* * Set rotation of stepper motor * - dir = 1: positive rotation * - dir = 0: no motor moviment * - dir = -1: negative rotation * */ #define STEPPER_SET_DIRECTION_MACRO(index, dir) do { \ switch (dir) \ { \ case 1: \ STEPPER_SET_CW(index); \ break; \ case -1: \ STEPPER_SET_CCW(index); \ break; \ case 0: \ break; \ } \ } while (0) /* * Define macros for manage low level of stepper. */ #define STEPPER_INIT() do { \ STEPPER_PIN_INIT_MACRO(A, 1); \ /* Add here code for other stepper motor */ \ } while (0) /* * Enable select stepper motor */ #define STEPPER_ENABLE(index) do { \ switch (index) \ { \ case 1: \ STEPPER_SET_ENABLE(1); \ break; \ /* Add here code for other stepper motor */ \ } \ } while (0) /* * Enable all stepper connect to micro */ #define STEPPER_ENABLE_ALL() do { \ STEPPER_SET_ENABLE(1); \ /* Add here code for other stepper motor */ \ } while (0) /* * Disable select stepper motor */ #define STEPPER_DISABLE(index) do { \ switch (index) \ { \ case 1: \ STEPPER_SET_DISABLE(1); \ break; \ /* Add here code for other stepper motor */ \ } \ } while (0) /* * Disable all stepper connect to micro */ #define STEPPER_DISABLE_ALL() do { \ STEPPER_SET_DISABLE(1); \ /* Add here code for other stepper motor */ \ } while (0) /* * Reset selected stepper motor */ #define STEPPER_RESET(index) do { \ switch (index) \ { \ case 1: \ STEPPER_RESET_MACRO(1); \ break; \ /* Add here code for other stepper motor */ \ } \ } while (0) /* * Reset all stepper motor */ #define STEPPER_RESET_ALL() do { \ STEPPER_RESET_MACRO(1) \ /* Add here code for other stepper motor */ \ } while (0) // Set half/full step macros #define STEPPER_SET_HALF_STEP(index, flag) do { \ switch (index) \ { \ case 1: \ STEPPER_SET_STEP_MODE_MACRO(1, flag); \ break; \ /* Add here code for other stepper motor */ \ } \ } while (0) // Control status #define STEPPER_SET_CONTROL_BIT(index, flag) do { \ switch (index) \ { \ case 1: \ STEPPER_SET_CONTROL_BIT_MACRO(1, flag); \ break; \ /* Add here code for other stepper motor */ \ } \ } while (0) // Set stepper power current #define STEPPER_SET_POWER_CURRENT(index, flag) do { \ switch (index) \ { \ case 1: \ STEPPER_SET_POWER_CURRENT_MACRO(1, flag); \ break; \ /* Add here code for other stepper motor */ \ } \ } while (0) // Set rotation dirction of stepper motor #define STEPPER_SET_DIRECTION(index, dir) do { \ switch (index) \ { \ case 1: \ STEPPER_SET_DIRECTION_MACRO(1, dir); \ break; \ /* Add here code for other stepper motor */ \ } \ } while (0) #endif /* HW_STEPPER_H */