Всем привет.
Я думаю что вы, если работали с arduino+nema 17, знаете, что запустить несколько двигателей одновременно бывает очень затруднительно.
Есть разные способы решения этой проблемы, самый простой, пожалуй — использование библиотеки NemaStepper. Библиотека упрощает данную задачу во много раз, главное преимущество — она не останавливает выполнение программы. Устанавливается она также, как и все остальные библиотеки. Распространяется по MIT лицензии.
Ну что, давайте приступим. И начнем мы с подключения.
Мы будем использовать Simple Nema 17 с алиэкспресса за 500 рублей, драйвер L298N и arduino uno. Вот они:
- В примере я буду показывать четыре подключенных драйвера к ардуине, хотя буду использовать только один.
- В интернете есть много туториалов по подключению Nema 17, поэтому я не буду подробно расписывать это здесь.
Итак, подключаем мотор к драйверу:
Библиотека является объектно — ориентированной. Давайте рассмотрим пример включения одного мотора:
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
Спасибо за прочтение, надеюсь вам помогла моя статья.
Когда я искал решение моей проблемы, единственной подходящей библиотекой оказалась она.
