A4988驱动步进电机

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_Init(void)
{
  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_Micr(u16 x)
{
    switch(x)
    {
        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_Control(u8 dir,u16 period,u32 steps)
{
    u32 i;
  for(i=0; i <= steps;i++)
  {
        DIR = dir;
    STEP = 1;
    delay_us(1);
    STEP = 0;
    delay_us(period);//periodԽС£¬×ªËÙÔ½¿ì£¬²»ÒªÐ¡ÓÚ1000
  }
}
//此函数可抱死
//  0 抱死
//  1 正常
void Step_Enable()
{
    ENABLE = 0;
}


motor.h
#define STEP PBout(8)   //step
#define DIR  PBout(9) //dir
#define MS1  PBout(10)//MS1
#define MS2  PBout(11)//MS2
#define MS3  PBout(12)//MS3
#define ENABLE PBout(13)//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_Init(void);
void Step_Micr(u16 x);
void Step_Enable(void);
void Step_Control(u8 dir,u16 period,u32 steps);

main.c
int main(void)
{
    int i=0;
  Stm32_Clock_Init(9);
  delay_init(72);
  MOTOR_Init();
    Step_Micr(1);//1/2/4/8/16 
    for(i=0;i<10;i++)
    {
        Step_Control(FALSE,1600,200);//正转
    delay_ms(1000);
        Step_Control(TRUE,1600,200);//反转
    delay_ms(1000);
    }
    Step_Enable();//抱死
  while(1)
  {

  }
}

实现全步状态下正转一圈,反转一圈,持续一会儿后抱死。

  • 21
    点赞
  • 160
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值