如何使用A4988驱动程序和Arduino控制步进电机

在这Arduino的教程中,我们将学习如何控制步进电机使用A4988步进驱动程序。您可以观看以下视频或阅读下面的书面教程。

概述

A4988是一个微步驱动控制双极步进电机,内置翻译,易于操作。这意味着我们可以用控制器上的两个引脚来控制步进电机,或者一个控制旋转方向,另一个控制步进。

A4988-Stepper-Driver

驱动器提供五种不同的步长分辨率:全步长、半步长、四分之一步长、八步长和十六步长。此外,它还有一个电位计,用于调节电流输出、超温热关机和交叉电流保护。

其逻辑电压从3到5.5 V,如果提供良好的附加冷却,每相的最大电流是2A或1A连续电流每相没有散热片或冷却。

A4988-Specifications

步进驱动Pinout

现在让我们仔细查看驱动器的引脚并用步进电机和控制器挂钩。因此,我们将从右侧右侧开始使用2个引脚,以供电,我们需要将它们连接到3到5.5 V的电源,以及我们的控制器,Arduino将成为我们的控制器电路板将提供5 V.以下4个引脚用于连接电机。1A和1B销将连接到电动机的一个线圈和2A和2B销上的电动机的另一个线圈。为了为电机供电,我们使用下一页,地面和VMOT,我们需要将它们连接到8到35 V的电源,我们还需要使用至少47μF的去耦电容,用于保护驱动板免受电压尖峰。

A4988-Wiring-Diagram

接下来的两个引脚,步进和方向是我们实际用于控制电机运动的引脚。方向引脚控制电机的旋转方向,我们需要将其连接到微控制器上的一个数字引脚,或者在我们的情况下,我会将其连接到Arduino板的4号引脚。

使用步进引脚,我们控制电机的mirosteps,并且每个脉冲发送到该引脚电机移动一步。因此,这意味着我们不需要任何复杂的编程,阶段序列表,频率控制线等,因为A4988驱动程序的内置转换器会负责一切。在这里,我们还需要提到这2个引脚没有在内部的任何电压下拉,因此我们不应该将它们漂浮在我们的程序中。

下一个是睡眠引脚和逻辑低把板在睡眠模式,以最大限度地减少功耗时,电机不使用。

接下来,RESET引脚设置译者预定在家状态。此家庭状况或家庭微步的位置可以从A4988数据表,这些图中可以看出。因此,这些都是从电机开始,在初始位置,它们依赖于微步分辨率是不同的。如果输入状态到该引脚为逻辑低的所有STEP输入将被忽略。RESET引脚是一个浮动销,所以如果我们没有在我们的计划,我们需要把它连接到SLEEP引脚,以使其高,使主板控制它的意图。

A4988-真相,表1

接下来的3个引脚(MS1,MS2和MS3)用于根据上述真理表选择五步分辨率中的一个。这些引脚具有内部下拉电阻,如果我们将它们断开连接,则板将以完整的步进模式运行。

最后一个,使能引脚用于开启或关闭FET输出。因此,逻辑高将保持输出禁用。

组件需要这个的Arduino教程

您可以从以下任何站点获取组件:

必威外围提钱披露:这些是附属链接。作为一个亚马逊助理,我从合格的购买中赚取。

电路原理图

这是完整的电路图。完整步骤中我将使用驱动模式,所以我将离开3针女士断开连接,连接的方向和开车到针的针步数字3和4在Arduino董事会和地面和驱动板的5 V别针。此外,我将使用100µF电容器去耦和12V, 1.5A适配器为电机供电。我将使用NEMA 17双极步进电机,其线a和C将连接到引脚1A和1B, B和D线连接到2A和2B引脚。

控制步进电机电路 - 方法

A4988电流限制

在我们连接电机之前,我们应该调整驱动器的限流,以确保电流在电机的限流范围内。我们可以通过使用板上的电位器来调整参考电压,并考虑这个方程:

电流限制= VREF×2

参考电压测量3

