A4988一般用arduino来驱动,我是用STM32F103驱动的。
首先推一个网页,https://www.pololu.com/product/1182,上面有比较详细和专业的说明,还有一个关于限制电流使细分更精确的视频讲解,总之,专业。然后推一个datasheet,https://www.pololu.com/file/0J450/a4988_DMOS_microstepping_driver_with_translator.pdf
我用的是
驱动比较好写,首先要弄清楚接线方式。
代码:
motor.c
//IO初始化
void MOTOR_Initvoid)
{
RCC->APB2ENR|=1<<3;
GPIOB->CRH&=0xff000000;
GPIOB->CRH|=0x00333333;
}
//细分
// x==1 全步
// x==2 半步
// x==4 1/4步
// x==8 1/8步
// x==16 1/16步
void Step_Micru16 x)
{
switchx)
{
case 1:Full_step;break;
case 2:Half_step;break;
case 4:Quarter_step;break;
case 8:Eighth_step;break;
case 16:Sixteenth_step;break;
default:break;
}
}
//参数
// dir:FALSE 正转TRUE反转
// period 周期
// step 脉冲
void Step_Controlu8 dir,u16 period,u32 steps)
{
u32 i;
fori=0; i <= steps;i++)
{
DIR = dir;
STEP = 1;
delay_us1);
STEP = 0;
delay_usperiod);//periodԽС£¬×ªËÙÔ½¿ì£¬²»ÒªÐ¡ÓÚ1000
}
}
//此函数可抱死
// 0 抱死
// 1 正常
void Step_Enable)
{
ENABLE = 0;
}
motor.h
#define STEP PBout8) //step
#define DIR PBout9) //dir
#define MS1 PBout10)//MS1
#define MS2 PBout11)//MS2
#define MS3 PBout12)//MS3
#define ENABLE PBout13)//ENABLE
//细分宏定义
#define Full_step {MS1 = 0;MS2 = 0;MS3 = 0;}
#define Half_step {MS1 = 1;MS2 = 0;MS3 = 0;}
#define Quarter_step {MS1 = 0;MS2 = 1;MS3 = 0;}
#define Eighth_step {MS1 = 1;MS2 = 1;MS3 = 0;}
#define Sixteenth_step {MS1 = 1;MS2 = 1;MS3 = 1;}
void MOTOR_Initvoid);
void Step_Micru16 x);
void Step_Enablevoid);
void Step_Controlu8 dir,u16 period,u32 steps);
main.c
int mainvoid)
{
int i=0;
Stm32_Clock_Init9);
delay_init72);
MOTOR_Init);
Step_Micr1);//1/2/4/8/16
fori=0;i<10;i++)
{
Step_ControlFALSE,1600,200);//正转
delay_ms1000);
Step_ControlTRUE,1600,200);//反转
delay_ms1000);
}
Step_Enable);//抱死
while1)
{
}
}
实现全步状态下正转一圈,反转一圈,持续一会儿后抱死。