/******************************************************************************* * @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_TIM TIM2 #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 //每个离散点持续的时间 #define STEP_MIN_FREQ 2000 //电机最小驱动频率 #define STEP_MAX_FREQ 10000 //电机最大驱动频率 typedef enum { acc, avg, dec } STEP_STATE; //电机运行状态机 typedef struct { u8 id; //电机id u8 dir_pos; //电机正向方向(顺时针) u16 div; //电机驱动细分 u8 running; //标记电机是否在运行 u8 en; u8 dir; u32 step; // u32 speed; // u32 target_speed; u32 current_puase; //当前的脉冲数 u32 current_step; //当前的步数 u32 passed_puase; //走过的脉冲数 u32 passed_step; //走过的步数 u32 target_puase; //设置的目标步数 //u32 f_puase; //当前频率脉冲数(本算法S型加减速的过程是离散的,每个点(频率)运行一定步数) u16 f_index; //当前频率在表中所处位置() u32 avg_step; //匀速阶段步数 u32 step_time; //在某一频率离散点持续的时间 TIM_TypeDef *TIMx; //电机的驱动定时器 STEP_STATE state; } STEPPER; /* Exported ------------------------------------------------------------------*/ extern STEPPER *pmotor; 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); void Motor_PWM_Init(void); #endif /*********************************END OF FILE**********************************/