Шаговые двигатели (3-4) на меге

svorog
Offline
Зарегистрирован: 27.04.2017

Доброго времени суток! хочу собрать специфический механизм на шаговых двигателях. Двигатели стандартные с драйверами степ/дир п 200 шагов на оборот в количестве 3шт (ШД1; ШД2; ШД3 к мримеру). Плата - Мега 2560 и несколько  концевиков (1; 2; 3; 4).

Возможно ли создание такой последвательной иструкции :

1 ШД1 на  100 шагов вперед  и параллельно ШД3 на 50шагов назад ;

2 если сработал концевик 1 или 2 то стоп;

3 ШД2 на 15 шагов назад и параллельно ШД3 на 40 шагов;

4 если сработал концевик 3 или 4 то стоп;

и т.д

Задача что бы двигатели могли работать как парралельно так и по отдельно и постоянно проверяли что не доехали до крайнего положения.

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

Если возможна одновременная работа, то какое ограничение на меге по количеству одновременно работающих шаговиков?

Моя почта maksi1985m@mail.ru

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Одновременная работа возможна, ограничение - тактовая частота, универсальный "конструктор" писать дольше/дороже, чем движение по жесткому алгоритму.

karamzin01
Offline
Зарегистрирован: 08.03.2018

Р е а л и з у е м о - maslachenko767@mail.ru , консультации, подбор компонентов бесплатно, гарантии

svorog
Offline
Зарегистрирован: 27.04.2017

программы для 3D принтеров органичены как правило 4 осями, я в этом плане не хотел бы привязываться.

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

Резюмирую:
1. нужна универсальная заготовка кода для одновременной работы нескольких ШД в которой можно до разумной бесконечности добавлять строки меняя координаты двигателей;
2. постоянно опрашивать концевики;
3. Home что бы при включении движки доезжали до начальных координат (+механическая кнопка возврата);
4. плавный пуск/стоп двигателей.

 

sadman41
Offline
Зарегистрирован: 19.10.2016

1) Универсальная заготовка - Examples к библиотеке шаговых двигателей. Вся остальная универсальность может существовать только в воображении заказчика.

svorog
Offline
Зарегистрирован: 27.04.2017

давайте попробую более конкретно:

Нужен код для Меги в котором при нажатии кнопки пуск запускается следующий алгоритм:

1. первый двигатель делает 100 шагов, второй -10, третий +10, четвертый -40, пятый 50, шестой 83 шага;

2. первый двигатель стоит на метсе, второй делает 10 шагов, третий -10, четвертый + 40, пятый +200, шестой - 143 шага;

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

код должен позволять добавлять дополнительные точки для перемещения по аналогии с первыми двумя)

sadman41
Offline
Зарегистрирован: 19.10.2016

Сделать возможно (в описанном варианте). Придётся башку почесать, как организовать хранение сценария. Ну и проработать "мелкие" детали. 

b707
Offline
Зарегистрирован: 26.05.2017

svorog - проблема возникнет, если вы захотите задавать каждому мотору свою скорость. Поэтому независимый плавный пуск и стоп для более 3-4х моторов очень под вопросом. Остальное, в принципе, "реализуемо", как любит писать один из местных участников

svorog
Offline
Зарегистрирован: 27.04.2017

Правильно я понимаю что плавный пуск/стоп это как раз разная скорость двигателей?  И маловероятного этого добиться для 5-7ти двигателей?

А если не делать плавный пуск стоп?

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

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

 

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

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

Решения есть, но они не простые и не дешевые. 

sadman41
Offline
Зарегистрирован: 19.10.2016

Поидеи все эти "мелкие" детали всплывают в ходе формирования ТЗ и на опытном образце. Универсальное решение под любые сценарии с обслуживанием любого кол-вом моторов, крутящихся на любых скоростях будет Вам стоить любых денег.

__Alexander
Offline
Зарегистрирован: 24.10.2012

brokly пишет:

Одновременная работа с ускорениями даже для двух шаговиков на меге задача не простая. Для трех, на этом железе - практически не выполнимая.

Та ну. Задать массив с задержами так тяжело?

Onkel
Offline
Зарегистрирован: 22.02.2016

svorog пишет:

Правильно я понимаю что плавный пуск/стоп это как раз разная скорость двигателей?  И маловероятного этого добиться для 5-7ти двигателей?

...  и соответственно одновременная работа невозможна?

Возможно. На Меге - хоть десять, может и больше, я больше не пробовал. Надо только уметь работать с прерываниями. А если кто-то не умеет - так это его, неумехи, проблема. Пишите ydom@mail.ru - я умею.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

__Alexander пишет:

brokly пишет:

Одновременная работа с ускорениями даже для двух шаговиков на меге задача не простая. Для трех, на этом железе - практически не выполнимая.

Та ну. Задать массив с задержами так тяжело?