不过这个方程并不总是正确的,因为有不同的A4988驱动板的制造商。这里是我的情况的演示:我调整电位器测量的0.6V参考电压。因此,限流应是0.6 * 2值,等于1.2 A.

参考电压测量4

现在,由于我在全步模式下使用驱动器,根据A4988数据表,在该模式下,绕组电流只能达到电流极限的70%,因此1.2A*0.7等于0.84A。为了检查这一点,我上传了一个简单的代码,将连续的逻辑高电平发送到步进引脚(以便我们能够更好地注意到电流),并将我的仪表与电机的一个绕组串联并通电。我得到的是0.5A,这意味着这个方程对我的情况不正确。

参考电压测量5

Arduino和A4988代码

下面是一个示例代码。首先我们必须定义阶跃和方向引脚。在我们的例子中,它们是Arduino板上编号为3和4的引脚,它们被命名为stepPin和dirPin,设置部分我们必须将它们定义为输出。

/*简单步进电机控制示例代码* * by Dejan Nedelkovski, www.HowToMechatronics.com * */ //定bet188官方网站义引脚数const int stepPin = 3;const int dirPin = 4;void setup(){//设置两个引脚为输出pinMode(stepPin,OUTPUT);pinMode (dirPin、输出);} void loop() {digitalWrite(dirPin,HIGH);//使电机朝特定方向运动//产生200个脉冲,使(int x = 0;x < 200;x + +) {digitalWrite (stepPin、高);delayMicroseconds (500);digitalWrite (stepPin、低); delayMicroseconds(500); } delay(1000); // One second delay digitalWrite(dirPin,LOW); //Changes the rotations direction // Makes 400 pulses for making two full cycle rotation for(int x = 0; x < 400; x++) { digitalWrite(stepPin,HIGH); delayMicroseconds(500); digitalWrite(stepPin,LOW); delayMicroseconds(500); } delay(1000); }

在回路部分,首先我们将设置方向引脚在高状态,将使电机在一个特定的方向移动。现在使用这个for循环,我们将使电机做一个完整的循环旋转。驱动器设置为Full Step Mode,步进电机的步进角为1.8度,即200步,我们需要向Step Pin发送200个脉冲来完成一个完整周期的旋转。所以for循环将有200次迭代,每次它将设置步进针高然后低的状态,以制造脉冲。在每个数字写入之间,我们需要增加一些延迟,从这将取决于电机的速度。

在这个完整周期的旋转之后,我们将做一秒的延迟,然后通过将dirPin设置为低状态来改变旋转的方向,现在做两个完整周期的旋转,这个循环有400次迭代。最后还有一秒的延迟。现在让我们上传代码,看看它是如何工作的。

我为本教程提供了一个例子,其中我使用电位计控制电机的速度。以下是该示例的源代码:

/*简单步进电机控制示例代码* * by Dejan Nedelkovski, www.HowToMechatronics.com * */ //定bet188官方网站义引脚数const int stepPin = 3;const int dirPin = 4;int customDelay customDelayMapped;//定义变量void setup(){//设置两个引脚为输出pinMode(stepPin,OUTPUT);pinMode (dirPin、输出);数字写入(dirPin,高)//使电机能够沿特定方向移动}void循环(){customDelayMapped = speedUp(); // Gets custom delay values from the custom speedUp function // Makes pules with custom delay, depending on the Potentiometer, from which the speed of the motor depends digitalWrite(stepPin, HIGH); delayMicroseconds(customDelayMapped); digitalWrite(stepPin, LOW); delayMicroseconds(customDelayMapped); } // Function for reading the Potentiometer int speedUp() { int customDelay = analogRead(A0); // Reads the potentiometer int newCustom = map(customDelay, 0, 1023, 300,4000); // Convrests the read values of the potentiometer from 0 to 1023 into desireded delay values (300 to 4000) return newCustom; }

