当前位置:   article > 正文

一起玩儿物联网人工智能小车(ESP32)——76 步进电机驱动模块A4988等的使用方法_esp32 驱动电机

esp32 驱动电机

摘要:本文介绍如何使用专用步进电机驱动模块驱动步进电机

前面介绍了如何使用L298N模块驱动步进电机,大家可以发现,直接用L298N模块驱动步进电机还是比较麻烦的,至少需要占用4个处理器的引脚,然后还要按照固定的次序控制这4个引脚输出脉冲,才能实现让步进电机转动起来的目的。这种方法的缺点就是要占用很多的资源,并耗费处理器相当大的处理能力,会导致处理器几乎没有更多的余力去从事别的处理任务。因此,为了摆脱这种情况,就创造出了各种各样的步进电机驱动模块,既有可以方便的集成到其他系统的步进电机驱动功能线路板、也有独立包装的步进电机驱动器,如下图所示:

这些不同的步进电机驱动模块,使用的是不同的核心模块,常见的有A4988、DRV8825、TMC2208系列等,但是它们的目的和功能基本都是一致的。其目的就是为了使步进电机摆脱对处理器的高度占用,使步进电机的控制变得简便、容易、且不占用过多的处理器资源。这些模块的功能也是基本一致的,就是可以通过2根线来控制步进电机,其中一个为脉冲信号,用来驱动步进电机运行步数,另一个为高低电平的数字信号,用来控制步进电机转动的方向。同时,这些模块也都提供了细分驱动功能,可以让你更精准的控制步进电机的运动。

这些步进电机驱动模块的引脚和电气特性参数都是基本一致的,因此可以在应用中互相替换。下面就以A4988模块为例,讲一下这些步进电机驱动模块的基本功能及使用方法。

A4988是一款带过流保护的完全的微型步进电动机驱动控制器,其带有内置转换器,该转换器是A4988易于实施的关键。只要在“步进”输入中输入一个脉冲,即可驱动电动机产生微步。使我们在利用步进电机时无须按照相位顺序表、进行高频率控制或复杂的交互编程。该产品可在全、1/2、1/4、1/8及1/16步进模式时操作双极步进电动机,输出驱动性能可达35V及±1A。A4988包括一个固定关断时间电流稳压器,该稳压器可在慢或混合衰减模式下工作。

在混合衰减模式下,该器件初始设置为在部分固定停机时间内快速衰减,然后在余下的停机时间慢速衰减。混合衰减电流控制方案能减少可听到的电动机噪音、增加步进精确度并减少功耗。提供内部同步整流控制电路,以改善脉宽调制(PWM)操作时的功率消耗。其内部电路保护包括:带滞后的过热关机、欠压锁定(UVLO)及交叉电流保护等功能。不需要特别的通电顺序。

下面来看一下A4988模块的驱动步进电机原理图:

在上图中可以看到,VMOT为步进电机的供电端,可以连接8~35V直流电源。而VDD则为内部逻辑控制端进行供电。也就是将对外输出的供电与自身逻辑控制的供电是分开的,这样处理有利于保证芯片的稳定工作。这与之前介绍的直流电机驱动芯片TB6612类似。

MS1、MS2和MS3则用来控制A4988的细分工作状态。可以接受的信号为数字量高低电平的逻辑信号,开发人员可通过设置不同的高低电平组合来实现细分工作状态的切换,具体的MS1、MS2和MS3的组合与其工作状态之间的关系如下表所示:

MS1

MS2

MS3

细分工作状态

L

L

L

全步

H

L

L

1/2步

L

H

L

1/4步

H

H

L

1/8步

H

H

H

1/16步

在全步工作状态下,就和我们之前使用L298N驱动步进电机是一样的,对于42步进电机每一步是1.8度,200步电机转一圈。而当工作在1/4步状态时,之前的一步就被细分为4个微步,因此需要800个微步才能使电机转一圈。因此,如果需要更高的控制精度,我们就需要旋转更多的细分。A4988模块最多支持16细分,也就是42步进电机3200步才转一圈。

最后看一下处理器的控制端STEP和DIR引脚。我们可以通过向STEP端发送脉冲来控制步进电机转动的步数,所以脉冲数量X细分X1.8度才是42步进电机转过的角度。而DIR则是用于控制电机转动的方向,改变该引脚状态后,步进电机会反向运转。

通过上面的介绍,可以看到有了A4988模块,控制步进电机旋转就变得异常的容易了。我们来看一个简单的程序,该程序同样是实现上一篇文章中的控制步进电机正反方向各旋转一周的程序,如下所示:

// 定义控制引脚

#define DIR 21

#define STEPPER 22

// 初始化函数

void setup() {

  // 控制A4988的引脚为输出模式

  pinMode(DIR, OUTPUT);

  pinMode(STEPPER, OUTPUT);

}

// 步进电机控制函数

void step(boolean dir, int steps) {

  digitalWrite(dirPin, dir);

  delay(50);

  for (int i = 0; i < steps; i++) {

    digitalWrite(stepperPin, HIGH);

    delayMicroseconds(800);

    digitalWrite(stepperPin, LOW);

    delayMicroseconds(800);

  }

}

// 主循环程序

void loop() {

  // 假设使用1/4细分,因此800步为一圈

  step(true, 800);

  delay(1000);

  step(false, 800);

  delay(1000);

}

好了,步进电机的知识就介绍到这里了。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/599664
推荐阅读
相关标签
  

闽ICP备14008679号