Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
29
Добавлен:
26.04.2015
Размер:
236.54 Кб
Скачать

2.7. Работа № 6 Изучение систем автоматизации на базе микроконтроллеров

Цель работы

На базе микроконтроллера AT90S8535 реализовать систему автоматизации управления виртуальным объектом. Получить навыки работы с последовательным портом микроконтроллера.

Пояснения к работе

Виртуальный объект реализуется на экране монитора ПЭВМ в виде мультипликации. Микроконтроллер по последовательному порту подает управляющие команды, по которым механизмы виртуального объекта совершают заданные перемещения с заданной скоростью. Сигналы с датчиков виртуального объекта также по последовательному порту передаются в микроконтроллер. Изображения механизмов виртуального объекта при их включении изменяют свой цвет, при срабатывании датчиков виртуального объекта их изображение также меняет свой цвет.

Для управления виртуальными объектами между ПЭВМ и микроконтроллером постоянно идет обмен информацией. Периодически от ПЭВМ передаются в микроконтроллер три байта информации о состоянии датчиков виртуального объекта, а микроконтроллер выдает на объект два байта управляющих команд.

В ПЭВМ хранятся 9 вариантов виртуальных объектов:

- роботизированный участок транспортировки изделий (манипулятор);

- участок транспортировки изделий в методическую печь для их нагрева перед прокаткой (методическая печь);

- механизмы управления крышкой нагревательных колодцев обжимного прокатного стана (нагревательный колодец);

- участок сортировки и пакетирования годных и бракованных листов металла (сортировка листов);

- участок транспортировки труб большого диаметра (транспортировка труб);

- станок для сверления глубоких отверстий (станок);

- линия химической обработки деталей (линия химическая);

- упаковочная машина (упаковка);

- пассажирский лифт (лифт).

В качестве примера рассмотрим управление от микроконтроллера работой участка нагревательных колодцев обжимного прокатного стана (напольно-крышечной машиной).

Нагрев слитков перед прокаткой на обжимном прокатном стане осуществляется в нагревательных колодцах, отапливаемых смесью доменного и коксового газов или природным газом. Колодец закрывается крышкой. Для открытия и закрытия колодца крышкой существует напольно-крышечная машина (pис.А.3), включающая в себя два механизма: механизм подъема-опускания крышки и механизм перемещения тележки, на которой располагается крышка с механизмом подъема-опускания.

При нагреве слитков I до температуры 1200°С к колодцу подаются слитковоз и клещевой кран (на рис. А.3 не показаны). По сигналу ''Открыть'' (с блока управления рабочего места лабораторного комплекса) включается двигатель 4 (Д1) механизма подъема крышки колодца, установленный на тележке 3.

Двигатель Д1 через механическую передачу осуществляет подъем крышки 2 до верхнего положения ВП, контролируемого соответствующим датчиком. Затем включается двигатель 5 (Д2) и тележка, приводимая в движение указанным двигателем, движется в позицию ожидания П2 (по рис А.3 движение вправо) и стоит там до тех пор, пока с блока управления рабочего места не поступит сигнал "Закрыть". В этом случае тележка движется влево. При движении влево в положении П1 осуществляется снижение скорости движения тележки до ползучей скорости, с которой тележка движется до положения ПО. В положении ПО происходит останов тележки и осуществляется движение крышки вниз. При наличии сигнала с датчика ПС при движении вниз происходят снижение скорости опускания крышки до ползучей, с которой происходит затем движение до полного закрытия колодца. Нижнее положение крышки контролируется датчиком НП (закрыт колодец).

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

В программе ПЭВМ предусмотрена остановка тележки при достижении ею крайних положений KBЛ и КВП (конечный выключатель левый и конечный выключатель правый соответственно).

