Алгоритм разгона торможения шагового двигателя

roman2712@mail.ru
Offline
Зарегистрирован: 16.01.2014

 "из ускорения сразу в замедление" а тут кроется проблема... если ускорять линейно (меняя растояние между импульсами) то не хватает времени на расчет "времени импульса+ скорости + точки начала торможения (для нее скорость надо)". Максимум 4 - 6 кГц. 

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

Бибилотеку для ШД пишу :)

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

roman2712@mail.ru пишет:

Момент... момент решается повышением напряжение, более мощьным драйвером и мотором.

Ну да...

Если у нас есть лампочка на 40 Вт, а нам нужно на 100, это решается повышением напряжения.

Цитата:

Из того что сейчас есть 16 кГц на 1/16 и винт на 4 мм оборот - итого 0,00125 на 1 шаг.

То есть Вы уверены, что люфт у Вас меньше микрона?

 

Мне кажется, мы опять обсуждаем сферического коня в вакууме.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

andriano пишет:
Мне кажется, мы опять обсуждаем сферического коня в вакууме.
Библиотеку для сферического коня в ваакууме. 

Следует отличать ШД в 3Д принтере от работы ШД в других устройствах. Кажется и там ШД и там. НО возьмем аналогию работу президента и работу бухарика сантехника. Если в последнем случае из-за лажи в работе пострадает одна страна, то в первом может пострадать гораздо больше. Хотя бухарик президент это жесть. 

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

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

roman2712@mail.ru
Offline
Зарегистрирован: 16.01.2014

Библиотеку обычную, для arduino. Сказал же уже. Решаю инженерную задачу в целях сделать полезное и получить знания. 

Хотел бы что то ЧПУ, то взял бы grbl на отдельном контроллере и g-кодами бы рулил. Что в общем то так и сделано в другов проекте.

По поводу люфтов

Стенд (для проверки реализуемости идеи):

винт\гайка, подпружиненная. перемещение на линейных подшибниках на 8 мм валах. что то типа такого http://www.cutmaster.ru/cat/accessories/motion/. Замер - микрометром ГОСТ 577-68. заявленная точность 0.01 мм, но визуально позвояет наблюдать до 0.003 - 0.005 мм. Цель - определение предельных характеристик системы (ШД + контроллер) (ускорение, скорость) . Нагрузка \ инерция создается дополнительным грузом на каретке. 

Разгон квантами времени, один из способой разгона используемых в ЧПУ станках с не очень производительными контроллерами. 

Почему AVR а не что то более мощьное ? Решаю инженерную задачу в целях сделать полезное и получить знания. Для простоты понимания - поспорил на 15 летний коньяк, что AVR сможет (Условие не ниже 30 кГц, точное позиционирование по шагам, относительная универсальность т.е. таблица не подходит).  

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

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

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

надо было раньше всё расписать))))

roman2712@mail.ru
Offline
Зарегистрирован: 16.01.2014

vvadim иногда лучше жевать, чем говорить... (Стиморол)

 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Обычная библиотека для ардуино. Жесть определение. Есть к подходу строительства систем на компьютерах императивный и декларативный. (объяснение здесь https://youtu.be/41BIak_joT8?t=587) . Вот эффективней вторая. Но новички все время городят первую. И библиотека на первую систему не всегда подходит на вторую. 

  А теперь ЧПУ и основная сложность с ними. Так для того что бы напечатать прямую линию надо синхроная работа 3 ШД двигателей . Х Y и Екструдер. Они в одинаково должны входит в режим разгона, потом одинаково в линейный, и наконец одинаково в режим торможения. Причем надо вычислить какой их X или Y  двигателей идет с максимальной скоростью. А какой с пропоцинально меньшей. А так как скорость у ШД двигателей все различна, хотя и пропорциональна. Шаги они делают в разное время. И так вам надо уже 3 аппаратных прерывания. Или переходить на micros, Что тоже не увеличивает скорость.

roman2712@mail.ru
Offline
Зарегистрирован: 16.01.2014

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

Я бы рассматривал библиотеку как некую абстракцию, а какой она будет с точки зрения реализации императивной и декларативной на данный момент как то не задумывался. Это фактически зависит от того какие методы я буду в своей библиотеки реализовыват. Обычно я свои библиотеки в некую законченную сужность оформляю в соответвии с ООП подходом. (т.е. все взаимодействие через метода, изоляция внутренних сущностей ну и т.д.) 

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

Принципиально осталось решить вопрос с определение точки торможения, на этапе разгона. Ну и решить проблему еденичного рывка ШД при смене коэфицента делителя таймера (пока этим не занимался)

 

 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

На первый вопрос очень сложно объянить чем отличается функция команда  от функции выполнения.  Рассказывать почему функция я не буду. так как это абзац целый. В первом случае - фунция "отдает команду:система делай это. Система стань в это состояние". Во -втором  это функция сама делает это по шагам и выход из функции показывает что все закончилось. Недостаток второго в том что процессор занят только этой функцией или в цикле ожидаения этой функции. 

  Последний ваш вопрос легок. Сколько шагов тратится на разгон к максимуму. Пусть A . Столько же статиться на останов. У вас команда сделать B шагов.  Итак простой расчет . Сколько надо шагов пройти  в линейном режиме B-2*A . Тогда первые А шагов разгон и последние А шагов торможение.  Если B-2*A отрицательно . То В/2 разгон и В/2 торможение.

  Про ООП могу сказать следующее. Это просто свод полезных пожеланий. Но в работе нужно иметь конкретные правила под конкретную среду. То есть личные наработки в области написания программы под "свое блин ООП". Пока внятные чужие я не видел.

roman2712@mail.ru
Offline
Зарегистрирован: 16.01.2014

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

Императивной и декларативной ту у вас ИМХО несовем правильное понимание. Ожидание завершение работы функции это не особенности указанных парадигм, это уже особенность реализации функции, метода, запроса и т.д.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

И систем. Если коротко выполняемые функции, то это императив однозначно. А вот если долговыполняемые, то лучше перевести в декларатив и дать "свободу" системе действовать. Так например управление ШД двигателем вы отдали системе-прерыванию. Осталось поймать конец выполнения задачи и дайть системе новую задачу. 

Densl
Offline
Зарегистрирован: 28.11.2018

У меня в проекте accelstepper тормозит на 328p. Я прочел что тут писали быструю библиотеку. Как результаты?

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

Densl пишет:
У меня в проекте accelstepper тормозит на 328p. Я прочел что тут писали быструю библиотеку. Как результаты?

https://github.com/achest/stepperQ

но она только для одного шаговика.