Запуск двух шаговых двигателей одновременно с помощью L293D

e.shchukin
Offline
Зарегистрирован: 12.02.2017

Народ, здарова) Нужна ваша помощь. Необходимо запускать два шаговых двигателя одновременно, но при этом не с помощью цикла( 1 шаг 1, 1 шаг 2). Т.к. нужна максимальная скорость, а мой двигателя с циклом работают медленно (28byj-48). В распоряжение есть движки, ардуино уно и шилд к ней(L293D). Использую библиотеку AFMotor. Сразу скажу, что я далеко не спец в ардуино. Помогите, пожалуйста)

vvadim
Offline
Зарегистрирован: 23.05.2012

28byj-48 с редуктором, он никогда быстро вращаться не будет.

ну и шаговик вообще не скоростное устройство, не для того он придуман)))

e.shchukin
Offline
Зарегистрирован: 12.02.2017

Это я знаю и той скорости, кт он выдает мне хватает. Но когда вы создаете цикл поочередно делая шаги двигателями скорость становится минимальной, и вот это меня уже не устраивает. Нужно запустить оба одновременно обычным способом, а не микрошагами.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Вы бы вопрос сформулировали (у Вас в тексте деже вопросительного знака нет).

Ардуина на своих выводах сожет выдавать уроавляющие напряжения с частотой, заведомо превосходящие мозможности любой механической констрккции. Т.е. почему у Вас получается недостаточная скорость - совершенно непонятно.

Потом, насколько я помню, L293D подразумевает включение единственного шагового двигателя.

В общем, совет стандарный: если хотите получить вменяемый ответ, в первом же сообщении обязательно следует размещать скетч и схему.

e.shchukin
Offline
Зарегистрирован: 12.02.2017

Хоть вопросительного знака и нет в моем сообщение, зато есть слово "необходимо". Вы правы, одна микросхема L293D может управлять только одним двигателем, однако если бы вы внимательнее прочитали мое сообщение, увидели бы, что я говорю именно про шилд, в кт стоит две такие микросхемы. Я считаю, что на данном форуме сидят люди, разбирающиеся в самой ардуино и ее компонентах, внимательно читают просьбы и знают, что такое шилд. Скорость этих движков ограниченна самим движками, точнее их редуктором. Когда вы даете такую команду:   motor1.step(3000, FORWARD, DOUBLE), то все идет отлично. Но если вы создаете такой цикл: 

for(i=1;i<=10000;i++){
  motor1.onestep(FORWARD, MICROSTEP);
  motor2.onestep(FORWARD, MICROSTEP);
}
то ардуино тратит много времени на обработку команд,из-за чего скорость снижается. Я хочу этого избежать.
Если вы до сих пор хотите, чтобы я сформулировал вопрос, хорошо: Как запускать два шаговых двигателя одновременно, при этом не используя цикл, с помощью шилда L293D?
andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

e.shchukin пишет:

Хоть вопросительного знака и нет в моем сообщение, зато есть слово "необходимо". Вы правы, одна микросхема L293D может управлять только одним двигателем, однако если бы вы внимательнее прочитали мое сообщение, увидели бы, что я говорю именно про шилд, в кт стоит две такие микросхемы.

Да?

То есть Вы уверены, что любой шилд на L293D непременно содержит 2 микросхемы? А как же это?

https://ru.aliexpress.com/item/Mini-Motor-Drive-Shield-Expansion-Board-L293D-Module-For-Arduino-UNO-MEGA-2560/2036886189.html

Цитата:

Я считаю, что на данном форуме сидят люди, разбирающиеся в самой ардуино и ее компонентах, внимательно читают просьбы и знают, что такое шилд.

Пракика показывает, что, увы, не всегда.

Цитата:

Скорость этих движков ограниченна самим движками, точнее их редуктором. Когда вы даете такую команду:   motor1.step(3000, FORWARD, DOUBLE), то все идет отлично. Но если вы создаете такой цикл: 

for(i=1;i<=10000;i++){
  motor1.onestep(FORWARD, MICROSTEP);
  motor2.onestep(FORWARD, MICROSTEP);
}
то ардуино тратит много времени на обработку команд,из-за чего скорость снижается. Я хочу этого избежать.
Если вы до сих пор хотите, чтобы я сформулировал вопрос, хорошо: Как запускать два шаговых двигателя одновременно, при этом не используя цикл, с помощью шилда L293D?

1. Порвторюсь: опубликуйте схему и, желательно, ссылки на комплектующие. Третий раз повторять не буду.

2. Что там замыслили авторы в библиотеке, я не знаю. Но весьма вероятно, что метод onestep имеет внутри задержку. Весьма вероятно так же, что величина задержки подобрана так, чтобы цикл 

for(i=1;i<=10000;i++){
  motor.onestep(FORWARD, MICROSTEP);
}
Выполнялся заведомо без проблем. Т.е. задержка уже подобрана так, что не реализует максимальную скорость даже для одного двигателя.
Отсюда вывод: можно посмотреть исходники библилтеки и изменить в ней константы, определяющие время задержки, на те, что подходят для Вашего проекта.
Ну в лучше всего вообще отказаться от использования библиотеки и написать управление двигателями самому. Впрочем, если Вы обладаете недостаточным опытом, то отложите эту мысль куда-нибудь на периферию сознания - вернетесь к ней тогда, когда с одной стороны - немного освоитесь с Ардуино, а с другой - сможете четко сформулировать, чем еще Вам не подходит эта библиотека.
 
