用STM32驱动步进电机(二)——使用DRV8825芯片

前言

DRV8825是经常用来驱动步进电机的一款芯片,本文介绍用它来控制步进电机。

芯片介绍

这里的介绍只介绍其引脚连接。
如图是它的说明书中对引脚的解释
用STM32驱动步进电机(二)——使用DRV8825芯片_第1张图片
用STM32驱动步进电机(二)——使用DRV8825芯片_第2张图片
在这里把它翻译成中文。
用STM32驱动步进电机(二)——使用DRV8825芯片_第3张图片

为了方便大家使用,说明书还给出了一种典型的连接方式
用STM32驱动步进电机(二)——使用DRV8825芯片_第4张图片
这样初始化好之后,将AOUT1、AOUT2、BOUT1、BOUT2分别连接到步进电机对应信号线,AOUT1与AOUT2同相,BOUT1与BOUT2同相。判断步进电机信号线是否同相的一个方法是将其中两条接在一起,用手转动电机,感觉有明显阻力则该两条线为同相,否则就不是。
要使电机转动,nRESET与nSLEEP引脚都应该接高电平,DIR可以先不接,给STEP以脉冲信号,芯片接收到一个脉冲便驱动电机转动一步。
附:用STM32驱动步进电机(二)——使用DRV8825芯片_第5张图片

实战

用STM32驱动步进电机(二)——使用DRV8825芯片_第6张图片
M0,M1,M2对应的细分模式与上面的表格相同。
接下来开始编写程序。
首先创建两个文件bsp_stepper.h与bsp_stepper.c
在bsp_stepper.h中,首先对引脚进行初始化宏定义:

//STEP_PB7
#define STEP_GPIO_PORT   GPIOB    	            
#define STEP_GPIO_PIN		 GPIO_Pin_7		

//DIR_PB6
#define DIR_GPIO_PORT    GPIOB    	            
#define DIR_GPIO_PIN		 GPIO_Pin_6

然后在bsp_stepper.c中定义void Stepper_GPIO_Config(void);函数来配置引脚

void Stepper_GPIO_Config(void)
{		
		/*定义一个GPIO_InitTypeDef类型的结构体*/
		GPIO_InitTypeDef GPIO_InitStructure;

		/*开启驱动板上引脚相关的GPIO外设时钟*/
		RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB,ENABLE);
	
		/*配置DIR*/
	  GPIO_InitStructure.GPIO_Pin = DIR_GPIO_PIN;	         //选择要控制的GPIO引脚
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;     //设置引脚模式为推挽输出
		GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;    //设置速率为50MHz
		GPIO_Init(DIR_GPIO_PORT, &GPIO_InitStructure);	     //调用库函数,初始化GPIO   
		
		/*配置STEP端口*/
	  GPIO_InitStructure.GPIO_Pin = STEP_GPIO_PIN;	       
		GPIO_Init(STEP_GPIO_PORT, &GPIO_InitStructure);

		DIR_LOW;
}

之后在main.c中定义控制函数,与(一)原理相同,在这里不再赘述:

/*简单的延时函数*/
void Delay(__IO uint32_t nCount)
{
	for(; nCount != 0; nCount--);
}

/*步进电机驱动函数*/
void stepper(int num,int half_T)
{
	for(;num>0;num--)
	{
		STEP_HIGH;
		Delay(half_T);
		STEP_LOW;
		Delay(half_T);
	}
}

int main(void)
{
	int half_T = 5000;
	
	Stepper_GPIO_Config();
	
  while(1)
	{
		stepper(1000,half_T);
	}		
}

将程序烧录进板子,可以看到电机开始转动
用STM32驱动步进电机(二)——使用DRV8825芯片_第7张图片
通过改变脉冲频率控制转速,配置DIR高低电平来控制方向。

你可能感兴趣的:(stm32)