Управление механизмами напольно-крышечной машины должно осуществляться с блока управления рабочего места студента. С этого блока должны подаваться для управления две ручные команды ''Открыть'' и ''Закрыть''. Принимаем решение, что команда ''Открыть'' подается кнопкой SB1, то есть подается на вход РА1 микроконтроллера (рис.1.3), а ''Закрыть'' – кнопкой SB2, то есть на вход РА2.

На экране монитора над изображением виртуального объекта справа представлены разряды (биты) сигналов датчиков и слева – разряды (биты) команд на исполнительные механизмы объекта. Наличие сигнала или команды сопровождается появлением в соответствующем разряде 1, отсутствие команды или сигнала – 0. В процессе управления объектом микроконтроллер должен считывать информацию из ПЭВМ о состоянии датчиков объекта, по программе формировать управляющие команды и выдавать их на объект для управления его механизмами. Обмен информацией между микроконтроллером и ПЭВМ осуществляется по последовательному порту UART микроконтроллера и порту COM2 ПЭВМ. В ниже представленных программах управление указанным обменом осуществляется подпрограммой "irps".

Число датчиков и команд у виртуальных объектов разное. Принято, что максимальное число датчиков не превышает трёх байт, число управляющих команд – двух байт. Инициатором обмена выступает ПЭВМ. По последовательному порту COM2 она друг за другом выдает три байта информации о состоянии датчиков объекта. Микроконтроллер по последовательному порту UART принимает эту информацию и размещает её в трёх регистрах r20, r21 и r22 (рис. 2.4). Затем инициативу берёт на себя микроконтроллер. Он берёт подготовленные им и хранимые в регистрах r23 и r24 управляющие команды управления механизмами объекта и друг за другом по последовательному порту UART отправляет эти два байта информации в ПЭВМ. Для селективности работы между передачей первого и второго байтов реализуется подпрограммой "delay" временная задержка.

Мнемо-ника

Регистр

Бит 7

Бит 6

Бит 5

Бит 4

Бит 3

Бит 2

Бит 1

Бит 0

in 1

r20

in 2

r21

in 3

r22

out 1

r23

out 2

r24

Рис. 2.4. Регистры микроконтроллера для обмена информацией с ПЭВМ

На рис. 2.4 в каждом бите регистров указано в виде дроби обозначение сигнала или команды: в числителе обозначение сигнала /команды на изображении виртуального объекта или его описания в тексте, в знаменателе – мнемокод, используемый в программе микроконтроллера. Прочерки означают отсутствие информации. Так как рассматриваемый механизм простой, то используется лишь регистр r20 для размещения информации с датчиков виртуального объекта и 6 разрядов регистра r23 для размещения формируемых микроконтроллером управляющих команд на виртуальный объект.

Возможны два варианта составления программы для микроконтроллера при управлении виртуальным объектом:

а) по схеме алгоритма управления работой объекта (по циклограмме),

б) по логическим уравнениям.

Схема алгоритма управления работой напольно-крышечной машины (рис.2.5) полностью соответствует представленному выше описанию последовательности работы рассматриваемого объекта. Все действия однотипны: контролируется поступление необходимого сигнала, после чего выдаются требуемые управляющие команды.

Ниже представлена программа для микроконтроллера, соответствующая алгоритму рис. 2.5.

; Программа управления механизмами напольно-крышечной машины.

; Команды "Открыть" и "Закрыть" подаются соответственно кнопками SB1 (адрес pina,1)

; и SB2(адрес pina,2) блока управления рабочего места.

.include"8535def.inc"

.def count=r18 ; Счетчик прочитанных слов

.def temp=r19

;―――――――――――――――― ―――――――――――――――――――――――――

.def in1=r20 ; Регистры хранения состояния датчиков

.def in2=r21 ; виртуального объекта автоматизации

.def in3=r22 ; (читаемая информация)

;―――――――――――――――― ―――――――――――――――――――――――――

.def out1=r23 ; Регистры хранения управляющих команд

.def out2=r24 ; на виртуальный объект (передаваемая информация)

;―――――――――――――――― ―――――――――――――――――――――――――