关于“如何用A4988驱动和Arduino控制步进电机”的125种思考

  1. 你好
    我有一个问题,你可以显示与电位器的计划?
    我不知道这是怎么联系起来的。

    thaks很多

    andres.

    回复
  2. 嗨,谢谢你的好教程。我用的是你用电位器写的代码。然而,即使我改变了

    数字写入(dirPin,高)//使电机能够沿特定方向移动

    数字写入(dirPin,低电平)//使电机能够沿特定方向移动

    马达一直朝着同一个方向运转——你知道为什么吗?

    谢谢

    回复
    • 这是奇怪的。尝试重新连接驱动程序,并再次尝试代码。除此之外你什么也做不了,因为驱动程序的DIR pin就是为此而设计的。低或高,电机应朝不同方向运动。

      回复
  3. 嗨'
    感谢本教程。我这几周都在试着用一辆带护盾和A4988的Uno开三步跑。我一点都没成功,我想我已经把所有东西都炸了,买了完整的替代品,结果还是一样。多亏了你的指导,我终于取得了积极的成果。我现在已经能够测试所有的a4988,我的2 Uno板和步进器。有趣的是,我没有炸任何东西!我现在需要考虑如何测试护盾。
    再次感谢,拉尔夫

    回复
  4. 你好,我想用一个操纵杆,一个DRV8825和一个arduino uno来控制一个步进电机。我用了你的电位器教程,但我在速度上有些困难。在你的教程中,你只有一个方向,你的值从0到1023。我想把电位器分为左右两个方向,有什么建议吗?而且,我的电机的速度比你的教程慢(当电机顺时针和逆时针旋转)。先谢谢你,你的指导还是很有帮助的。

    回复
    • 嗯,您应该调整适合您的驱动程序和步进功能的步骤之间的延迟时间并匹配所需的速度。至于电位器,您应该使用Map()函数并尝试将从电位计的值映射到合适的延迟时间,也可能与“如果”语句有一半值制作“dir”可变正面或负面。

      回复
  5. 你好again, in your code with the potentiometer, in your function you have the following code : int newCustom = map(customDelay, 0, 1023, 300,4000); // Convrests the read values of the potentiometer from 0 to 1023 into desireded delay values (300 to 4000). My question is, How exactly you found the desirable delay values ? My motor is an Nema 17 stepper motor . Thanks in advance (I’m trying to control 3 motors wireless in my project )

    回复
  6. 很棒的教程!在玩了一会儿电位计之后,我得到了它的所有功能。现在我想在同一块Arduino板上添加另一个电机/电位计。我试图复制电位计代码中的所有内容,只是重命名并添加了一些变量。我成功地将我的代码闪现到我的Arduino Uno上,但当我改变一个电位计时,两个电机的速度将同时改变。我不知道如何让每个马达独立工作。有什么建议吗?

    回复
    • 肯定是密码。在使用电位器值的示例教程中,我们改变了步骤之间的延迟时间。所以你需要为两个电机分别设置延迟变量。你可以实现这一点,如果你在主“循环”之外为两个电机创建单独的定制函数,这样它们就有单独的延迟变量,然后你只需要在主“循环”中调用这些定制函数来执行。
      你明白我的意思了吗?

      回复
      • 我想我找到你了。这是我的。仍在学习Arduino代码。我认为步进电机不想独立工作。

        void循环(){

        customDelayMappedFeed=speedUpFeed();//从自定义加速函数获取自定义延迟值
        //使pules用定制延迟,这取决于电位器,从该马达的速度依赖
        数字写入(步进式输入,高);
        delayMicroseconds(customDelayMappedFeed);
        digitalWrite (stepPinFeed、低);
        delayMicroseconds(customDelayMappedFeed);

        customDelayMappedCut = speedUpCut ();//从自定义speedUp函数获取自定义延迟值
        //使pules用定制延迟,这取决于电位器,从该马达的速度依赖
        digitalWrite (stepPinCut、高);
        延迟微秒(customDelayMappedCut);
        digitalWrite (stepPinCut、低);
        延迟微秒(customDelayMappedCut);

        //用于读取电位计的功能
        int speedUpFeed () {
        int customDelayFeed = analogRead(A0);//读取电位器
        int newCustomFeed=map(customDelayFeed,0,1023,300,4000);//将电位计的读取值从0到1023转换为所需的延迟值(300到4000)
        返回newCustomFeed;

        //用于读取电位计的功能
        int speedUpCut () {
        int customDelayCut = analogRead(A1);//读取电位器
        int newCustomCut = map(customDelayCut, 0, 1023, 300,4000); / /指定客户端//将电位器的读取值从0到1023转换为所需的延迟值(300到4000)
        返回newCustomCut;

        回复
    • 你好,尼克,
      我也这么做了,但似乎第一个锅延迟时间被添加到了第二个锅延迟时间。
      你是怎么处理的?
      我似乎不能罚款任何更新你的帖子。

      回复
  7. 嗨,我正在构建一个魔方解决机器人使用A4988驱动器和双极步进电机为立方体的每个面,所以这篇文章对我来说是完美的!我正在推特上记录这个项目,请看@robertfriberg

    问题:我看到了一个不同的教程,其中电源和逻辑电路之间的接地连接。你好像没有接地。有什么区别?

    回复
  8. 感谢本教程,我已经使用您的信息成功地使我的A4988板和步进电机项目工作。它节省了我很多时间!但我确实需要更换步进电机的接线,图中显示的是从电机直接连接到A4988板的接线,但我必须将它们交叉。我的步进电机是NEMA 17HS3001-20B,它有4根电线,电机上有类似的连接。是否值得在下一版本的页面中添加有关此的警告?

    回复
    • 我很高兴听到你觉得它有用!这些马达有很多不同的制造商,所以每一个都可能有不同的引脚顺序。因此,在连接之前,你应该总是检查电机的数据表。

      回复
  9. 尊敬的先生,

    我看过你的视频如何控制步进电机,它是一个很好的和不错的
    辅导的

    先生,我有个问题,先生,我想控制步进电机的旋转角度
    0到360和360到0,带有电位器。先生,Arduino软件里有一个skech的例子,叫做
    步进motorknob。先生在该示例skech四个控制输入是在那里,
    通过使用A4988驱动板,skech不会运行电机。

    先生,请解释一下。

    或者你可以在不使用库的情况下建议一些skech

    感谢你
    玛纳斯

    回复
  10. 我有一个提示,可以用我电脑的4个字母调节UN NEMA 17的速度,例如字母a=0速度,b=25%,c=50%d=100,我不想用电位计

    回复
  11. 尊敬的先生,

    我自己Manas Bose,先生,我正在做一个项目,在那里我必须控制一个步进电机步进控制与电位器的帮助,和arduino先生,我写了一个skech与朋友的帮助附在这里,它工作很好。

    爵士现在我想让这件事无线,先生,我想用2的Arduino和2的XBee,在发送侧的Arduino的,的XBee和电位器将在那里。接收侧的的Arduino,的XBee和一个步进电机将在那里。早些时候,一个设置我伺服电机制造。

    先生,我和我的朋友没有足够的c++知识,特此请求您的帮助
    在编码中,或者至少如果你可以抛出一些光线。

    希望得到您的青睐
    感谢您
    玛纳斯

    # include
    Int current_position = 0; / /当前位置
    Const char direction_pin = 2;
    Const char step_pin = 3;
    const char pot_pin=1//模拟输入1
    无效的设置()

    pinMode (direction_pin、输出);
    PINMODE(STEP_PIN,输出);
    pinMode (pot_pin、输入);

    空隙环()

    INT readvalue = analogRead(pot_pin);
    readvalue =地图(readvalue,0,1023,0,1151);
    如果(读取值>当前位置)

    step_motor_forward();
    CURRENT_POSITION + = 1;

    Else if (readvalue < current_position)

    step_motor_back ();
    当前位置-=1;

    } / /循环的结束

    无效步进电机前进()

    数字写入(方向_引脚,低);
    数字写入(步进引脚,高电平);
    digitalWrite (step_pin、低);

    空白step_motor_back ()

    digitalWrite (direction_pin、高);
    数字写入(步进引脚,高电平);
    digitalWrite (step_pin、低);

    回复
  12. Dejan Nedelkovski你好,恭喜你,感谢你分享这个教程。
    根据延时控制步进电机的速度在你的代码中,你写了一个延时(500微秒)。您的电位器映射延迟在(300;4000)。
    我的问题是…你从哪里找到这些值及其限制?

    谢谢你的回答

    吉米

    回复
    • 你好。我做了测试。例如,如果我将延迟时间设置为低于250,我认为步进机根本不会启动。我尝试的最低延迟时间(最快速度)大约是90,但在开始时延迟更高,超过300,然后用电位计降低到90。
      此外,您还可以在步进驱动程序的数据表中找到有关此的更多详细信息,即计时。

      回复
  13. 嗨,德扬,

    感谢您分享本教程。

    只是想知道;你用的是NEMA 17 42BYGHW609(“get one”链接指的是这种类型)?额定电压为3.4 V、1.68 A。

    现在,A4988的最低工作电压为8 V。实际上,您需要一个12 V、1.5 a的电源。这是否会导致任何冲突?

    干杯,奥拉夫

    回复
  14. 我应该用什么类型的电容器,因为你说要用47微移的电容器,但图表上说要用100微移的。我应该使用什么电容器

    电动机(链接):

    干杯

    回复
  15. 德扬,

    非常感谢,但是关于电流限制的那部分你能解释的更好吗?我有电源12V 1500mA(电机和你一样),我应该测量什么,需要改变什么?我不明白,谢谢

    回复
  16. 非常好的教程,谢谢。多亏了你,我现在可以开始运行了。

    我唯一的问题是,一个A4988控制器上运行我的NEMA 17和欧诺板,这将只运行一个方向。更改代码什么也不做。我可以通过在控制器切换周围的导线得到的方向变化,但不是通过改变代码。

    我在这方面是新手,所以希望是简单的东西。

    回复
  17. 嗨,德扬,

    感谢您提供了这篇精彩的教程。我有两个问题:在视频中,电路图(看起来像是一个熔块图像)没有显示睡眠和步进引脚连接。然而,他们似乎在视频的结尾?你能给我澄清一下哪个是正确的电路吗?

    其次,更重要的是,我发现我的步进电机,一个FSM0815-KD95越来越热。在检查1A-2B驱动引脚的电压后,我发现即使我的代码只是循环“DigitalWrite(Septpin,Low);”两个引脚仍在接收电压。无论如何我可以在电机未运行时使所有引脚的电压为0?这样它不会过热。

    回复
    • 嗨,谢谢!
      当然,“步进”引脚连接到Arduino,因为它控制电机的步进。
      “睡眠”引脚连接到驱动器的“复位”引脚。
      A4988驱动器的电机电源电压在VMOT和GND之间为8–35 V,因此您的电机可能不适合此驱动器。

      回复
  18. 德扬,很棒的教程。您是否介意回答这个驱动程序与28bjy-48步进机所用驱动程序之间的区别?它们是可互换的还是每个步进电机都需要有自己的驱动板?视频中使用的那个要便宜得多。”

    谢谢,
    马克

    回复
  19. 嗨,德扬!

    首先,感谢您分享您的教程。它非常有用。

    我有一个在至极我必须使用一个电位器的脚本问题,¿有没有测量电动机转速的方法吗?我的意思是,我想知道每分钟转数多是如何电机时,我的电位器设置为特定状态。

    谢谢!

    回复
  20. 你好,Dejan,感谢你有用的教程。

    我有一个问题,是否可以用两个驱动器同时控制两个步进电机?电机旋转不一样,比如我想让第一个电机旋转400步CW,其他的同时启动800步CCW。
    我已经试着为它写代码了,但是它的电机不是一起旋转的,电机B只有在电机A完成旋转后才会开始旋转。

    谢谢您的帮助!!

    回复
  21. 刚刚发现您的网站和对步进电机令我困扰的答案。我想说感谢你的精确解释事情的精确解释,更重要的是背景中发生的事情,不仅有你的知识,而且你还花了时间来回答问题。这应该用作其他互联网网站/论坛应该如何的基准标记。谢谢你花时间教他别人!!

    回复
  22. 嗨,德扬。

    我是arduino的新手,能给我解释一下吗?在第一个例子中,我假设电机一直在全速运行。然后在你的第二个例子中,你使用电位器改变电机的速度。我的问题是,我想电机工作在一个缓慢的速度,所有的时间,电位器可以被一个确定的电阻或它可以被控制的额外的一行代码在最初的草图?

    回复
    • 你好。在我的例子中,电机的速度是通过调整电机各步之间的延迟时间来控制的,或者如果你看到下面这行代码:
      延迟微秒(500);

      所以你所要做的就是根据你的需要设置这个值。

      回复
  23. 真正好的教程 - 展示如何调整电流限制。每个人都应该谨慎,不要使GND和VDD之间的短路 - 像我一样。这个代价我一个Arduino纳米...。

    回复
  24. 很棒的教程,谢谢发布!
    我想用一个arduino和2个A4988运行两个步进,但只有一个电源。你能告诉我如何插入第二个步进器吗?
    非常感谢!
    此致
    马库斯

    回复
    • 谢谢!
      这应该是个大问题。您只需要添加另一个驱动程序,并以与第一个相同的方式连接它。也可以用类似的方法修改代码。
      您可以为电机使用相同的电源,但只需确保它有足够的功率为两个电机供电即可。

      回复
      • 你好,德扬,
        谢谢你的回复。
        因此,通过其中一个驱动程序连接电源不是问题?第二步是通过Arduino和驾驶员编号实现权力吗?您将在微控制器上使用哪些引脚?P3 / P4和VDD / GND用于驱动程序编号1.当然我可以使用驾驶员编号2.但是有第二对VDD和GND引脚吗?
        非常感谢!

        回复
  25. 你好,德扬,
    谢谢你的回复。
    因此,通过其中一个驱动程序连接电源不是问题?第二步是通过Arduino和驾驶员编号实现权力吗?您将在微控制器上使用哪些引脚?P3 / P4和VDD / GND用于驱动程序编号1.当然我可以使用驾驶员编号2.但是有第二对VDD和GND引脚吗?
    非常感谢!

    回复
  26. 你好,

    我计划将其用于Arduino UNO,但是A4988步进驱动程序表示它与Arduino Mega2560兼容。这对arduino UNO有效吗?

    先谢谢你。

    回复
  27. 嗨,伙计

    感谢您的实践教程和视频。我已经做了同样的程序,但我有一个单极5线步进电机,它只是振动,而不是旋转。我能感觉到马达的轻微运动。

    你能帮助我吗?

    回复
  28. I’m using 17hd1402-01n model step motor.and I also using your codes the above.but when I try to use delay time as 500ms my motor never turn any direction .it is only vibrating.if I set delay time to 1000ms my motor turning . I want to ask you,why my motor don’t turn below 1000ms delay time?I also using a4988 .what is the actual problem.is it step motor or what ?
    感谢并致以最诚挚的问候

    回复
  29. 大家好
    我有个问题
    我的步进电机的型号是23Hs,在它的数据表中写它需要12v和3安培电流。现在我们应该连接12V, 3a适配器??

    回复
  30. 我用NEMA 17做了同样的尝试。步进器没有旋转,只是发出一些声音。随着轻微的压力切向轴,它正在做一个微步运动。我在VMot和Gnd的步进器上设置了一个3hw 9Volt电池作为外部电源。应该做些什么?

    回复
  31. 你好,德扬
    我想用这些设备来做这项工作。你能告诉我步进电机的数据表(或本项目中用于旋转2kg板的型号)以及适配器的电压和电流吗??因为我是初学者。非常感谢

    回复
  32. 你好,干得好!我试过这个图坦卡门,但差别不大(32μF的电容和9V的电池)。
    我上传代码,我可以听到的步骤(500微秒),但电机不转。电路正确。有没有可能电机的4根线和你的示意图不一样?

    回复
  33. 如何将12V 2A电源连接到试验板?你是否先剪断电线,然后插入正负两端?在图片/视频中,我只能看到两条红色和黑色的电线,但却看不到它们是如何连接到电源的。我购买了与您通过上述链接提供的相同的电源供应商。

    回复
    • 是的,我就是这么做的,剪断电线,然后焊上两根跳线,这样更容易连接到面包板上。然而,不需要这样做,只要得到一个12V适配器插孔。我应该早些添加一个链接到它,但现在更新了。
      顺便说一句,谢谢你的支持!

      回复
  34. 伟大的指导!我即将建立我自己的数控2D绘图仪使用DVD驱动器电机+ A4988。我是否需要预先设定X轴和Y轴的位置?我担心会损坏步进电机。电机想要在x轴上移动,但它已经在范围的末端=损坏的电机会发生吗?我需要停止阻止这一切吗?谢谢!

    回复
  35. 您提供的信息非常好,不仅在这里,而且在您发布的所有项目中都是如此。我正在考虑使用Arduino mega驱动4个独立的步进电机,但是LCDbet188me使用所有可用的PWM引脚,阶跃和DIR引脚必须是PWM引脚,还是可以使用任何数字引脚(如引脚22-53)?我注意到我发现所有的步进器库都需要使用PWM引脚来工作。

    谢谢你的伟大工作!

    回复
  36. 你好,内德尔科夫斯基先生,
    我叫赫里斯托,来自保加利亚的普洛夫迪夫。我在机电一体化方面的经验太少了,但是
    这件事对我来说很有趣。
    我看过你的视频“如何用A4988驱动和Arduino控制步进电机”
    并对一台步进电机进行了成功的尝试。你的程序代码很简单
    可以理解的。我可以旋转2或3个步进“同时”与任何类似的方式?
    祝你万事如意

    回复
  37. 优秀教程!我有虽然问题。对于我的申请,我有大约1/4转的马达来回走,我重复这5000次,然后我希望它停止。

    我可以在代码中停止它,但电机锁定在位置,并且插入时间越长,温度越高。代码中是否有办法释放或分离电机,使其不会持续变热?

    回复
    • 为了使电机保持工作状态,您需要始终保持电机处于激活状态。您可以通过调整A4988驱动器上的电位计来降低电机的电流消耗,并通过这种方式降低电机的热量。

      回复
  38. 你好,先生。如果步进电机连接皮带,位置(步距和方向)是用按钮控制的怎么样?是可能的吗?如果可能的话,你能给我一些建议或东西来记住吗?我正在开发一个自动仲裁的游戏的将军(如果你熟悉这个游戏)和步进电机是需要的位置机械手臂在8排的棋盘。

    回复
    • 当然有可能。您只需指定一个当按下特定按钮时步进机应执行的操作。您可以从上面解释的代码中看到命令(更改方向、使步进机移动一步、多步等),因此您只需要在按下特定按钮时适当地实现它们。

      回复
  39. 你好,德扬,

    尝试用手动脉冲发生器(手轮型)控制步进电机。这在A4988上可能吗?如果是这样,我们将非常感谢在这方面提供的任何帮助。谢谢

    回复
    • 好,你可能已经注意到A4988有一个STEP引脚,触发从低到高它移动电机一步。所以如果你制造出这样一个发生器来产生那种类型的脉冲你应该能够手动控制步骤。

      回复
  40. 嗨。
    伟大的教程!我也跟着拥有的一切工作。你介意解释如何将其转换成使用MS引脚1/16微步?什么代码需要添加?感谢您的帮助!

    回复
  41. 对我的Picaxe项目非常有用。bet188me你用清晰、简洁的方式解释。非常感谢制作本指南的努力。

    回复
  42. 嘿,很棒的视频!我能用足够的AA电池供电以产生12V吗?如果我使用电池,我还需要一个电容器吗?而且,我能添加一个电阻并为这些电池板产生5V电压吗?
    谢谢!

    回复
    • 嘿,不,你不能真的用AA电池供电NEMA 17步。这个步进器能产生1A的电流。你可以使用锂离子18650电池或锂- po电池。

      回复
  43. 嗨,谢谢你有趣的评论。一个快速(可能很愚蠢)的问题-当您不切换阶跃输入时,电机是否会制动?也就是说,电流是否仍在流过绕组?

    如果是这样(我认为它一定是)睡眠输入引脚允许你释放电机吗?

    干杯!

    回复
  44. 添加(以防您发现它对将来的项目有用)。我刚刚实现了一个双电流限制,工作得非常好。这允许你运行一个高电流的移动,(所以你可以加速一个质量迅速等)和一个低电流的制动。

    我在一个小型机器人项目的线性阶段上使用它,没有双电流限制,我将被迫在芯片/散热器的热性能设置的电流限制下运行。实现可切换限值的方法有很多,但对于许多具有高峰值电流和低保持电流的项目,在热/性能方面是有益的。bet188me

    再次感谢
    抢劫

    回复
  45. 你好,德扬,
    我尝试用Arduino mega 2560运行三个步进电机。我的目标是运行所有三个电机一起,但步数将是不同的。我试过使用Adafruit Motor Shield V2, A4988驱动,也直接连接到Arduino,但到目前为止,所有的电机都没有同时运行,并且有屏蔽,它们一起运行,但只是一步一步地运行,需要很长时间才能达到我想要的步骤。你能告诉我怎么解决这个问题吗?
    我的步进电机:Saia UCD10N28R,步进角7.5,额定电压6V,线圈电阻24欧姆,步数/转48
    目标:最多1200步步进电机所需时间应小于5秒(所有三个一起)

    回复
    • 嘿,我建议你试试AccelStepper库,它有很好的功能来控制多个步进电机。你可以查看我使用这个库的其他教程/项目,例如相机滑块、线折弯机等。bet188me

      回复
  46. 我一直在研究你们的4988板/arduino系统,用来控制步进电机。我已经按照你的图纸把arduino/4988板和电机连接好了。我的问题是你发布的代码无法加载到arduino上。它在最后一行挂断:delayMicroseconds(500);
    它说“a”;预计在微秒之前。”
    治疗方法是什么?我试过了所有能想到的方法,但都没有成功。
    谢谢,我觉得你的项目写得很好。bet188me

    回复
  47. 德詹,这有助于这么多!

    我有一个问题:

    我希望触发线性执行器上的步进器打开,移动一个方向,然后反转并返回到原始启动位置。我想使用微动开关触发该过程。

    这一切都是用代码完成的吗?我是否需要配置与本教程所示不同的管脚?

    再次感谢!!

    回复
    • 嗯,我想你需要一些“如果”语句来告诉步进机在微动开关被触发时该做什么。驱动器的引脚配置将是相同的,你只需要将微动开关触发器定义为数字输入,并使用“如果”语句来告诉步进机该做什么。

      回复
  48. 嘿,德扬,

    只是想说谢谢你做的所有伟大的项目和内容。bet188me我是一名高中教师,教机器人已经有几年了(计算机科学是我的主要领域)。无论如何,我已经让我的一些2和3级学生创造了一些你的项目,他们已经非常受欢迎到目前为止(应变波发生器,彩色糖果分类器)。bet188me

    真棒的工作!

    回复
  49. 您好,我正确连接一切,并上传了正确的代码,但什么也没有发生。什么任何想法的权利是错误的?我使用的是11V电压外部电源和一个100uF的去耦电容。

    回复
    • Uptade:所以,现在的马达正在这个奇怪的嗡嗡噪音和振动一点点,但是不动如没有足够的电压。什么电压为您的电源?将12V足够?

      谢谢

      回复

留言