Да, если задержки реализованы через delay(), а не через millis() - что вероятнее всего, жалательно написать еще дополнительную функцию, реализующую выбранную величину задержки без обращения к L293D, чтобы не сбивалась работа, если нужно крутитть только один двигатель. При этом цикл долже будет выглядеть примерно так:
for(i=1;i<=10000;i++){
  motor1.onestep(FORWARD, MICROSTEP);
  motor_delay();
}
 

 

AlexeySh
Offline
Зарегистрирован: 16.01.2017

Ваша проблема решается элементарно. Скетч и схему подключения в студию. Гадать какую библиотеку вы используете никто не будет.

vvadim
Offline
Зарегистрирован: 23.05.2012

e.shchukin пишет:

 Использую библиотеку AFMotor.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

vvadim пишет:

e.shchukin пишет:

 Использую библиотеку AFMotor.

Это скетч или схема?

vvadim
Offline
Зарегистрирован: 23.05.2012

это  AlexeySh  спрашивал)))

AlexeySh
Offline
Зарегистрирован: 16.01.2017

Где скетч? Где схема подключения? Где ссылка на библиотеку?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

AlexeySh пишет:

Где скетч? Где схема подключения? Где ссылка на библиотеку?

Не дождётесь )))

e.shchukin
Offline
Зарегистрирован: 12.02.2017

Cейчас все будет)

e.shchukin
Offline
Зарегистрирован: 12.02.2017

Итак, сфотографировать схему сейчас нет возможности, тк уже она установленна в конструкцию, и достать ее невозможно. Но сохранилась фотография старой схемы, правда там вместо двигателя nema 17 стоит 28byj-48, и тк у этого есть земля проводов пять у каждого двигателя (центральный разъем непустой). Так же этих двигателя два. Фото старой схемы прикрепляю. https://drive.google.com/open?id=0B8z4IuD1CZs3bktoUkl2SVZ2ZTg

Код программы:

#include <AFMotor.h>

AF_Stepper motor1(360, 1);
AF_Stepper motor2(360, 2);
int a;
int i;
void setup() {
motor1.setSpeed(150);
motor2.setSpeed(150);
}
void loop() {
for(i=1;i<=10000;i++){
  motor1.onestep(FORWARD, MICROSTEP);
  motor2.onestep(FORWARD, MICROSTEP);
}


}

 

AlexeySh
Offline
Зарегистрирован: 16.01.2017

Возьмите библиотеку AccelStepper, в ней есть поддержка одновременной работы с несколькими шаговыми двигателями MultiStepper. Там же есть примеры работы с несколькими двигателями.

e.shchukin
Offline
Зарегистрирован: 12.02.2017

Ок, спасибо, буду пробовать. Просто выбрал AFMotor из-за простоты управления.

AlexeySh
Offline
Зарегистрирован: 16.01.2017

Да, ещё. В скетче стоит setSpeed(150). Я не знаю как работает ваша библиотека, но например AccelStepper при пошаговом управлении делает шаг только если прошел требуемый интервал между шагами. Т. е. если изменить на setSpeed(300) все будет работать в 2 раза быстрее. Такой способ проверяли?

e.shchukin
Offline
Зарегистрирован: 12.02.2017

Да, игрался со скоростью, но опытным путем выяснил, что при значении 150 скорость максимальная, при установке большего значения, двигателя начинают трещать и падает скорость. Я вспомнил, почему решил отказаться от accelstepper, тк я использую шилд, я не могу завести изначально двигатели, тк в параметрах требуются именно пины, кт я не знаю. Я про это говорю: AccelStepper mystepper(1, pinStep, pinDirection)
Можете помочь?

AlexeySh
Offline
Зарегистрирован: 16.01.2017

Нет, так как вы не прислали ссылку на описание вашего шилда. Я не могу угадать как он подключается к Ардуино.

e.shchukin
Offline
Зарегистрирован: 12.02.2017

Извиняюсь, забыл. Вот такой: http://arduino-diy.com/arduino-motor-shield

vvadim
Offline
Зарегистрирован: 23.05.2012

в AccelStepper можно подключить и ваш шилд

AlexeySh
Offline
Зарегистрирован: 16.01.2017

vvadim пишет:

в AccelStepper можно подключить и ваш шилд

Совершенно верно. Об этом написано в описании шилда, ссылку на который ТС наконец то прислал. Подключайте и пробуйте. Правда из описания шилда не понятно, почему для управления двумя шаговыми двигателями используется только три пина, а не 4. Возможно, что этот шилд в принципе не может одновременно выполнять шаг на обоих двигателях. Нужна схема шилда.

Поправка - используются 4 пина 11 и 3 для первого двигателя, 5 и 6 для второго двигателя. Посмотрел схему, на степперы через драйверы подаются сигналы PWM. Так что в принципе управлять одновременно двумя двигателями возможно.

e.shchukin
Offline
Зарегистрирован: 12.02.2017

Хорошо, это я понял, но все же, какие аргументы прописывать здесь: mystepper(1, pinStep, pinDirection)
Можете сказать мне именно значения pinStep и pinDirection, желательно у каждого двигателя?

AlexeySh
Offline
Зарегистрирован: 16.01.2017

e.shchukin пишет:
Хорошо, это я понял, но все же, какие аргументы прописывать здесь: mystepper(1, pinStep, pinDirection) Можете сказать мне именно значения pinStep и pinDirection, желательно у каждого двигателя?

А открыть библиотеку и посмотреть в ней пример с использованием двух шаговых двигателей с вашим шилдом вообще нереально? Так как вы хотите прописать с вашим шилдом работать не будет. Там в примере все подробно расписано.