同时或NemaStepper控制多个Nema 17步进电机

图片

大家好

我认为,如果您使用的是arduino + nema 17,那么您将很难同时启动多个引擎。

解决此问题的方法有很多,最简单的方法就是使用NemaStepper库。 该库多次简化了此任务,主要优点是它不会停止程序。 它与所有其他库一起安装。 根据MIT许可分发。

好吧,让我们开始吧。 我们将从连接开始。

我们将使用带有500卢布速卖通的Simple Nema 17,L298N驱动程序和arduino uno。 它们是:

图片

图片

图片

  • 在示例中,我将显示四个连接到arduino的驱动程序,尽管仅使用一个。
  • 关于如何在Internet上连接Nema 17的教程很多,因此在此不再详细介绍。

因此,我们将电动机连接到驱动器:

图片

图片

该库是面向对象的。 让我们看一个打开一个电动机的例子:

NemaStepper Stepper1(2, 3, 4, 5, 200, 10, false); void Setup(){ Stepper1.SetStepCount(100); //   100  } void Update(){ Stepper1.Step(); //  } 

所有库方法都可以在库源代码文件中找到(库头中有说明)。

*有关示例中代码的更多信息。

现在举个例子。

该库有一个内置示例(目前仅在其中),使您可以一次用串行控制三个电动机。

本示例对端口接受以下命令。

让我们拆开。

让我们从头开始-连接库:

 //This file - example of NemaStepper library. #include "NemaStepper.h" String inString; bool IsStepperEnabled = false; 

接下来,声明三个具有以下参数的电动机:

1.第一针
2.第二针
3.第三针
4.第四针
5.每转的步数-大多数Nema 17发动机有200。
6.启动速度
7.指示停止后是否握住轴的值(如果为true,则驾驶员会变成烧烤炉)

 NemaStepper Stepper1(2, 3, 4, 5, 200, 10, false); NemaStepper Stepper2(6, 7, 8, 9, 200, 10, false); NemaStepper Stepper3(10, 11, 12, 13, 200, 10, false); 

下一个端口初始化:

 void setup() { Serial.begin(9600); } 

然后,重要! 在主循环中,您需要使用Step()命令更新引擎的位置。

 void loop() { if (IsStepperEnabled == true){ Stepper1.Step(); Stepper2.Step(); Stepper3.Step(); } GetCommandFromSerial(); } 

以下是一个子例程,该子例程从端口接收数据,打开/关闭电动机,设置速度,制动和旋转。

 void GetCommandFromSerial() { if (Serial.available() > 0) { //    int inChar = Serial.read(); if (inChar == '/') { String command = ((String)inString[0] + (String)inString[1] + (String)inString[2]); String param; int len = inString.length(); for (int i = 3; i < len; i++) { param = (String)param + (String)inString[i]; } if (command == "MV1") { Stepper1.SetStepCount(param.toInt()); Serial.println(param.toInt()); } if (command == "MV2") { Stepper2.SetStepCount(param.toInt()); Serial.println(param.toInt()); } if (command == "MV3") { Stepper3.SetStepCount(param.toInt()); Serial.println(param.toInt()); } if (command == "SS1") { Stepper1.SetSpeed(param.toInt()); Serial.println(param.toInt()); } if (command == "SS2") { Stepper2.SetSpeed(param.toInt()); Serial.println(param.toInt()); } if (command == "SS3") { Stepper3.SetSpeed(param.toInt()); Serial.println(param.toInt()); } if (command == "SB1") { Stepper1.SetBrakes(param.toInt()); Serial.println(param.toInt()); } if (command == "SB2") { Stepper2.SetBrakes(param.toInt()); Serial.println(param.toInt()); } if (command == "SB3") { Stepper3.SetBrakes(param.toInt()); Serial.println(param.toInt()); } if (command == "EMS") { IsStepperEnabled = true; Serial.println(param.toInt()); } if (command == "DMS") { IsStepperEnabled = false; Serial.println(param.toInt()); } inString = ""; } else { inString += (char)inChar; } } } 

因此,让我们尝试将其下载到板上。

上传了吗?

然后,我们进入端口监视器,并从代码中输入命令。
每个命令以/结尾。
前三个字符是团队的名称。
在名称和/-参数之间。
让我们用命令“ EMS /”打开电动机(启用电动机)。
然后,将使用命令“ SS160 /”(设定速度)将电动机1的速度指示为60,其中60为速度。
最后,使用命令“ MV1100 /”(MoVe)打开第一个电动机,其中100是转数。
一切正常。 万岁。

其余的马达也一样。

好吧,从哪里获得图书馆。

可以通过以下链接感谢创建者来下载该库,并指示其实际价格:

获取NemaStepper

感谢您的阅读,希望我的文章对您有所帮助。

当我在寻找解决方案时,它才是唯一合适的库。

Source: https://habr.com/ru/post/zh-CN464859/


All Articles