介绍
实验一:使用比较输出PWM模式方法实现控制步进电机的正反转以及控制转速
实验二:使用比较输出翻转模式方法实现控制步进电机的正反转以及控制转速
实验三:实现步进电机的定位
硬件资源:
1、F4电机开发板的TIM8_CH1(定时器输出通道), DIR( 正反转) , EN( 脱机引脚)
2、步进电机驱动器
3、步进电机
4、电源
实验一
#include "./BSP/STEPPER_MOTOR/stepper_motor.h"
#include "./BSP/TIMER/stepper_tim.h"
/**
* @brief 初始化步进电机相关IO口, 并使能时钟
* @param arr: 自动重装值
* @param psc: 时钟预分频数
* @retval 无
*/
void stepper_init(uint16_t arr, uint16_t psc)
{
GPIO_InitTypeDef gpio_init_struct;
STEPPER_DIR1_GPIO_CLK_ENABLE(); /* DIR1时钟使能 */
STEPPER_DIR2_GPIO_CLK_ENABLE(); /* DIR2时钟使能 */
STEPPER_EN1_GPIO_CLK_ENABLE(); /* EN1时钟使能 */
STEPPER_EN2_GPIO_CLK_ENABLE(); /* EN2时钟使能 */
gpio_init_struct.Pin = STEPPER_DIR1_GPIO_PIN; /* DIR1引脚PF9 */
gpio_init_struct.Mode = GPIO_MODE_OUTPUT_PP; /* 推挽输出 */
gpio_init_struct.Pull = GPIO_PULLDOWN; /* 下拉 */
gpio_init_struct.Speed = GPIO_SPEED_FREQ_LOW; /* 低速 */
HAL_GPIO_Init(STEPPER_DIR1_GPIO_PORT, &gpio_init_struct); /* 初始化DIR1引脚 */
gpio_init_struct.Pin = STEPPER_DIR2_GPIO_PIN; /* DIR2引脚 */
HAL_GPIO_Init(STEPPER_DIR2_GPIO_PORT, &gpio_init_struct); /* 初始化DIR2引脚 */
/* 脱机引脚初始化 */
gpio_init_struct.Pin = STEPPER_EN1_GPIO_PIN; /* EN1引脚 */
HAL_GPIO_Init(STEPPER_EN1_GPIO_PORT, &gpio_init_struct); /* 初始化EN1引脚 */
gpio_init_struct.Pin = STEPPER_EN2_GPIO_PIN; /* EN2引脚 */
HAL_GPIO_Init(STEPPER_EN2_GPIO_PORT, &gpio_init_struct); /* 初始化EN2引脚 */
atim_timx_oc_chy_init(arr, psc); /* 初始化PUL引脚,以及脉冲模式等 */
}//这里针对ST1的EN和DIR做了管脚约束和配置
/**
* @brief 开启步进电机
* @param motor_num: 步进电机接口序号
* @retval 无
*/
void stepper_star(uint8_t motor_num)
{
switch(motor_num)
{
case STEPPER_MOTOR_1 :
{
HAL_TIM_PWM_Start(&g_atimx_handle, ATIM_TIMX_PWM_CH1); /* 开启对应PWM通道 */
break;
}
case STEPPER_MOTOR_2 :
{
HAL_TIM_PWM_Start(&g_atimx_handle, ATIM_TIMX_PWM_CH2); /* 开启对应PWM通道 */
break;
}
default : break;
}
}
/**
* @brief 关闭步进电机
* @param motor_num: 步进电机接口序号
* @retval 无
*/
void stepper_stop(uint8_t motor_num)
{
switch