龙空技术网

Arduino控制步进电机_分类,规格,三种方式,超详细带范例

DIY百事 295

前言:

此刻大家对“a4988电流计算”大概比较关心,小伙伴们都需要剖析一些“a4988电流计算”的相关资讯。那么小编在网上收集了一些有关“a4988电流计算””的相关内容,希望各位老铁们能喜欢,我们快快来了解一下吧!

步进电机用于各种设备,从 3D 打印机和 CNC 机器到 DVD 驱动器、加热管道,甚至模拟时钟。然而,尽管它们很受欢迎,但许多实验者回避使用步进电机,因为它们似乎需要复杂的连接和代码

在本文中,我将向您展示使用步进电机所需的所有知识。了解如何使用 ULN2003、L298N 和 A4988 等驱动程序通过 Arduino 控制双极和单极步进电机。

本文翻译自科普大神DroneBotWorkshop.com. 浅显易懂适合新手

译者:DIY百事

目录

1 简介

2 关于步进电机

3 步进电机的工作原理

3.1微步进

4步进电机的各类

4.1双极步进电机

4.2单极步进电机

5读懂步进电机的规格书

6 NEMA 电机及尺寸

7步进电机试验

8演示 1 –ULN2003 驱动的 28BYJ-48 单极步进电机

9演示 2 –ULN2003 驱动两个 28BYJ-48 单极步进电机

10演示 3 –L298N H 桥驱动的双极步进电机

11演示 4 –A4988 驱动的双极步进电机

11.1 A4988 电流调整

12结论

简介

图1

在本文中,我希望通过向您展示将步进电机与 Arduino 配合使用是多么容易,从而消除这种误解。所以请读完,我保证带您一步一步地了解所有这些“复杂”的步进电机理论!

步进电机

步进电机是以精确的位移或“步数”旋转的直流电机。当您需要非常准确地定位某物时,它们非常有用。它们在 3D 打印机中用于正确定位打印头,在 CNC 机器中使用它们的精度来定位切割头。如果您的数码相机具有自动对焦或远程变焦功能,则可能会使用步进电机来完成此操作。

图2

与直流电机不同,步进电机是通过向其内部线圈施加直流电脉冲来控制的。每个脉冲使电机前进一步或一小步,后者被称为“微步”,将在稍后解释。

一些用户将步进电机与伺服电机混淆,但它们实际上是两种不同的物种。伺服电机的独特之处在于它的电机轴可以移动到一个精确的角度,大多数伺服电机只能旋转 180 或 270 度,尽管有改进的伺服电机可以旋转整整 360 度。伺服电机“知道”其位置,即使外力移动电机轴,也可以移动到特定角度。

另一方面,步进电机“不知道”他们的位置。它们可以相对它们开始步进的位置(比如顺时针 36 度)移动到精确位置,但与伺服不同的是,如果它们的轴受到外力移动,它们可能会错位。在许多应用中,伺服电机在被控制之前首先移动到“零位”或参考位置,打印机通常在首次初始化时执行此操作。

因为在需要平滑连续旋转的情况下不经常使用步进电机以离散步长移动,但是通过使用齿轮和微步进,它们可以实现平滑旋转,并且它们非常准确地定位的能力通常超过其运动的粗糙度.

步进电机相对于直流电机的另一个优势是能够以非常低的速度移动目标而不会停顿。它们在小尺寸上实现了大扭矩。

步进电机的工作原理

步进电机有一个磁化铁芯,周围有许多用作电磁体的线圈。尽管线圈看起来数量很多,但步进电机中通常只有两个线圈连线。

图3

通过精确控制线圈中的电流,可以使电机轴以离散的步骤移动,如下图所示:

图4

在第一张图中,顶部的线圈通过按所示极性施加电流来激励。磁化轴被这个线圈吸引,然后锁定到位。

现在看看当电流从顶部线圈移除并施加到另一个线圈时会发生什么。轴被吸引到第二个线圈并锁定到位。

