Еще год назад писал про бюджетное ЧПУ, но так и не реализовал
реализовал только 19.11.2022 (www.drive2.ru/b/598750602851264945/):
— нужно знать техн. английский;
— на начальном уровне разбираться в микроэлектронике;
— уметь программировать С / С++;
— уметь собирать код из исходников и заниматься его отладкой.
— уметь разводить печатные платы, паять, обжимать десятки проводов, кабель менеджмент.
Тема ЧПУ из-за экономических последствий 24.02.2022 стала очень актуальной.
У меня появилось достаточно узкоспециализированного материала, который в русскоязычном сегменте Интернета я просто не нашел.
Кратко напомню, что доступным и современным способом управления ЧПУ станком являются бюджетные микроконтроллеры, например серии ESP32 от 250 рублей за 1 шт с wifi на борту, с драйверами шаговых двигателей (бюджетный диапазон 700 руб за 1 шт), шаговыми двигателями по ценам в среднем около 2000 руб и муфтами от 200 руб за 1 шт.

Основные новшества а) бесплатная прошивка б) отсутствие связи по кабелю между пк <-> станком, в) китайская плата IoT за 250…800 рублей напрямую рулит драйверами шаговых двигателей 😁 Это то что нужно в 2022 году.
Сама работа по созданию детали проходит ряд этапов:
а) разработка электронной модели раскроя/ 3d модели в САПР (FreeCAD, домашние версии компас, солид воркс и т.п.);
б) создание управляющей программы в CAM (grblgru, sheetcam, solidworks cam и т.п.);
в) отправки g-кодов в микроконтроллер чпу,
г) обработку g-кодов прошивкой микроконтроллера, выдача сигналов в драйвера для фактического перемещения инструмента
Именно возможности микроконтроллера и его прошивки определяют возможности всего станка в целом, в том какие операции можно делать, сколько осей можно использовать, сколько цифровых выходов и так далее.
Есть несколько типов плат для разработчиков:
на основе модуля ESP32-WROOM-32 (30pin)

на основе модуля ESP32-WROOM-32 (38pin):

на основе модуля ESP32-S3 (44pin) с распаенными 36 GPIO

