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

Динамическое управление ускорением

Добавлено: 24 ноя 2012, 20:10
Сергей Саныч
Здесь уже обсуждалась возможность работы по S-кривой ускорения. http://cnc-club.ru/forum/viewtopic.php? ... 935#p44935
У меня немного другой вопрос: имеется ли в глубинах LinuxCNC возможность динамически изменять ускорение разгона-торможения в зависимости от скорости перемещения?
Зачем? Это может быть актуально, в особенности, при использовании шаговых двигателей. Как известно, момент ШД падает с увеличением скорости. Соответственно, для оптимального разгона есть смысл при низких скоростях задавать бОльшие значения ускорения, а при высоких - меньшие.

Re: Динамическое управление ускорением

Добавлено: 24 ноя 2012, 20:25
wldev
Тоже интересно как они там генерируют...
посмотреть кусок кода бы

Re: Динамическое управление ускорением

Добавлено: 26 ноя 2012, 13:18
Nick
На уровне планировщика траекторий, боюсь это будет также сложно как и S-кривая разгона. А вот на уровне stepgen наверное можно, но можно нарваться на большое отклонение от траектории.

Re: Динамическое управление ускорением

Добавлено: 07 мар 2013, 14:27
michael-yurov
Serg-tmn писал(а):Как известно, момент ШД падает с увеличением скорости. Соответственно, для оптимального разгона есть смысл при низких скоростях задавать бОльшие значения ускорения, а при высоких - меньшие.
Сначала подумал - а может быть тут ошибка - ведь с ростом скорости растет и отдаваемая двигателем мощность при постоянном моменте...
Но нет - кинетическая энергия пропорциональна квадрату скорости, соответственно, если скорость увеличивается линейно - мотору нужно будет отдавать возрастающую мощность.
Nick писал(а):На уровне планировщика траекторий, боюсь это будет также сложно как и S-кривая разгона.
А про S кривые могу рассказать следующее:
S кривая - постепенное (трапецеидальное) изменение ускорения. Можно сравнить с движением на легковом автомобиле, когда вы плавно нажимаете/отпускаете педаль газа,
а не как на троллейбусе - то газ в пол то тормоз до упора.
S кривая в первую очередь позволяет избавиться от вибраций станка в начале и конце ускорения (aftaev где-то приводил пример видео сервоактуатора с маятником).
Можно ощутить это на себе в дешевых лифтах - он когда трогается, его трясет, когда останавливается - тоже (хотя тут может быть вообще ступенчатое изменение скорости).
А вот в крутых лифтах вообще не замечаешь, как он трогается и останавливается, и это было бы невозможно с линейным увеличением скорости, т.к. тогда чувствовалось бы резкое изменение ускорения свободного падения в лифте (чувствовалось бы изменение веса).