.org $000 ; Вектор прерывания по Сбросу

rjmp reset

.org $00b ; Вектор прерывания по приему UART

rjmp irps

.org $00c ; Вектор прерывания по пустому регистру данных UART

reti

.org $00d ; Вектор прерывания по завершению передачи UART

reti

;―――――――――――――――― ―――――――――――――――――――――――――

reset:

ldi R17,$ff ; Установка указателя стека

out SPL,R17

ldi R17,$00

out SPH,R17

;―――――――――――――――― ―――――――――――――――――――――――――

sei ; Установить флаг глобального прерывания в регистре

; SREG

ldi r16,$ff ; Настроить порт С на выход

out ddrc,r16

ldi r16,00 ; Настроить порт А на вход

out ddra,r16

ldi r16,$0c ; Настроить порт В:биты 2 и 3 на выход, остальные на вход

out ddrb,r16

ldi r16,0xf0 ; Настроить порт D: биты 0...4 на вход, остальные на выход

out ddrd,r16

ldi R17,51 ; Инициализировать UART, скорость 9600 бод

out UBRR,R17

ldi R17,0x9b ; Разрешить прием - передачу 10011011

out UCR,R17

;―――――――――――――――― ――――――――――――――――――――――――

ldi count,0 ; Обнуление переменных

ldi temp,0

ldi in1,0

ldi in2,0

ldi in3,0

ldi out1,0

ldi out2,0

ldi r17,0

out portd,r17

;―――――――――――――――― ――――――――――――――――――――――――

start: ; Начало основной программы

sei ; Установить флаг глобального прерывания

sbis pina,1 ; Проверка состояния кнопки "Открыть"

rjmp start

set ; Установить флаг Т в регистре SREG

bld out1,0 ; Выдать команду "Вверх"

mo1: sei

sbrs in1,0 ; Контроль состояния датчика ВП

rjmp mo1

clt ; Очистить флаг Т в регистре SREG

bld out1,0 ; Отключить команду "Вверх"

set ; Установить флаг Т в регистре SREG

bld out1,3 ; Выдать команду "Вправо"

mo2: sei

sbrs in1,6

rjmp mo2

clt

bld out1,3

mo3: sei

sbis pina,2 ; Проверка состояния кнопки "Закрыть"

rjmp mo3

set

bld out1,4 ; Выдать команду "Влево"

mo4: sei

sbrs in1,5

rjmp mo4

set

bld out1,5 ; Выдать команду "Тележка медленно"

mo5: sei

sbrs in1,4

rjmp mo5

clt

bld out1,4 ; Отключить команду "Влево"

bld out1,5 ; Отключить команду "Тележка медленно"

set

bld out1,1 ; Выдать команду "Вниз"

mo6: sei

sbrs in1,1

rjmp mo6

set

bld out1,2 ; Выдать команду "Крышка медленно"

mo7: sei

sbrs in1,2

rjmp mo7

clt

bld out1,1 ; Отключить команду "Вниз"

bld out1,2 ; Отключить команду "Крышка медленно"

rjmp start

;―――――――――――――――― ――――――――――――――――――――――――

irps: ; Подпрограмма прерывания по приёму UART

in r25, sreg ; Сохранение регистра SREG

cli ; Запретить прерывания

mov count,temp

sbi portd,4 ; Включить светодиод VD5

tst count ; Проверка счетчика на нуль

brne m1

in in1,udr ; Записать первый принятый байт информации с объекта

inc count

mov temp,count

rjmp exit

m1: mov count,temp

cpi count,1

brne m2

in in2,udr ; Записать второй принятый байт информации с объекта

mov count,temp

inc count

mov temp,count

rjmp exit

m2: mov count,temp

in in3,udr ; Записать третий принятый байт информации с объекта

ldi count,0

mov temp,count

rcall delay

out udr,out1 ; Выдать первый байт команд на объект

sbi portd,5 ; Включить светодиод VD6

