/******************************************************************************* * @file stepper.h * @Author: MQjehovah mail:MQjehovah@hotmail.com * @version 1.0.0 * @date 2018/01/23 * @brief ****************************************************************************** * @attention *******************************************************************************/ #ifndef __STEPPER_H #define __STEPPER_H /* Includes ------------------------------------------------------------------*/ #include "bsp.h" /* Definition ----------------------------------------------------------------*/ #define STEP_EN GPIO_SetBits(GPIOB, GPIO_Pin_4) #define ANGEL_PER_STEP (1.8f) //步距角1.8° #define STEP_PER_CIRCLE (360 / ANGEL_PER_STEP) //电机转动一圈的步数 #define STEP_DIV (4) //电机驱动细分值 #define PUL_PER_CIRCLE (STEP_PER_CIRCLE * STEP_DIV) //电机转动一圈的脉冲数 #define ACC_TIME 500 //整个加速(或减速)过程持续的时间,由用户指定,控制电机加减速的快慢,单位ms #define ACC_TIME_DIV 100 //加速阶段离散的点的个数 #define TIME_PER_DIV ACC_TIME/ACC_TIME_DIV //每个离散点持续的时间 typedef struct { u8 id; //电机id u8 dir_pos; //电机正向方向(顺时针) u16 div; //电机驱动细分 u8 running; //标记电机是否在运行 char en; char dir; long step; int speed; int target_speed; u32 current_puase; //当前的脉冲数 u32 current_step; //当前的步数 u32 passed_puase; //走过的脉冲数 u32 target_puase; //设置的目标步数 u32 f_puase; //当前频率脉冲数(本算法S型加减速的过程是离散的,每个点(频率)运行一定步数) u16 f_index; //当前频率在表中所处位置() u16 *table_step; //步数表 u16 *table_time; //时间表(即当前频率电机一个脉冲所需时间,用于赋值定时器arr) u32 start_step; //启动阶段步数 u16 start_f; //启动阶段的频率个数 u32 stop_step; //停止阶段步数 TIM_TypeDef *TIMx; //电机的驱动定时器 } STEPPER; /* Exported ------------------------------------------------------------------*/ extern STEPPER stepper; void stepper_tim_init(u16 arr, u16 psc); void stepper_pwm_init(u16 arr, u16 psc); void stepper_set_enable(u8 value); void stepper_set_dir(u8 value); #endif /*********************************END OF FILE**********************************/