Помогите разобраться! Хотелось бы услышать мнение, как нужно делать по-уму.
Допустим есть команда 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 и подать их на драйвер.
Какие плюсы и минусы у этих способов? Существуют ли альтернативы?
Мне второй способ кажется как минимум менее трудозатратным в плане вычислений, однако, первый работает с гарантированной точностью.
выполнение g-кода шаговиками
-
aftaev
- Зачётный участник

- Сообщения: 34042
- Зарегистрирован: 04 апр 2010, 19:22
- Репутация: 6194
- Откуда: Казахстан.
- Контактная информация:
Re: выполнение g-кода шаговиками
для чего это нужно? Программу пишешь или диплом?Alamy писал(а):Мне второй способ кажется как минимум менее трудозатратным в плане вычислений, однако, первый работает с гарантированной точностью.
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
- michael-yurov
- Почётный участник

- Сообщения: 11731
- Зарегистрирован: 26 июл 2012, 00:10
- Репутация: 4703
- Настоящее имя: Михаил Львович
- Откуда: Новоуральск
- Контактная информация:
Re: выполнение g-кода шаговиками
С шаговиками такой номер проходит только в теории.
На практике - их плавно разгонять и останавливать нужно.
На практике - их плавно разгонять и останавливать нужно.
Re: выполнение g-кода шаговиками
Пока не пишу, а просто хочу понять...aftaev писал(а):для чего это нужно? Программу пишешь или диплом?Alamy писал(а):Мне второй способ кажется как минимум менее трудозатратным в плане вычислений, однако, первый работает с гарантированной точностью.
Re: выполнение g-кода шаговиками
Ну получается, для второго способа это не проблема - просто вместо равномерной сетки шагов по каждой оси (dt_x и dt_y) можно взять три участка: 1 - с ускорением, второй - равномерный, третий - с замедлением... Ну и для обоих осей задать одинаковый закон ускорения (линейный например).michael-yurov писал(а):С шаговиками такой номер проходит только в теории.
На практике - их плавно разгонять и останавливать нужно.
С первым - можно поидее задать закон ускорения для оси (то есть на каких-то участках сделать время шага не постоянной), по которой больше шагов (главная ось, та, у которой проекция больше). На другой оси, поскольку шаги там происходят не чаще (а скорее всего реже), закон будет нормально работать (вот тут вопрос - будет ли? ведь шаги уже не равномерно по времени происходить могут, как в примере с вики)
- michael-yurov
- Почётный участник

- Сообщения: 11731
- Зарегистрирован: 26 июл 2012, 00:10
- Репутация: 4703
- Настоящее имя: Михаил Львович
- Откуда: Новоуральск
- Контактная информация:
Re: выполнение g-кода шаговиками
И еще - в реальности шаговиками управляют не по шагам, а дробят их на микрошаги.
Ошибка в +/- несколько микрошагов большой роли, обычно не играет. Так что любой алгоритм допустим.
Хотя, с точки зрения разработчика систем управления - это некорректный подход, т.к. покупателю может потребоваться точность позиционирования не хуже одного шага.
Большинство систем работает по алгоритму Брезенхэма (если я правильно понимаю), они выбрасывают ненужные импулсы и несущей частоты.
Для шаговиков, вообще, очень желательно равномерное вращение, поэтому выбрасывать шаги из последовательности хуже, чем равномерно распределить интервал между импульсами.
Ошибка в +/- несколько микрошагов большой роли, обычно не играет. Так что любой алгоритм допустим.
Хотя, с точки зрения разработчика систем управления - это некорректный подход, т.к. покупателю может потребоваться точность позиционирования не хуже одного шага.
Большинство систем работает по алгоритму Брезенхэма (если я правильно понимаю), они выбрасывают ненужные импулсы и несущей частоты.
Для шаговиков, вообще, очень желательно равномерное вращение, поэтому выбрасывать шаги из последовательности хуже, чем равномерно распределить интервал между импульсами.
- michael-yurov
- Почётный участник

- Сообщения: 11731
- Зарегистрирован: 26 июл 2012, 00:10
- Репутация: 4703
- Настоящее имя: Михаил Львович
- Откуда: Новоуральск
- Контактная информация:
Re: выполнение g-кода шаговиками
С ускорениями поступают не так.
Разбивают весь путь на маленькие участи (равные по времени), для каждого рассчитывают требуемую скорость.
А потом уже шаги генерируют по любому алгоритму.
Разбивают весь путь на маленькие участи (равные по времени), для каждого рассчитывают требуемую скорость.
А потом уже шаги генерируют по любому алгоритму.