Если ваш контроллер может выдавать команды быстрее, чем на самом деле могут работать степперы, вы, вероятно, захотите использовать какую-то систему, основанную на событиях, основанную на таймере.Вам нужно рассчитать , когда вы запустите каждый из двигателей, чтобы движение было равномерно распределено по обеим осям.
Более длинное движение должно быть запрограммировано как можно быстрее (т. Е. Если двигатель может делать 100 шагов в секунду, пульсировать его каждую 1/100 секунды), а другое движение -более длинные интервалы.
Редактировать: в приведенном выше абзаце предполагается, что вы хотите переместить инструмент как можно быстрее.Обычно это не так.Обычно указывается скорость инструмента, поэтому вам необходимо рассчитать скорость по осям X и Y (и, возможно, также по Z) отдельно от нее.Вы также должны знать, какое расстояние перемещения инструмента соответствует одному шагу двигателя.Таким образом, вы можете рассчитать количество шагов, которые вам нужно сделать за единицу времени, а также продолжительность всего движения и, таким образом, интервалы времени между последовательными шаговыми импульсами вдоль каждой оси.
Таким образом, вы программируете свой таймер на срабатывание посленаименьший из рассчитанных временных интервалов, импульс соответствующего двигателя, программирование таймера для следующего импульса и т. д.
Это упрощение, поскольку двигатели, как и все физические объекты, имеют инерцию и требуют времени для ускорения/ замедлиться.Таким образом, вы должны принять это во внимание, если вы хотите производить плавные движения.Есть еще соображения, которые необходимо учитывать.Но это больше о физике, чем программировании.Модель программирования остается прежней.Вы моделируете свою машину как физический объект, который реагирует на известные стимулы (шаговые импульсы) некоторым известным способом.Ваша программа рассчитывает временные интервалы для шаговых импульсов из модели и находится в цикле событий, ожидая следующего события.