Arduino DRV8825驱动两相步进电机

原文链接:https://www.yourcee.com/newsinfo/2928457.html

在这里插入图片描述

DRV8825步进电机驱动

DRV8825是一款电机驱动芯片,为打印机,扫描仪和其他自动化设备应用提供了集成的电机驱动器解决方案,它具有两个H桥驱动器和一个微步进分度器,用于驱动双极步进电机。DRV8825能够从每个输出驱动高达2.5 A的电流。

DRV8825的特点

  1. 适合驱动8.2V~45V 2.5A一下的步进电机;
  2. 只有简单的步进和方向控制接口;
  3. 六个不同的步进模式: 全步、半步、1/4步、1/8步、1/16步、1/32步;
  4. 自带电位器可调节电流输出,从而获得更高的步进率
  5. 自动电流衰减模式检测/选择;
  6. 过热关闭电路,欠压锁定,交叉电流保护。

相对于4988的特点优势

  1. 驱动电流高达2.5A
  2. 支持最大32细分
  3. 4层PCB板,散热良好
  4. 芯片内阻更小,发热低,散热性好

DRV8825驱动步进电机注意事项

细分

M0M1M2
LLL全步
HLL半步
LHL1/4步
HHL1/8步
LLH1/16步
HLH1/32步
LHH1/32步
HHH1/32步

引脚说明

在这里插入图片描述

  1. vmot 和 GND MOT 为电动机提供电源接口,可输入8.2V 至 45V;
  2. M0、M1、M2细分逻辑电平输入引脚,可根据上表输入相应的逻辑电平调节电机的步进角;
  3. DIR,控制电机转动方向的引脚,在该引脚输入高电平,电机顺时针旋转;输入低电平,电机逆时针旋转
  4. STEP/STP控制电机转动的脉冲输入引脚,输入脉冲的频率越高,电机的旋转速度越快;
  5. SLP,该引脚控制驱动的睡眠模式,低电平有效,当把该引脚拉低时驱动器 进入睡眠模式;
  6. RST,复位引脚,低电平有效
  7. EN,使能引脚,低电平有效,当给该引脚输入低电平时驱动器使能,默认 情况下,此引脚被拉低,因此驱动器始终处于使能状态
  8. FAULT,用于过流保护或热关断,当禁用H桥FET时,该引脚输出低电平
  9. A1、A2、B1、B2为接电机的输出引脚

Arduino配合DRV8825驱动步进电机

本次实验实现步进电机在“全步”模式下一步一步清楚的顺时针走一圈接着逆时针走一圈。

接线

Arduino UNODRV8825驱动步进电机电源
D2DIR
D3STP
D4SLP
D5RST
D6M2
D7M1
D8M0
GNDGND LOGIC
1AA+
2AA-
1BB+
2BB-
VMOTVCC
GND MOTGND

表格里的电源可根据实际情况接入,8.2V 至 45V能驱动你的步进电机就行⊙︿⊙
在这里插入图片描述
步进电机的几根线很乱原谅一下╮(╯_╰)╭

实验代码


#define DIR 2 //DIR 控制步进电机正反转
#define STP 3 //PWM输入,控制步进  *为了更好的控制PWM频率,下面会用到自定义PWM的方法,所以这个引脚不一定要连接在PWM引脚*
#define SLP 4 //睡眠
#define RST 5 //复位
#define M2 6  //细分调节
#define M1 7  //细分调节
#define M0 8  //细分调节


/*
    M0  M1  M2   细分
    L   L   L    全步 1.8度
    H   L   L    半步
    L   H   L    1/4步
    H   H   L    1/8步
    L   L   H    1/16步
    H   L   H    1/32步
    L   H   H    1/32步
    H   H   H    1/32步
*/

void setup() {
  // put your setup code here, to run once:
  pinMode(DIR, OUTPUT);
  pinMode(STP, OUTPUT);
  pinMode(SLP, OUTPUT);
  pinMode(RST, OUTPUT);
  pinMode(M2, OUTPUT);
  pinMode(M1, OUTPUT);
  pinMode(M0, OUTPUT);
  digitalWrite(SLP, HIGH); //唤醒驱动
  Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:

  int i = 0; //用于计算步数
  /*全步正转360度*/
  while (i < 200)
  {
    digitalWrite(DIR, HIGH); //正转
    digitalWrite(RST, HIGH);
    //细分
    digitalWrite(M2, LOW);
    digitalWrite(M1, LOW);
    digitalWrite(M0, LOW);
    digitalWrite(STP, HIGH);
    delayMicroseconds(100);
    digitalWrite(STP, LOW);
    delay(500);           //若想要改变电机转动的速度 可以通过改变这个延时实现
    i++;
    Serial.println(i);
  }
  /*全步反转360度*/
  while (i > 0)
  {
    digitalWrite(DIR, LOW); //反转
    digitalWrite(RST, HIGH);
    //细分
    digitalWrite(M2, LOW);
    digitalWrite(M1, LOW);
    digitalWrite(M0, LOW);
    digitalWrite(STP, HIGH);
    delayMicroseconds(100);
    digitalWrite(STP, LOW);
    delay(500);
    i--;
    Serial.println(i);

  }

}

两相步进电机,由于全步模式,所以每一步是1.8度,因此转360度为200步。
可通过查看串口打印“i”的值来验证打印到200时是否是一圈。

通过更改

digitalWrite(STP, LOW);
delay(500);

中的delay()参数来模拟增加或减小脉冲的频率从而改变步进电机的转动速度。

实验结果

在这里插入图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值