前言
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高低电平来控制方向。
前言
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高低电平来控制方向。
举报