Управление несколькими шаговыми двигателями Nema 17 одновременно или NemaStepper

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.
image

Всем привет.

Я думаю что вы, если работали с arduino+nema 17, знаете, что запустить несколько двигателей одновременно бывает очень затруднительно.

Есть разные способы решения этой проблемы, самый простой, пожалуй — использование библиотеки NemaStepper. Библиотека упрощает данную задачу во много раз, главное преимущество — она не останавливает выполнение программы. Устанавливается она также, как и все остальные библиотеки. Распространяется по MIT лицензии.

Ну что, давайте приступим. И начнем мы с подключения.

Мы будем использовать Simple Nema 17 с алиэкспресса за 500 рублей, драйвер L298N и arduino uno. Вот они:

image

image

image

  • В примере я буду показывать четыре подключенных драйвера к ардуине, хотя буду использовать только один.
  • В интернете есть много туториалов по подключению Nema 17, поэтому я не буду подробно расписывать это здесь.

Итак, подключаем мотор к драйверу:

image

image

Библиотека является объектно — ориентированной. Давайте рассмотрим пример включения одного мотора:

NemaStepper Stepper1(2, 3, 4, 5, 200, 10, false);
void Setup(){
   Stepper1.SetStepCount(100); //Запускаем вращение на 100 оборотов
}
void Update(){
   Stepper1.Step(); //Обновляем вращение
}

О всех методах библиотеки можно узнать из файлов исходного кода библиотеки (в шапке библиотеки есть описание).

*Подробнее о коде в примере.

А теперь переходим к примеру.

В библиотеке есть встроенный пример (на данный момент он там один), который позволяет управлять сразу тремя моторами с Serial.

Данный пример принимает на порт команды, указанные ниже.

Давайте его разберем.

Начнем с шапки — подключения библиотек:

//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/» (Enable MotorS).
Затем укажем мотору 1 скорость 60 командой «SS160/» (Set Speed), где 60 — скорость.
И наконец, включим первый мотор командой «MV1100/», (MoVe) где 100 — количество оборотов.
Все работает. Ура.

Тоже самое с остальными моторами.

Ну и где взять библиотеку.

Библиотеку можно скачать, отблагодарив создателя, по ссылке, указав ей реальную цену:

Get NemaStepper

Спасибо за прочтение, надеюсь вам помогла моя статья.

Когда я искал решение моей проблемы, единственной подходящей библиотекой оказалась она.
Источник: https://habr.com/ru/post/464859/


Интересные статьи

Интересные статьи

Не так давно в мире Java случилось грандиозное событие. Во всех актуальных версиях OpenJDK стал доступен Java Flight Recorder (или просто JFR). Что такое Java ...
Во время ранней разработки набор инструментов Windows Admin Center носил название «Проект Гонолулу» (Project Honolulu) В рамках услуги VDS (Virtual Dedicated Server) клиент получ...
Вам когда-либо приходилось думать над тем, как сделать управление сценами в вашем проекте менее болезненным? Когда у вас достаточно простая игра, в которой всего несколько сцен идущих...
Начиная с 2018 года, пятьсот самых высокопроизводительных систем в мире работают на Linux. Обсуждаем причины сложившейся ситуации и приводим мнения экспертов.
Сегодня речь пойдет о домашней автоматизации, приятно ведь отдыхая где нибудь в теплом и красивом месте следить за тем как поливаются твои цветы. Это вторая система в моей квартире, первая полива...