Исключаются 2 выхода для кодов М7-M8-M9 на которые можно завязать включение лазера/плазмы/сварки, исключаются 3 пина для управления шпинделем, по одному пину для концевика по каждой оси, минимум по 2 пина на каждый драйвер шагового двигателя по STEP/DIR (PUL/DIR).
Для 3-х осей (XYZ) это 2+3+3+(2*3)=14 пинов;
для 4-х (XYZA) 2+3+4+(2*4)=17 пинов;
для 5-ти осей (XYZAB) 2+3+5+(2*5) = 20 пинов;
для 6-ти осей (XYZABC) без M8 с одним пином на шпиндель 1+1+6+(2*6) = 20 пинов;
Поэтому возможностей микроконтроллеров ESP32 и ESP32-S3 должно хватать минимум для 5 осей.
На сайте производителя старые модули ESP32-WROOM-32 не рекоммендуются в новых проектах, поэтому целесообразно покупать платы на основе модулей с SoC ESP32-S3.
На форумах люди жаловались на глючность модулей на основе ESP32, логично что в более новых ESP32-S3 производитель должен был внести изменения и улучшить стабильность работы.
Практика покажет 😁
Также есть драйвера шаговых двигателей которые подключаются не по Step / Dir, а по общей цифровой шине типа spi, например микросхемы от trinamic ® типа TMC2160A-TA TMC2590-TA-T. Ценники на них зависят от партии от 5000 руб за шт до 200 руб за шт, насколько живыми они приедут из Китая не проверял и пока не хочу проверять :) То есть управление 8-ю осями вполне осязаемо.
Микроконтроллер без прошивки не работает и для нужд организации ЧПУ есть две основных опенсорс прошивки под esp32:
1) grblHAL — развитие grbl 1.1 — github.com/grblHAL — максимум 8 осей
2) fluidnc — развитие grbl_esp32 — github.com/bdring/FluidNC — максимум 6 осей
grblHAL по описанию и по объему кода заметно больше fluidnc, важным отличием grblHAL является наличие обработки кодов типа G95 (G33) с регулируемой подачей на оборот шпинделя.
Это очень хорошая штука благодаря которой обеспечивается нарезание различных резьб на токарных и фрезерных станках, обеспечивается ротационное полигональное точение и еще много интересных вещей:
В grblHAL доступно больше плагинов, но сложностей с настройкой в разы больше.
Объем исходников со всеми плагинами на диске около 250 Мб, объем одного из основного файла gcode.c — 3140 строк, 143,3 Кбайт (это реально тяжело разобрать). Я так и не смог полноценно настроить эту прошивку, у меня не заработал http интерфейс webui, хотя telnet работает, в чем причина непонятно, все по инструкции делал )))
fluidnc это тема больше для 3-х осевых фрезерных станков, поэтому возможности этой прошивки меньше чем у grblHAL, для прошивки есть заранее скомпилированные файлы, есть русскоязычный видеоматериал:
Прошивка не содержит такого большого количества модулей, как grblHAL и в ней проще ориентироваться. Объем исходников всего 7.3 Мб, размер GCode.cpp — 1697 строк — 93.7 Кбайт
Весьма простая и исправно работающая прошивка, которая иногда при простое зависает. При работе меня не подводила еще. Отличная платформа, если вы умеете программировать, при желании можно разобраться и вникнуть в чужой код.
Некоторые особенности настройки
1. Компиляция и загрузка в микроконтроллер
Изначально fluidnc можно просто скачать в уже скомпилированном виде и залить в микроконтроллер, если вы не собираетесь "программировать" и что-то менять — github.com/bdring/FluidNC/releases/
Проект динамично развивается и последний релиз был 30.10.2022 (на время написания этого текста релиз был 5 часов назад, я просто офигел), а перед этим релиз был 25.10.2022. Проект не просто живой, он бодр и свеж 😎
Для fluidnc актуальны простые инструкции по сборке на Arduino-IDE (github.com/bdring/Grbl_Es…ompiling-with-Arduino-IDE) на VSСode + PlatformIO (github.com/bdring/Grbl_Es…Compiling-with-PlatformIO)
Я лично собирал и заливал на Linux c помощью VScode + PlatformIO. Никаких проблем с этим нет. Просто. Удобно. Без затей, смс и регистрации.
grblHAL для esp32 предлагается собирать на linux следующим образом github.com/grblHAL/ESP32 :
#Create directory and clone esp-idf into it:
mkdir -p ~/esp
cd ~/esp
git clone -b release/v4.3 --recursive --shallow-submodules github.com/espressif/esp-idf.git
#Prepare build environment and toolchain:
cd ~/esp/esp-idf
./install.sh
. ~/esp/esp-idf/export.sh
#Create directory and clone the ESP32 grblHAL driver into it:
git clone --recursive github.com/grblHAL/ESP32.git
idf.py build
idf.py -p /dev/ttyUSB0 flash
Вроде тоже доступно, но idf.py компилируется больше чем сама прошивка и прошивка вываливает 5-6 варнингов )))
Естественно в процессе приходится решать ряд сопутствующих проблем по скачиванию зависимостей, по настройке доступа к usb порту для пользователя, настройке пользователей группы dialout на linux, т.е. в консоли поработать прийдется :)
2. подключение ESP32 к существующему мощному Wi-fi роутеру в режиме WiFi STA
В базовом варианте все прошивки esp32 заточены на создание своей точки доступа, хотя подключение к существующей удобнее:
— можно интегрировать все станки и устройства в единую LAN сеть, т.е. условно 192.168.1.51 токарный станок 1к62 192.168.1.52 дип400 192.168.1.101 фрезерный, 192.168.1.151 плазменный и с одного планшета вы можете управлять всеми этими станками, не надо каждый раз вбивать разные логины и пароли;
— большая дальность сигнала от роутеров, чем от маленькой платы ESP32, то есть если вы создаете точку доступа средствами esp32 то вы можете принимать сигнал только внутри помещения со станком, а если полагаетесь на роутеры с выходом в интернет, то формально станком можно управлять из любой точки.
В fluidnc настройка режима STA легка и понятна: в файле src/Config.h 38-39 строчка:
#define CONNECT_TO_SSID "имя вашей сети SSID"
#define SSID_PASSWORD "пароль к ней"
в файле src/WebUI/WifiConfig.h со строчки 44 //defaults values указываем IP4 адреса по умолчанию
и после компиляции все заработает. При этом на своем смартфоне/планшете вы должны отключить интернет по мобильной сети, чтобы запрос шел именно по wifi, это важно.
В grblHAL режим STA у меня активировался только после ручного допиливания файла main/CMakeLists.txt, где нужно включить плагины:
OPTION(WiFi "Wifi + protocols" ON)
OPTION(SoftAP "Enable soft AP mode" ON) # WiFi only
в файле my_machine.h
со строки 69:
// WiFi Access Point (AP) settings
#if WIFI_SOFTAP
#define NETWORK_AP_HOSTNAME "grblHAL_AP"
#define NETWORK_AP_IP "192.168.1.11"
#define NETWORK_AP_GATEWAY "192.168.1.1"
#define NETWORK_AP_MASK "255.255.255.0"
#define WIFI_AP_SSID ""
#define WIFI_AP_PASSWORD "" // Minimum 8 characters, or blank for open
#define WIFI_STA_SSID "ваша существующая wifi сеть SSID"
#define WIFI_STA_PASSWORD "пароль к ней " // Minimum 8 characters, or blank for open
#define WIFI_MODE WiFiMode_STA; // OPTION: WiFiMode_APSTA
Идентично продублировано (непонятно зачем) в driver.h со строки 74
// WiFi Access Point (AP) settings
#if WIFI_SOFTAP == 1
#define NETWORK_AP_HOSTNAME "GrblAP"
#define NETWORK_AP_IP "192.168.1.11"
#define NETWORK_AP_GATEWAY "192.168.1.1"
#define NETWORK_AP_MASK "255.255.255.0"
#define WIFI_AP_SSID ""
#define WIFI_AP_PASSWORD "" // Minimum 8 characters, or blank for open
#define WIFI_STA_SSID "ваша SSID"
#define WIFI_STA_PASSWORD "пароль к ней" // Minimum 8 characters, or blank for open
#define WIFI_MODE WiFiMode_STA; // OPTION: WiFiMode_APSTA
#else
#define WIFI_MODE WiFiMode_STA; // Do not change!
#endif
и более того, пришлось добавить в файл wifi.c после строчки 1022
#if WIFI_SOFTAP
wifi.ap.network.ip_mode = IpMode_Static;
strlcpy(wifi.ap.network.hostname, NETWORK_AP_HOSTNAME, sizeof(wifi.ap.network.hostname));
strlcpy(wifi.ap.ssid, WIFI_AP_SSID, sizeof(wifi.ap.ssid));
strlcpy(wifi.ap.password, WIFI_AP_PASSWORD, sizeof(wifi.ap.password));
strlcpy(wifi.sta.ssid, WIFI_STA_SSID, sizeof(wifi.sta.ssid));
strlcpy(wifi.sta.password, WIFI_STA_PASSWORD, sizeof(wifi.sta.password));
Это не фига не стандартный код, параметры STA_SSID и STA_PASSWORD я прописал вручную. Почему не работает без таких правок — непонятно, где-то в коде допущена ошибка и ее приходится закрывать такими костылями. Зачем изобретать велосипед и делать дублирующиеся 3 файла настройки (main/CMakeLists.txt, my_machine.h и driver.h ) — одна из тайн Вселенной. Именно по этой причине grblHAL гораздо сложнее при развертывании и настройке, ощущается словно все движется на фичах и костылях. В grblHAL у меня так и не заработал webUI. Думаю размер исходного кода в 250 мегабайт сказывается на качестве, код отвратительный, нечитабельны ни фига. При этом у конкурирующей прошивки все работает с размером 7.3 Мб. То есть люди собрали тяжелый и непонятный трактор с разными костылями и навесками в 250 мег, а конкуренты сделали просто легкую и быструю машину чтобы просто ехать… мне как раз пока нужно просто ездить :)
3. Удаленное управление по сети
Это прекрасно что обе прошивки управляются из контрольной панели по http и через telnet, но так или иначе нужно отправлять в прошивку полноценную управляющую программу.
Есть возможность загрузить управляющую программу в sd карту и работать "автономно" на типовых операциях, но фактически вы никогда не сможете обойтись без компьютера в виде ноутбука или планшета на linux.
В реальности от станка не выйдет отойти по причине обеспечения безопасности работы, т.е. чтобы успеть вовремя остановить станок до его разрушения при ЧП. Имеются модули, которые по датчикам вибрации и по уровню звука отслеживают нештатный режим работы станка и должны его останавливать, но условно они сработают в 9 случаев из 10. Поэтому на начальном этапе отладки управляющей программы использование программ для отправки Gкодов в станок (аналог физического пульта ЧПУ) с функцией визуализации — весьма удобное и практичное решение.
Ноутбук/планшет на котором запускается программа не связан проводами со станком и стоять лицом к обрабатываемой детали не требуется.
В нашем случае программа направляющая Gcode должна поддерживать работу по сети (через wifi), а не по кабелю usb или com.
Больше всего мне понравилась программа Universal Gcode Sender (github.com/winder/Universal-G-Code-Sender). Архив с программой занимает 146,3 Мбайт, программу не нужно компилировать, все работает из коробки, в инструкции подробно написан алгоритм настройки связи Grbl + Network: github.com/winder/Univers…Connecting-the-Controller
To configure UGS for Grbl + Network: In UGS go to
Tools -> Options.
Click UGS.
Open the Sender Options tab.
For Connection Driver choose TCPDriver and click OK.
Back in the main page, under Firmware at the top choose Grbl.
For Port, type the IP address or hostname of your smoothie board.
For Baud type 23.
Решение штатное, без колхоза.
Не самая лучшая программа по функционалу, но по совокупности характеристик (размер проги, внешний вид, легкость настройки) это неплохая среда для отправки Gкодов

