模块简介
DRV8825特色有以下几点:
1、适合驱动8.2V~45V 2.5A以下的步进电机;
2、只有简单的步进和方向控制接口;
3、六个不同的步进模式:全、半、1/4、 1/8、 1/16、1/32;
4、可调电位器可以调节电流输出,从而获得更高的步进率;
5、自动电流衰减模式检测/选择;
6、过热关闭电路、欠压锁定、交叉电流保护;
7、接地短路保护和加载短路保护。
引脚说明
模块总共引出16个引脚,实际如果不从单片机程控细分的话,真正需要单片机去控制的就是电机的方向和输入脉冲信号。(即程序只控制了DIR和STP引脚)
DIR:控制电机转动的方向
STEP:给步进电机提供脉冲的
SLP:睡眠控制,低电平进入睡眠模式
RST:复位引脚,使用时需要拉高
M0,M1,M2:3个引脚通过高低电平设置去控制细分,即控制电机的步距角(比如这里使用的是2相4线步进电机,步距角为1.8°,那进行32细分的话就是每个脉冲1.8/32=0.05625°去行进)
EN:这里要注意下,模块上虽然丝印是EN,但是这里是低电平使能!!!
VMOT,GND:这两个相邻的引脚就是单独接另外的电源给步进电机供电的,另一个GND是用来连接单片机的地。具体可以查看下图接线图
1A,2A,1B,2B:步进电机的两个相位,1A接A+,2A接A-;1B接B+,2B接B-
这里接相位需要注意:2个相位A相和B相接反了就会旋转的方向不同,可能本来设计顺时针旋转的但是逆时针旋转了。
实际接线图
实际接线也不难,主要这里的开发板没有拓展太多的3.3V接口,所以用了面包板来进行拓展3.3V的接线,电机的需要自己确认好自己的步进电机的相位以及相位的正负。(判断同相位:一般同相位的两条线接在一起会感觉到有明显阻力)
代码说明
主函数:控制步进电机顺时针转一圈后逆时针转一圈,注意Step()函数第一个值选择6400是因为使用的步进电机步距角是1.8度的,所以转完一圈正常应该是需要360°/1.8°=200个脉冲,但是进行了32细分,所以需要32X200=6400个脉冲才可以转完一圈,第二个数值影响的是电机的速度。(这里的数值是供测试使用,如果是使用于实际电路需要自行计算好对应的脉冲数以及周期)
int main(void)
{
int Half_T = 6000;
Step_GPIO_Config();
while(1)
{
GPIO_SetBits(DIR_GPIO_PORT, DIR_GPIO_PIN);
Step(6400,5000);//第二个值越小,转越快,值建议是150以上
GPIO_ResetBits(DIR_GPIO_PORT, DIR_GPIO_PIN);
Step(6400,5000);//第二个值越小,转越快,值建议是150以上
}
}
步进电机驱动函数
//STEP_PB11
#define STEP_GPIO_PORT GPIOB
#define STEP_GPIO_PIN GPIO_Pin_11
//DIR_PB10
#define DIR_GPIO_PORT GPIOB
#define DIR_GPIO_PIN GPIO_Pin_10
void Step_GPIO_Config(void)
{
//定义一个GPIO_InitTypeDef类型的结构体
GPIO_InitTypeDef GPIO_InitStructure;
//开启驱动板上引脚相关的GPIO外设时钟
RCC_APB2PeriphClockCmd(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);
}
//步进电机驱动函数
void Step(int num,int Half_T)
{
for(;num>0;num--)
{
GPIO_SetBits(STEP_GPIO_PORT, STEP_GPIO_PIN);
Delay(Half_T);
GPIO_ResetBits(STEP_GPIO_PORT, STEP_GPIO_PIN);
Delay(Half_T);
}
}
测试现象
图片太大了这里就分段展示出来了。
常见问题
-
上电并且烧录代码后,发现电机只是再震动不转动,这种情况下需要去调节模块的电位器,作用是调节驱动步进电机的电流。
-
电流怎么调节都没有用情况一:电位器调节太快。调节电位器时不要很快速的拧过去,要慢慢的进行调节去找最合适的电流。
-
电流怎么调节都没有用情况二:电机相位接错。看自己购买的电机提供的接线和引脚说明接好。
需要整个工程的可以在评论区留言邮箱哦!