78 lines
2.8 KiB
C
78 lines
2.8 KiB
C
/*******************************************************************************
|
||
* @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**********************************/
|