Курсовой по ОМТ
.docxМинистерство образования и науки РФ
ФГБОУ ВО “Магнитогорский государственный технический университет имени Г.И.Носова”
Институт Энергетики и Автоматизированных Систем
Кафедра электроники и микроэлектроники
Курсовая работа по дисциплине “Основы микропроцессорной техники”
Вариант – 3.4
Выполнил: студент гр. АНб-14-2 Михайлицын А.С.
Проверил: кандидат тех. наук Швидченко Д.В.
Магнитогорск 2016
Задача: программным способом реализовать датчик угловой скорости вращения электродвигателя.
Данные варианта 2 приведены в таблице 1.
Таблица 1
nдв max, об/мин |
nдв min, об/мин |
n1 |
@1 |
@2 |
Ошибка, % |
1100 |
100 |
70 |
34 |
24 |
1 |
1.Анализ поставленной задачи.
Разработать цифровой датчик скорости, анализируя количество опросов порта, в течение периода импульсов поступающих в порт 34.
Рассчитать период опроса порта для заданных параметров и погрешности. Так как максимальная погрешность имеется при максимальной скорости (при максимальной скорости больше импульсов), то необходимо расчет вести для максимальной скорости.
Найти частоту импульсов при максимальной скорости:
fmax = , (1)
где nдв max - максимальная скорость двигателя в об/сек,
nдв min - минимальная скорость двигателя в об/сек,
n1 - число импульсов на оборот импульсного датчика.
0,00078. (2)
Длины положительных импульсов при этом равны:
0,00039 . (3)
Найти необходимый период опроса порта для заданного уровня ошибки:
0,0000039 (с) = 4 (мкс) (4)
Рассчитать число тактов, через которое должен производиться опрос порта ввода при заданной погрешности:
Частота данного микропроцессора 2 МГц, следовательно, период одного такта = 0,5 мкс
(5)
Из этого следует, что организовать опрос порта, анализ полученных данных и сохранение результата анализа нужно организовать за полученное число тактов. Это невозможно в данных условиях, поэтому, было решено организовать 5 периодов опроса порта.
Пусть k – количество импульсов подсчитанных за положительный полупериод, тогда
(6)
(7)
V (8)
(9)
Максимальная и минимальная скорости 1100 оборотов в минуту и 100 оборотов в минуту (4 разряда числа), поэтому для отображения реальной скорости придется использовать два порта вывода: один – для старших разрядов, другой – для младших разрядов. Дополнительным портом вывода я возьму порт 25.
Теперь найду максимальное и минимальное количество опросов порта ввода за положительный полупериод. Для этого найду сначала частоту импульсов при минимальной скорости, затем максимально возможный полупериод, проделаю то же самое и для максимальной скорости и найду минимально возможный полупериод:
1283
117
0,00078
0,0085
– максимально возможное количество подсчитанных импульсов.
- минимально возможное количество подсчитанных импульсов.
2.Разработка блок-схемы.
Начало программы
Загрузка регистров значениями
1
Проверка порта. На порте значение появилось?
2
Нет
Да
Инкрементируем регистр B, считаем период
3
Инкрементируем регистровую пару, считаем импульсы
4
Проверка порта. На порте значение пропало?
5
Нет
Да
Проверка регистра B. Равен 05?
6
Нет
Да
1
Вывод старшего байта скорости из таблицы на порт 24
7
1
Поиск младшего байта в таблице
8
Вывод младшего байта скорости на порт 25
9
Безусловный переход на начало программы
10
3. Разработка программы.
Таблица 2
Адрес |
Машинный код |
Количество тактов |
Мнемоника команды |
Метка |
0700 |
11 88 13 |
10 |
LXI D |
|
0703 |
26 00 |
7 |
MVI H |
M4 |
0705 |
2E 00 |
7 |
MVI L |
|
0707 |
07 00 |
7 |
MVI B |
|
0709 |
DB 34 |
10 |
IN port 34 |
M1 |
070B |
FE 00 |
7 |
CPI 00 |
|
070D |
CA 09 07 |
10 |
JZ 0709 |
|
0710 |
04 |
5 |
INR B |
M3 |
0711 |
23 |
5 |
INX H |
M2 |
0712 |
DB 34 |
10 |
IN port 34 |
|
0714 |
FE 00 |
7 |
CPI 00 |
|
0716 |
D3 11 07 |
10 |
JNZ 0711 |
|
0718 |
78 |
7 |
MOV A, B |
|
0719 |
FE 05 |
7 |
CPI 05 |
|
071B |
D3 10 07 |
10 |
JNZ 0710 |
|
0720 |
7E |
7 |
MVI A,M |
|
0721 |
D3 24 |
10 |
OUT port 24 |
|
0723 |
19 |
10 |
DAD D |
|
0724 |
7E |
7 |
MVI A,M |
|
0725 |
D3 25 |
10 |
OUT port 25 |
|
0728 |
C3 03 07 |
10 |
JMP 0703 |
|
3.1. Описание программы.
Сначала идет опрос порта до тех пор, пока значение порта не сменится с 0 на любое другое. Это означает что период пошел. Как только процессор выяснил, что пошел первый период сигнала, начинается работа счетчика, регистровой пары, который считает количество импульсов. Одновременно с этим запускается второй счетчик, считающий периоды. Счет импульсов будет продолжаться, пока значение порта не сменится на 0. Когда это произошло, процессор сверяет счетчик периодов с числом пять. Если прошло пять периодов, то выдаем значение скорости младший и старший байт соответственно на каждый из портов, значения берутся из таблицы, расчитанной мною заранее. Операция DAD D происходит для сложения регистровых пар, чтобы найти в таблице младший байт скорости, соответствующий страшему байту. Изначально была задана регистровая пара как разница между ячейками со старшим и младшими байтами скорости. Скорость соответствует количеству импульсов.
3.2 Таблица скоростей к программе.
Таблица 3
Импульсы, k |
Скорость, об мин. |
Старший байт |
Адрес |
Младший байт |
Адрес |
500 |
1100 |
11 |
9F4 |
0 |
1D7C |
501 |
1098 |
10 |
9F5 |
98 |
1D7D |
502 |
1096 |
10 |
9F6 |
96 |
1D7E |
503 |
1093 |
10 |
9F7 |
93 |
1D7F |
504 |
1091 |
10 |
9F8 |
91 |
1D80 |
505 |
1089 |
10 |
9F9 |
89 |
1D81 |
506 |
1087 |
10 |
9FA |
87 |
1D82 |
507 |
1085 |
10 |
9FB |
85 |
1D83 |
508 |
1083 |
10 |
9FC |
83 |
1D84 |
509 |
1081 |
10 |
9FD |
81 |
1D85 |
510 |
1078 |
10 |
9FE |
78 |
1D86 |
511 |
1076 |
10 |
9FF |
76 |
1D87 |
512 |
1074 |
10 |
A00 |
74 |
1D88 |
513 |
1072 |
10 |
A01 |
72 |
1D89 |
514 |
1070 |
10 |
A02 |
70 |
1D8A |
515 |
1068 |
10 |
A03 |
68 |
1D8B |
516 |
1066 |
10 |
A04 |
66 |
1D8C |
517 |
1064 |
10 |
A05 |
64 |
1D8D |
518 |
1062 |
10 |
A06 |
62 |
1D8E |
519 |
1060 |
10 |
A07 |
60 |
1D8F |
520 |
1058 |
10 |
A08 |
58 |
1D90 |
521 |
1056 |
10 |
A09 |
56 |
1D91 |
522 |
1054 |
10 |
A0A |
54 |
1D92 |
523 |
1052 |
10 |
A0B |
52 |
1D93 |
524 |
1050 |
10 |
A0C |
50 |
1D94 |
…
5486 |
114 |
1 |
1D67 |
14 |
30EF |
5487 |
113 |
1 |
1D68 |
13 |
30F0 |
5488 |
112 |
1 |
1D69 |
12 |
30F1 |
5489 |
111 |
1 |
1D6A |
11 |
30F2 |
5490 |
110 |
1 |
1D6B |
10 |
30F3 |
5491 |
109 |
1 |
1D6C |
9 |
30F4 |
5492 |
108 |
1 |
1D6D |
8 |
30F5 |
5493 |
107 |
1 |
1D6E |
7 |
30F6 |
5494 |
106 |
1 |
1D6F |
6 |
30F7 |
5495 |
105 |
1 |
1D70 |
5 |
30F8 |
5496 |
104 |
1 |
1D71 |
4 |
30F9 |
5497 |
103 |
1 |
1D72 |
3 |
30FA |
5498 |
102 |
1 |
1D73 |
2 |
30FB |
5499 |
101 |
1 |
1D74 |
1 |
30FC |
5500 |
100 |
1 |
1D75 |
0 |
30FD |
4. Вывод: данный курсовой проект было возможно рассчитать и другими способами. Например можно было бы с помощью программы деления, делить числа внутри микропроцессора. Этот метод крайне затратный по времени. Однако и мой метод тоже имеет затраты. Затраты адресного пространства. Но решено было использовать данный метод по причине того, что скорость выведения результата мне показалась более важной, чем занимаемое место программы. Нужно учесть один факт: эта программа и таблица значений к программе слишком индвидуальны и будут работать только для конкретно этого датчика скорости.