Все шлейфы ШД и двигателя шпинделя были проведены к соединительному разъему, который будет подключен к управляющей плате управления станком. Плата управления была собрана на базе микроконтроллера ATMega 8 на монтажной плате с разъемом для программирования и необходимыми электронными элементами и микросхемами (см. Рис 2.1.3.).
Для тестирования аппаратной части станка была написана программа управления ШД для микроконтроллера. Алгоритм программы заключается в приведении в действие всех элементов станка без участия ПК, то есть, по заложенным в микроконтроллер командам.
Рис 2.1.3. – общий вид аппаратного комплекса с монтажной платой.
Теперь есть аппаратно-программная часть, которая управляет станком ЧПУ по трем координатам без использования ПК по предварительно «прошитым» в него алгоритмам и координатам.
§2.2. Анализ данных и структура файла сверления с расширением *.drl.
На первом шаге была разработана аппаратно-программная часть для сверления отверстий на плате для монтажа микросхем. Для этого был разработан алгоритм, который понимает определенный технический формат данных для сверления отверстий. Для осуществления поставленной задачи, был определен формат данных, с которым будет работать программный комплекс. Проанализировав информацию в Интернете о станках с ЧПУ, были сделаны следующие выводы: в основном все станки работают при помощи купленных драйверов управления ЧПУ и приложенных к ним программ “VriCNC”, которые разработаны за границей и стоят немалых денег. Но также из полученных демо-версий программ и “семплов” для ЧПУ было установлено, что в большинстве случаев для управления станками используется общепринятый формат “Gerber” работающий при помощи G- кодов. Используя ресурсы[24] было получено:
G-code – это имя языка программирования для контроля над NC и CNC машинами. Был создан компанией Electronic Industries Alliance в начале 1960-х. Финальная доработка была одобрена в феврале 1980-о года как RS274D стандарт. В ходе разработки из-за огромной нехватки контроля над всеми многочисленными функциями и инструментами станков, несколько производителей CNC машин взяли G-code как стандарт. Дополнения и нововведения в G-code делалось самими фирмами производителями, поэтому каждый оператор обязан быть осведомлен в различиях между машинами разных производителей.
Содержание файла Gerber
Ниже приведен простой файл Gerber, иллюстрирующий структуру и содержание формата:
G90G70G54D10G01X0Y0D02X450Y330D01X455Y300D03G54D11Y250D03Y200D03Y150D03X0Y0D02M02 | 1 2 3 4 5 6 7 8 9 10 11 12 |
Номера строк справа не являются частью файла, они были необходимы для изучения формата Gerber. Каждая строка представляет собой конкретную машинную команду, звездочка (*) – символ конца команды. Существуют разные типы команд и инструкций, начинаемые с G, D, M и данные координат X, Y.
Затем был осуществлен поиск приложений, работающий с подобным форматом. Внимание было остановлено на распространенной программе Sprint-Layout, предназначенной для разработчиков печатных плат. Данная программа имеет возможность экспортировать результаты в необходимом нам формате Gerber. Теперь мы можем рисовать необходимые платы экспортировать результат для сверления отверстий в формате *.drlс G-кодами.
Далее был разработан метод анализа структуры данных в полученном файле и выбраны из него необходимые данные для сверления отверстий станком с ЧПУ. Первоначально было решено использовать для работы со станком несколько команд, которые будут указывать необходимые параметры, например, это могут быть однобайтовые команды, которые будут указывать, что:
- будет операция сверления;
- будут поступать данные о рабочих переменных;
- будет поступать блок координат;
- конец операции.
Также организован диалог ПК с МК. Который обеспечивает упорядоченную двустороннюю связь друг между другом с возможностью отмены текущей операции.
Позиционирование станком осуществляться исходя из получаемых координат в формате “X123456Y123456Z123…”. То есть, первые три числа составляют целую часть числа, вторые три числа – дробную часть числа, а у координаты Z- только целую часть. Но в будущем, учитывая коэффициент расстояния на один шаг шагового двигателя на плоскости, будет отправляться только количество шагов для каждой координаты и необходимые команды.
Итак, о структуре данных в файле *.drl.
В программе Sprint-Layout был создан проект платы с тремя отверстиями. Внутренний диаметр отверстий установлен 1 мм. Размер платы не принципиален. Затем из меню Файл->Экспорт файла->"Формат Excellon" вызван мастер экспорта сверловки. Установлено Значение «сверлить со стороны печати» или со стороны монтажа (инвертируется горизонтально). Выбрана метрическая система измерения. В поле «Число после запятой» выбрано значение 3.3 и убрана галочка с удаления нулей, как показано на рис. 2.2.1.
Рис. 2.2.1. – Экспорт файлов на сверление.
Это для того чтобы заранее подготовить файл для более удобного конвертирования в приложении для отправки на ЧПУ. Нажали ОК, указано имя файла и сохранено. Например, 123.drl. Затем, открывая полученный файл любым текстовым редактором имеем следующее:
M48T1C001000%G05M71T1X008000Y009000X019000Y008000X030000Y004000M30 |
В заголовке файла информация о версии языка, далее информация о том, что работаем с метрической системой и диаметр отверстия, в нашем случае это 001000 что означает диаметр сверла 1 мм. Затем команда G05 говорит о том, что будет осуществляться операция сверления. Затем начинается блок координат от команды T1, которая указывает на то, что сверлим с отверстия с диаметром 1 мм. И далее три строки данных с информацией о координатах. M30 означает конец программы. Из файла *.drlнеобходима только информация о координатах, а остальные параметры указываются непосредственно в приложении.
Для реализации данной задачи необходимо следующее:
· Чтение данных из файла в массив построчно;
· Анализ каждой считываемой строчки на содержание текста;
· Если встречается код G05 (команда на сверление), то продолжаем анализ и считываем данные координат в формате 3.3 и заносим их в массив чисел для последующего формирования рисунка просмотра сверления.
· Если встречается код M30 (конец программы), то завершаем анализ файла.
Вот пример реализации данной задачи на языке C++ в среде C++ Builder:
if (OpenDialog1->Execute()) {slist->LoadFromFile(OpenDialog1->FileName); //загружает строки из файла (разделение по CRLF)filedrl->Text=slist->Text; // открываем файл для просмотра } //это по нажатию кнопки «Загрузить» //Затем анализ файлаfor(inti=0; i < s; i++ ) // s – количество строк { str = slist->Strings[i]; // считываем из массива строкуif (str == "G05") // и проверяем на наличие кода G05 { for (i=i+3;i<s-1; i++) // естькод, читаемкоординаты { str=slist->Strings[i];//… и далее код программы |
§2.3. Алгоритм чтения данных в микроконтроллере поступающих с ПК через UART
Для управления станком с ЧПУ, используя микроконтроллер, была сформирована совокупность команд и данных, которые будут «пониматься» контроллером, обеспечен диалог ПК--МК. Это необходимо для того, чтобы обойти причину нехватки памяти на МК. Ведь передаваемый объем может быть намного больше объема ОЗУ на МК. Для этого было решено формировать буфер приема на МК в 255 байт (255 символов – это с запасом в 2 – 3 раза) и после передачи строки данных дожидаться подтверждения выполнения предыдущей команды и сигнал на разрешение передачи следующей строки. Проанализировав все необходимые условия, было решено разработать алгоритм приема данных на контроллере, так как на нем более ограничены возможности реализации различных методов.
Программирование контроллера изначально выполнялось в среде CodeVisioAVRна языке C. Во избежание частого перепрограммирования МК, работа программы тестировалась в комплексе Proteus. Однако во время работы часто наблюдались различия выходных результатов в протеусе и на самом деле, на «железе».
Для решения поставленной задачи, были анализированы функции и процедуры, имеющиеся в CodeVisioAVRдля работы с вводом/выводом через UART. Анализ велся исходя из поставленной задачи. Необходимо принять строку с ПК, отделить от другой строки, прочитать ее, анализировать на содержимое, если это команда - то перейти далее к анализу данных о координатах. Здесь главное правильно выбрать формат принимаемых данных, чтобы он был наиболее удобен для использования имеющихся функций. Первое время не удавалось «правильно» читать строки данных поступающих на МК, так как необходимо точно определить последний символ строки. А также прием и передача в МК организована на прерывании. И данные хранятся в том самом буфере, которых два – один на прием, другой на передачу. В Интернете [18], [19] и в научных источниках [9], [11], [17] для решения поставленной задачи были найдены функции, которые сканируют получаемые данные, автоматически выделяя строки. Например, такая функция, как scanf(), которая считывает из входного потока данные в формате определенном в первом параметре и сохраняет их в переменных, адреса которых переданы ей в качестве следующих параметров. Например:
Scanf(“%d,%d/n”,&x&y);- мы считываем два числа в десятичной форме, которые разделены запятой в переменные X, Y соответственно. Но, как говорилось ранее, есть проблема, касающаяся нахождения конца строк, и эта функция не совсем правильно работает с данными, которые поступают от ПК. Было решено создать «свою» процедуру, формирующую строки из поступающих данных. Приведем ниже реализацию алгоритма формирования строки: