STM32
直播中

而无返还

8年用户 1239经验值
擅长:光电显示
私信 关注
[问答]

如何使用DRV8825芯片控制步进电机?

如何使用DRV8825芯片控制步进电机?

回帖(1)

董达勇

2021-12-22 11:01:07
前言

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

这里的介绍只介绍其引脚连接。
如图是它的说明书中对引脚的解释










在这里把它翻译成中文。





为了方便大家使用,说明书还给出了一种典型的连接方式





这样初始化好之后,将AOUT1、AOUT2、BOUT1、BOUT2分别连接到步进电机对应信号线,AOUT1与AOUT2同相,BOUT1与BOUT2同相。判断步进电机信号线是否同相的一个方法是将其中两条接在一起,用手转动电机,感觉有明显阻力则该两条线为同相,否则就不是。
要使电机转动,nRESET与nSLEEP引脚都应该接高电平,DIR可以先不接,给STEP以脉冲信号,芯片接收到一个脉冲便驱动电机转动一步。
附:




实战







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);
        }               
}


将程序烧录进板子,可以看到电机开始转动





通过改变脉冲频率控制转速,配置DIR高低电平来控制方向。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分