Преамбула.
Я понимаю, что таких систем сейчас достаточно много, но все-же я решил попробовать реализовать свой вариант, свои идеи и наработки.
Цели проекта и пути решения
Создать ЧПУ систему, которая позволяет:1. Использовать весь потенциал привода (хоть шагового, хоть серво) на всем диапазоне подач.
- Достигается путем использования планировщиком программной модели электромагнитного привода, который использует зависимость момента от угловой скорости.
2. Адаптироваться к подключенному станку
- Достигается путем автоматического сканирования возможностей каждой оси станка и составлением зависимости момента от угловой скорости.
3.Наблюдать и изменять результат работы планировщика скорости обработки до запуска станка
- В интерфейсе присутствует график изменения скорости во времени на выделенном участке траектории движения.
- В свойствах строки G-кода присутствуют элементы изменения скорости.
4.работать как автономно так и в связке с внешним ПК
- Используется microSD карта для хранения подготовленных программ и LCD экран для их выбора.
5.быть не дорогой в производстве (до 100$ за комплект)
- Используется недорогой и мощный ARM контроллер STM32
6.подключатся к ПК по интерфесам USB\LAN\WiFi\BlueTooth\CAN\RS-232\RS-485...
- Используется высокоскоростной UART STM32 с нужным интерфейсным модулем + интерфейсный плагин для основной программы.
7.модульное наращивание осей и входов-выходов (как развитие системы)
- мультипроцессорная обработка. т.е. есть ведущий процессор на материнской плате а каждая ось подключается в виде отдельного модуля и несет на себе процессор для ее обработки и доп. каналы ввода-вывода, при этом кол-во осей ограничиваются пропускной скорость межпроцессорной шины.
8.мониторинг телеметрии всех компонентов системы (как развитие системы)
- лог температуры каждого элемента системы (драйвер\двигатель\БП...)
- лог напряжения и тока БП
- лог температуры, напряжения и тока шпинделя (воможно акустический датчик для контроля подшипников)
Предыстория.
Достаточно давно (года 2 назад) сделал небольшой фанерный станочек, в качестве системы управления использовал Planet USB CNC МК1, перед этим очпушил токарный станок (небольшой китайский) для него использовал мач. Был накоплен определенный опыт по всему этому делу, в результате мне не нравился ни мач ни планет. Поиски вывели на nc-studio, но для него нужен был отдельный комп. В общем хотелось что-то в виде планета, только нормально работающего. А тут еще и кризисы всякие появились, в результате у меня появилось время для написания собственного варианта.История.
Начал писать эту систему достаточно давно где-то осенью 2010 когда основательно приболел и сидел дома две недели. Это были наброски N-осевого линейного интерполятора, визуализатора G-кода и попытки лукахеада.Потом вышел работу и ни времени ни желания продолжать дальше небыло. Благодаря кризису у меня появилась возможность реализовать что-то свое, было решено возобновить работу над своей системой, т.к. недорогих альтернатив не наблюдалось, то что было - не устраивало по различным причинам (главня - неиспользование полно потенциала приводов) да и перспектива идти работать на дядю мне не нравилась, есть правда еще разные задумки, но реализация своей системы является ключевым элементом и без этого дальше двинутся не представлялось возможным.
Более-менее плотно я ее писал начиная с прошлого года и по нынешнее время. Сейчас написать о ней решил, т.к. начало уже что-то вырисовыватся, и хотелось пообсуждать, то что получается.
Описание системы.
Система состоит из двух элементов: контроллера и программы запущеной на ПК под XP(7..)Соединение программы с контроллером сейчас сделал через USB-COM перходник.Как оказалось они могут изобразить до 5 Мбит, это слишком избыточно, как показала практика 115200 - много...
Протокол обмена (это первое что меня сподвигло на написание этой системы) подобран таким образом, что даже в своей наипростейшей реализации обеспечивает значительное сжатие данных для контроллера (для работы двух каналов расходуется 1 бит на степ трех 2-бита и т.д.).
Анализ и интерполяцию G-кода производит ПК, что дает возможность реализовать любые сколь-угодно сложные интерполяционые алгоритмы (это второе) без ущерба скорости отработки кода.
Алгоритм расстановки скоростей (это третье) достаточно интересно получилось реализовать.
Хотелось выделить, что это ключевой элемент системы и от него зависела вся система, поэтому эту часть я переписывал раз 7 почти с нуля, т.к. прошлые варианты не подходили своей идеологией и результатом работы (перебрал несколько алгоритмов). На этот алгоритм я потратил основную часть времени т.к. он определял итоговое время обработки кода.
В отличии от планета мой алгоритм не базируется на анализе углов между векторами, а отправной точкой служит зависимость момента от скорости шагового двигателя. В основе всего алгоритма лежит программная модель электро-магнитного привода, которая описывается с помощью нескольких вполне понятных параметров: максимальной скорости, минимальной скорости старта (реверса), максимального ускорения. Так-же используется значение микрошага для шагового двигателя.
Этот алгоритм сейчас позволяет достаточно правильно расставить скорости выполнения и снижает скорость только на тех участках, где движение с максимальной скоростью вызывает перегрузку привода, но снижает эту скорость не до стартовой как планет, а ровно на столько на сколько нужно, что-бы вписаться в возможности двигателя, что дает максимально возможную скорость обработки. Конечно-же нет предела совершенству и тут есть еще куда двигаться.
Скорость обработки так-же осталась на высоте ( 200 000 строк от слайсера обрабатывает в течении ~15 сек)
Программа для ПК, еще на стадии дописывания, сейчас делает визуализацию рабочего поля станка и на нем кода. Код может отбражатся в трех режимах ЧБ,Градации серого,Цветные градации. Визуализатор пока только 2D. Еще есть табличка со строками кода (как в планете) только расписывает времена исполнения и визуализирует скорость обработки выделенной строки.
Интерфейс как таковой не написан, большая часть действий через меню, я все силы пока сосредоточил на алгоритме обработки и алгоритме контроллера, а интерфейс на "потом", думаю что-то в стиле планета (уже на него похоже).
Для обозначения осей в программе ввел понятие канал. Каналы на контроллере пронумерованы от 0 до 3, а имя оси назначается через настройку. Получается можно всем каналам назначить одно имя и они тогда будут работать параллельно или можно использовать специфические названия оси для каждого канала.
Настройки программы обладают встроенной справкой, которая в виде html описывает выбранный параметр (что-бы не лезть в описание), правда справка еще далеко не для всех параметров написана, но это "пока".
По ресурсам - очень не требовательная, не нагружает видеосистему ПК , достаточно старенького ноута типа P2-600 128Мб.
Контроллер
Реализован на покупном HY-MINI STM32 с STM32F103 на борту, там-же и USB-COM. Не делал виртуальный USB-COM на самом STM потому-что это бы забрало больше ресурсов и лишило возможности "разогнать" контроллер (увы, частота привязана к модулю USB STMа), а так он уже был. Хотя может потом и на саму STMку повешу. Ручного пульта пока нет ни в каком виде, планирую прикрутить пульт от телевизора\DVD.. или можно как в планете.
Есть место под флешку микросд. В дальнейшем прикручу туда дисплей от сотового типа 3110 или что-то вроде него тока монохромный, для выбора файла с флешки для работы в автономном режиме.
Сегодня наконец увидел на выходе контроллера step\dirы и смог объективно оценить размер файла для автономного исполнения (так сказать не в теории а на практике) получилось около 1.4 Мбайт-а в час. Это если частота 4КГц максимум (у меня выходит что 266 шагов на 1мм, и макс скорость ~1М\мин). Как будет увеличиваться файл с ростом частоты пока сложно сказать, надо еще протестировать.
Максимальная частота генерируемая контроллером около 100КГц, в самом худшем режиме 25КГц(максимальное кол-во сервистной инфы при старте исполнения, но эта обработка один раз в начале и дальше только короткие посылки...).
Сводка параметров
- Количество каналов(осей) контроллера 4 (мне больше не надо, в перспективе до 256 и если надо-больше ограничение-быстродествие контроллера, соответсвенно зависит от его архитектуры)- Количество каналов(осей) программы 8 (так-же может быть расширено)
- Максимально возможная частота 120КГц (худший режим 25КГц)
- Соединение с ПК USB-COM или COM порт. Можно что то типа RS485...
- Система ПК XP-32, WIN7-32
Планируется реализовать два вида скриптов, первый вид исполняется на ПК второй непосредственно на контроллере.
Вот такая системка у меня вырисовывается, обсуждение, коментарии и критика приветствуется.
P.S. Спасибо за внимание, особенно тем кто дочитал до конца, извиняюсь за многабукав.
UPD. 2014.08.12
Заснял видео текущей стадии разработки:
https://www.youtube.com/watch?v=rAkSS7wfoZ8
https://www.youtube.com/watch?v=GJ-joT--glc

