Микроконтроллеры

Автор работы: Пользователь скрыл имя, 21 Сентября 2012 в 07:48, курсовая работа

Описание работы

Сигналы с аналоговых датчиков V1, V2 преобразуются в цифровую форму в АЦП. С выхода АЦП 8-разрядные коды N1 и N2, представляющие собой целые числа без знака, поступают на обработку. Величина К — 8-разрядный код уставки, поступающий от оператора. Далее система вычисляет функцию N=max(N1+N2;K). Полученное значение функции сравнивается с константой Q, хранящейся во внутренней памяти.

Содержание работы

Содержание
1 Техническое задание
2 Структурная схема микропроцессорной системы управления
3 Блок чтения информации с датчиков
4 Блок вывода управляющих сигналов
5 Блок последовательного канала связи
6 Пульт управления
7 Общий алгоритм управления
8 Алгоритм работы блока чтения информации с цифровых датчиков
9 Алгоритм работы блока чтения информации с аналоговых датчиков
10 Алгоритм работы блока обмена информацией по последовательному каналу связи
11 Алгоритм работы блока взаимодействия с оператором
12 Алгоритмы обработки аварийных ситуаций
13 Расчет электрических параметров микропроцессорной системы управления
14 Разработка блока питания
Приложение А Схема электрическая принципиальная микропроцессорной системы управления
Приложение Б Листинг управляющей программы

Файлы: 2 файла

Вся схема Чернак12.vsd

— 490.00 Кб (Скачать файл)

курсовой по микроконтроллерам.doc

— 1.81 Мб (Скачать файл)

В блоке d3 происходит выдача управляющего сигнала Y1 длительностью 262 мкс. Для этого необходимо рассчитать константу для загрузки в таймер. Константа будет равна

FFFFh – 106h = FEF9h.

9 Алгоритм работы блока чтения информации с аналоговых датчиков

Рисунок 8 — Алгоритм работы блока чтения информации с аналоговых датчиков

В блоке a1 происходит ввод кодов N1, N2 с АЦП и получение кода К с пульта управления.

В блоке a2 вычисляется значение функции N.

В зависимости от результата сравнения значения функции N и константы Q блок a3 передает управление на блок a4 или блок a5.

В блоке a4 происходит выдача управляющего сигнала Y3 длительностью 394 мкс. Для этого необходимо рассчитать константу для загрузки в таймер. Константа будет равна

FFFFh – 18Ah = FE75h.

В блоке a5 происходит выдача управляющего сигнала Y2 длительностью 143 мкс. Для этого необходимо рассчитать константу для загрузки в таймер. Константа будет равна

FFFFh – 8Ah = FF70h.

В блоке a6 организуется вычисление значения Y4.

В блоке a7 с помощью ЦАП из Y4 формируется и выдается управляющий сигнал V4.

10 Алгоритм работы блока обмена информацией по последовательному каналу связи

Рисунок 9 — Алгоритм обмена информацией по последовательному каналу связи

В блоке r1 осуществляется прием последовательным каналом связи символа.

В блоке r2 проверяется, является ли принятый символ символом D. Для этого из кода принятого символа вычитается код символа D и анализируется флаг переноса.

Если принятый символ является символом D, то управление передается на блок r4, иначе — на блок r3.

В блоке r4 в линию связи передается значение переменной, в которой хранится Y1.

В блоке r3 проверяется, является ли принятый символ символом А. Для этого из кода принятого символа вычитается код символа А и анализируется флаг переноса.

Если принятый символ является символом А, то в блоке r5 в линию связи передается значение переменной, в которой хранится Y4.

11 Алгоритм работы блока взаимодействия с оператором

Рисунок 10 — Алгоритм работы блока взаимодействия с оператором

В блоке o1 опрашивается тумблерный регистр и формируется код уставки К. При этом анализируется состояние линий порта 1 МК и результат с помощью битовых операций накапливается в аккумуляторе.

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

Рисунок 11 — Алгоритм обработки прерывания от оператора

 

 

В блоке р1 на индикацию выводится значение сигнала Y1.

В блоке р2 на индикацию выводится значение сравнения N > Q.

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

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

В блоке р5 на индикацию выводится значение Q.

 

12 Алгоритмы обработки аварийных ситуаций

Рисунок 12 — Алгоритм обработки прерывания от блока питания

В блоке b1 вырабатывается сигнал Y5 установки внешних устройств в исходное состояние. Сигнал Y5 представляет собой два прямоугольных импульса длительностью 30 мкс, следующие с интервалом 30 мкс. Для формирования прямоугольного импульса длительностью 30 мкс в таймеры загружается константа 1Eh. На выводе 7 порта С ППА2 устанавливается высокий уровень. Запускается таймер 1. После переполнения таймера 1 на выводе 7 порта С ППА2 устанавливается низкий уровень и запускается таймер 2. Бит переполнения таймера 1 сбрасывается и в него загружается константа 1Eh. После переполнения таймера 2 на выводе 7 порта С ППА2 устанавливается высокий уровень и запускается таймер 1. После переполнения таймера 1 на выводе 7 порта С ППА2 устанавливается низкий уровень. Биты переполнения обоих таймеров сбрасываются.