mt1: sbis usr,udre ; Передатчик готов к получению нового символа?

rjmp mt1

ldi r17,64

out usr,r17

sbi portd,6 ; Включить светодиод VD7

rcall delay

out udr,out2 ; Выдать второй байт команд на объект

mt2: sbis usr,udre ; Передатчик готов к получению нового символа?

rjmp mt2

ldi r17,64

out usr,r17

rjmp exit

exit: mov count,temp

sei

out sreg,r25 ; Восстановление регистра SREG

cbi portd,4 ; Выключение индикации

cbi portd,5

cbi portd,6

reti ; Выход из подпрограммы прерывания

delay: ; Подпрограмма временной задержки

ldi r27,0xFF

loop1:

ldi r28,0xFF

loop:

dec r28

brne loop

dec r27

brne loop1

ret ; Выход из подпрограммы

Второй вариант написания программы для микроконтроллера – по логическим уравнениям. Они могут быть записаны на основе содержательного описания работы автоматики. Содержательное описание – это словесный портрет формирования управляющего воздействия (выходного сигнала/команды) или промежуточной переменной (элемента памяти, внутреннего выхода).

Например, команда ''Вверх'' на движение крышки напольно-крышечной машины возникает при нажатии на кнопку ''Открыть'' (команда ''Откр.''). Возникшая команда ''Вверх'' сохраняется до прихода крышки в верхнее положение ВП. Этому содержательному описанию соответствует логическое уравнение

Вверх = (Откр. + Вверх)*ВП

Команда на движение крышки ''Вниз'' возникает после того как крышка побывала в правом положении П2 и вернулась в положение ПО над колодцем. Возникшая команда сохраняется до прихода крышки в крайнее нижнее положение НП. Представленному описанию соответствует логическое уравнение

Вниз = (ПО*ВП*рn + Вниз)*НП

В этом уравнении промежуточная переменная рn выполняет роль памяти о том, что крышка побывала в положении П2. Она возникает в положении П2 и сохраняется до прохода крышки в положение НП. Тогда логическое выражение для рассматриваемой переменной имеет вид

рn = (П2 + рn)*НП

Команда на снижение скорости крышки Мк (крышка медленно) возникает только при движении ''Вниз''. Она появляется при наличии сигнала ПС и сохраняется, пока существует команда ''Вниз''.

Логическое уравнение для команды Мк имеет вид

Мк = (ПС + Мк)*Вниз

Команда на перемещение тележки ''Вправо'' возникает в верхнем положении крышки и нахождении тележки в положении ПО, если тележка до этого не побывала в положении П2, т.е. если еще нет сигнала рn. Возникшая команда сохраняется до прихода тележки в положение П2. Команда должна отключаться, если по какой-то причине тележка дойдет до крайнего правого положения КВП (аварийное отключение). Логическое уравнение для этой команды имеет вид

В право = (ПО*рn + Вправо)*ВП*П2*КВП

Команда на движение тележки ''Влево'' возникает в положении тележки П2 при нажатии на кнопку ''Закрыть'' (команда ''Закр.''). Возникшая команда сохраняется до прихода тележки в положение ПО. Команда должна отключаться, если по какой-то причине тележка дойдет до крайнего левого положения КВЛ (аварийное отключение). Представленному описанию соответствует логическое уравнение

Влево = (П2*Закр + Влево)*ВП*ПО*КВЛ

Команда Мт на снижение скорости тележки возникает только при движении тележки влево. Она появляется в положении тележки П1 и сохраняется пока существует команда ''Влево''. Логическое уравнение для команды Мт имеет вид

Мт = (П1 + Мт)*Влево

На рис. 2.6 представлены два варианта программирования уравнения команды ''Вниз''. Вариант по рис.2.6а соответствует программированию без преобразования логического уравнения . Вариант по рис.2.6б требует представления логического уравнения в дизъюнктивной нормальной форме (ДНФ)