Есть более серьезное решение в виде бесплатной CAM программы c функцией отправки Gкодов — grblgru
Программа с большим функционалом и чтобы ее освоить потребуется время, а также проброс портов по типу socat PTY, raw, link=/dev/ttyGRBL, echo=0, group-late=dialout, mode=660 "EXEC:'telnet 192.168.1.101', pty, raw, echo=0"
Я лично оценил 7 осей в роботе
Серьезная вещь. Проект тоже живой, последняя версия датирована 26.10.2022 (5 дней назад от публикации этой статьи)
Пока в полной мере не освоил ни grblHAL, ни grblgru
Больше пока нечего публиковать, публиковать видео одновременной работы на столе 4-х шаговых двигателей в ручном режиме — не актуально, это уже было много раз. Обе прошивки (grblHAL и fluidnc) с этим справляются.
Сейчас в работе модификация заводского 3-х осевого плазменного станка в 5-х осевой сварочный станок (оси X Y Z, поворот горелки А, поворот трубовращателя B). Причем существующая плата управления плазменным станком фактически 2-х осевая (XY), ось Z управляется отдельным контроллером и на команды gкода никак не реагирует. В имеющемся станке урезанный набор команд, например не работает пауза G4 (G04). Если будут реализованы 5 осей, то не так далеко до 6-ти осевого робота на ESP32-S3, а с чпу токарным станком из 2-х осей точно справимся )
Как появится конкретика — сразу напишу. Медленно движемся к своим ЧПУ станкам.
Предварительно освежил в памяти kicad 6.0.9, поставил автотрассировщик freerouter 1.6.2, накидал схему и плату для тестов. Делал плату по новому методу на SLA принтере с фоторезистом, в итоге плата вышла плохо. Вернулся к старому доброму модифицированному ЛУТу на бумаге термопереноса. Модифицированный ЛУТ это чистый процесс, никаких наклеиваний пленок, напечатал, перенес утюгом, брызнул очистителем карбюратора и пошел травить.
Плату собираю из ESP32-WROOM-32 и модуля DC-DC Step down на LM2596S на одностороннем стеклотекстолите 100х70 мм.