В блоке b2 в последовательный канал связи передается код символа «!». Для этого в буфер приемо-передатчика записывается код символа «!».

В блоке b3 микроконтроллер переводится в режим пониженного энергопотребления.

 


 

Рисунок 13 — Алгоритм обработки прерывания от аварийного датчика

В блоке a1 на пульте управления включается аварийная сигнализация. Для этого на линию 4 порта С ППА2 подается сигнал высокого уровня.

В блоке a2 обеспечивается выдача на индикацию сигналов двоичных датчиков Х1-Х5. Для этого значения сигналов записываются в память устройства индикации и выдается управляющий сигнал на начало индикации. После паузы экран устройства индикации очищается.

В блоке a3 обеспечивается выдача на индикацию цифрового кода N1, поступающего с АЦП. Для этого значение цифрового кода N1 записывается в память устройства индикации и выдается управляющий сигнал на начало индикации. После паузы экран устройства индикации очищается.

В блоке a4 микроконтроллер переводится в режим пониженного энергопотребления.

 

13 Расчет электрических параметров микропроцессорной системы управления

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

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

Расчет потребляемого тока приборами с напряжением питания 5 В приведен в таблице 5.

Таблица 5 — Расчет тока потребления

Наименование

Потребляемый ток,

мА

Количество,

шт.

Общий потребляемый ток,

мА

AD5301

0,25

1

0,25

AD7999

0,25

1

0,25

AT89C51IC2

8

1

8

WH7414A

3

1

3

ADM4854

2

1

2

74HCT00N

2

1

2

PCA8574

0,5

1

0,5

Итого:

16

Потребляемая мощность составит 5·0,016 = 0,08 Вт.

 

14 Разработка блока питания

Наиболее подходящим является трансформатор питания ТПП 207-127/220-50. Особенностью данного трансформатора является то, что у него низкое напряжение вторичных обмоток, поэтому он применяется в основном для питания устройств в радиоэлектронике.

Кроме трансформатора в состав блока питания входят схемы выпрямителей и схемы стабилизации. Схемы выпрямителей переменного напряжения представляют собой диодные мосты B05S.

В качестве схемы стабилизации по каналу плюс 5В применим интегральный стабилизатор напряжения LM78L05, по каналу плюс 15В — LM78L15, по каналу минус 15В — LM79L15.

Выходной ток стабилизатора напряжения LM78L05 равен 0,1 А. Мощность блока питания по каналу плюс 5В составит 5·0,1 = 0,5 Вт.

Выходной ток стабилизатора напряжения LM78L15 равен 0,1 А. Мощность блока питания по каналу плюс 15 В составит 15·0,1 = 1,5 Вт.

Выходной ток стабилизатора напряжения LM79L15 равен 0,1 А. Мощность блока питания по каналу минус 15 В составит 15·0,1 = 1,5 Вт.

Т.к. выходные токи и мощность блока питания больше расчетных даже с трехкратным запасом, то блок питания удовлетворяет предъявляемым к нему требованиям.

Схема блока питания представлена на рисунке 15.

Рисунок 14 — Схема блока питания

Приложение А Схема электрическая принципиальная микропроцессорной системы управления




Приложение Б Листинг управляющей программы

Метки

Мнемоники

Комментарии

; Подпрограмма обработки информации с бинарных датчиков

DIGITAL:

MOV C,P1.0

;C=X1

 

ORL C,P1.5

;C=X1

 

MOV A,P1.1

CPL A

ANL C,A

MOV A,P1.2

CPL A

ANL C,A

ORL C,P1.4

;A=X2

;A=NOT X2

; C=C*A

;A=X3

;A=NOT X3

C=C*A

C=C+X5

 

XOR C,P1.2

;C=C⊕X3

 

JNC ANALOG

;Если Y1=0, то перейти к обработке аналоговой информации

 

 

;иначе (если Y1=1)

 

MOV TL0, #1Bh

;Загрузить младший байт константы в таймер 0

 

MOV TH0, #FEh

;Загрузить старший байт константы в таймер 0

 

SETB P2.4

;Выдать Y1

 

SETB TR0

;Запустить таймер 0

OUT_Y1:

JBC TF0, CLEAR_Y1

;ожидать переполнения таймера

 

JMP OUT_Y1

;цикл

CLEAR_Y1:

CLR P2.4

;Снять Y1

 