图5

两个位置之间的跳跃是一个步骤(在此图中,一个步骤是 90 度,实际上,步进电机通常只步进其中的一小部分。为了清晰起见,简化了图表)。

微步进

我们已经看到电机轴如何移动以将自身锁定在吸引电磁体前面的位置,每个磁铁代表一个步骤。但是,可以将电机轴移动到步骤之间的位置。这被称为“微步进”。

为了理解微步进的工作原理,请看下图:

图6

在此图示中,电流以相等的量施加到两个线圈。这会导致电机轴锁定到两个线圈之间的中间位置。这将被称为“半步”。

该原理可以扩展到包括四分之一步、八步甚至十六步。这是通过控制施加到两个线圈的电流比率来实现的,以将电机轴吸引到线圈之间的位置,但比另一个线圈更靠近一个线圈。

通过使用微步进,可以将步进电机的轴移动几分之一度,从而实现极其精确的定位。

步进电机的类型

在内部,有多种设计步进电机的方法,例如可变磁阻、永磁和混合步进电机。这些设计差异主要涉及在电机内产生磁场的方法。

对于大多数实验者来说,这些差异只是学术上的,但如果您为非常具体的设计选择步进电机,您可能需要更多地研究这一点。

对于大多数用户来说,步进电机设计之间的主要区别归结为电机内线圈的接线方式。有两种方法采用——双极和单极。这两种类型的步进电机不可互换(尽管可以改造单极电机成双极电机)。

我们来看看这两种步进电机。

双极步进电机

双极步进电机由两个线圈组成(电气上,实际上分为几个物理线圈),通常有四个连接,每个线圈两个。您在上一节中看到的步进操作的简化图都是双极步进电机。

图7

双极步进电机的一个优点是它们利用了整个线圈绕组,因此效率更高。然而,它们需要更复杂的控制器或驱动器来操作以反转施加到线圈的电压的极性。

单极步进电机

单极步进电机也由两个线圈(电气)组成,但每个线圈都有一个中心抽头,因此每个线圈上有三个连接。这导致六个连接,但是许多单极步进电机只有五个连接,因为两个中心抽头在内部连接。

图8

在单极步进电机中,一次仅使用每个线圈的一半。在大多数配置中,正电压施加到中心抽头并留在那里。然后向线圈的一侧施加负电压以吸引电机轴,如下图所示:

图9

与双极电机一样,当电流从顶部线圈移除并施加到第二个线圈的一侧时,可以使单极步进电机前进一步:

图10

您还可以使用与双极步进电机相同的技术对单极步进电机进行微步进,向两个线圈施加电流。

现在要反转单极电机的方向,您不需要反转极性。相反,负电压施加到线圈的另一侧。这导致电流在线圈内以相反方向流动,这反过来又使电机轴向相反方向移动。

图11

单极步进电机更容易控制,因为不需要反转电流极性来改变方向。但是,由于单极步进电机在任何给定时刻仅使用一半的线圈绕组,因此效率不高,因为基本上浪费了一半的接线。

在我们即将进行的实验中,我们将使用单极和双极步进电机。

应该注意的是,也有步进电机可以连接为双极和单极。这些电机有四个线圈,可以连接成两个中心抽头线圈(单极配置)或两个大线圈(双极配置)。这些步进电机将有八根电线,每个线圈两根。

解读步进电机规格

选择步进电机可能是一项艰巨的任务,但并非必须如此。许多初次使用的用户被某些步进电机所包含的大量规格吓坏了。事实上,它们并不难理解。

以下是步进电机附带的一些关键规格,以及它们的简短定义:

相位Phase:这是指步进电机中各个线圈的分组。步进电机可能有多个线圈,但它们连接在一起并分相控制。二相、四相和五相步进电机很常见。步进电机中通常会包含一个相位图,用于指示电机相位的驱动顺序。

