- Clone repo to
Libs/folder of your project
cd Libs
git clone https://github.com/nrf24l01/st_stepper- Configure CMAKE to include
Libs/stepper/folder in your include paths, and sourcestepper.cfile in your build
target_sources(${CMAKE_PROJECT_NAME} PRIVATE Libs/stepper/stepper.c)
target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE Libs/stepper)- Ensure that
stm32f4xx_hal.handstm32f411xe.his accessible from your project - Include
stepper.hin your code where you want to use stepper functions
- KEEP_SPEED - just rotate with given speed(
STEPPER_MODE_KEEP_SPEED) - FOLLOW_POSE - rotate to given position/angle with given speed and acceleration(
STEPPER_MODE_FOLLOW_POSE)
ATTENTION steps_per_revolution - steps per one full revolution(360deg) htim - any timer, timer_frequency - timer freq, in tics per us(MHz/1000000)
- 2 wire driver without enable pin
Stepper* stepper_create_2wire(uint16_t steps_per_revolution, GPIO_TypeDef *step_pin_GPIOx, uint16_t step_pin_Pin, GPIO_TypeDef *dir_pin_GPIOx, uint16_t dir_pin_Pin, TIM_HandleTypeDef *htim, uint32_t timer_frequency);
- 2 wire driver with enable pin
enable_pin_GPIOx, enable_pin_Pin - GPIO port and pin for enable pin en_mode - STEPPER_NORMAL_EN if stepper is locked when enable pin is HIGH, STEPPER_INVERTED_EN if stepper is locked when enable pin is LOW
Stepper* stepper_create_2wire_en(uint16_t steps_per_revolution, GPIO_TypeDef *step_pin_GPIOx, uint16_t step_pin_Pin, GPIO_TypeDef *dir_pin_GPIOx, uint16_t dir_pin_Pin, GPIO_TypeDef *enable_pin_GPIOx, uint16_t enable_pin_Pin, TIM_HandleTypeDef *htim, uint32_t timer_frequency, Stepper_EnMode en_mode);
- 4 wire driver without enable pin
Stepper* stepper_create_4wire(uint16_t steps_per_revolution, GPIO_TypeDef *pin1_GPIOx, uint16_t pin1_Pin, GPIO_TypeDef *pin2_GPIOx, uint16_t pin2_Pin, GPIO_TypeDef *pin3_GPIOx, uint16_t pin3_Pin, GPIO_TypeDef *pin4_GPIOx, uint16_t pin4_Pin, TIM_HandleTypeDef *htim, uint32_t timer_frequency);
- 4 wire driver with enable pin
enable_pin_GPIOx, enable_pin_Pin - GPIO port and pin for enable pin en_mode - STEPPER_NORMAL_EN if stepper is locked when enable pin is HIGH, STEPPER_INVERTED_EN if stepper is locked when enable pin is LOW
Stepper* stepper_create_4wire_en(uint16_t steps_per_revolution, GPIO_TypeDef *pin1_GPIOx, uint16_t pin1_Pin, GPIO_TypeDef *pin2_GPIOx, uint16_t pin2_Pin, GPIO_TypeDef *pin3_GPIOx, uint16_t pin3_Pin, GPIO_TypeDef *pin4_GPIOx, uint16_t pin4_Pin, GPIO_TypeDef *enable_pin_GPIOx, uint16_t enable_pin_Pin, TIM_HandleTypeDef *htim, uint32_t timer_frequency, Stepper_EnMode en_mode);
- TICK
Main method, should be called as often as possible (e.g. in a timer interrupt)
returns true if stepper is moving, false otherwise
bool stepper_tick(Stepper *stepper);
- Get step interval
Can be used to know how often you need to call tick
returns step interval in microseconds
uint32_t stepper_get_step_interval(Stepper *stepper);
- Get stepper state
returns true if stepper is moving, false otherwise
bool stepper_get_state(Stepper *stepper);
- Set current position
position - new position in steps
void stepper_set_position(Stepper *stepper, int32_t position);
- Set current angle
deg - new angle in degrees
void stepper_set_angle(Stepper *stepper, float deg);
- Get current position
returns current position in steps
int32_t stepper_get_position(Stepper *stepper);
- Get current angle
returns current angle in degrees
float stepper_get_angle(Stepper *stepper);
- Set stepper mode
mode - new stepper mode, either
void stepper_set_mode(Stepper *stepper, Stepper_Mode mode);
STEPPER_MODE_KEEP_SPEEDorSTEPPER_MODE_FOLLOW_POSE
- Set speed
speed - speed in steps per second
void stepper_set_speed(Stepper *stepper, uint32_t speed);
- Set speed in degrees per second
speed_deg - speed in degrees per second
void stepper_set_speed_deg(Stepper *stepper, float speed_deg);
- Get speed
returns speed in steps per second
uint32_t stepper_get_speed(Stepper *stepper);
- Get speed in degrees per second
returns speed in degrees per second
float stepper_get_speed_deg(Stepper *stepper);
- Set target position
target - target position in steps mode - either
void stepper_set_target(Stepper *stepper, int32_t target, Stepper_MovementType mode);
STEPPER_ABSOLUTEfor absolute positioning orSTEPPER_RELATIVEfor relative positioning - Set target angle
target_deg - target angle in degrees mode - either
void stepper_set_target_angle(Stepper *stepper, float target_deg, Stepper_MovementType mode);
STEPPER_ABSOLUTEfor absolute positioning orSTEPPER_RELATIVEfor relative positioning - Get target position
returns target position in steps
int32_t stepper_get_target(Stepper *stepper);
- Get target angle
returns target angle in degrees
float stepper_get_target_angle(Stepper *stepper);
- Set max speed
max_speed - max speed in steps per second
void stepper_set_max_speed(Stepper *stepper, uint32_t max_speed);
- Set max speed in degrees per second
max_speed_deg - max speed in degrees per second
void stepper_set_max_speed_deg(Stepper *stepper, float max_speed_deg);
- Set acceleration
acceleration - acceleration in steps per second squared
void stepper_set_acceleration(Stepper *stepper, uint32_t acceleration);
- Set acceleration in degrees per second squared
acceleration_deg - acceleration in degrees per second squared
void stepper_set_acceleration_deg(Stepper *stepper, float acceleration_deg);
- Enable stepper
void stepper_enable(Stepper *stepper);
- Disable stepper
void stepper_disable(Stepper *stepper);
- Auto power management
enable - true to enable auto power management, false to disable
void stepper_auto_power(Stepper *stepper, bool enable);
- Stop stepper
Smooth stop for stepper
void stepper_stop(Stepper *stepper);
- Emergency stop stepper
Immediate stop for stepper
void stepper_immediate_stop(Stepper *stepper);
- Stepper reset
Immediate stop and reset current to 0 for stepper
void stepper_reset(Stepper *stepper);