Плата только для теста. Если тесты пройдут успешно, нужно делать отдельную защищенную плату под заливку компаундом, и отдельно покупать не плату esp32 wroom, а сам модуль ESP32-S3-MINI-1U под внешнюю антенну IPEX, распаивать шлейф под USB, SD карту, LCD дисплей и разводить большую плату именно для нужд ЧПУ, где входы выходы будут защищены оптопарами, с электронными быстродействующими предохранителями.
---------- апдейт 19.11.2022 ---------------
На основе имеющегося чертежа, компонентов и оборудования выполнена отвратительная по внешнему виду и пайке сборка из плат. На модуль esp32 залита прошивка fluidnc о которой я писал выше, выставлена минимальная скорость, произведена первичная настройка конфигурации на 4 (четыре) оси XYZA.
Управление сборкой производилось через программу на android CNC Remote control.
И при этом все работает, то есть прошивка и плата обладает необходимым потенциалом. Управлять станком можно со смартфона.
Сейчас ведем тестовую эксплуатацию на готовом станке ЧПУ, проверяем насколько много ошибок и пропусков будет. Очень рад этому событию. Это невозможно осознать, если лично не пройти этот сложный путь. Когда только начинаешь любой сложный проект, то находятся десятки хейтеров, которые не дают реализовать идею, даже близкие родственники и коллеги сомневаются в успехе. Не просто остаешься один на один с проблемой, но дополнительно тебе мешают, утверждая что ты занимаешься фигней, что ничего не выйдет, "кесарю кесарево а богу богово", что каждый должен заниматься своим и не лезть в новые компетенции…
Сквозь десятки проблем, сквозь бюрократию и эмоции, через одно увольнение с работы, очень долго шел к событию первого запуска и первого движения станка с ЧПУ. Станка с платой управления, которую паял лично я, часто решая проблемы подручными средствами, потому что готовые компоненты ждать несколько месяцев. Сейчас я подтвердил право проекта на жизнь, у меня появилась возможность добраться до станка 7210 (продольно-строгальный двухстоечный станок, длина стола 3 метра, перемещение максимум 3.2 метра, вес станка 27 тонн, нагрузка на 1м длины стола 1500 кг), выглядит примерно так:

