【问题标题】:Arduino Stepper Library Working/AccelStepper Not WorkingArduino Stepper 库工作/AccelStepper 不工作
【发布时间】:2016-04-28 05:37:22
【问题描述】:

我正在尝试使用 ArduinoMega 2560 (R3) 控制 24V NEMA23 步进电机。
我正在使用 ST-M5045 驱动程序。

当我使用默认的 Arduino Stepper 库时,电机运行良好。

我用针脚 31 做台阶,针脚 30 做方向。

我的代码如下:

#include <Stepper.h>

const int stepsPerRevolution = 200;  // change this to fit the number of steps per revolution

void setup() {
  pinMode(30,OUTPUT);
  pinMode(31,OUTPUT);
  digitalWrite(30,LOW);
  digitalWrite(31,LOW);
}

void loop() {
  digitalWrite(31,HIGH);
  digitalWrite(31,LOW);
}

现在,我想使用 AccelStepper 操作同一电机,但无法得到任何响应。

我的代码看起来很假:

#include <AccelStepper.h>

AccelStepper stepper3(1, 31, 30);

void setup()
{ 
    stepper3.setMaxSpeed(400.0);
    stepper3.setAcceleration(100.0);
    stepper3.moveTo(100000);
}

void loop()
{
    stepper3.run();
}

知道为什么这不起作用吗? 我在这里尝试了几种变体,但都没有运气。

提前感谢您的帮助。

问候, 詹姆斯

【问题讨论】:

  • 你试过图书馆的constant speed example吗?当然,您应该将您的定义用于步进驱动程序..
  • 我也尝试过,包括我将 1、2 和 4 作为 AccelStepper 定义的第一个参数的变体。
  • 好吧,不,如果您有一个带有“STEP”和“DIR”输入的步进驱动器,AccelStepper stepper3(1, 31, 30); 应该保持这种状态......所以它适用于您的原始代码,但不适用于示例?你让它运行了很长时间吗?因为看起来你的电机真的很慢(在你的代码中你每秒发送大约 1M 步),所以它可能只是在缓慢移动......
  • 就是这样。在原始代码中,我将 maxspeed 增加到 4000,现在我可以看到它移动得很慢。所以,我只会玩速度,直到我得到我想要的。非常感谢。如果您将您的评论作为答案,我可以接受并且您获得积分(如果您想要的话)。再次感谢。

标签: arduino


【解决方案1】:

经过一些测试,问题似乎只是速度。

原始代码(带有手动引脚移动的代码)为这些步骤生成了一个非常高频的时钟(我认为接近 1MHz)。

因此,当使用 400 步/秒的最大速度时,用户可能会认为电机已停止。然而,事实上,电机正在旋转,只是太慢了。

为了确保电机工作,检查控制器上的步进销是否有脉冲就足够了。或者,只需提高速度即可查看电机实际旋转。

不过,要说一句。所有这些步骤真的有必要吗?我的意思是,如果电机真的转得这么慢,可能是因为您将驱动器设置为微步模式(可能每步 32 或 64 个脉冲)。如果是这种情况,也许你应该降低这个,除非你真的需要非常精确的动作(但是你将不得不牺牲速度)

【讨论】:

  • 再次,很棒的评论。我的微步进开关可能设置不正确。看着它,我现在将其设置为需要 25600 步/转。那太高了。如果将其设置为更合理的数字(如 3200),则原始代码将可以工作。再次感谢。
  • 我可以要求跟进吗?您如何计算应该在 AccelStepper 中指定的速度?我使用的电机说它使用 200 步/转。此外,我将 ST-M5045 设置为 6400 脉冲/转,我认为这对应于 32 微步。当我使用我的非AccellStepper 代码时,电机会发生故障。当我使用我的 AccelStepper 代码时,它的移动速度可能是 1/4 或更慢。例如,使用 Random 示例代码并将 20000 作为使用的基数,它仍然很慢。如何提高速度?谢谢
  • @user1805103 好吧,我认为设置 20000 脉冲/秒意味着它将每秒旋转大约 3 圈。如果速度较慢,则可能是微控制器不够快,因此您不能那么快。如果是这种情况,不幸的是,除了选择另一块板之外没有其他解决方案,或者更好的是,将控制器板设置为更少的步数/转(毕竟,6400 脉冲/转真的很高)
  • 令我困惑的是,当我运行非 AccelStepper 代码时,它运行得非常快。当我运行 AccelStepper 代码时,它的运行速度可能是非 AccelStepper 代码的 1/4。这似乎表明在 AccelStepper 方面而不是在电路板上有什么不对劲的地方。
  • @user1805103 事实上库里面有一些代码。您的代码只是两个数字写入和循环;你不能再快了。另一方面,库至少有一个函数调用、一些测试和与您的代码相同的数字写入。如果您需要代码的速度,那么您将无法执行任何控制任务;这不是图书馆的问题,只是微控制器不能更快了。如果您尝试在代码中实现某种逻辑,您会发现电机会变慢。所以解决方案是:1)如果你真的需要这种速度和分辨率,那么
猜你喜欢
  • 2019-07-18
  • 2019-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多