Почитал внимательно статью про
KFlop. http://www.dynomotion.com/Help/KMotionC ... lanner.htm
Понял не все (т.к. не про все написано и не везде внятно построены предложения, хотя, вероятно, проблема в моем английском).
Сразу оговорюсь, что статья про дюймы, и что произойдет с настройками, заданными в дюймах, если УП в миллиметрах я точно не знаю и проверить не могу. Но, по логике вещей все должно работать так, как написано, т.е. еси настройки в дюймах, то они всегда в дюймах. Сомнения у меня возникли по вине Mach3 - у него настройки в абстрактных единицах, т.е. в тех же, в которых написана УП.
Сначала не мог долго понять, почему присутствуют две настройки со схожими по смыслу названиями -
Break Angle и
Facet Angle, но, под конец, разобрался.
Facet Angles in the original GCode data that are less than the specified Break Angle (which are considered "small" and will not cause a motion stop) will be re-faceted with smaller line segments along a curve to have Facet Angles smaller than the specified amount.
И так:
Большинство CAM не могут использовать дуговые сегменты при сохранении многомерной траектории, соответственно, приходится использовать прямолинейные отрезки, что чревато проблемами с прохождением стыков, т.к. в этих местах при постоянной скорости будут возникать бесконечно большие ускорения. Соответственно, с этим нужно что-то делать.
В статье приводится пример движения в X Y плоскости, но в 3D все будет работать так же.
Break Angle - пороговый угол. Если угол изменения направления больше этого значения, то движение будет происходить с остановкой в вершине, например, если траектория представляет из себя 12-угольник (изменение направления в вершинах - 30°) и
Break Angle задан меньше 30°, то движение будет происходить с остановкой в каждой вершине, тем самым траектория движения будет идеально точной.
Если же угол изменения направления меньше чем
Break Angle (например, траектория представляет собой 36 угольник (изменение угла - 10°)), то траектория будет сглажена на основе параметров
Corner Tolerance и
Facet Angle.
Происходит это следующим образом - система (на основе текущей скорости и допустимых ускорений) строит скругление угла так, чтобы отклонение скругленной траектории от исходной не превысило
Corner Tolerance, а начало и конец скругления лежали бы не дальше середин стыкующихся отрезков УП.
Собственно, это скругление строится то-же из маленьких отрезков, таким образом, чтобы изменение направления между этими маленькими кусочками не превышало
Facet Angle. Видимо, в статье произошла некоторая путаница названий параметров и слов английского языка, по причине этого словосочетание
Facet Angle встречается в разных значениях.
Loock Ahead - время упреждающего просмотра траектории, оно должно быть больше, чем станку необходимо для полной остановки. Т.е. больше чем максимальная скорость станка (мм или дюймы / сек) деленная на допустимое ускорение (мм или дюймы / сек²). Раз уж ресурсы контроллера позволяют, то можно установить значение с запасом.
Collinear Tolerance - не описанная в статье величина, переводится как допустимое отклонение параллельности сегментов. Наверное, это действительно величина допустимых границ при объединении почти параллельных мелких последовательных отрезков, чтобы легче было провести последующие операции сглаживания углов менее
Break Angle, т.е. чтобы те самые середины стыкующихся отрезков были подальше от вершины, и была возможность построить необходимую сглаживающую дугу. Полагаю, Этот параметр должен быть несколько больше, чем точность вывода числовых значений в файл УП, и вероятно равно или больше точности генерации УП заданной в CAMпрограмме.
После сглаживания углов таким способом, все равно остается некоторая неравномерность в местах перегиба
Facet Angle, и чтобы движение стало еще мягче, используется фильтр нижних частот (low pass filter), который убирает высокочастотную составляющую пульсаций скорости и ускорения. Задается установкой параметра KLP. На данный момент, чтобы задать этот параметр нужно использовать С программу.
Код: Выделить всё
#include "KMotionDef.h"
main()
{
double Tau = 0.001; // seconds for Low Pass Filter Time Constant
KLP = exp(-TIMEBASE/Tau);
printf("Tau=%f KLP=%f\n",Tau,KLP);
}
В статье приводится несколько примеров поведения станка при различных значениях "Tau"
Данная обработка фильтром нижних частот несколько размывает геометрическую точность траектории, но эти величины настолько малы, что в случае с реальным станком ими можно пренебречь (см. графики в статье).
Конец статьи я до конца не понял, но там говорится, что для того, чтобы решить проблему с отклонениями от вершины при использовании фильтра низких частот, рассчитывается кубический сплайн, который каким-то там способом позволяет остановиться точно в нужной позиции.
Еще я не понял, почему на первых графиках ускорения линия графика опускается намного ниже допустимых (в начале сказано, что такие настройки они задали для теста) 30 дюймов/сек². Вполне вероятно, что автор хотел показать - что бы было, если бы не использовались все эти хитрости при планировании движения. Потому как итоговые графики укладываются в допустимые пределы.
Но все же, если рассчитать допустимую скорость движения по дуге радиусом 1 дюйм (как в тестовой траектории) на основе центростремительного ускорения, мы получим 5,477 дюймов в секунду, что точно выдерживается системой при подходе дуге (видно по графикам скорости).
В общем - алгоритм реально крутой,
Большинству систем управления ЧПУ до такого уровня нереально дотянуться,
А относительно дешевые системы просто детская игрушка по сравнению с данными возможностями KMotionCNC.