1、A4988模块可以驱动两相四线步进电机,模块引脚及接线图如下:
2、步进电机引线如下:
3、引脚:
ENABLE:低电平有效,用于打开和关闭场效应管的输出;
RESET:低电平有效,芯片复位;
SLEEP:低电平有效,进入睡眠模式;
STEP:电机每动一步需要给一个脉冲;
DIR:方向选择,高电平一个方向,低电平一个方向;
VMOT:电机电源输入(8-35V);
GND:地(负极);
2A、2B:一组线圈(如分别接B+、B-);
1A、1B:一组线圈(如分别接A+、A-);
VDD:逻辑电源输入(一般使用单片机的电源);
MS1、MS2、MS3:用于选择电机的类型,具体如下:
4、下面是参考使用GD32F130写的参考代码:
//首先判断转动方向,再给STEP脉冲
void motor0_run(uint16_t speed,uint16_t step,uint8_t dir)
{
uint16_t i;
if(dir) //判断方向
{
GPIO_BOP(DIR_PORT) = DIR_PIN;
}
else
{
GPIO_BC(DIR_PORT) = DIR_PIN;
}
for(i = 0; i < step; i++) //给step脉冲
{
GPIO_BOP(STEP_PORT) = STEP_PIN; //step = 1
delay_1ms(speed);
GPIO_BC(STEP_PORT) = STEP_PIN; //step = 0
delay_1ms(speed);
}
}
//实现的内容是,电机先往一个方向转一段时间,在往另一个方向转一段时间
int main(void)
{
motor0_init(); //初始化相关的IO
systick_config();
while (1)
{
GPIO_BC(ENAB_PORT) = ENAB_PIN; //ENABLE = 0
motor0_run(1,1000,1);
GPIO_BOP(ENAB_PORT) = ENAB_PIN; //ENABLE = 1
delay_1ms(1000);
GPIO_BC(ENAB_PORT) = ENAB_PIN; //ENABLE = 0
motor0_run(1,1000,0);
GPIO_BOP(ENAB_PORT) = ENAB_PIN; //ENABLE = 1
delay_1ms(1000);
}
}
以上代码需要注意的的是,电机驱动完之后要失能mosfet(ENABLE拉高),不然的后电机会持续发热。