И что дальше ? Как раз рассчет массива - пшик, на фоне выдачи пяти сигналов step с большой частотой, соответствующей разгонным кривым. Вы сами хоть раз такое делали. Я очень плотно знаком с марлином и прекростно понимаю какие есть подводные камни. Уже в марлине косяки лезут наружу при быстром движении каретки, а там всего две оси.

Если у вас все так просто, может возьмете этот проект. Покажите нам, неучам, класс ? :) 

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Onkel пишет:

Возможно. На Меге - хоть десять, может и больше, я больше не пробовал. Надо только уметь работать с прерываниями. А если кто-то не умеет - так это его, неумехи, проблема. Пишите ydom@mail.ru - я умею.

Онкель, твои плоские намеки я понимаю :) Более того, видел и то что ты впариваешь клиентам. Этот позор, даже у меня рвотные рефлексы вызывает :) Ты знаток "чистого си", о каких прерываниях на этом фоне ты рассказываешь !? 

svorog
Offline
Зарегистрирован: 27.04.2017

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

оборотов 5/сек думаю будет достаточно, т.е. 1000имп/сек.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Для 5 двигателей, это 5000 импульсов с РАЗНЫМИ задержками :) Ну что, исполнители ? Хватайте сладкий проект :))))

__Alexander
Offline
Зарегистрирован: 24.10.2012

brokly пишет:

И что дальше ? Как раз рассчет массива - пшик, на фоне выдачи пяти сигналов step с большой частотой, 

У вас не работает таймер на больших частотах? Или в прерывании таймера нельзя подать пять степов?

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

__Alexander пишет:

У вас не работает таймер на больших частотах? Или в прерывании таймера нельзя подать пять степов?

Работает, у меня он и быстрее работает :) Не получится у вас подать некратное количество шагов на пять двигателей с требуемой точностью. Сами посчитайте. Будет рычать и дергаться. Даже если вы на каждый мотор по своему прерыванию прицепете.

Я же говорю, покажите, я вот за такое не возьмусь.

sadman41
Offline
Зарегистрирован: 19.10.2016

Не ври брукли, даже серожа сказал, что там всё реализуемо ;)

__Alexander
Offline
Зарегистрирован: 24.10.2012

brokly пишет:

Работает, у меня он и быстрее работает :) Не получится у вас подать некратное количество шагов на пять двигателей с требуемой точностью. Сами посчитайте. Будет рычать и дергаться. Даже если вы на каждый мотор по своему прерыванию прицепете.

Хз. У меня работало. И о какой точности разговор? Установка бита в порт это одна ассемблерная авровская команда, выполняется за один такт. Куда точнее? Да и не точность нужна, а гарантия что двигатель отработает шаг, нафига ему точность таймера?

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

__Alexander пишет:

Хз. У меня работало. И о какой точности разговор? Установка бита в порт это одна ассемблерная авровская команда, выполняется за один такт. Куда точнее? Да и не точность нужна, а гарантия что двигатель отработает шаг, нафига ему точность таймера?

Я думаю, что вы прекрасно знаете, что для дрыгания ногой на авре даже команда не нужна. И у меги таких ног для пяти шаговиков с переизбытком. Проблемма в том, что требуется подавать импульс в нужное время, пропустить нельзя, раньше-позже не желательно. Вот человек говорит, что нужно до 5000 импульсов в секунду (10000 изменений уровня), казалось бы - ерунда, а ведь между импульсами может быть практически любое время, от 0 до бесконечности.  Сможете обеспечить два импульса на разных ногах с задержкойв в 1 микросекунду, а пять ?

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

Поэтому дернуть ногу, это доли процентов от работы.

__Alexander
Offline
Зарегистрирован: 24.10.2012

brokly пишет:

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

Поэтому дернуть ногу, это доли процентов от работы.

Согласен, если это сверхточный фрезерный станок, то надо уточнять нюансы.

Кстати я в одно время делал ускорение изменяя регистр совпадения для его же прерывания. Значения хранил в массиве, работало три движка и очень даже не плохо, думаю и десяток бы потянуло.


void TIM6_DAC_IRQHandler(void) 
{
TIM6->SR &= ~TIM_SR_UIF;	

	if (step_up > 0)
        TOGGLE_STEP_1;		
        step_up--;  						  
        TIM6->ARR = speed_up[count_speed_up++];											
												
                      if (step_up < razgon_up && count_speed_up != 0)
                      TIM6->ARR = speed_up[count_speed_up--];										
            
  	if (step_down > 0)
  	{
		
	TOGGLE_STEP_1;
        step_down--;
		
						
											
                     
                     if (step_down < razgon_up && count_speed_up != 0)
                     TIM6->ARR = speed_up[count_speed_up--];	
				

 

Всего пара-тройка команд. Кстати, toggle работает именно как toggle, т.е. при одном входе в прерывание ставится лог 1, при следующем 0.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Вот из-за такой "вашей простоты" и получается кривые напечатанные модельки и точность печати отвратительная. Но самое главное, там ни один движек не вертится с частотой в 5 оборотов в секунду :) 

Если вы всегда так много пишите сам, то читаейте и то что пишут другие :)