На трех метрах стола соответственно максимум 4.5 тонны, а это уже серьезная хрень и станина большинства советских станков. Рассчитываю восстановить и модифицировать все старые советские станки, этого добра у нас в виде металлолома еще на 10 лет вперед. В этой сфере есть спрос, есть потребность в дешевых ЧПУ станках. Это будет крутой жизненный опыт и надеюсь первый мой серьезный заработок в сфере производства 😎
------------ Апдейт 04.12.2022 ----------
Сегодня собрал из исходников fluidnc 3.6.5-pre4, переустановил операционную систему на компе, полностью обновил VScode и производил калибровку станка. Станок ЧПУ плазменной резки заводской, я не хотел бы указывать марку и модель, потому что с производителем в хороших отношениях, а я сейчас его обсирать буду )))
В заводском станке русифицированный блок управления Fangling F2100B (цена 04.12.2022 на а л экспресс 13 868 руб), выглядит вот так:

А также драйверы шаговых двигателей Leadshine EM705. До шаговых двигателей не добирался.
Ограничение прошивки установленного конкретного блока F2100 = всего около 6000 мм / мин.
Откалибровал оси X Y, на один мм приходится 64 шага. На прошивке grbl (fluidnc) с драйверами EM705 удалось разогнать тяжелый плазменный станок по значениям прошивки до 15 000 мм / мин (250 мм в секунду) с ускорением/замедлением не более 150 мм сек. Пропусков на этой скорости не замечено.
Физически не замерял насколько цифры соответствуют на деле.
Станок 3х метровый, в следующий раз поставлю циклы G91 G00X3000 G00X-3000 и произведу замеры.
Физически 250 мм/сек * 64 шага/мм = 16 кГц, в datasheet EM705 макс. 200 кГц входная частота импульсов. Не знаю с какой частотой по импульсам работает плата ESP32 с этой прошивкой. 16 кГц явно не предел. Надо будет брать осциллограф и замерять форму импульсов.
Даже от скорости 250 мм/сек я офигел 😈
Портал на станке весит под 100 кг. Если перепутать параметры или направление, портал разгонится до 250 мм/сек и на полном ходу ударит по ограничителю. 100 кг портал легко проломит ограничитель и отправится на встречу с другим станком 🚀
Это реальная проблема, которой я сейчас буду заниматься. Нужно ставить резиновые буферы-ограничители, ограничивать перемещения в прошивке за 15 см до края, дополнительно ставить концевики за 10 см от края, т.е. сперва софт стоп сработает, потом гарантированно концевик и далее резиновый буфер будет тормозить портал в случае аварии. Разбираюсь как это реализовать. Пока что выставляю на выключенном станке 0, потом включаю с max_travel_mm: _____ soft_limits: true. Колхоз, но пока работает.
Подобрал калибровки, оси XYZ передвигаются по мм, оси AB вращаются по градусам,
т.е. G00 X100 Y100 Z50 A120 B120 — станок по X Y переместится по 100 мм, Z на 50 мм, трубовращатель A повернется на 120 градусов, поворот горелки B также на 120 градусов.
Законнектился через Universal Gcode Sender настроил и запустил первую управляющую программу для grbl, писал gcode в блокноте ))) Проект с трубовращателем разовый и смысла в CAM программе нет.
Комментарии 1
Изготовлением деталей не занимаетесь?