Страница 1 из 1

Управление несколькими шаговиками по протоколу Step, Dir

Добавлено: 13 ноя 2016, 17:49
ПАлександрР
Здравствуйте. А как решить задачу управления двумя или тремя шаговыми двигателями одновременно но с разными скоростями протоколом Step, Dir ?

Re: Управление несколькими шаговиками по протоколу Step, Dir

Добавлено: 13 ноя 2016, 19:15
Эдуард
Создаем несколько объектов типа StepDirDriver:

Код: Выделить всё

StepDirDriver myMotor1(10, 11, 12);
StepDirDriver myMotor2(7, 8, 9);


Для каждого вызываем свои функции установки режимов и скорости вращения:

Код: Выделить всё

  myMotor1.setMode(0, false);  // режим без фиксации при остановке
  myMotor1.setDivider(10);     // делитель частоты 10 (1 оборот в сек)
  myMotor2.setMode(0, true);  // режим c фиксацией при остановке
  myMotor2.setDivider(20);     // делитель частоты 20 (0,5 оборотов в сек)


В обработчике прерывания вызываем:

Код: Выделить всё

void  timerInterrupt() {
  myMotor1.control(); // управление двигателем
  myMotor2.control(); // управление двигателем
}


Для управления используем функцию step():

Код: Выделить всё

myMotor1.step(100); // сделать двигателю 1 100 шагов против часовой стрелки
myMotor2.step(-50); // сделать двигателю 2 50 шагов по часовой стрелке


Все как в уроке 35, только для нескольких экземплярах класса StepDirDriver

Re: Управление несколькими шаговиками по протоколу Step, Dir

Добавлено: 18 ноя 2016, 07:22
ПАлександрР
Здравствуйте!
Разрешено ли для нескольких шаговых приводов использовать один пин для сигнала ENABLE (для экономии пинов ARDUINO)?

Re: Управление несколькими шаговиками по протоколу Step, Dir

Добавлено: 18 ноя 2016, 11:40
Эдуард
Можно его на драйверах оставить не подключенным. На драйверах будут разрешающие уровни.

Re: Управление несколькими шаговиками по протоколу Step, Dir

Добавлено: 06 фев 2017, 12:59
ПАлександрР
Добрый день. Пока с двумя осями получается. В библиотеки разгон движков не предусмотрен? каким образом реализовать?

Re: Управление несколькими шаговиками по протоколу Step, Dir

Добавлено: 06 фев 2017, 13:03
Эдуард
Здравствуйте! Да разгон не реализован. Библиотека простая, компактная, очень быстрая.
Наверное, можно скорость ступенями менять. Хотя, по хорошему надо другую библиотеку с такой функцией сделать.

Re: Управление несколькими шаговиками по протоколу Step, Dir

Добавлено: 08 фев 2017, 14:20
ПАлександрР
Здравствуйте.
Есть желание заменить в библиотеке кол-во шагов на long, что может помешать?

Re: Управление несколькими шаговиками по протоколу Step, Dir

Добавлено: 08 фев 2017, 15:10
Эдуард
В принципе ничего не мешает. Только выполнение кода будет требовать больше времени. Я бы лучше этого не делал. Если вызывать метод contorl() в быстром цикле и с несколькими двигателями, то это может привести к неприятностям. Я старался сделать библиотеку максимально быстрой.

Re: Управление несколькими шаговиками по протоколу Step, Dir

Добавлено: 08 фев 2017, 15:24
ПАлександрР
А DUE не использовали в своей практике?

Re: Управление несколькими шаговиками по протоколу Step, Dir

Добавлено: 08 фев 2017, 15:28
Эдуард
Я думаю, такие процессоры надо использовать только в крайних случаях, когда без высокой производительности не обойтись. Высокая цена, большие размеры, напряжение 3,3 В, а значит и пониженная помехозащищенность и т.д.

Re: Управление несколькими шаговиками по протоколу Step, Dir

Добавлено: 05 апр 2017, 07:59
lexar
Здравствуйте Эдуард!
Подскажите пожалуйста, а куда и какой надо добавить код, для того, чтобы можно было изменять скорость вращения двигателей в реальном времени.
Спасибо!

Re: Управление несколькими шаговиками по протоколу Step, Dir

Добавлено: 05 апр 2017, 08:04
lexar
Забыл указать, скорость двигателей должна быть разная

Re: Управление несколькими шаговиками по протоколу Step, Dir

Добавлено: 05 апр 2017, 11:22
Эдуард
Здравствуйте!
Скорость двигателей устанавливается функцией setDivider().

Код: Выделить всё

myMotor1.setDivider(10);     // делитель частоты двигателя 1 (1 оборот в сек)
myMotor2.setDivider(20);     // делитель частоты двигателя 2 (0,5 оборотов в сек)

Re: Управление несколькими шаговиками по протоколу Step, Dir

Добавлено: 05 апр 2017, 11:36
lexar
Спасибо.
А как мне тогда можно командой AT изменить скорость с начало одного двигателя потом другого, никак не могу понять (

Re: Управление несколькими шаговиками по протоколу Step, Dir

Добавлено: 05 апр 2017, 11:41
lexar
Если я пишу ATD = 10 то двигатели меняют скорость одновременно

Re: Управление несколькими шаговиками по протоколу Step, Dir

Добавлено: 05 апр 2017, 11:54
Эдуард
Если вы имеете в виду драйвер шагового двигателя с AT командами из уроков 31 и 35, то там поддерживается только один двигатель. Надо изменять протокол и программу.

Re: Управление несколькими шаговиками по протоколу Step, Dir

Добавлено: 05 апр 2017, 12:03
lexar
Да я про это и имел в виду, пытаюсь изменить, пока ничего не получается

Re: Управление несколькими шаговиками по протоколу Step, Dir

Добавлено: 05 апр 2017, 12:31
Эдуард
Начните с протокола. Там должен добавиться номер двигателя. Лучше его совместить с командами. Например, не ATS, а ATS1 и ATS2.

Re: Управление несколькими шаговиками по протоколу Step, Dir

Добавлено: 05 апр 2017, 12:36
lexar
Понял, спасибо

Re: Управление несколькими шаговиками по протоколу Step, Dir

Добавлено: 21 ноя 2018, 23:36
Boriss
Всем здравствуйте!
При управлении 3 двигателями в режиме без фиксации при остановке(myMotor_x.setMode(0, false);), двигатели останавливаются одновременно после остановки двигателя, который был запущен первым. При myMotor_x.setMode(0, true); все работает нормально, двигатели управляются не зависимо. В чем причина?

Re: Управление несколькими шаговиками по протоколу Step, Dir

Добавлено: 06 июн 2019, 00:00
Лев
Добрый вечер.
Кто нибудь может поделится со школьником библиотекой StepDirDriver???
Заранее спасибо!!!

Re: Управление несколькими шаговиками по протоколу Step, Dir

Добавлено: 06 июн 2019, 23:19
Эдуард
Здравствуйте!
Напишите в контакты сайта mypractic.ru. Я вам на месяц доступ открою.

Re: Управление несколькими шаговиками по протоколу Step, Dir

Добавлено: 07 июн 2019, 08:09
Лев
Хорошо, Спасибо.