step/src/Driver/inc/stepper.h

62 lines
2.6 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_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**********************************/