RET

 

 

 

 

 

 

 

 

 

 

 

 

 

; Подпрограмма обработки информации с аналоговых датчиков

ANALOG:

 

; Преобразуем напряжение V1 в код N1 c помощью АЦП

 

MOV SSCON, #C3h

; Перейти в режим записи и выдать на шину условие

; START

 

MOV SSDAT, #52h

; Выдать на шину адрес АЦП + R/W=0

 

CLR C

; Если не получен ACK, то перейти на обработку ошибок

 

MOV A, SSCON

 

 

SBB A,#18h

 

 

JNZ ERROR

 

 

MOV SSDAT, #10h

; Выдать на шину байт конфигурации АЦП

; для запуска преобразования по VIN0

 

CLR C

; Если не получен ACK, то перейти на обработку ошибок

 

MOV A, SSCON

 

 

SBB A,#18h

 

 

JNZ ERROR

 

 

MOV SSDAT, #53h

; Выдать на шину адрес АЦП + R/W=1

 

CLR C

; Если не получен ACK, то перейти на обработку ошибок

 

MOV A, SSCON

 

 

SBB A,#18h

 

 

JNZ ERROR

 

 

MOV SSCON, #C7h

; Перейти в режим чтения

 

 

; Считать 1-й байт из буфера АЦП

 

CLR C

; Т.к. вычитание с заёмом, то перед ним очищаем C

W1BYTE:

SBB SSCON,#50h

; Ожидать код 50h в SSCON

 

JNZ W1BYTE

 

 

MOV R1, SSDAT

; Перенести результат в R1

 

 

; Считать 2-й байт из буфера АЦП

 

CLR C

; Т.к. вычитание с заёмом, то перед ним очищаем C

W2BYTE:

SBB SSCON,#58h

; Ожидать код 58h в SSCON

 

JNZ W2BYTE

 

 

MOV R2, SSDAT

; Перенести результат в R2

 

MOV SSCON, #B3h

; Перейти в режим записи и выдать на шину условие

; STOP

 

 

 

 

 

 

; Выделить N1 из 2-х байт результата преобразования

 

MOV A,R1

; Загрузить в А старший байт результата

 

ANL A, #0Fh

; Выделить 4 старших бита N1 в 1-ом байте результата

; по маске

 

RL A

; 4 раза сдвинуть влево циклически

 

RL A

; т.к. в 1-ом байте результата 4 старших бита N1

 

RL A

; были младшими битами

 

RL A

 

 

MOV R1,A

; Сохранить результат в R1

 

MOV A,R2

; Загрузить в А младший байт результата

 

RR A

; 4 раза сдвинуть вправо циклически

 

RR A

; т.к. во 2-ом байте результата 4 младших бита N1

 

 

RR A

; были старшими битами,

 

RR A

; а за ними шли нули (поэтому применять маску не надо)

 

ADD A,R1

; Сложить полубайты N1 для получения целого N1

 

MOV R0,N1

; Записать адрес N1  в R0

 

MOV @R0,A

; Сохранить значение N1 в памяти по заданному адресу

 

 

; Преобразуем напряжение V2 в код N2 c помощью АЦП

 

MOV SSCON, #C3h

; Перейти в режим записи и выдать на шину условие

; START

 

MOV SSDAT, #52h

; Выдать на шину адрес АЦП + R/W=0

 

CLR C

; Если не получен ACK, то перейти на обработку ошибок

 

MOV A, SSCON

 

 

SBB A,#18h

 

 

JNZ ERROR

 

 

MOV SSDAT, #20h

; Выдать на шину байт конфигурации АЦП

; для запуска преобразования по VIN1

 

CLR C

; Если не получен ACK, то перейти на обработку ошибок

 

MOV A, SSCON

 

 

SBB A,#18h

 

 

JNZ ERROR

 

 

MOV SSDAT, #53h

; Выдать на шину адрес АЦП + R/W=1

 

CLR C

; Если не получен ACK, то перейти на обработку ошибок

 

MOV A, SSCON

 

 

SBB A,#18h

 

 

JNZ ERROR

 

 

MOV SSCON, #C7h

; Перейти в режим чтения

 

 

; Считать 1-й байт из буфера АЦП

 

CLR C

; Т.к. вычитание с заёмом, то перед ним очищаем C

 

SBB SSCON,#50h

; Ожидать код 50h в SSCON

 

JNZ W1BYTE

 

 

MOV R1, SSDAT

; Перенести результат в R1

 

 

; Считать 2-й байт из буфера АЦП

 

CLR C

; Т.к. вычитание с заёмом, то перед ним очищаем C

 

SBB SSCON,#58h

; Ожидать код 58h в SSCON

 

JNZ W2BYTE

 

 

MOV R2, SSDAT

; Перенести результат в R2

 

