Автор работы: Пользователь скрыл имя, 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 Разработка блока питания
Приложение А Схема электрическая принципиальная микропроцессорной системы управления
Приложение Б Листинг управляющей программы
В блоке d3 происходит выдача управляющего сигнала Y1 длительностью 262 мкс. Для этого необходимо рассчитать константу для загрузки в таймер. Константа будет равна
FFFFh – 106h = FEF9h.
Рисунок 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.
Рисунок 9 — Алгоритм обмена информацией по последовательному каналу связи
В блоке r1 осуществляется прием последовательным каналом связи символа.
В блоке r2 проверяется, является ли принятый символ символом D. Для этого из кода принятого символа вычитается код символа D и анализируется флаг переноса.
Если принятый символ является символом D, то управление передается на блок r4, иначе — на блок r3.
В блоке r4 в линию связи передается значение переменной, в которой хранится Y1.
В блоке r3 проверяется, является ли принятый символ символом А. Для этого из кода принятого символа вычитается код символа А и анализируется флаг переноса.
Если принятый символ является символом А, то в блоке r5 в линию связи передается значение переменной, в которой хранится Y4.
Рисунок 10 — Алгоритм работы блока взаимодействия с оператором
В блоке o1 опрашивается тумблерный регистр и формируется код уставки К. При этом анализируется состояние линий порта 1 МК и результат с помощью битовых операций накапливается в аккумуляторе.
В блоке о2 сформированный код уставки записывается по заранее заданному в программе адресу.
Рисунок 11 — Алгоритм обработки прерывания от оператора
В блоке р1 на индикацию выводится значение сигнала Y1.
В блоке р2 на индикацию выводится значение сравнения N > Q.
В блоке р3 вычисляется значение выражения , результат с помощью битовых операций накапливается в бите переноса. Потом значение выражения выводится на индикацию.
В блоке р4 вычисляется значение выражения , результат с помощью битовых операций накапливается в бите переноса. Потом значение выражения выводится на индикацию.
В блоке р5 на индикацию выводится значение Q.
Рисунок 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 микроконтроллер переводится в режим пониженного энергопотребления.
Произведем расчет потребляемой мощности системы, для чего необходимо просуммировать токи потребления каждого прибора системы и полученный суммарный ток умножить на напряжение питания.
При расчете не учитываются токи потребления операционных усилителей, резисторов, диодов и других микропотребляющих приборов. Для учёта этих токов при проектировании блока питания будет сделан трехкратный запас по мощности.
Расчет потребляемого тока приборами с напряжением питания 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 Вт.
Наиболее подходящим является трансформатор питания ТПП 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 | ;Возврат из подпрограммы |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|