Подскажите алгоритм управления для 2ух шаговиков (Camera Slider)

Андрей К.

★✩✩✩✩✩✩
25 Май 2019
287
23
Москва. Щукино
Сделал по аналогии ЭТОГО слайдер. Что то подкорректировал по функционалу под себя... Всё хорошо, но в скетче автора есть проблема. После запуска на движение по установкам, он заканчивает поворот камеры несколько раньше, чем завершает перемещение. Начинает он одновременно. С увеличением скорости, это расстояние увеличивается, и становится более заметно.
Я не могу понять как реализовано у автора вращение моторов, и где это искать.
Решил попытаться написать что-то аналогичное своё, но как реализовать синхронное вращение с разной скоростью у моторов, я не представляю.
Подскажите логику процесса.
Если кто то готов посмотреть скетч автора то он ТУТ
Спасибо.
 

Александр Симонов

★★★★✩✩✩
2 Авг 2018
727
208
Ешь слона по частям. Сначала разберись с библиотекой AccelStepper отдельно от скетча слайдера. Как там вертеть мотор с определенной скоростью. Для начала один. У библиотеки есть примеры, есть документация, пользуйся ими.
 

rGlory

★✩✩✩✩✩✩
11 Май 2021
200
20
Возможно проще будет использовать прошивку GRBL, а шаговиками просто управлять G кодом. Там уже все синхронизировано и отлажено. Можно задавать макс ускорения по осям и прочее.
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,263
1,301
Москва
В кратце..
Есть расстояние L которое должен проделать слайдер. На это расстояние мотору надо сделать N шагов. За один шаг слайдер двигается на расстояние l (эль малое) . Значит ему надо сделать N=L/l шагов. Это за определенное время. T , dt=T/N - это будет время на один шаг.
Второму мотору надо повернуться на угол U за то же время. Значит за один шаг 1-го мотора ему надо повернуться на dU=U/N, но получиться так, что dU может быть больше, чем минимально возможный шаг мотора. И тут самый простой вариант переходить для 2-го мотора от целых чисел к дробным с округлением. Ut - текущий угол - =округлить ( dU (которое может быть 0.02 к примеру)*Nt(текущий шаг) ). И далее мотор выставляется на угол Ut, при этому Ut будет меняться каждый раз при изменении шага.
Но это теория, на практике может быть несколько сложнее. Но по идее шагов слайдера будет всегда больше чем шагов поворота.
 

rGlory

★✩✩✩✩✩✩
11 Май 2021
200
20
Я думаю можно проще. У нас есть время T за которое движение должно осуществиться. Далее мотор 1 должен повернуться на N шагов, а мотор 2 на M. Делим T на M и N и записываем в две переменные. Далее по тику таймера увеличиваем два счетчика. Как первый счетчик достиг T/M выдаем импульс на 1 шаговик, и счечтик сбрасываем. Соотвественно делаем для второго. При хорошем разрешении таймера счетчики можно делать целочисленными. Это было бы так просто, но там еще есть ускорения...
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,263
1,301
Москва
Угол поворота четко зависит только от пройденного пути, от этого надо плясать. И забыть тогда можно ускорения эти
 

Андрей К.

★✩✩✩✩✩✩
25 Май 2019
287
23
Москва. Щукино
Ешь слона по частям. Сначала разберись с библиотекой AccelStepper отдельно от скетча слайдера. Как там вертеть мотор с определенной скоростью. Для начала один. У библиотеки есть примеры, есть документация, пользуйся ими.
Согласен, с ардуино познакомился всего 2года назад, а иностранный так в школе и не выучил... А в библиотеках все на иностранном... поэтому понимаю ещё меньше чем умею...
 

Андрей К.

★✩✩✩✩✩✩
25 Май 2019
287
23
Москва. Щукино
С учетом всего прочитаного, я понимаю, что написание такого скетча пока не для меня. Пока мой уровень просто крутить моторчики.
Спасибо за разъяснения, буду пытаться переварить, благо на пенсии есть немного свободного времени.
 

