
8 Расчет временных диаграмм
Рисунок 16 – Временные диаграммы системы
9 Разработка программы управляющего устройства
.include "m8535def.inc"
.org 0 ; Таблица векторов прерывания
rjmp reset
.org 3
rjmp c_T2 ; По совпадению
.org 4
rjmp o_T2 ; По переполнению
.def dest=r19 ; Переименование регистров
.def sot=r20
.def tis=r21
.def HG=r22
reset:
ldi r16, $5F ;Инициализация стека
out spl, r16
ldi r16, $2
out sph, r16
ldi r16, $EF FF ;Инициализация портов
out DDRB, r16
ldi r16, $10
out PORTB, r16
ldi r16, $FF
out DDRC, r16
out PORTA,r16
clr r16
out DDRD, r16
out DDRA, r16
out TCCR2, r16 ; Инициализация таймера
ldi r16, $FF
out TCNT2, r16
ldi r16, $4A
out TCCR2, r16
ldi r16, $FF
out OCR2, r16
ldi r16, $40
out TIMSK, r16 ; Таймер Т2 по переполнению
ldi HG, 1 ; Начальное состояние регистров
clr dest
clr sot
ldi tis, $A
ldi r31, 2
sei ;Разрешение прерывания
main:
sbic PINA, 4 ; Ожидание разрешения
rjmp nachalo
ldi r16, $40
out TIMSK, r16 ; Таймер Т2 по переполнению
clr dest
clr sot
ldi tis, $A
clr r16
out DDRD, r16 ; Отключаем ключи
rjmp main
nachalo:
ldi r16, $C0
out TIMSK, r16 ; Таймер Т2 по совпадению и переполнению
ldi r16, $FF
out DDRD, r16
in r16, PINA ; Снимаем задание по скорости
swap r16 ; Преобразуем
lsr r16
andi r16, 7
cpi r16, 0
brne m1
ldi r18, $F ;Скорость=400
ldi dest, 4 ;Задание для индикации
ldi sot, $A
rjmp m8
m1:
cpi r16, 1
brne m2
ldi r18, $1C ;Скорость=800
ldi dest, 8
ldi sot, $A
rjmp m8
m2:
cpi r16, 2
brne m3
ldi r18, $2C ;Скорость=1200
ldi dest, 2
ldi sot, 1
rjmp m8
m3:
cpi r16, 3
brne m4
ldi r18, $3B ;Скорость=1600
ldi dest, 6
ldi sot, 1
rjmp m8
m4:
cpi r16, 4
brne m5
ldi r18, $48 ;Скорость=2000
ldi dest, 0
ldi sot, 2
rjmp m8
m5:
cpi r16, 5
brne m6
ldi r18, $57 ;Скорость=2400
ldi dest, 4
ldi sot, 2
rjmp m8
m6:
cpi r16, 6
brne m7
ldi r18, $66 ;Скорость=2800
ldi dest, 8
ldi sot, 2
rjmp m8
m7:
cpi r16, 7
brne m8
ldi r18, $75 ;Скорость=3200
ldi dest, 2
ldi sot, 3
m8:
out OCR2, r18 ;Задание согласно положению тумблеров задания
rjmp main
c_T2: ;Прерывание по совпадению
clk ;Запрет прерываний
sbic PINA, 1 ;Проверка направления
rjmp rever
ldi tis, $B ;Зажигаем «темноту» на месте «-»
ldi r16, 8
out PORTB, r16 ;Отключаем верхний ключ, нижний выключен
nop ;Ключ в диагонали снизу включен
nop ;Бестоковая пауза
nop
nop
nop
nop
nop
nop
ldi r16, $A ;Включаем нижний ключ в мосту
out PORTB, r16
sei ;Разрешение прерываний
reti ;Выход из прерывания
rever: ;При обратном направлении
ldi tis, $A ;Зажигаем «-»
ldi r16, 2
out PORTB, r16
nop
nop
nop
nop
nop
nop
nop
nop
ldi r16, $A
out PORTB, r16
sei
reti
o_T2:
clk ;Запрет прерываний
sbic PINA, 1 ;Проверка направления
rjmp revers
ldi tis, $B ; Зажигаем «темноту» на месте «-»
ldi r16, 8
out PORTB, r16 ;Отключаем нижний ключ, верхний выключен
nop ;Ключ в диагонали снизу включен
nop ;Бестоковая пауза
nop
nop
nop
nop
nop
nop
ldi r16, 9 ;Включаем верхний ключ в мосту
out PORTB, r16
rjmp indic ;Уходим на индикацию
revers: ;При обратном направлении
ldi tis, $A ;Зажигаем «-»
ldi r16, 2
out PORTB, r16
nop
nop
nop
nop
nop
nop
nop
nop
ldi r16, 6
out PORTB, r16
indic: ;Динамическая индикация
cpi HG, 1 ;Зажигаем индикатор в зависимости от цикла
breq ind1
cpi HG, 2
breq ind2
cpi HG, 4
breq ind3
mov r30, tis ;Формируем адрес Z-регистра
rjmp vivod
ind1:
clr r30
rjmp vivod
ind2:
mov r30, dest
rjmp vivod
ind3:
mov r30, sot
vivod:
lpm r16, z ;Выгружаем в регистр код цифры
out PORTC, r16 ;Выводим цифру на индикатор
out PORTD, HG ;Зажигаем соответствующий индикатор
cpi HG, $8 ;Сравниваем для предотвращения «переполнения»
breq obn
lsl HG ;Сдвигаем регистратор зажженного индикатора
sei ;Разрешение прерываний
reti ;Выход из прерывания
obn: ;Устанавливаем в начальное состоянии
ldi HG, $1
sei ;Разрешение прерываний
reti ;Выход из прерывания
.org $100 ;Записываем коды цифр в флеш с 100ячейки
.db
0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x40,0x00
ЗАКЛЮЧЕНИЕ
В данном курсовом проекте необходимо было спроектировать микропроцессорную систему управления электроприводом.
Для заданного двигателя были выбраны: управляющие элементы, силовые ключи, активные элементы, также были выбраны необходимые источники питания для всей системы.
Были разработаны функциональная и принципиальные схемы.
Была разработана программа для управляющего устройства.
Была произведена проверка работоспособности системы на лабораторных стендах кафедры «ЭПА» Энергетического факультета.
БИБЛИОГРАФИЧЕСКИЙ
СПИСОК
1 Хусаинов, Р. З. Программирование микроконтроллеров ATmega8535: методические указания к выполнению лабораторных работ/Хусаинов, Р. З., Садов, В. Б. Челябинск: 2008. − 123 с.
2 Белов, А. В. Самоучитель разработчика устройств на микроконтроллерах AVR./ Белов, А. В. СПб: Наука и Техника, 2008. − 544 с.