Onkel
Offline
Зарегистрирован: 22.02.2016

 Одна Мега запросто тянет 4 шаговика. Вот на днях как раз проект завершил - три Меги, 12 шаговиков. Можно было и на одну Мегу повесить, или на STM32F..., но по просьбе клиента и по соображениям модульности было взято 3 Меги. По два концевика на каждый шаговик.  Каждая - 4 драйвера тянет и не жалуется.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

__Alexander пишет:

Кстати я в одно время делал ускорение изменяя регистр совпадения для его же прерывания. Значения хранил в массиве, работало три движка и очень даже не плохо, думаю и десяток бы потянуло.

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

Можно квантовать все движения периодами одного таймера, причем можно считать тайминги между сигналами разных моторов , есть такая математика, но скорость вращения заявленная ТС убивает точность нахрен. Мы же не знаем зачем он это использует, а все параметры он описать не может.

__Alexander
Offline
Зарегистрирован: 24.10.2012

brokly пишет:

Это нормальное решения, правильное. Но на десять каналов у вас нет таймеров. 

В одном всё крутилось. Но это на стм, 168Мгц тактовая, всё успевалось. )) А, извини, соврал, двихки на двух. Еще один таймер захавал юсб хост, т.к. программу читал с юсбфлешки. 

Кстати да, с юсб флехой есть не побежденный косяк, при mount флехи и чтения файла вторую уже не видит, только перезагрузка, никакие unmount и прочее не помогают и инфы нет никакой по этому поводу.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Onkel пишет:

 Одна Мега запросто тянет 4 шаговика. Вот на днях как раз проект завершил - три Меги, 12 шаговиков. Можно было и на одну Мегу повесить, или на STM32F..., но по просьбе клиента и по соображениям модульности было взято 3 Меги. По два концевика на каждый шаговик.  Каждая - 4 драйвера тянет и не жалуется.

 

Ну пять совсем не четыре. Да и "тянет" понятие растяжимое. Какая скорость вращения моторов, ну или сразу какова максимальная частота выдачи шаговых импульсов и максимально возможная ошибка подачи шагового импульса в % от периода импульса ? Вы нас этим удивите лучше. А на мегу я могу на каждые две ноги по мотору повесить и даже крутить ими, и даже с ускорениями, но мееееедленно-мееедленно :)

Красивый шкаф, только мегу нужно закрыть :) 

svorog
Offline
Зарегистрирован: 27.04.2017

ну ремней пока нигде не наблюдается: где то на прямую через муфту рулон с бумагой, где то по винтам толкатели и направляющие бегут.

я почему то привык расчитывать что на обычном шаге (не микро) шаговые двигатели ничего не теряют, ну поидее если 1,2 шага наверное мне большого вреда не нанесут.

а на каком этапе возможны потери? ардуина может не успеть выдать на контрольллер двигателя все что нужно?

Gas311
Gas311 аватар
Offline
Зарегистрирован: 06.12.2018

А энкодер оптический поставить для обратной связи?

sadman41
Offline
Зарегистрирован: 19.10.2016

О, кстати, Скиф, ТС - твой клиент. Денег нет, учить ничего не хочет, задача простая. Берись.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

alex_ivanoff_1 пишет:

Вообще-то у марлина почти всегда работают ТРИ движка (два для перемещения по X и Y, и один на экструдер) ПЛЮС мега еще принимает G-коды, ПЛЮС анализирует планиповшиком ход дальнейшего перемещения, ПЛЮС пасет по ПИДУ разогрев стола, ПЛЮС пасет по ПИДУ разогрев экструдера, ПЛЮС пасет подачу филамента, ПЛЮС выдает картинки на экранчик принтера с параметрами процесса, ПЛЮС выдает параметры процесса на комп,  для отображения экране монитора упраляющей программы.

В общем для меги одновременная работа двух или трех движков по заданной траектории не самая сложная задача!

Да товарисч - ТИОРЕТИК !!! Вы бы в прошивочку глянули бы, если осилите поймете что признались в полном непонимании работы марлина :) Там могут работать "одновременно" СЕМЬ моторов !!! Но 1000 импульсов в минуту !?!?!? Тыщщу, Карл ! Нет там такого ни разу и небыло никада :)

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

alex_ivanoff_1 пишет:

 со стандартными драйверами степ/дир, по 200 шагов на оборот, в количестве 3шт.

ПЯТИ ШТУК, ПЯТИ !

sadman41
Offline
Зарегистрирован: 19.10.2016

Не трёх, и не пяти, а N шт. моторов, X шт. концевиков и Y комбинаций скорость/направление. За Й денег.