Статья:

РАЗРАБОТКА АЛГОРИТМОВ И ПРОГРАММ ДЛЯ МИКРОКОНТРОЛЛЕРОВ В СИСТЕМЕ АВТОМАТИЧЕСКОЙ КОРРЕКЦИИ ПОЛОЖЕНИЯ ЛАЗЕРНОЙ ОСИ

Конференция: XXVIII Студенческая международная заочная научно-практическая конференция «Молодежный научный форум: технические и математические науки»

Секция: 13. Радиотехника, Электроника

Выходные данные
Борбенчук А.С., Коцур Д.И., Айдарханов Н. [и др.] РАЗРАБОТКА АЛГОРИТМОВ И ПРОГРАММ ДЛЯ МИКРОКОНТРОЛЛЕРОВ В СИСТЕМЕ АВТОМАТИЧЕСКОЙ КОРРЕКЦИИ ПОЛОЖЕНИЯ ЛАЗЕРНОЙ ОСИ // Молодежный научный форум: Технические и математические науки: электр. сб. ст. по мат. XXVIII междунар. студ. науч.-практ. конф. № 9 (28). URL: https://nauchforum.ru/archive/MNF_tech/9(28).pdf (дата обращения: 24.04.2024)
Лауреаты определены. Конференция завершена
Эта статья набрала 0 голосов
Мне нравится
Дипломы
лауреатов
Сертификаты
участников
Дипломы
лауреатов
Сертификаты
участников
на печатьскачать .pdfподелиться

РАЗРАБОТКА АЛГОРИТМОВ И ПРОГРАММ ДЛЯ МИКРОКОНТРОЛЛЕРОВ В СИСТЕМЕ АВТОМАТИЧЕСКОЙ КОРРЕКЦИИ ПОЛОЖЕНИЯ ЛАЗЕРНОЙ ОСИ

Борбенчук Алексей Сергеевич
студент Университета ИТМО, РФ, г. Санкт-Петербург
Коцур Дарья Игоревна
студент Университета ИТМО, РФ, г. Санкт-Петербург
Айдарханов Насипберли
студент Университета ИТМО, РФ, г. Санкт-Петербург
Бараков Николай Николаевич, Шукуров Шарафджон
студент Университета ИТМО, РФ, г. Санкт-Петербург

 

В комплексах лазерной разметки колонных аппаратов большое внимание уделяется точности задания вертикальной и горизонтальной плоскостей. Данные комплексы размещаются в цехах предприятий, где под действием вибраций, вызванных работой технологического оборудования, происходит пространственное смещение лазерной базовой оси.

Для уменьшения времени разметки и повышения ее точности была разработана система автоматической коррекции положения лазерной базовой оси. В состав системы входят модули беспроводной передачи данных на частоте 433 МГц, шаговые приводы лазерного излучателя и оптико-электронный датчик определения энергетического центра лазерного пучка.

Координация устройств системы осуществляется микроконтроллерами (МК) MSP430G2 (рис. 1).

 

http://microtechnics.ru/wp-content/uploads/2013/09/Launchpad_hw_serial.jpg

Рисунок 1 Микроконтроллер MSP430G2

 

Первый микроконтроллер осуществляет прием данных с оптико-электронной мишени и на основании этих данных создает слово коррекции, которое отправляет на второй микроконтроллер.

Второй микроконтроллер осуществляет прием слова коррекции и передает сигнал на электродвигатели, осуществляющие позиционирование положение лазерного источника.

На первом микроконтроллере реализуется программа, алгоритм работы которой представлен на рис. 2.

Первоначально осуществляется настройка программы, которая включает в себя следующие шаги:

1)  Макроподстановки.

2)  Задание начальных значений переменных.

3)  Настройка регистров специальных функций.

 

Рисунок 2 Алгоритм программы на первом микроконтроллере

 

Затем выясняется, нужен ли нам новый цикл передачи слова коррекции, при отрицательном ответе программа переходит снова к этому вопросу, пока не получит утвердительный ответ, при утвердительном ответе проверяется передано ли слово коррекции, если оно передано, то происходит временная задержка и возврат к вопросу о цикле передачи, если слово коррекции не передано, то происходит его передача.

На основе данного алгоритма написана программа в Code Composer Studio 6 на языке C++.

Среди настраиваемых регистров специальных функций следует выделить настройку портов:

void Ports_set(void) {

P1DIR = BIT0 + BIT1 + BIT2 + BIT6; //P1.3 – P1.5 и P1.7 – входы, оствых.

P1OUT = 0x00; // светодиоды не горят.

P2DIR = ~BIT1; // P2.1 вход, ост. – выходы.

P2OUT = BIT0; // лог. 1 на P2.0 (линия TXD свободна).

P2REN = BIT1;} //P2.1 – подтяжка к нулю.