MOV SSCON, #B3h

; Перейти в режим записи и выдать на шину условие

; STOP

 

 

; Выделить N21 из 2-х байт результата преобразования

 

MOV A,R1

; Загрузить в А старший байт результата

 

ANL A, #0Fh

; Выделить 4 старших бита N2 в 1-ом байте результата

; по маске

 

RL A

; 4 раза сдвинуть влево циклически

 

RL A

; т.к. в 1-ом байте результата 4 старших бита N2

 

RL A

; были младшими битами

 

RL A

 

 

MOV R1,A

; Сохранить результат в R1

 

MOV A,R2

; Загрузить в А младший байт результата

 

RR A

; 4 раза сдвинуть вправо циклически

 

 

 

 

 

RR A

; т.к. во 2-ом байте результата 4 младших бита N2

 

RR A

; были старшими битами,

 

RR A

; а за ними шли нули (поэтому применять маску не надо)

 

ADD A,R1

; Сложить полубайты N2 для получения целого N2

 

MOV A,N2

;

 

 

; Вычисляем функцию N =max( N1+N2;K)

 

 

 

 

MOV R1,N1

; R1= N1

 

ADD A,R1

; A=N1+N2

 

MOV N1_N2,A

; Сохранить результат в памяти

 

CLR C

; очищаем перенос

 

SUBB A,K

; сравниваем N1+N2 и K

 

JNC MAX_K

; Если не было заема, то max=N1_N2 и переход на ;N=N1+N2

MAX_K

MOV N,K

; иначе N=K

 

JMP CMP_N_Q

; Обход следующей команды

MAX_N1+N2

MOV N,N1_N2

;N=N1+N2

;Сравниваем N и Q

CMP_N_Q:

MOV R0,Q

; R0= адрес Q

 

MOV A,@R0

; A=Q

 

CLR C

; Очищаем перенос перед вычитанием с заемом

 

SUBB A,R3

; вычитаем из Q N

 

JC Y3_OUT

; Если был заем, то N>Q и переходим на  вывод Y3

 

 

; Иначе выводим Y2

 

 

; Вывод Y2

 

MOV TL0, #70h

 

 

MOV TH0, #FFh

 

 

SETB P2.5

 

 

SETB TCON.4

 

WAIT_Y2:

JNB TCON.5,WAIT_Y2

 

 

CLR TCON.4

 

 

CLR P2.5

 

 

CLR TCON.5

 

 

JMP Y4_CALC

; Т.к. выдали Y2, то обходим вывод Y3

 

 

; Вывод Y3

Y3_OUT:

MOV TL0, #75h

 

 

MOV TH0, #FEh

 

 

SETB P2.6

 

 

SETB TCON.4

 

WAIT_Y3:

JNB TCON.5,WAIT_Y3

 

 

CLR TCON.4

 

 

CLR P2.6

 

 

CLR TCON.5

 

 

 

;Вычисляем код Y4=A0+A1*N2

Y4_CALC:

МОV A,A1

;Перенести А1 в аккумулятор

 

MOV B,N2

;Перенести N2 в B

 

MUL AB

;Умножить A1 на N2

 

MOV R3,A0

;Перенести А0 в R3

 

ADD A,R3

;Прибавить A0

 

 

; Не производим многобайтное сложение, т.к. по заданию

 

 

; если Y4 превышает 8 разрядов, то необходимо принимать

 

 

; Y4 равное младшему байту, т.е. А

 

MOV Y4,A

; Сохранить результат в памяти

 

 

;Преобразуем код Y4 в напряжение V4 с помощью ЦАП

 

MOV SSCON, #C3h

; Перейти в режим записи и выдать на шину условие

; START

 

MOV SSDAT, #18h

; Выдать на шину адрес ЦАП + R/W=0

 

CLR C

; Если не получен ACK, то перейти на обработку ошибок

 

MOV A, SSCON

 

 

SBB A,#18h

 

 

JNZ ERROR

 

 

MOV SSDAT, #82h

; Выдать на шину байт конфигурации ЦAП

 

CLR C

; Если не получен ACK, то перейти на обработку ошибок

 

 

 


 

MOV A, SSCON

 

 

SBB A,#18h

 

 

JNZ ERROR

 

 

MOV SSDAT, Y4

; Выдать на шину код Y4

 

CLR C

; Если не получен NO ACK, то перейти на обработку ошибок

 

MOV A, SSCON

 

 

SBB A,#28h

 

 

JNZ ERROR

 

 

MOV SSCON, #B3h

; Перейти в режим записи и выдать на шину условие

; STOP,

 

 

; В задержке на установление выхода ЦАП нет необходимости,

; т.к. время передачи байта по шине больше этого времени

 

RET

;Возврат из подпрограммы

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Информация о работе Микроконтроллеры