Skip to content

Lib for step motors for stm32, use HAL, support 2 and 4 wire drivers, with and without enable pins.

License

Notifications You must be signed in to change notification settings

nrf24l01/st_stepper

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Steppers for STM32


Install

  1. Clone repo to Libs/ folder of your project
cd Libs
git clone https://github.com/nrf24l01/st_stepper
  1. Configure CMAKE to include Libs/stepper/ folder in your include paths, and source stepper.c file in your build
target_sources(${CMAKE_PROJECT_NAME} PRIVATE Libs/stepper/stepper.c)
target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE Libs/stepper)
  1. Ensure that stm32f4xx_hal.h and stm32f411xe.h is accessible from your project
  2. Include stepper.h in your code where you want to use stepper functions

Docs

Modes

  • 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)

API

Create stepper object

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
    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);
    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
  • 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
    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);
    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

Core functionality

  • TICK Main method, should be called as often as possible (e.g. in a timer interrupt)
    bool stepper_tick(Stepper *stepper);
    returns true if stepper is moving, false otherwise
  • Get step interval Can be used to know how often you need to call tick
    uint32_t stepper_get_step_interval(Stepper *stepper);
    returns step interval in microseconds
  • Get stepper state
    bool stepper_get_state(Stepper *stepper);
    returns true if stepper is moving, false otherwise

Stepper odometry functions

  • Set current position
    void stepper_set_position(Stepper *stepper, int32_t position);
    position - new position in steps
  • Set current angle
    void stepper_set_angle(Stepper *stepper, float deg);
    deg - new angle in degrees
  • Get current position
    int32_t stepper_get_position(Stepper *stepper);
    returns current position in steps
  • Get current angle
    float stepper_get_angle(Stepper *stepper);
    returns current angle in degrees

Stepper mode control functions

  • Set stepper mode
    void stepper_set_mode(Stepper *stepper, Stepper_Mode mode);
    mode - new stepper mode, either STEPPER_MODE_KEEP_SPEED or STEPPER_MODE_FOLLOW_POSE

KEEP_SPEED mode functions

  • Set speed
    void stepper_set_speed(Stepper *stepper, uint32_t speed);
    speed - speed in steps per second
  • Set speed in degrees per second
    void stepper_set_speed_deg(Stepper *stepper, float speed_deg);
    speed_deg - speed in degrees per second
  • Get speed
    uint32_t stepper_get_speed(Stepper *stepper);
    returns speed in steps per second
  • Get speed in degrees per second
    float stepper_get_speed_deg(Stepper *stepper);
    returns speed in degrees per second

FOLLOW_POSE mode target functions

  • Set target position
    void stepper_set_target(Stepper *stepper, int32_t target, Stepper_MovementType mode);
    target - target position in steps mode - either STEPPER_ABSOLUTE for absolute positioning or STEPPER_RELATIVE for relative positioning
  • Set target angle
    void stepper_set_target_angle(Stepper *stepper, float target_deg, Stepper_MovementType mode);
    target_deg - target angle in degrees mode - either STEPPER_ABSOLUTE for absolute positioning or STEPPER_RELATIVE for relative positioning
  • Get target position
    int32_t stepper_get_target(Stepper *stepper);
    returns target position in steps
  • Get target angle
    float stepper_get_target_angle(Stepper *stepper);
    returns target angle in degrees

Stepper FOLLOW_POSE speed functions

  • Set max speed
    void stepper_set_max_speed(Stepper *stepper, uint32_t max_speed);
    max_speed - max speed in steps per second
  • Set max speed in degrees per second
    void stepper_set_max_speed_deg(Stepper *stepper, float max_speed_deg);
    max_speed_deg - max speed in degrees per second
  • Set acceleration
    void stepper_set_acceleration(Stepper *stepper, uint32_t acceleration);
    acceleration - acceleration in steps per second squared
  • Set acceleration in degrees per second squared
    void stepper_set_acceleration_deg(Stepper *stepper, float acceleration_deg);
    acceleration_deg - acceleration in degrees per second squared

Stepper power functions

  • Enable stepper
    void stepper_enable(Stepper *stepper);
  • Disable stepper
    void stepper_disable(Stepper *stepper);
  • Auto power management
    void stepper_auto_power(Stepper *stepper, bool enable);
    enable - true to enable auto power management, false to disable

Stepper stop functions

  • 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);

About

Lib for step motors for stm32, use HAL, support 2 and 4 wire drivers, with and without enable pins.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages