2. Разъём DIP10 управления 2-м ШД.
3. Разъём DIP10 управления 3-м ШД.
4. Разъём DIP10 для программирования МК по SPI.
5. Разъём DIP10 для приёма команд от компьютера.
6. Разъём DIP10 для приёма сигналов от концевиков.
7. Клеммник для питания 5-ю вольтами.
Выше указанной информации достаточно для составления принципиальной схемы и разводки печатной платы для модуля управления.
После разводки ПП выводы разъёмов приняли следующее расположение:
Разъём для связи с компьютером:
1. MzLi – шаг ШД на оси Z.
2. MyLi – шаг ШД на оси Y.
3. MyLn – направление вращения ШД на оси Y.
4. MxLi – шаг ШД на оси X.
5. MxLn – направление вращения ШД на оси X.
6. GND – логическая земля.
7. GND – логическая земля.
8. Lt – резервный вывод.
9. Lk – резервный вывод.
10. MzLn – направление вращения ШД на оси Z.
Разъём для принятия сигналов с концевых переключателей:
1. MzK1 – 1-й концевик на оси Z.
2. MyK2 – 2-й концевик на оси Y.
3. MyK1 – 1-й концевик на оси Y.
4. MxK2 – 2-й концевик на оси X.
5. MxK1 – 1-й концевик на оси X.
6. GND – логическая земля.
7. GND – логическая земля.
8. GND – логическая земля.
9. GND – логическая земля.
10. GND – логическая земля.
3.3 Управляющая программа микроконтроллера.
Постановка задачи: требуется написать программу для микроконтроллера ATMega128, выполняющую следующие функции:
1. Контроль функционирования модуля управления.
2. Приём сигналов с ПК через его LPT-порт.
3. Управление драйверами, по построенной ранее математической модели.
4. Обработка сигналов с концевых переключателей.
5. Возможность настройки уровней ШИМ для соответствующих уровней токов.
Общую блок схему можно посмотреть на одноимённом чертеже. Программа писалась в компиляторе AVR Studio 4 на языке Assembler. (см рис 3.3.1) Используя этот язык можно составить более оптимизированный код и более быстродействующий, по сравнению с быстродействием того же алгоритма, написанного на С.
Рис 3.3.1
Кроме того AVR Studio 4 – отличный симулятор работы микроконтроллера, в нём можно сразу же после написания кода, проверить правильность его работы. Исходный код программы находиться в одноимённом приложении. Он представляет собой 880 строчек кода. После преобразования в 16-тиричный, код будет иметь размер 5336 байт памяти (или 5,21 КБ). Далее его загружаем с помощью программы PonyProg2000 (рис 3.3.2) во Флеш-память микроконтроллера. (Флеш-память (англ. flash memory) — разновидность твердотельной полупроводниковой энергонезависимой перезаписываемой памяти (ПППЗУ).)
Рис 3.3.2
Микроконтроллер ATMega128 имеет 128 КБ флеш-памяти для программ (видно из названия), поэтому написанная программа займёт всего 4,1% от всего объёма памяти.
3.3.1 Контроль функционирования модуля управления.
После сборки модуля управления требуется провести контроль функционирования. Для этого решено было предусмотреть автоматический контроль по программе, записанной в МК. ATMega128 имеет 64 вывода, из-за чего существует достаточно большая вероятность того что хотя бы один вывод соприкасается с землёй, или с другим выводом, что может привести к перегоранию полевых транзисторов на соответствующем пине. Поэтому при запуске МК, срабатывает прерывание RESET, по которому запускается подпрограмма контроля функционирования. Эта подпрограмма не изображена на чертеже, поскольку слишком проста. Работа программы:
1. Все выводы портов делаются входами, c подтяжкой pull-up (подтяжка 40 кОм на +5 вольт напряжения питания).
PORT@0.@1 = 1;
DDR@0.@1 = 0;
2. Если вывод не соединён с землёй, значит его PIN@0.@1 должен равняться единице. Поэтому дальше запускаем проверку всех битов регистров PIN. Если хотя бы один равен нулю, перезагружаем микроконтроллер.
3. Далее делаем вывод выходом, устанавливаем на его выходе напряжение 0 вольт, логический ноль:
PORT@0.@1 = 0;
DDR@0.@1 = 1;
Два соседних выхода также как в пункте 2 проверяем на контакт с землёй. В случае контакта, также перезагружаем микроконтроллер.
4. Повторяем пункт 3 для всех выводов.
После выше описанной программной проверки должны загореться 2 светодиода, сигнализирующие о том, что модуль управления функционально исправлен. Нет необходимости проверять наличие ШИМ на соответствующих выводах, поскольку их неисправность таймеров мало вероятна. И если они всё таки неисправны, то это будет видно при настройки уровней ШИМ.
3.3.2 Основная программа микроконтроллера.
При запуске микроконтроллера сначала выполняется подпрограмма контроля функционирования, и только потом настраиваются выводы и таймеры (Рис 3.3.3):
Рис 3.3.3
После завершения всех настроек запускается бесконечный цикл, который работает непрерывно, во время приёма сигналов от ПК, и отправки управляющих сигналов драйверам (Рис 3.3.4):
Рис 3.3.4
Прерывания в этой части программы не используются, поскольку в МК предусмотрены только 2 вектора прерываний по низкому уровню на выводах. (а нам требуется как минимум 3). Ещё одна причина, почему не используются прерывания: в случае их использования время простоя будет не столь большим, чтобы выполнить какие-либо другие операции, к тому же дополнительные операции отсутствуют, в конце концов бОльшую часть времени (во время выполнения подпрограммы ветвления) флаг прерывания будет сброшен.
Как было ранее решено, для инкремента микро-шага ШД, ПК посылает импульс (длительностью около 0,1 мс) на ножку MxLi. Для примера взят X-двигатель, общее обозначение: Mx. Также ПК может задать направление вращение подав логический ноль, либо логическую единицу на ножку MxLn. Для принятия импульса используется флаг Rf, чтобы определить его передний фронт.
Итак, если посмотреть на рис 3.3.4, то можно увидеть 3 одинаковых алгоритма, следующие друг за другом. Каждый из этих алгоритмов опрашивают соответствующие своему двигателю выводы, на предмет наличия переднего фронта на ножке Li. Если это событие происходит: запускается подпрограмма ветвления для текущего двигателя.
Программа ветвления: это алгоритм, по которому выбирается один из 16-ти комбинаций управляющих сигналов для требуемого такта и текущего двигателя. Он начинается с инкремента или декримента (в зависимости от соответствующего входного сигнала от ПК) регистра, который хранит номер текущего такта. Далее начинается выбор алгоритма тактN. В Assembler нет оператора case, да и в С этот оператор не оптимизирован, для нашей задачи МК потребовалось бы около 100 тактов для выбора соответствующего алгоритма. Поэтому я написал собственный алгоритм выбора по дереву путей, посредством которого требуется всего 16 тактов для выполнения той же задачи.
В конце запускается один из 16-ти алгоритмов установки управляющих сигналов (Подпрограммы такт0..такт15). В которых устанавливаются требуемые логические сигналы и уровни ШИМ ранее заданные в процессе настройки. Кроме того в начале каждого алгоритма тактN посылается форсирующий импульс: уровень ШИМ кратковременно устанавливается на 100%. Длительность этих импульсов для каждого такта затабулированны, смотрите выводы из математической модели.
3.3.3 Настройка уровней ШИМ для соответствующих уровней токов.
Эта часть программы предназначена для настройки тех величин, которые не могут быть выведены из теоретической модели, их значения можно найти только практическим путём. К ним относятся уровни ШИМ для табличных значений токов: Inom*0.38=1,06А, Inom*0.707=1,98А, Inom*0.92=2,59 А, Inom*1=2,8 А.
Для настройки этих значений был создан специальный стенд, изображённый на одноимённом чертеже. В технологической части описан подробный пошаговый план того, как следует производить настройку.
Настройка осуществляется для каждого двигателя, поскольку в общем случае они могут быть различными. В целом нужно настроить 4 тока для 3-х двигателей, итого 14 значений. И для этого на модуле управления предусмотрена кнопка и 2 светодиода. После нажатия на кнопку, выполнение основной программы останавливается, запускается следующий обработчик прерываний (Рис 3.3.5):
Рис 3.3.5
Из рисунка видно, в корневом алгоритме настраиваются по очереди токи всех 3-х двигателей. 1-й светодиод сигнализирует о номере текущего двигателя, если он потух, значит контроллер ждёт подачи команд. 2-й светодиод сигнализирует о номере текущего тока. Здесь часто используется мигание соответствующего светодиода, для информировании пользователя о текущем токе или двигателе. Также используется различная длительность нажатия кнопки, таким образом расширяя её функциональную вариативность.
3.4 Управляющая программа под DOS.
Прежде чем приступить к написанию программы, следует твёрдо определиться с тем, что она должна делать. Начальными данными в нашем случае будет чертёж дорожек печатной платы, выполненной в любой из система автоматизированного проектирования электроники (например P-CAD). Далее требуется по этому чертежу изготовить печатную плату на станке.
Из технологии производства: печатная плата изготавливается путём нанесения рисунка участков платы свободных от меди путем снятия предварительно нанесенного лака в соответствующих местах.
Следовательно требуется по чертежу сгенерировать траекторию движения иглы (для снятия лака) по контуру проводника. Затем управляя ШД, обеспечить движение иглы по этой траектории.
В программе Sprint-Layout 5.0 есть функция, которая заметно упростит задачу: “изоляция дорожек”. В этой программе после разводки платы, можно создать список точек на плоскости, которые представляют собой контур проводника печатной платы на заданном расстоянии от него. Причём этот список точек представлен в виде PLT-файла.
Теперь можно более чётко представить функции управляющей программы под DOS:
1. Чтение и расшифровка PLT-файла, созданного программой Sprint-Layout 5.0.
2. Управляя ШД через модуль управления, обеспечить движение иглы по траектории, заданной в plt-файле.
Кроме этих требований, здесь как следствие, нужно предусмотреть удобный ввод и сохранение параметров станка.
Рис 3.4.1
Планируется построить программу в виде диалога в консольном окне. В качестве компилятора будем использовать Microsoft Visual C++ 6.0.( Рис 3.4.1)
3.4.1 Подготовка файлов в программе Sprint-Layout 5.0:
Рис 3.4.2
Вначале создаётся рисунок печатной платы. (Рис 3.4.2) Слой с красным цветом: сторона 1, та сторона на которой преимущественно располагаются электронные компоненты “в отверстие”.
Рис 3.4.3
Далее открываем меню “фрезеровка” -> “изоляция дорожек”. Открывается меню на рис 3.4.3. Выбираем в нём слой M1, с красным цветом. Далее вводим “ширину” или отступ от проводника: 0.1мм. Далее ничего не менять. В панели “сверловка” установить “все диаметры в отдельном файле”, “для каждого слоя”. Нажать ок.
Рис 3.4.4
Сохранить в файле с именем 1-1.plt. Что означает 1-й слой и 1-й контур. Контур – это тот же самый контур, только расположенные несколько дальше от проводника. Количество контуров определяется экспериментально. Появиться белая обводка красного проводника, как на Рис 3.4.4. Далее аналогично создаём plt-файл для 2-й стороны (зелёный цвет). После чего получаем входные данные для управляющей программы под DOS. На Рис 3.4.5, слева показаны слева помещённые в папку Debug файлы 1-1.plt, 1-2.plt, 2-1.plt, 2-2.plt.
Рис 3.4.5
3.4.2 Чтение PLT-файла.
На рис 3.4.5, кроме всего прочего показано начало PLT-файла (окно справа). Язык представляет собой сочетание кода из двух букв и следующих за ним дополнительных параметров. Рассмотрим значения основных кодов:
- IN – инициализация процесса черчения.
- PU – поднять инструмент.
- PD – опустить инструмент.
- PA<координата X>,<координата Y> - переместиться в точку с координатами X, Y.
Координатная система была основана на наименьших единицах, поддерживаемых их плоттерами — 25 µm (то есть 40 единиц на миллиметр, 1016 на дюйм).
В начале управляющей программы открываются PLT-файлы как текстовые файлы, и читаются строка за строкой, с последующим преобразованием в простой массив чисел X[],Y[],Z[]. Это результат чтения plt-файла, целые числа, Z[] - бинарные числа (определяют, опущен или нет в данной точке инструмент).
Далее полученные числа масштабируются и приводятся к другой системе измерения: от 1/40 дюйма к величине микро-шага.