Общество

Ещё один ЧПУ интерпретатор

Самопал ЧПУ - это мой домашний проект, которым пользуюсь уже давно, поэтому основные баги выловлены. Раньше он был выложен на форуме cnc-club.ru, но поскольку форум закрылся, решил написать статью. Код проекта и собранный бинарник можно посмотреть на гитхабе. Зачем это надо В те времена, когда проект был начат, существующие интерпретаторы типа Mach3 или LinuxCNC работали через LPT порт, и с их настройкой была проблема, потому что порт, во-первых, может притормозить, из-за чего произойдёт потеря шагов, а во-вторых, порт не умеет выдавать шаги часто, так что быстро с микрошагом не покатаешься. Либо второй вариант - катать на автономном контроллере, но тогда придётся обходиться без интерфейса и удобного контроля. Реализация Начинается всё с программы с интерфейсом на Qt5, которая парсит файл с G-кодом и посылает более простые команды через com-порт в виде пакетов с проверкой CRC. С другой стороны есть плата на STM32F407, которая читает эти пакеты и складывает в очередь. А дальше в зависимости от доступной длины принятых отрезков планировщик едет по траектории и замедляет движение в случае нехватки тормозного пути или ускоряет, если есть куда. То есть в случае плохого соединения станок будет ехать медленнее, но без пропуска шагов. Так же реализован lookahead, то есть стыковка нескольких отрезков вдоль одной прямой или окружности. Передача пакетов оконная, так что можно настроить переходник для порта на мегабит/секунду или даже больше. Собрано с Qt5.6.3 компилятором GCC с библиотекой MSVCRT, так что работает и под Windows XP, можно катать на старых компьютерах в том числе. Генерация шагов прошла некоторую эволюцию. Раньше они выдавались по алгоритму Брезенхэма, но в таком случае период между шагами получался не равномерным, поэтому теперь существует виртуальная ось, которая двигается с эталонной скоростью, а реальные оси ускоряют/замедляют работу таймеров, чтобы попадать в нужное значение координаты. За счёт аппаратной генерации и подсчёта шагов частота их выдачи может быть довольно большой, 1 МГц наверное потянет. В реальном хоббийном применении такая частота скорее всего не нужна, при шаге 1 мкм и скорости 6 м/мин частота будет 100 кГц, а это почти предельные параметры. Возможности контроллера Контроллер поддерживает основные G-коды типа линейного и кругового движения, циклов сверления, переключение систем координат, а также 5 осей с возможностью задать подчинённые. Есть управление ШИМ пином через параметр S, что позволяет включать/выключать лазер (проверено на векторной засветке фоторезиста, но она шумная), а за счёт стыковки растровая засветка должна получиться довольно быстрой (не проверено). Кстати говоря, вместо лазера неплохо бы испытать ультрафиолетовый светодиод, сфокусированный мелкой линзой, всё равно там кристаллик маленький, а мощность большая. Есть управление подачей через напряжение на пине, возможно будет полезно для каких-то экспериментов с прожигом или защитой от поломки фрезы (можно измерить потребляемый шпинделем ток или типа того), или чтобы вывести аппаратную ручку контроля подачи. Ручное управление работает через нажатия клавиш, то есть чем быстрее в операционке автоповтор, тем быстрее движение. С зажатым Ctrl шаги увеличиваются в 10 раз, а с Shift разгон делается до максимальной скорости, но с ограничением, чтобы при отпускании проходило времени до остановки не больше 300 мс - это среднее время реакции человека. Поскольку связь через порт пакетная с проверкой целостности, то в теории можно использовать bluetooth модуль в режиме com-порта для беспроводной связи со станком. Даже если bluetooth подсыпет немного лишних байт, протокол это переварит. Хоминг по датчикам предусмотрен и немного протестирован, но поскольку на своём станке датчики так и не поставил, могло случайно отвалиться (но скорее всего работает). Из интерфейса нельзя редактировать код и нельзя запускать программу с середины, потому что вопрос решается блокнотом и временным файлом. Дальнейшие планы Будут ли обновления программы? В основном хватает того что есть, так что сильно надеяться не стоит. Хотя нарезки резьбы не хватает и она частично реализована, тем более что вместе с ней можно будет подключить и защиту от поломки фрезы или стабильную подачу, чтобы не жечь быстрорез об железо. Возможно получится перенести проект на более доступную платформу - ESP32, тогда можно будет приделать ещё и связь через UDP, во всяком случае в коде под это возможность выделена. Гарантии Никаких гарантий работоспособности, можете пробовать запускать на свой страх и риск, или использовать код в своих проектах.

Фильтры и сортировка