step/src/Driver/inc/stepper.h
2018-03-02 17:32:45 +08:00

78 lines
2.8 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*******************************************************************************
* @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**********************************/