Вниз = (ПО*ВП*рn + Вниз)*НП = ПО*ВП*рn*НП + Вниз*НП

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

Пример программы микроконтроллера с использованием варианта c преобразованием логических уравнений представлен ниже.

; Программа управления механизмами напольно-крышечной машины

; по логическим уравнениям

.include "8535def.inc"

.def

count=r18

.def

temp=r19

; ————————————————————————————————

.def

in1=r20

; Регистры хранения состояния датчиков

; и управляющих команд (аналогично предыдущей

.def

out2=r24

; программе)

; ————————————————————————————————

.def

A=r27

; Регистр, используемый как аккумулятор А

.def

B=r28

;

.def

C=r29

; Регистр, используемый для инвертирования бита

.def

D=r30

; Хранение промежуточной переменной pn

; ————————————————————————————————

.org

$0000

; Вектора прерываний (аналогично предыдущей

; программе)

.org

$00d

reti

; ————————————————————————————————

.org

$100

reset:

ldi

R13,$ff

; Установка указателя стека

out

SPL,R13

ldi

R13,$00

out

SPH,R13

; ————————————————————————————————

sei

; Настройка портов, инициализация UART

; (аналогично предыдущей программе)

out

UCR,R17

; ————————————————————————————————

ldi

count,0

; Обнуление переменных (аналогично предыдущей

; программе)

out

portd,r17

; ————————————————————————————————

ldi

A,0

; Обнуление дополнительно введённых регистров

ldi

B,0

ldi

C,1

ldi

D,0

; ————————————————————————————————

start:

; Начало основной программы

;Программирование команды "Вверх"

;

;

in

A,pina

; A,0  pina,1

lsr

A

;

bst

out1,0

; B,0  out1,0

bld

B,0

;

or

A,B

; A  A  B

bst

in1,0

; B,0  in1,0

bld

B,0

;

eor

B,C

; B  B  C

and

A,B

; A  A  B

bst

A,0

; out1,0  A,0

bld

out1,0

; Выдать команду «Вверх»

; Программирование команды "Вниз"

;

;

bst

in1,4

; A,0  in1,4

bld

A,0

;

bst

in1,0

; B,0  in1,0

bld

B,0

;

and

A,B

; A  A  B

bst

D,0

; B,0  D,0

bld

B,0

;

and

A,B

; A  A  B

bst

out1,1

; B,0  out1,1

bld

B,0

;

or

A,B

; A  A  B

bst

in1,2

; B,0  in1,2

bld

B,0

;

eor

B,C

; B  B  C

and

A,B

; A  A  B

bst

A,0

; out1,1  A,0

bld

out1,1

; Выдать команду «Вниз»

; Программирование промежуточной переменной pn

;

;

bst

in1,6

; A,0  in1,6

bld

A,0

;

bst

D,0

; B,0  D,0

bld

B,0

;

or

A,B

; A  A  B

bst

in1,2

; B,0  in1,2

bld

B,0

;

eor

B,C

; B  B  C

and

A,B

; A  A  B

bst

A,0

; D,0  A,0

bld

D,0

;

; Программирование команды "Медленно крышка"

;

;

bst

in1,1

; A,0  in1,1

bld

A,0

;

bst

out1,2

; B,0  out1,2

bld

B,0

;

or

A,B

; A  A  B

bst

out1,1

; B,0  out1,1

bld

B,0

;

and

A,B

; A  A  B

bst

A,0

; out1,2  A,0

bld

out1,2

; Выдать команду «Медленно крышка»

; Программирование команды "Вправо"

;

;

bst

in1,4

; A,0  in1,4

bld

A,0

;

bst

D,0

; B,0  D,0

bld

B,0

;

eor

B,C

; B  B  C

and

A,B

; A  A  B

bst

out1,3

; B,0  out1,3

bld

B,0

;

or

A,B

; A  A  B

bst

in1,0

; B,0  in1,0

bld

B,0

;

and

A,B

; A  A  B

