Я, в общем, думаю просто все перемещения конвертировать из миллиметров в шаги и работать в шагах. Потом при каждом перемещении выбирать самую длинную в данном перемещении ось в шагах, и, двигаясь по ней с заданной скоростью, делать линейную интерполяцию остальных осей. Делать это все в прерывании таймера 10000 раз в секунду. Но это если без ускорений, а вот как сюда ещё вплести ускорения, которые, к тому же, могут быть разными на разных осях...
Комментарии: 8
Aleksandr
Я бы всё делал в программе к устройству. Пусть САПР этим занимаемся, а ЧПУ просто выполняет.
Anton
Думаю лучше будет использовать аппаратный выход таймера для генерации счетных импульсов для шаговика и не использовать прерывание. Скорость менять путём изменения частоты таймера.
Krevedko
А как тогда много осей синхронизировать? Типа, пусть будет 4 таймера на 4 оси, как они тогда пойдут синхронно по прямой и как их тогда остановить во время?
Anton
Можно и 4 таймера, методы синхронизации таймеров существуют. Тут нужно смотреть ДШ на контроллер. Вовремя остановить, тут наверное придется использовать прерывание по переполнению, но оно будет вызываться куда реже, нежели на каждый такт. В прерывании отслеживать сколько прошли шагов и тормозить таймер если все...
Aleksandr
Я просто задачу ещё не очень понял. Проблема в управлении шаговиком? Или задача в обеспечении плавности хода, там где его нет в G коде?
Krevedko
Задача - сделать контроллер ЧПУ-станка. То есть то, что будет принимать G-код и двигать моторами в соответствии с ним.
Aleksandr
Тогда я про плавность не понял
Krevedko
Если резко стартовать с места шаговик, то он может пропустить шаг. Шаговик надо плавно разгонять и тормозить. При чем не 1, а целых 4, чтобы одновременно начинали движение, разгонялись, потом тормозили и останавливались. Опять же, максимальные скорости и ускорения у осей разные, надо чтобы это все учитывалось и оси не обгоняли друг друга, а голова двигалась по прямой