Когда решался - стоит ли покупать KFlop, на другом форуме меня уверяли, что он поддерживает S кривые изменения скорости.
Оказалось - поддерживает, но только при холостых перемещениях. ((((
Разработчик очень хотел бы сделать поддержку в планировщике траектории, но сказал, что в ближайшее время надеяться не стоит.

Я себе представляю следующий алгоритм расчета траектории с S кривыми:
Рассчитываем траекторию стандартными методами
Строим графики скоростей и ускорений
Корректируем это все так, чтобы на графике ускорений были не прямые грани а наклонные, как у трапеции (или, хотя бы ступеньками).
Соответственно, придется растянуть/сжать в соответствии с ускорениями графики скорости и положения.
Придется изменять графики всех осей одновременно, чтобы не было отклонений от траектории.
Как это сделать - могу нарисовать, тогда станет намного понятнее.

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

И второй вариант расчета:
По идее, для расчета нужно лишь уметь рассчитывать движение по прямой исходя из начальной скорости и зная допустимую конечную скорость (частный случай, когда обе скорости равны нулю).
И то же самое для дуговых сегментов (к сожалению - в пространстве, а не на плоскости).
Научившись это рассчитывать можно получить требуемый профиль изменения скорости.
Затем данные можно квантовать и передавать, практически в любой аппаратный контроллер (т.к. для многих есть открытые библиотеки), или плату типа MESA.

Re: Динамическое управление ускорением

Добавлено: 07 мар 2013, 14:35
michael-yurov
О!, а вот по сабжу - следующая мысль:
Скорость вывода импульсов step/dir можно легко регулировать во многих аппаратных контроллерах (например - в пурелоджиковском); т.е. там есть регулятор, который регулирует все вместе - и скорости и ускорения и холостые перемещения.
Что-то вроде изменения несущей частоты генератора импульсов.
Можно с увеличением скорости уменьшать этот регулятор, а с уменьшением - возвращать к 100%
Придется изначально спланировать траекторию с большей максимальной скоростью. т.к. она будет уменьшена. Но в этом нет никаких проблем.

Конкретно, применительно к пурелоджиковскому контроллеру - можно попросить Олега Гладышева (программиста/разработчика), и он, я думаю, без особых проблем добавит эту фишку в прошивку.
Только я не думаю, что они пустят эту фишку в массы. Полагаю, это не востребовано.
Их контроллер работает с Mach3, а для Mach3 это будет почти бесполезно. Удастся добиться больших ускорений на невысоких скоростях. Но тех, кто выбирает Mach это нифига не волнует.

Re: Динамическое управление ускорением

Добавлено: 07 мар 2013, 15:03
michael-yurov
Еще немного пофлужу.
На мой взгляд S кривая лучше, чем просто уменьшение ускорения с ростом скорости.

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

Re: Динамическое управление ускорением

Добавлено: 07 мар 2013, 15:13
Сергей Саныч
Про S-кривые, я представляю, что это такое и для чего. Кстати, про лифт - у нас в доме лифты недавно меняли, так там что-то похожее реализовано - не только кабина разгоняется плавно, но даже и двери так открываются-закрываются.
А по сабжу - не далее, как вчера экспериментировал со скоростью-ускорением и обнаружил, что на той тестовой надписи ускорение влияет на время выполнения, больше, чем скорость. То есть, станок не успевает толком разогнаться. Но при ускорении 300 станок может развить 3500 мм/мин, а при 700 - только 2400. То есть приходится искать компромисс. А если снижать максимальное ускорение в зависимости от скорости, то можно выжать побольше.
На мой взгляд S кривая лучше, чем просто уменьшение ускорения с ростом скорости.
Безусловно. Только как бы это реализовать малой кровью. Пока, в порядке полного бреда, представляется внешний контроллер, управляемый по Step/Dir. Как справедливо замечено, возможности этого простейшего интерфейса далеко не исчерпаны.

Re: Динамическое управление ускорением

Добавлено: 07 мар 2013, 15:48
michael-yurov
Serg-tmn писал(а):Кстати, про лифт - у нас в доме лифты недавно меняли, так там что-то похожее реализовано - не только кабина разгоняется плавно, но даже и двери так открываются-закрываются.
А у нас наоборот сделали, когда лифт поменяли - установили дрянь какую-то тупорылую от МогилевЛифтМаш (не примите за грубость, я просто называю вещи своими именами).
Он настолько тупой, что быстрее пешком на 5 этаж подняться, чем на нем доехать. И это с учетом того, что мотор сейчас намного более мощный стоит. Лифтостроители, блин.
Serg-tmn писал(а):обнаружил, что на той тестовой надписи ускорение влияет на время выполнения, больше, чем скорость. То есть, станок не успевает толком разогнаться. Но при ускорении 300 станок может развить 3500 мм/мин, а при 700 - только 2400. То есть приходится искать компромисс. А если снижать максимальное ускорение в зависимости от скорости, то можно выжать побольше.
Действительно, как то я об этом не подумал. Наверное можно было скорость уменьшить, а ускорение увеличить, и время бы выполнения сократилось бы.
Вообще, KFlop на моем станке стал работать с ускорениями 2000 мм/с², а ncstudio могла только 600, а с большим - срывалась на мелких участках.
Больше ускорения устанавливать не стал, т.к. эта цифра была заложена в расчеты жесткости станка, и при больших ускорениях конструкция начнет изгибаться. Да и ШВП начнут люфтить.

Re: Динамическое управление ускорением

Добавлено: 07 мар 2013, 18:33
Serg
michael-yurov писал(а):Можно ощутить это на себе в дешевых лифтах - он когда трогается, его трясет, когда останавливается - тоже (хотя тут может быть вообще ступенчатое изменение скорости).
Трясёт не от этого, а из-за неправильной регулировки аварийного стопора и/или из-за кривых рельс.
В обычных лифтах не делают изменение скорости, в них ставят асинхронные двигатели с мягкой характеристикой, что в результате даёт эту самую S-кривую. :)

Re: Динамическое управление ускорением

Добавлено: 07 мар 2013, 19:11
Yur_ra
Чисто математическистанок должен проехать по некоторой кривой,
производная от перемещения это скорость,
производная по скорости это ускорение,
это в станках реализовано.
а нам получается нужно учитывать ещё и производную от ускорения .
Можно и дальше пойти - производную от производной по ускорению учитывать, тогда плавность движений будет ещё больше.
контроль по лишним производным поможет наверно скомпенсировать даже всякие задержки в линиях связи и в самих приводах для более точного контроля сервопривода.
Только кто ж такое реализует?

Re: Динамическое управление ускорением

Добавлено: 07 мар 2013, 19:38
Сергей Саныч
Yur_ra писал(а):а нам получается нужно учитывать ещё и производную от ускорения .
Можно и дальше пойти - производную от производной по ускорению учитывать, тогда плавность движений будет ещё больше.
При проектировании закруглений велотреков обычно учитывали третью производную. Как-то давно читал, что когда проектировали трек в Крылатском для Олимпиады-80, привлекли серьезную математическую науку и учли производные высших порядков. Результат - куча мировых рекордов.

Re: Динамическое управление ускорением

Добавлено: 07 мар 2013, 20:33
Darxton
Yur_ra писал(а): а нам получается нужно учитывать ещё и производную от ускорения .
По-хорошему - надо.
Можно и дальше пойти - производную от производной по ускорению учитывать, тогда плавность движений будет ещё больше.
контроль по лишним производным поможет наверно скомпенсировать даже всякие задержки в линиях связи и в самих приводах для более точного контроля сервопривода.
Только кто ж такое реализует?
Создатель mach3 утверждал почти год назад, что в новой, 4й, версии реализовал это, и даже больше. Однако... Воз и ныне там пока.

Re: Динамическое управление ускорением

Добавлено: 07 мар 2013, 21:56
michael-yurov
Darxton писал(а):Создатель mach3 утверждал почти год назад, что в новой, 4й, версии реализовал это, и даже больше. Однако... Воз и ныне там пока.
Создатель Mach3 так накосячил в текщей версии, что с трудом верится в то, что он попытается проверять расчет высших производных его программой, анализируя спланированную траекторию,

Хотя, спасибо за информацию - заманчиво.

Re: Динамическое управление ускорением

Добавлено: 07 мар 2013, 22:10
Darxton
michael-yurov писал(а):Хотя, спасибо за информацию - заманчиво.
У них(Artsoft) там еще та Санта-Барбара(в плане влияния личных взаимоотношений на продукцию), что серьезно к ним как разработчикам относиться не удается... А кроме того, расчет всех этих прелестей потребует еще большей производительности ПК, а также переписывание плагинов аппаратных контроллеров, удаление багов - так что хоббистам рассчитывать на нормальную работу в Mach4 в обозримом будущем вряд ли приходится.

Re: Динамическое управление ускорением

Добавлено: 18 мар 2013, 17:09
solo
Когда я использовал для управления станком турбоСНС там в конфигурации оси задавали начальную скорости врашения ШД, тоесть получалось что ШД начинает вращатся с мах ускорение на минимально установленной скорости, а дальше скорость наростала уже линейно. Может что то подобное можно применить и здесь для первой ступени регулирования ускорения.

Re: Динамическое управление ускорением

Добавлено: 18 мар 2013, 17:13
michael-yurov
solo писал(а):Когда я использовал для управления станком турбоСНС там в конфигурации оси задавали начальную скорости врашения ШД, тоесть получалось что ШД начинает вращатся с мах ускорение на минимально установленной скорости, а дальше скорость наростала уже линейно. Может что то подобное можно применить и здесь для первой ступени регулирования ускорения.
Это даже не максимальное ускорение, а бесконечно большое ускорение в начальный момент. Короче говоря - для современных станков - недопустимо.
А здесь мы говорим об обратном - ка сделать, чтобы не только скорость изменялась плавно, но еще и ускорение.

Re: Динамическое управление ускорением

Добавлено: 18 мар 2013, 17:16
michael-yurov
Darxton писал(а):А кроме того, расчет всех этих прелестей потребует еще большей производительности ПК, а также переписывание плагинов аппаратных контроллеров,
Если бы я это делал - хватило бы производительности 486 процессора. И плагины не нужно было бы переписывать.

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

Re: Динамическое управление ускорением

Добавлено: 18 мар 2013, 18:15
solo
michael-yurov писал(а):А здесь мы говорим об обратном - ка сделать, чтобы не только скорость изменялась плавно, но еще и ускорение
так и я вроде о том же
Я конечно делетант и по этому до конца все не допонимаю. ШД нам позволяет получить большие ускорения на малих скоростах . Если поступить следующим образом. Задаем несколько максималь возможных ускорение в зависимости от скорости тоесть какаято талица или масив и тогда если в данный момент скорость ШД (такаято) то соотвецтвенно и ускорение с которым можно использовать ШД в даннов диапозонне скоростей(такоето) соотвецтвующее . Как то я это все безтолково написал. Ну типа коробки скоростей как в машине. В зависиости от скорости машины мы знаем какую передачу нам надо включать. На малих скоростях разгоняемя быстро, чтобы получить более точное следование траэктории на рабочих подачах , а на больших медленно чтобы получить максимальные скорости премещения.

Re: Динамическое управление ускорением

Добавлено: 18 мар 2013, 18:35
michael-yurov
Тут вот какой момент...
Высокие ускорения на малых скоростях - тоже плохо, как оказалось...
В реальности получается так, что добиться высоких скоростей станка за счет механики и электроники не так уж и сложно,
а вот на маленьких скоростях (при обработке мелких элементов) высокие ускорения приводят к сильным вибрациям станка (изгибаются конструктивные элементы), и получается, что высокие ускорения на маленьких скоростях, сыграют с нами злую шутку.

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

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

Re: Динамическое управление ускорением

Добавлено: 18 мар 2013, 20:23
dpss
В теме про S образный разгон я положил 2 статьи. В первой - от французов - был описан алгоритм планировщика позволяющий на ходу менять рабочую скорость от минимума до максимума. Идея заключалась в просчете и хранении целого семейства кривых просчитанных для разных случаев с некоторым шагом. По необходимости выбирается та или иная готовая кривая. Там же получается набор вариантов lookaheаd для разных скоростей. Но это требует очень нехилых вычислительных ресурсов. На примере они получали оптимизацию лучше чем у Синумерика.