bst

in1,6

; B,0  in1,6

bld

B,0

;

eor

B,C

; B  B  C

and

A,B

; A  A  B

bst

in1,7

; B,0  in1,7

bld

B,0

;

eor

B,C

; B  B  C

and

A,B

; A  A  B

bst

A,0

; out1,3  A,0

bld

out1,3

; Выдать команду «Вправо»

; Программирование команды "Влево"

;

;

bst

in1,6

; A,0  in1,6

bld

A,0

;

in

B,pina

; B,0  pina,2

lsr

B

;

lsr

B

;

and

A,B

; A  A  B

bst

out1,4

; B,0  out1,4

bld

B,0

;

or

A,B

; A  A  B

bst

in1,0

; B,0  in1,0

bld

B,0

;

and

A,B

; A  A  B

bst

in1,4

; B,0  in1,4

bld

B,0

;

eor

B,C

; B  B  C

and

A,B

; A  A  B

bst

in1,3

; B,0  in1,3

bld

B,0

;

eor

B,C

; B  B  C

and

A,B

; A  A  B

bst

A,0

; out1,4  A,0

bld

out1,4

; Выдать команду «Влево»

; Программирование команды "Медленно тележка"

;

;

bst

in1,5

; A,0  in1,5

bld

A,0

;

bst

out1,5

; B,0  out1,5

bld

B,0

;

or

A,B

; A  A  B

bst

out1,4

; B,0  out1,4

bld

B,0

;

and

A,B

; A  A  B

bst

A,0

; out1,5  A,0

bld

out1,5

; Выдать команду «Медленно тележка»

rjmp

start

; ————————————————————————————————

irps:

; Подпрограмма прерывания по приему UART

in

r25,sreg

; Команды, реализующие последовательную

; передачу (аналогично предыдущей программе)

cbi

portd,6

reti

; ————————————————————————————————

delay:

; Подпрограмма временной задержки

ldi

r27,0xFF

; Команды, реализующие временную задержку

; (аналогично предыдущей программе)

ret

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

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

Демонстрация работы программы проводится с помощью преподавателя. Преподаватель предупреждает студентов о временном прерывании связи их рабочих мест с ПЭВМ. Затем обеспечивает выход ПЭВМ из подкаталога SERVER и входит в подкаталог PK&MK. В этом подкаталоге находит файл pk&mk.exe и запускает его. На экране монитора появляется заставка MK&PC (микроконтроллер и персональный компьютер). После нажатия клавиши Esc и затем клавиши Enter в левом верхнем углу заставки появляется меню виртуальных объектов автоматизации. Выбирается требуемый объект автоматизации и выводится на экран монитора. Подробно последовательность работы с виртуальным объектом описана в п. 1.5.8.

Виртуальным объектом на экране монитора можно управлять вручную с клавиатуры ПЭВМ. Для этого необходимо нажать на клавиши Alt + R, осуществляется переход на ручное управление (в правом нижнем углу – надпись Руч). Под изображением виртуального объекта или на заставке этого объекта написаны "подсказки" какими клавишами управляется каждый механизм.

При любом сбое в работе микроконтроллера с виртуальным объектом следует нажать на кнопку “Сброс” блока управления рабочего места для осуществления управления с начального адреса программы. Если это не приводит к желаемому результату (разумеется при правильной программе), то следует нажатием клавиш Alt+R перейти на ручной режим управления виртуальным объектом. Следуя указаниям «подсказок», установите механизмы в исходное состояние, из которого начинается цикл автоматической работы. Затем нажмите на кнопку “Сброс” на блоке управления рабочего места микроконтроллерного комплекса и нажатием клавиш Alt+K вновь осуществите перевод объекта на управление от микроконтроллера. Если и это не помогает, то нажатием клавиш Alt+X завершите работу с программой PK&MK. Затем вновь запустите файл pk&mk.exe в подкаталоге PK&MK и действуйте далее, как описано выше.