步距角Step Angle: 这是电机轴在每个单独的整步中旋转的量,以度为单位,在某些步进电机中,这被称为步数Steps per Revolution,这两个数字只是表达同一事物的不同方式. 例如,步进电机的常见额定值为 1.8 度步距角。由于完整旋转有 360 度,这相当于每转 200 步 (1.8 x 200 = 360)。

电压Voltage:只是电机线圈的额定电压。它也是额定电流和线圈电阻的函数,您可以使用欧姆定律从另一个中计算出一个。

电流Current:额定电压下的最大电流。这是一个关键规格,作为步进电机选择合适的驱动器和电源的依据。

电阻Resistance:线圈电阻,以欧姆为单位。

电感Inductance:每个电机线圈的电感,以毫亨为单位。这是一个重要的规格,因为电感将限制您能够有效驱动步进电机的最大速度。通常单极步进电机在这里有一个优势,因为它们只使用半个线圈,因此电感比双极步进电机低。

保持扭矩Holding Torque:这将是步进电机通电时产生的力。

止动扭矩Detent Torque:这是电机未通电时可以预期的保持扭矩量。

轴型Shaft Style:电机轴的物理形状。您需要了解这一点,以便将您的步进电机与齿轮、皮带轮和其他外部连接(例如联轴器)配对。此外,由于显而易见的原因,杆身长度可能很重要。

一些常见的轴类型如下:

圆轴——很好地说明了一切!“D”轴——一种“D形”轴,用于用固定螺钉安装齿轮。齿轮轴- 带有蚀刻在其中的齿轮的轴。丝杠轴- 一种形状像螺钉的轴,用于构建线性致动器。

步进电机(或任何电机)的另一个明显规格是其物理尺寸。有一组标准尺寸的步进电机,我们现在来看看这些。

NEMA 电机尺寸

NEMA 是美国电气制造商协会(National Electrical Manufacturers Association)的缩写。虽然总部设在美国,这实际上是一个国际标准委员会,虽然是美国人,但这些规范最初都是使用英制而不是公制创建的。

1984 年,NEMA 委员会根据电机的面板尺寸制定了一些电机尺寸标准。该标准今天仍在使用,并导致电机被指定为“NEMA 17”或“NEMA 23”。

NEMA 17 尺寸的步进电机非常受欢迎,尤其是在 3D 打印机的构建中。这也会造成很多混淆,因为您经常听到人们将电机简称为“NEMA 17”,它实际上只指定了电机的尺寸,而不是其他规格,例如电压、电流、步距角,甚至是双极或单极。

“NEMA 17”中的“17”是面板尺寸,在NEMA标准中,面板是NEMA“数字”除以10英寸。因此,NEMA 17 电机的面板宽度约为 1.7 英寸,而 NEMA 23 的面板宽度为 2.3 英寸。

Techref 对NEMA 电机尺寸有很好的描述。

试验步进电机

OK,理论够了!是时候用我们的 Arduino试验步进电机了。

我们今天将进行四个实验,其中两个使用单极步进电机,另外两个使用双极步进电机。此外,我们将使用几个 Arduino 库,其中一个已包含在 Arduino IDE 中。

虽然这些实验是使用 Arduino Uno,但任何 Arduino 都可以工作。如果需要,您也可以随意更改引脚编号,因为那里没有特殊要求,如果您决定这样做,请务必更改代码以反映这些更改。

让我们开始吧!

演示 1 –ULN2003 驱动 28BYJ-48 单极步进电机

我们的第一个演示将使用非常流行的步进电机和驱动器组合。这些电机已经制造了几十年,生产数量以百万计,因此它们非常便宜,驱动器和电机的总运行费用应该不到 20元。

所述28BYJ-48是一5线单极步进电动机,其步距为每转32步,但有一个64倍的齿轮系统,换算后为32*64= 2048步每转。应该注意的是,其中一些电机可能具有不同的齿轮系统,因此电机每转的步数可能不同。28BYJ-48 以 5 伏电压运行。

电机通常与基于 ULN2003 达林顿晶体管阵列的微型驱动器板一起封装。该板有一个与电机线完美配合的连接器,因此非常易于使用。还有四个 5 伏数字输入的连接以及电源连接。

关于电源,需要注意的一件非常重要的事情是,您不应该使用 Arduino 的 5 伏电源为这个(或任何)步进电机供电。即使 28BYJ-48 不会消耗太多电流,它也会在其电源线上产生电“噪声”,这可能会损坏您的 Arduino。始终使用单独的电源为您的步进电机供电!

我们将连接我们的电机、驱动器和 Arduino,如下所示:

图12

现在我们已经连接好了一切,我们需要对 Arduino 进行编程。这是我们将用来执行此操作的代码:

 /*  Stepper Motor Demonstration 1  Stepper-Demo1.ino  Demonstrates 28BYJ-48 Unipolar Stepper with ULN2003 Driver  Uses Arduino Stepper Library   DroneBot Workshop 2018  */ //Include the Arduino Stepper Library#include <Stepper.h> // Define Constants // Number of steps per internal motor revolutionconst float STEPS_PER_REV = 32; //  Amount of Gear Reductionconst float GEAR_RED = 64; // Number of steps per geared output rotationconst float STEPS_PER_OUT_REV = STEPS_PER_REV * GEAR_RED; // Define Variables // Number of Steps Requiredint StepsRequired; // Create Instance of Stepper Class// Specify Pins used for motor coils// The pins used are 8,9,10,11// Connected to ULN2003 Motor Driver In1, In2, In3, In4// Pins entered in sequence 1-3-2-4 for proper step sequencing Stepper steppermotor(STEPS_PER_REV, 8, 10, 9, 11); void setup(){// Nothing  (Stepper Library sets pins as outputs)} void loop(){  // Slow - 4-step CW sequence to observe lights on driver board  steppermotor.setSpeed(1);      StepsRequired  =  4;  steppermotor.step(StepsRequired);  delay(2000);    // Rotate CW 1/2 turn slowly  StepsRequired  =  STEPS_PER_OUT_REV / 2;  steppermotor.setSpeed(100);    steppermotor.step(StepsRequired);  delay(1000);    // Rotate CCW 1/2 turn quickly  StepsRequired  =  - STEPS_PER_OUT_REV / 2;    steppermotor.setSpeed(700);    steppermotor.step(StepsRequired);  delay(2000); }

在此代码中,我们使用了Arduino IDE随附的Arduino Stepper Library。步进电机库负责对我们将发送到步进电机的脉冲进行排序,它可以用于各种电机,包括单极和双极。

28BYJ-48 步进电机具有内部齿轮装置,可将输出旋转减少 64 倍(如上所述,有些是不同的)。所以我们定义了三个常量来处理电机旋转:

STEPS_PER_REV 是实际电机每转的步数。这被设置为 32。GEAR_RED 是齿轮减速量。我将我的设置为 64 但如果您的电机不同,您可能需要调整它STEPS_PER_OUT_REV 是齿轮减速后电机轴的最终输出。是上面两个数的倍数。

如果您想知道为什么对上述常量使用浮点数而不是整数,那是因为齿轮减速有时是像 63.5 这样的数字。如果你的是 64,你总是可以使用整数。

变量“StepsRequired”将用于定义我们希望电机旋转的步数。

28BYJ-48 单极步进电机的步进顺序如下:1-3-2-4。该信息将用于通过创建一个名为“steppermotor”的 Stepper 类的实例来驱动电机,其引脚序列为 8,10,9,11。确保您正确理解,否则电机将无法正常运行。

在设置例程中无需设置任何内容,因为 Arduino Stepper 库类已经将四个 I/O 引脚设置为输出。

在循环中,我们有三个演示运行,您可以随意添加更多或更改现有的。

第一次运行时,电机非常缓慢地步进四步。在运行时观察 UNL2003 上的 LED 很有趣。

第二次运行非常缓慢地将电机顺时针旋转半圈。最后一次运行使电机以更快的速度返回半圈。您可以尝试使用“setSpeed”参数来确定电机的最高速度。

演示 2 – 两个ULN2003 驱动的 28BYJ-48 单极步进电机

对于下一个演示,我们将在图片中添加第二个 28BYJ-48 步进电机和 ULN2003 驱动器,以同时驱动两个电机。我们还将使用您需要在 Arduino IDE 中安装的高级步进电机库。

在我们开始编写代码之前,让我们将额外的电机和驱动器连接到我们的 Arduino。保留您在演示 1 中进行的连接,并按如下方式连接新设备:

图13

我们将再次使用外部 5 伏电源为驱动器和电机供电。

此代码将使用AccelStepper 库,该库是由 Mike McCauley 编写的高级库。您需要使用 Arduino IDE 库管理器安装此库,因为它不包含在 Arduino IDE 中。

 /*  Stepper Motor Demonstration 2  Stepper-Demo2.ino  Demonstrates Two 28BYJ-48 Unipolar Steppers with ULN2003 Driver  Uses Accelstepper Library   DroneBot Workshop 2018  */ // Include the AccelStepper Library#include <AccelStepper.h> // Define Constants // Define step constants#define FULLSTEP 4#define HALFSTEP 8 // Define Motor Pins (2 Motors used) #define motorPin1  8     // Blue   - 28BYJ48 pin 1#define motorPin2  9     // Pink   - 28BYJ48 pin 2#define motorPin3  10    // Yellow - 28BYJ48 pin 3#define motorPin4  11    // Orange - 28BYJ48 pin 4                  #define motorPin5  4     // Blue   - 28BYJ48 pin 1#define motorPin6  5     // Pink   - 28BYJ48 pin 2#define motorPin7  6     // Yellow - 28BYJ48 pin 3#define motorPin8  7     // Orange - 28BYJ48 pin 4 // Define two motor objects// The sequence 1-3-2-4 is required for proper sequencing of 28BYJ48AccelStepper stepper1(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);AccelStepper stepper2(FULLSTEP, motorPin5, motorPin7, motorPin6, motorPin8); void setup(){  // 1 revolution Motor 1 CW  stepper1.setMaxSpeed(1000.0);  stepper1.setAcceleration(50.0);  stepper1.setSpeed(200);  stepper1.moveTo(2048);      // 1 revolution Motor 2 CCW  stepper2.setMaxSpeed(1000.0);  stepper2.setAcceleration(50.0);  stepper2.setSpeed(200);  stepper2.moveTo(-2048); }  void loop(){  //Change direction at the limits  if (stepper1.distanceToGo() == 0)    stepper1.moveTo(-stepper1.currentPosition());  if (stepper2.distanceToGo() == 0)    stepper2.moveTo(-stepper2.currentPosition());  stepper1.run();  stepper2.run();}

在本演示中,我们将全步驱动一个电机,半步驱动第二个电机。为此,我们将在代码的开头定义两个常量。我们还将定义八个常量,一个用于 Arduino 上的每个电机输出引脚。

接下来我们设置两个电机对象,每个电机一个。我们使用我们的引脚定义和步骤定义来设置这些。

在设置程序中,我们设置了最大速度、变速比、初始速度和我们将移动到的步数(我使用 2048,因为电机每转旋转 2048 步)。请注意,第二个电机的步数为负数,这表示它在初始化时逆时针移动。

在循环中,我们使用 If 语句来检查电机在到达“moveTo”位置之前需要移动多远,使用 AccelStepper 库的“distanceToGo”参数。一旦达到零,我们将“moveTo”位置更改为当前位置的负值,这将导致电机以相反的方向移动到行程的另一端。

电机实际上是使用 AccelStepper 库的“run”函数启动的。

两个电机的运动很有趣,因为它们以相反的方向加速和减速。请注意,一个电机全步运行,而另一个使用半步,当电机启动和停止时观察 UNL2003 控制器上的灯,您会注意到步进模式的差异。

演示 3 –L298N H 桥驱动的双极步进电机

现在我们已经使用了单极步进电机,是时候切换到双极步进电机了。在这个实验中,我使用了一个 NEMA 17 尺寸的双极步进电机,额定电压为 12 伏,但只要您观察额定电压并使用合适的电源,任何双极步进电机都可以使用。再次请不要尝试从 Arduino 电源为电机供电。

正如您所记得的,双极步进电机需要一个驱动器,该驱动器可以将电机线圈的极性反转,以反转电机方向。实现这一目标的一个很好的组件是“H 桥”。

我们之前在讨论控制有刷直流电机时已经讨论过使用H 桥。本质上,这是一个包含四个内部功率晶体管的设备,可以控制通过电机线圈的电流方向。

我们将使用上一篇文章中使用的相同 H 桥控制器,即 L298N 模块。这些模块非常便宜且非常可靠,它们可用于控制两台直流电机或一台步进电机。显然,我们今天将使用它来控制步进电机,L298N 是双 H 桥,因此每个 H 桥将驱动我们双极步进电机中的一个线圈。

以下是我如何连接 L298N H 桥、双极步进电机和 Arduino Uno:

图14

请注意,您可能不需要进行所有这些连接,这取决于您如何配置 L298N 模块。还要注意,您使用的电机电源应符合您的电机要求。

L298N 模块有一个跳线,可将其内部 5 伏逻辑电路设置为使用外部电源(跳线关闭)或使用内置稳压器并从电机电源(跳线开启)中获得 5 伏电压. 如果您选择使用您的电机电源,请确保它至少为 7.5 伏,并消除 Arduino 5 伏输出的电源连接。

一些 L298N 模块还具有一组跳线,可让您将两条 Enable 线使能,以便电机始终处于启用状态,这正是我们在这里想要的。如果您有这些,您还可以省掉从 Arduino 5 伏输出到 ENA 和 ENB 的连接,而只需设置跳线即可。

我们还将使用电位计作为速度控制。10k 以上的任何值都可以工作,较低的值会给 Arduino 5 伏输出带来过大负载。

一旦你把所有东西都连接起来,就可以将代码加载到 Arduino 上了。这是代码:

 /*  Stepper Motor Demonstration 3  Stepper-Demo3.ino  Demonstrates NEMA 17 Bipolar Stepper with L298N Driver  Uses Potentiometer on Analog Input A0  Uses Arduino Stepper Library   DroneBot Workshop 2018  */ // Include the Arduino Stepper Library#include <Stepper.h> // Define Constants // Number of steps per output rotationconst int STEPS_PER_REV = 200;const int SPEED_CONTROL = A0; // Create Instance of Stepper Class// Specify Pins used for motor coils// The pins used are 8,9,10,11// Connected to L298N Motor Driver In1, In2, In3, In4// Pins entered in sequence 1-2-3-4 for proper step sequencing Stepper stepper_NEMA17(STEPS_PER_REV, 8, 9, 10, 11); void setup() {  // nothing to do inside the setup} void loop() {  // read the sensor value:  int sensorReading = analogRead(SPEED_CONTROL);  // map it to a range from 0 to 100:  int motorSpeed = map(sensorReading, 0, 1023, 0, 100);  // set the motor speed:  if (motorSpeed > 0) {    stepper_NEMA17.setSpeed(motorSpeed);    // step 1/100 of a revolution:    stepper_NEMA17.step(STEPS_PER_REV / 100);  }}

代码再次使用 Arduino Stepper 库。如果您想挑战一下,可以重写它以改用 AccelStepper 库。

在包含库之后,我们定义了几个常量:

STEPS_PER_REV 是我们的电机额定每转的步数。我的额定值为 200,相当于每步 1.8 度。更改此设置以匹配您的电机。SPEED_CONTROL 是我们连接电位器的模拟端口。设置为 A0。

