выполнение g-кода шаговиками
Добавлено: 30 июн 2013, 17:48
Помогите разобраться! Хотелось бы услышать мнение, как нужно делать по-уму.
Допустим есть команда g01, осуществляющая переход из точки с координатами (x0, y0) в точку (x1, y1) (рассмотрим плоский случай). Для перемещения используются шаговые двигатели. Данный переход можно осуществить по-разному:
первый - дискретизовать отрезок с помощью алгоритма Брезенхэма например, задать какой-то тик по времени, и в каждый тик решать, делать шаг по каждой оси или нет. Т.е. отрезок под 45 градусов к осям, будут делаться шаги по обоим осям каждый тик... для примера из вики http://commons.wikimedia.org/wiki/File: ... uselang=ru шаги по оси X будут делаться каждый тик, по Y 3, 5, 8, 10...
второй - сделать переменным интервал между шагами. То есть вычислить проекции вектора (х1 - х0, у1 - у0). Далее выбрать бОльшую проекцию (пусть это будет проекция на ось Х). Время всего процесса - Т. Время шага по Х равно dt_x = Т*dx/(х1 - х0), где dx - перемещение, соотвествтвующее одному шагу по х, время шага по У dt_y = Т*dу/(у1 - у0). Далее следует просто сформировать два ШИМ-сигнала с соответствующей периодичностью dt_x и dt_y и подать их на драйвер.
Какие плюсы и минусы у этих способов? Существуют ли альтернативы?
Мне второй способ кажется как минимум менее трудозатратным в плане вычислений, однако, первый работает с гарантированной точностью.
Допустим есть команда g01, осуществляющая переход из точки с координатами (x0, y0) в точку (x1, y1) (рассмотрим плоский случай). Для перемещения используются шаговые двигатели. Данный переход можно осуществить по-разному:
первый - дискретизовать отрезок с помощью алгоритма Брезенхэма например, задать какой-то тик по времени, и в каждый тик решать, делать шаг по каждой оси или нет. Т.е. отрезок под 45 градусов к осям, будут делаться шаги по обоим осям каждый тик... для примера из вики http://commons.wikimedia.org/wiki/File: ... uselang=ru шаги по оси X будут делаться каждый тик, по Y 3, 5, 8, 10...
второй - сделать переменным интервал между шагами. То есть вычислить проекции вектора (х1 - х0, у1 - у0). Далее выбрать бОльшую проекцию (пусть это будет проекция на ось Х). Время всего процесса - Т. Время шага по Х равно dt_x = Т*dx/(х1 - х0), где dx - перемещение, соотвествтвующее одному шагу по х, время шага по У dt_y = Т*dу/(у1 - у0). Далее следует просто сформировать два ШИМ-сигнала с соответствующей периодичностью dt_x и dt_y и подать их на драйвер.
Какие плюсы и минусы у этих способов? Существуют ли альтернативы?
Мне второй способ кажется как минимум менее трудозатратным в плане вычислений, однако, первый работает с гарантированной точностью.