PxDIR отвечает за направление порта х. Когда конкретный бит данного регистра установлен в 0, соответствующий пин работает на вход и наоборот. PxREN включает внутренний резистор подтяжки. PxIN и PxOUT содержат в себе состояние пинов порта.

Также стоит выделить настройку сторожевого таймера:

void WDT_set(void) {

WDTCTL = WDT_ADLY_250; // 0,25 с WDT интервал

IE1 |= WDTIE; // разрешение прерывания интервального (сторожевого) таймера

}

В данном регистре мы устанавливаем частоту отправки сообщения, в данном случае она равна 4 сообщениям в секунду. При срабатывании прерывания по данному регистру задается слово коррекции следующим образом:

#pragma vector=WDT_VECTOR

__interrupt void WDT(void) {

j++; //начальное значение для цикла передачи сообщения

if (j == 3) j = 1;

if (P1IN & BIT3){

thorizontal = left;

P1OUT &= ~BIT0; //гасим красный светодиод

... // перебор возможных комбинаций и их соответствие коррекции

}

Как видно, с помощью оператора if мы проверяем входной сигнал на порте 1 и относительно состояния данных входов порта задается слово коррекции. Также в данном обработчике задается условия начала передачи сообщения на второй микроконтроллер (блок о передаче слова коррекции):

if ((P2IN & BIT1) && if_nottransmitting) {

  if_nottransmitting = 0; //начало передачи

i = 10; //начальное значение для цикла передачи байта

TACTL |= 0x10; // прямой счет до TACCR0

}

if_nottransmitting = 0; // состояние флага о передаче

i = 10; //начальное значение для цикла передачи байта

TACTL |= 0x10; // прямой счет до TACCR0

}

Передача осуществляется в обработчике прерывания по таймеру А, передача осуществляется по интерфейсу UART, реализованному программно.

Прием слова коррекции осуществляется вторым микроконтроллером (MSP430G2452), на котором реализована программа, алгоритм которой представлен на рис. 3.

Здесь также происходит настройка программы, состоящая из тех же пунктов, что и в предыдущей программе. Происходит прием слова коррекции, соответствующий одному из состояний (требуется перемещение в одну из четырех сторон или не требуется).

 

Рисунок 3 Алгоритм программы на втором микроконтроллере

 

Затем проверяется, требуется ли нам коррекция по горизонтали, если требуется, то происходит коммутация фаз первого шагового двигателя, отвечающего за перемещение по горизонтали, и выясняется в какую сторону необходимо движение. Если это движение вправо, то происходит переход к следующему шагу последовательности управления первого шагового двигателя, если влево, то к предыдущему.

Далее программа возвращается к выяснению, по какой из осей необходима коррекция. Для коррекции по вертикали необходимо отказаться от коррекции по горизонтали и проделать аналогичные шаги, что и в коррекции по горизонтали.

Информация о приеме появляется по обработчику прерывания порта 2, вывод порта 2.3 выполняет роль приемного порта по UART.

В обработчике прерывания таймера А выполняется прием слова коррекции. В данном обработчике также присваиваются значения флагам коррекции с помощью оператора switch:

switch (rdata) {

case 0x0E:

if_horizontal = 1;

if_right = 1;

break;

// перебор различных вариантов слов приема и соответствующих значений флагов движения

}

Относительно выставленных флагов движения осуществляется коммутация фаз шагового двигателя в соответствии с текущим шагом последовательности и переход к следующему или предыдущего шагу последовательности.

if (if_horizontal) { //если требуется коррекция по горизонтали

switch (horizontal_step_num) { //коммутация фаз ШД в соответствии с текущим шагом последовательности

case 1:

P1OUT = port1_motor1_phase1;

P2OUT = port2_motor1_phase1;

break;

case 8:

P1OUT = port1_motor1_phase1 + port1_motor1_phase4;

P2OUT = port2_motor1_phase1 + port2_motor1_phase4;

}

if (if_right) { // переход к следующему шагу последовательности

if (horizontal_step_num < 8) horizontal_step_num++;

else horizontal_step_num = 1;

}

else { // переход к предыдущему шагу последовательности

if (horizontal_step_num > 1) horizontal_step_num--;

else horizontal_step_num = 8;

}

}

if (if_vertical) { // аналогично коррекции по горизонтали

}

if_horizontal = 0; // снимаем флаги движения

if_vertical = 0;

}

Таким образом, были разработаны алгоритмы работы микроконтроллеров в системе автоматической коррекции положения лазерной базовой оси. По данным алгоритмам были написаны программы в интегрированной среде разработки Code Composer Studio 6 на языке C++. Работа программ была подтверждена в ходе успешной работы системы после ее сборки.