我们的双极步进电机的序列是 1-2-3-4,因此我们在创建步进电机类的实例时考虑到了这一点。我们的 L298N 连接到引脚 8、9、10 和 11。

步进电机库再次将引脚设置为输出,因此无需在设置例程中执行此操作。

在循环中,我们通过使用 Arduino 模拟读取函数测量模拟引脚上的输入电压来读取电位计位置。然后我们使用有用的 Arduino 映射函数将其映射到 0 到 100 的范围内。

然后使用从映射函数导出的值来设置电机速度。只要它超过零,我们就设置电机速度,然后将其步进百分之一转,就我的电机而言,这会将其移动两步或 3 度。

之后我们再做一遍。结果是电机速度将由电位器控制。

请注意,在设计中没有尝试控制电机方向。如果您愿意,您可以通过将电机速度设置为负数来逆时针旋转电机。H 桥将完成反转电机电压极性以反转电机的工作。

如您所见,L298N 是一款出色的步进电机控制器和直流电机控制器。但是像 UNL2003 一样,它仍然需要 Arduino 来完成所有的电机排序。在我们的下一个实验中,我们将使用专用电机控制器。

演示 4 – 采用 A4988 的双极步进电机

最后的演示将使用称为 A4988 的专用双极步进电机控制器。使用专用控制器有许多优点:

步进电机的逻辑全部包含在控制器中,可以腾出Arduino(或其他微控制器或微机)做其他事情。减少了与微控制器或微型计算机的连接数量,从而更容易控制多个步进电机无需使用任何特殊库或占用计算资源,即可轻松完成诸如微步进之类的高级操作您实际上可以在没有微控制器的情况下控制电机,一个简单的方波振荡器在许多情况下就足够了。

A4988是一种非常常见且价格低廉的步进电机控制器,在需要管理多个步进电机的 3D 打印机和 CNC 机器中大量使用。除了控制器和电机之外,它只需要一个其他部件,一个物理上靠近控制器安装的去耦电容器。使用散热器,该设备可以处理高达 2 安培的电流。

使用前先看一下A4988模块的引脚排列:

图15

从右上角开始向下看,我们看到以下引脚:

VMOT – 电机直流电源电压(正)。最大电压为 35 伏。GND – 电机电源电压接地。2B、2A – 双极步进电机线圈 2 的连接。1A、1B – 双极步进电机线圈 1 的连接。VDD – 逻辑电源直流电压(正)。这可以在 3 到 5.5 伏的范围内。GND – 逻辑电源地。

现在俯视 A4988 模块的另一侧:

ENABLE – 这是一个低电平有效连接,当 A4988 模块变为低电平(接地)时启用。默认情况下,这被拉低,因此除非您在此处应用逻辑高,否则该模块始终处于启用状态。MS1、MS2、MS3——这三个连接决定了 A4988 模块的微步进模式。通过在此处设置逻辑电平,您可以将电机设置为全、半、四分之一、第八或第十六步。有关详细信息,请参阅连接图上的图表。RESET——这是一个低电平使能,将复位模块。默认情况下,它被拉高。Sleep——如果这条线设置为低,模块将进入低功耗睡眠模式并消耗最少的电流。通过将此线连接到复位引脚,模块将始终处于全功耗状态。Step– 用它可以从外部微控制器或方波振荡器驱动电机。此处发送的每个脉冲都会以 MS1、MS2 和 MS3 设置所设置的任何步数或微步数使电机步进。脉冲越快,电机运行得越快。DIR – 方向控制 高电平驱动电机顺时针运转,低电平将是逆时针。

这里要注意的关键是 A4988 只需要来自 Arduino 的两个输入来控制步进电机,不需要 Arduino 来“弄清楚”步进逻辑。这使得在高级项目中控制多个步进电机变得更加容易。

现在我们已经看到了 A4988 的布局,我们将把一个连接到我们的 Arduino。图16

请注意,该电路中还有一个额外的组件,一个 100uf 的电容器。这对于去耦电源至关重要。47uf 以上的任何值就足够了,尝试将电容器安装在尽可能靠近 A4988 VMOT 和 GND 引脚的位置。

连接非常简单。确保观察电机连接,A4988 的布局很方便,以匹配几个双极电机上常见的 4 针连接器,但您应该检查电机连接以确保它们正确。

A4988 电流调整

在我们加载我们的代码之前,需要做一件事。我们需要使用 A4988 模块上的小电位器来设置流经电机线圈的电流。

一种方法是在调整电位器的同时测量电位计附近测试点(标有“+”)处的电压。使用以下公式推导出电流:

I= Vref*2.5 – “Vref”是您测量的电压,“I”是电流。

另一种方法是将“STEP”输入连接到高电压(5 伏)并将电流表与其中一个电机线圈串联。这是我在视频中使用的方法。

调整电机电流后,就可以加载代码了:

 /*  Stepper Motor Demonstration 4  Stepper-Demo4.ino  Demonstrates NEMA 17 Bipolar Stepper with A4988 Driver   DroneBot Workshop 2018  */ // Define Constants // Connections to A4988const int dirPin = 2;  // Directionconst int stepPin = 3; // Step // Motor steps per rotationconst int STEPS_PER_REV = 200; void setup() {    // Setup the pins as Outputs  pinMode(stepPin,OUTPUT);  pinMode(dirPin,OUTPUT);}void loop() {    // Set motor direction clockwise  digitalWrite(dirPin,HIGH);    // Spin motor one rotation slowly  for(int x = 0; x < STEPS_PER_REV; x++) {    digitalWrite(stepPin,HIGH);    delayMicroseconds(2000);    digitalWrite(stepPin,LOW);    delayMicroseconds(2000);  }    // Pause for one second  delay(1000);    // Set motor direction counterclockwise  digitalWrite(dirPin,LOW);    // Spin motor two rotations quickly  for(int x = 0; x < (STEPS_PER_REV * 2); x++) {    digitalWrite(stepPin,HIGH);    delayMicroseconds(1000);    digitalWrite(stepPin,LOW);    delayMicroseconds(1000);  }    // Pause for one second  delay(1000);}

在这个代码中,我们不会使用任何步进电机库,因为我们需要做的就是向 A4988 发送一个脉冲,让它完成所有“繁重的工作”。

我们首先定义常量来表示我们已将 A4988 STEP 和 DIR 引脚连接到的引脚。我们还定义了 STEPS_PER_REV,就像我们在之前的代码中所做的那样,我们的电机完成一转所需的步数。同样,您应该将其设置为与您的步进电机规格相匹配。

在设置中,我们将两个定义的 A4988 引脚设置为输出。

现在进入循环。我们将在这里做两件事,将电机顺时针缓慢旋转一圈,然后逆时针旋转两圈。我们将在每次旋转之间插入一秒的延迟。

要设置电机的方向,我们将 DIR 引脚设置为高或低。这里的 HIGH 将导致电机顺时针旋转。

速度由我们在 STEP 引脚上发送的脉冲频率设置。脉冲以与 Arduino Blink 代码非常相似的方式手动生成,方法是将输出设为高电平,稍等片刻,然后将其设为低电平并再次等待。这将根据需要重复多次,以按照我们想要的量旋转我们的电机,第一个程序旋转一整圈,第二个程序旋转两圈。

当然,您可以根据需要添加任意数量的例程,以使电机以您喜欢的速度和方向移动。

如您所见,A4988 可以非常轻松地以最少的代码驱动双极步进电机。您还可以为您的 Arduino 获得一个扩展板,它允许您驱动多个 A4988 模块,如果您正在构建 CNC 机器或 3D 打印机,这将非常棒。

结论

这篇文章和随附的视频已经向您展示了步进电机其实并不难使用。如果您设计的项目要求您能够精确定位某物,则步进电机是理想的选择。

标签: #a4988电流计算 #l298n的ena两个引脚怎么接