Александр Симонов

★★★★✩✩✩
2 Авг 2018
727
208
Согласен, с ардуино познакомился всего 2года назад, а иностранный так в школе и не выучил... А в библиотеках все на иностранном... поэтому понимаю ещё меньше чем умею...
У Гайвера тоже есть библиотека для шаговых двигателей, у него все на русском: https://alexgyver.ru/gyverstepper/
 

Андрей К.

★✩✩✩✩✩✩
25 Май 2019
287
23
Москва. Щукино
У Гайвера тоже есть библиотека для шаговых двигателей, у него все на русском: https://alexgyver.ru/gyverstepper/
Для меня что то спаять не проблема. Я в прошлом монтажник радиоаппаратуры... А програмирование пока пытаюсь сам освоить... с библиотеками пока тоже, вроде где о понятно, но не совсем. Тут нужно чтоб кто то пальцем тыкал... но пока это не возможно.
На данном этапе буду искать что то работающее без ошибок, на аналогичной элементной базе.
Спасибо всем ответившим.
 

rGlory

★✩✩✩✩✩✩
11 Май 2021
200
20
На данном этапе буду искать что то работающее без ошибок, на аналогичной элементной базе.
Спасибо всем ответившим.
Работающее без ошибок я вам уже посоветовал - GRBL, это прошивка для станков CNC. Там можно синхронно управлять тремя осями, не то что, двумя. Немного нужно будет разобраться с подключением (или даже можно просто использовать соотвествующий шилд) и с настройками. А так забиваете туда команду куда сдвинуть ось X и Y, прошивка позаботится, чтобы они доехали синхронно.
 

rGlory

★✩✩✩✩✩✩
11 Май 2021
200
20
Угол поворота четко зависит только от пройденного пути, от этого надо плясать. И забыть тогда можно ускорения эти
К сожалению, не получится, пройденный путь придется проделывать с ускорениями, и делать это надо синхронно по двум осям.
 

Андрей К.

★✩✩✩✩✩✩
25 Май 2019
287
23
Москва. Щукино
Работающее без ошибок я вам уже посоветовал - GRBL, это прошивка для станков CNC. Там можно синхронно управлять тремя осями, не то что, двумя. Немного нужно будет разобраться с подключением (или даже можно просто использовать соотвествующий шилд) и с настройками. А так забиваете туда команду куда сдвинуть ось X и Y, прошивка позаботится, чтобы они доехали синхронно.
Я понял, но не совсем. Это нужно на компе то то запрограмировать а потом дать на перемещение... Так ?
Всё дело в том, что нужно не иметь привязки к компу. Непосредственно на месте настроил и запустил. И каждый раз это будет по новому, нет стандартного перемещения...
 

Андрей К.

★✩✩✩✩✩✩
25 Май 2019
287
23
Москва. Щукино
К сожалению, не получится, пройденный путь придется проделывать с ускорениями, и делать это надо синхронно по двум осям.
С учетом не высоких скоростей, до 30мм/сек (не бОлее) в принципе разгон и не нужен.
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,263
1,301
Москва
@Андрей К.,G-коды можно создать самой ардуиной, но это уже другая история, т.к. в ардуино уже будет прошивка GRBL, то придется ее менять прилично. Например вместо считывания Gкодов с карты как то их считать в уме.
 

rGlory

★✩✩✩✩✩✩
11 Май 2021
200
20
Я понял, но не совсем. Это нужно на компе то то запрограмировать а потом дать на перемещение... Так ?
Не совсем. Вы просто выдаете команду. К примеру вы берете перемещение за ось X, а поворот за Y. Калибруете так, что ось X в миллиметрах, а Y в градусах. Тогда при проезде на 200мм и повороте на 90 градусов просто выдаете команду:
Код:
G1 X200 Y90
И у вас синхронно проедет по X и повернется по Y.

