Шаговые двигатели (3-4) на меге
- Войдите на сайт для отправки комментариев
Доброго времени суток! хочу собрать специфический механизм на шаговых двигателях. Двигатели стандартные с драйверами степ/дир п 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
Одновременная работа возможна, ограничение - тактовая частота, универсальный "конструктор" писать дольше/дороже, чем движение по жесткому алгоритму.
Р е а л и з у е м о - maslachenko767@mail.ru , консультации, подбор компонентов бесплатно, гарантии
программы для 3D принтеров органичены как правило 4 осями, я в этом плане не хотел бы привязываться.
так как у меня, в процессе реализации думаю будет увеличиваться количество двигателей, понадобятся какието ориетирующие направляющие и т.д. поэтому хотел бы иметь универсальный код.
Резюмирую:
1. нужна универсальная заготовка кода для одновременной работы нескольких ШД в которой можно до разумной бесконечности добавлять строки меняя координаты двигателей;
2. постоянно опрашивать концевики;
3. Home что бы при включении движки доезжали до начальных координат (+механическая кнопка возврата);
4. плавный пуск/стоп двигателей.
1) Универсальная заготовка - Examples к библиотеке шаговых двигателей. Вся остальная универсальность может существовать только в воображении заказчика.
давайте попробую более конкретно:
Нужен код для Меги в котором при нажатии кнопки пуск запускается следующий алгоритм:
1. первый двигатель делает 100 шагов, второй -10, третий +10, четвертый -40, пятый 50, шестой 83 шага;
2. первый двигатель стоит на метсе, второй делает 10 шагов, третий -10, четвертый + 40, пятый +200, шестой - 143 шага;
Код должен обеспечиватьбезопасное движение механизмов (проверять срабатывание концевиков, все концевики замкнуты на одной линии) и желательно плавный пуск стоп двигателей.
код должен позволять добавлять дополнительные точки для перемещения по аналогии с первыми двумя)
Сделать возможно (в описанном варианте). Придётся башку почесать, как организовать хранение сценария. Ну и проработать "мелкие" детали.
svorog - проблема возникнет, если вы захотите задавать каждому мотору свою скорость. Поэтому независимый плавный пуск и стоп для более 3-4х моторов очень под вопросом. Остальное, в принципе, "реализуемо", как любит писать один из местных участников
Правильно я понимаю что плавный пуск/стоп это как раз разная скорость двигателей? И маловероятного этого добиться для 5-7ти двигателей?
А если не делать плавный пуск стоп?
скорость конечно хотелось бы менять, то есть иметь какой то индекс скорости для каждой точки, в одну точку едем быстро, в другую плавно, обратно быстро...
поидеи, как я себе представляю реализацию: каждая точка это цикл в котором есть счетчик шагов для каждого двигателя и в этом цикле наверное можно задавать скорость. И получается для движений где требуется разная скорость двигателей мы должны создавать дополнительные точки? и соответственно одновременная работа невозможна?
Одновременная работа с ускорениями даже для двух шаговиков на меге задача не простая. Для трех, на этом железе - практически не выполнимая. Для реальной оценки нужно знакть максимальную скорость вращения моторов.
Решения есть, но они не простые и не дешевые.
Поидеи все эти "мелкие" детали всплывают в ходе формирования ТЗ и на опытном образце. Универсальное решение под любые сценарии с обслуживанием любого кол-вом моторов, крутящихся на любых скоростях будет Вам стоить любых денег.
Одновременная работа с ускорениями даже для двух шаговиков на меге задача не простая. Для трех, на этом железе - практически не выполнимая.
Та ну. Задать массив с задержами так тяжело?
Правильно я понимаю что плавный пуск/стоп это как раз разная скорость двигателей? И маловероятного этого добиться для 5-7ти двигателей?
... и соответственно одновременная работа невозможна?
Возможно. На Меге - хоть десять, может и больше, я больше не пробовал. Надо только уметь работать с прерываниями. А если кто-то не умеет - так это его, неумехи, проблема. Пишите ydom@mail.ru - я умею.
Одновременная работа с ускорениями даже для двух шаговиков на меге задача не простая. Для трех, на этом железе - практически не выполнимая.
Та ну. Задать массив с задержами так тяжело?
И что дальше ? Как раз рассчет массива - пшик, на фоне выдачи пяти сигналов step с большой частотой, соответствующей разгонным кривым. Вы сами хоть раз такое делали. Я очень плотно знаком с марлином и прекростно понимаю какие есть подводные камни. Уже в марлине косяки лезут наружу при быстром движении каретки, а там всего две оси.
Если у вас все так просто, может возьмете этот проект. Покажите нам, неучам, класс ? :)
Возможно. На Меге - хоть десять, может и больше, я больше не пробовал. Надо только уметь работать с прерываниями. А если кто-то не умеет - так это его, неумехи, проблема. Пишите ydom@mail.ru - я умею.
Онкель, твои плоские намеки я понимаю :) Более того, видел и то что ты впариваешь клиентам. Этот позор, даже у меня рвотные рефлексы вызывает :) Ты знаток "чистого си", о каких прерываниях на этом фоне ты рассказываешь !?
да у меня собственно один опытный образец и будет) ничего супер универсально под все случаи жизни не надо. Универсальность в плане добавления дополнительных точек, а не жесткий конкретный алгоритм.
оборотов 5/сек думаю будет достаточно, т.е. 1000имп/сек.
Для 5 двигателей, это 5000 импульсов с РАЗНЫМИ задержками :) Ну что, исполнители ? Хватайте сладкий проект :))))
И что дальше ? Как раз рассчет массива - пшик, на фоне выдачи пяти сигналов step с большой частотой,
У вас не работает таймер на больших частотах? Или в прерывании таймера нельзя подать пять степов?
У вас не работает таймер на больших частотах? Или в прерывании таймера нельзя подать пять степов?
Работает, у меня он и быстрее работает :) Не получится у вас подать некратное количество шагов на пять двигателей с требуемой точностью. Сами посчитайте. Будет рычать и дергаться. Даже если вы на каждый мотор по своему прерыванию прицепете.
Я же говорю, покажите, я вот за такое не возьмусь.
Не ври брукли, даже серожа сказал, что там всё реализуемо ;)
Работает, у меня он и быстрее работает :) Не получится у вас подать некратное количество шагов на пять двигателей с требуемой точностью. Сами посчитайте. Будет рычать и дергаться. Даже если вы на каждый мотор по своему прерыванию прицепете.
Хз. У меня работало. И о какой точности разговор? Установка бита в порт это одна ассемблерная авровская команда, выполняется за один такт. Куда точнее? Да и не точность нужна, а гарантия что двигатель отработает шаг, нафига ему точность таймера?
Хз. У меня работало. И о какой точности разговор? Установка бита в порт это одна ассемблерная авровская команда, выполняется за один такт. Куда точнее? Да и не точность нужна, а гарантия что двигатель отработает шаг, нафига ему точность таймера?
Я думаю, что вы прекрасно знаете, что для дрыгания ногой на авре даже команда не нужна. И у меги таких ног для пяти шаговиков с переизбытком. Проблемма в том, что требуется подавать импульс в нужное время, пропустить нельзя, раньше-позже не желательно. Вот человек говорит, что нужно до 5000 импульсов в секунду (10000 изменений уровня), казалось бы - ерунда, а ведь между импульсами может быть практически любое время, от 0 до бесконечности. Сможете обеспечить два импульса на разных ногах с задержкойв в 1 микросекунду, а пять ?
Вот вы как раз вопрос про точность подняли. А какая она должна быть ТС не знает. Он узнает только тогда, когда она окажется для него недостаточной. И куда он пойдет ругаться. Правильно к исполнителю. На чем базируется стоимость работы, правильно, на потраченом времени, в которое и входит выяснение нюансов исполнителем.
Поэтому дернуть ногу, это доли процентов от работы.
Вот вы как раз вопрос про точность подняли. А какая она должна быть ТС не знает. Он узнает только тогда, когда она окажется для него недостаточной. И куда он пойдет ругаться. Правильно к исполнителю. На чем базируется стоимость работы, правильно, на потраченом времени, в которое и входит выяснение нюансов исполнителем.
Поэтому дернуть ногу, это доли процентов от работы.
Согласен, если это сверхточный фрезерный станок, то надо уточнять нюансы.
Кстати я в одно время делал ускорение изменяя регистр совпадения для его же прерывания. Значения хранил в массиве, работало три движка и очень даже не плохо, думаю и десяток бы потянуло.
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.
Вот из-за такой "вашей простоты" и получается кривые напечатанные модельки и точность печати отвратительная. Но самое главное, там ни один движек не вертится с частотой в 5 оборотов в секунду :)
Если вы всегда так много пишите сам, то читаейте и то что пишут другие :)
Одна Мега запросто тянет 4 шаговика. Вот на днях как раз проект завершил - три Меги, 12 шаговиков. Можно было и на одну Мегу повесить, или на STM32F..., но по просьбе клиента и по соображениям модульности было взято 3 Меги. По два концевика на каждый шаговик. Каждая - 4 драйвера тянет и не жалуется.
Кстати я в одно время делал ускорение изменяя регистр совпадения для его же прерывания. Значения хранил в массиве, работало три движка и очень даже не плохо, думаю и десяток бы потянуло.
Это нормальное решения, правильное. Но на десять каналов у вас нет таймеров. А например при двухкоординатном движении ускорения у моторов разные, и зависит это от начальной и конечной точки. Таблица тут слабо поможет, ее все равно пересчитывать придется. Плавное торможение - вопрос даже несколько сложнее разгона.
Можно квантовать все движения периодами одного таймера, причем можно считать тайминги между сигналами разных моторов , есть такая математика, но скорость вращения заявленная ТС убивает точность нахрен. Мы же не знаем зачем он это использует, а все параметры он описать не может.
Это нормальное решения, правильное. Но на десять каналов у вас нет таймеров.
В одном всё крутилось. Но это на стм, 168Мгц тактовая, всё успевалось. )) А, извини, соврал, двихки на двух. Еще один таймер захавал юсб хост, т.к. программу читал с юсбфлешки.
Кстати да, с юсб флехой есть не побежденный косяк, при mount флехи и чтения файла вторую уже не видит, только перезагрузка, никакие unmount и прочее не помогают и инфы нет никакой по этому поводу.
Одна Мега запросто тянет 4 шаговика. Вот на днях как раз проект завершил - три Меги, 12 шаговиков. Можно было и на одну Мегу повесить, или на STM32F..., но по просьбе клиента и по соображениям модульности было взято 3 Меги. По два концевика на каждый шаговик. Каждая - 4 драйвера тянет и не жалуется.
Ну пять совсем не четыре. Да и "тянет" понятие растяжимое. Какая скорость вращения моторов, ну или сразу какова максимальная частота выдачи шаговых импульсов и максимально возможная ошибка подачи шагового импульса в % от периода импульса ? Вы нас этим удивите лучше. А на мегу я могу на каждые две ноги по мотору повесить и даже крутить ими, и даже с ускорениями, но мееееедленно-мееедленно :)
Красивый шкаф, только мегу нужно закрыть :)
ну ремней пока нигде не наблюдается: где то на прямую через муфту рулон с бумагой, где то по винтам толкатели и направляющие бегут.
я почему то привык расчитывать что на обычном шаге (не микро) шаговые двигатели ничего не теряют, ну поидее если 1,2 шага наверное мне большого вреда не нанесут.
а на каком этапе возможны потери? ардуина может не успеть выдать на контрольллер двигателя все что нужно?
А энкодер оптический поставить для обратной связи?
О, кстати, Скиф, ТС - твой клиент. Денег нет, учить ничего не хочет, задача простая. Берись.
Вообще-то у марлина почти всегда работают ТРИ движка (два для перемещения по X и Y, и один на экструдер) ПЛЮС мега еще принимает G-коды, ПЛЮС анализирует планиповшиком ход дальнейшего перемещения, ПЛЮС пасет по ПИДУ разогрев стола, ПЛЮС пасет по ПИДУ разогрев экструдера, ПЛЮС пасет подачу филамента, ПЛЮС выдает картинки на экранчик принтера с параметрами процесса, ПЛЮС выдает параметры процесса на комп, для отображения экране монитора упраляющей программы.
В общем для меги одновременная работа двух или трех движков по заданной траектории не самая сложная задача!
Да товарисч - ТИОРЕТИК !!! Вы бы в прошивочку глянули бы, если осилите поймете что признались в полном непонимании работы марлина :) Там могут работать "одновременно" СЕМЬ моторов !!! Но 1000 импульсов в минуту !?!?!? Тыщщу, Карл ! Нет там такого ни разу и небыло никада :)
со стандартными драйверами степ/дир, по 200 шагов на оборот, в количестве 3шт.
ПЯТИ ШТУК, ПЯТИ !
Не трёх, и не пяти, а N шт. моторов, X шт. концевиков и Y комбинаций скорость/направление. За Й денег.