И каждый раз это будет по новому, нет стандартного перемещения...
Ну в том и дело, нужно это как-то задавать, а тут просто будете задавать командой G1 или G0

С учетом не высоких скоростей, до 30мм/сек (не бОлее) в принципе разгон и не нужен.
Ну тогда можно посадить на прерывание увеличение счетчиков и выдачу импульсов на шаговики при переполнении счетчиков, как я уже описал.
 

Андрей К.

★✩✩✩✩✩✩
25 Май 2019
287
23
Москва. Щукино
Это пока выше моих возможностей. 3Д принтер у меня есть, и набор команд G кода мне уже известен и понятен, но для слайдера вероятно это перебор...
 

rGlory

★✩✩✩✩✩✩
11 Май 2021
200
20
Это пока выше моих возможностей. 3Д принтер у меня есть, и набор команд G кода мне уже известен и понятен, но для слайдера вероятно это перебор...
Ну во первых весь набор команд вам будет не нужен, одна две. Во вторых почему перебор, как раз довольно простое решение на основе готового и отлаженного. Можно, конечно, написать свое, но я сильно подозреваю что это займет гораздо больше времени, чем разобраться с тем, как подключить GRBL и выдать одну, две команды. Но хозяин, конечно, барин. Наше дело - посоветовать.
 

Александр Симонов

★★★★✩✩✩
2 Авг 2018
727
208
Ну во первых весь набор команд вам будет не нужен, одна две. Во вторых почему перебор, как раз довольно простое решение на основе готового и отлаженного.
Перебор и еще какой. У @Андрей К., как я понимаю, уже есть готовый слайдер с дисплеем, крутилкой и почти рабочим скетчем. Один баг только поправить. А ты предлагаешь как-то подключить GRBL сюда? Как? Оставить старую ардуинку заниматься дисплеем и энкодером, добавить вторую ардинку с GRBL-ом, разобраться как его сконфигурировать, потом переписать скетч первой арудинки, чтоб она вместо использования AccelStepper-а выдавала G-код второй ардуинке?..
 

rGlory

★✩✩✩✩✩✩
11 Май 2021
200
20
Один баг только поправить.
Видите ли, я подозреваю, что чтобы заставть два шаговика работать синхронно, нужно принципиально менять контроль шаговиками, а это не подправить один баг, а переписать основную логику. Но я, конечно, могу ошибаться.
 

Александр Симонов

★★★★✩✩✩
2 Авг 2018
727
208
Видите ли, я подозреваю, что чтобы заставть два шаговика работать синхронно, нужно принципиально менять контроль шаговиками, а это не подправить один баг, а переписать основную логику. Но я, конечно, могу ошибаться.
Точно ошибаетесь. В той же библиотеке AccelStepper есть класс MultiStepper как раз для синхронного движения шаговиков. И он даже используется в скетче. А почему не работает? Может автор оригинального скетча налажал, может @Андрей К. чего лишнего наисправлял, но факт, что ничего принципиального менять не нужно.
 

Андрей К.

★✩✩✩✩✩✩
25 Май 2019
287
23
Москва. Щукино
Точно ошибаетесь. В той же библиотеке AccelStepper есть класс MultiStepper как раз для синхронного движения шаговиков. И он даже используется в скетче. А почему не работает? Может автор оригинального скетча налажал, может @Андрей К. чего лишнего наисправлял, но факт, что ничего принципиального менять не нужно.
Из того что я поправил, это из однопроходного, я сделал зацикленный, через принудительный переход из блока 9 в блок 8, прописав flag = 8; в блоке 9.
Всё остальное я не трогал, т.к. выше моего понимания. И из глобального я ещё изменил число максимального кол-ва шагов, из-за другой длинны слайдера, относительно того что у автора. Когда я заметил несинхрон, я тоже думал что где то накосячил, и залил родной скетч автора. Всё то же самое. Так что там эта ошибка изначальная.