Автор: Пользователь скрыл имя, 07 Апреля 2013 в 02:54, курсовая работа
Цель работы – создание устройства, позволяющего определить максимальный сигнал от датчика вибрации и вывести на индикатор величину этой вибрации.
Реферат 2
Оглавление 3
Техническое задание 4
Введение 5
Структурная схема и общий алгоритм работы устройства 6
Выбор, обоснование и расчет отдельных узлов 7
Выбор микропроцессора 7
Клавиатура 8
Средства индикации 8
Усилитель. 10
Аналого-цифровой преобразователь. 10
Описание полной принципиальной схемы (назначение элементов и работа) 12
Оценка потребляемой мощности. 13
Диапазоны рабочих температур (в Со) 14
Описание ПО. Осноной алгоритм работы 14
Подпрограмма записи массива оцифрованного сигнала 15
Подготовка сигнала для индикатора 17
Заключение 18
Список использованной литературы 19
напряжение питания, В ..... 5.0;
выходное напряжение низкого уровня, В ..... 0.8;
выходное напряжение высокого уровня, В ..... 4.0;
опорное напряжение, В ..... -10;
напряжение смещения нуля, мВ .... 50;
ток потребления, мА ..... 4.
Описание полной принципиальной
схемы
Принципиальная схема приведена в приложении 1. Перечень элементов приведен в приложении 2.
Питание на схемы, подаваемое от источника напряжения +5 вольт. Основой принципиальной схемы является микропроцессор семейства MCS51 AT89C8051. Для обеспечения его работоспособности, к нему подключен сбрасывающий конденсатор C3 емкостью 1мкФ, а также частотозадающий кварц Z1, и два фазасдвигающих конденсатора C1 и C2 емкостью 30пФ.
К портам P1.0-P1.7 подключен аналого-цифровой преобразователь,
который передает преобразованный аналоговый
сигнал в виде цифрового кода процессору.
Процессор записывает эти значения в массив
данных, причем запись происходит пока
сигнал RD активный (нулевой), т.е. P3.7 устанавливается
в 0. Как только этот бит установить в единицу
происходит запуск АЦП и теперь уже на
бит P3.5 приходит нулевой сигнал, символизирующий,
что аналого-цифровой преобразователь
занят выполнением оцифровки.
К портам P3.4 и P3.6
подключены кнопки.
По нажатию на кнопку SB1 происходит сброс
всех значений в памяти данных и ожидается
нажатие кнопки SB2, т.е. пуска устройства.
К портам P2.0-P2.3 процессора подключены входы дешифратора КР514ИД1, использующегося для управления семисегментным индикатором с общим катодом АЛС324А1, который отображает уровень вибрации. Нулевым битом третего порта осуществляется динамическая индикая, т. е. поочередное включение семисегментного индикатора.
Оценка потребляемой мощности
Формулы для расчета потребляемой мощности:
Все расчеты сведены в таблицу 1
Таблица 1 – Расчет потребляемой мощности
Элемент |
Напряжение, В |
Потребляемый ток, мА |
Потребляемая мощность, Вт |
AT89C8051 |
5 |
25 |
0.125 |
КР514ИД1 |
5 |
50 |
0.250 |
АЛС324А1 |
- |
- |
0.720 |
К561ЛН1 |
5 |
44 |
0.22 |
140УД7 |
5 |
3,5 |
0.017 |
КР572ПВ3 |
- |
- |
0,02 |
резисторы |
- |
- |
1,35 |
Итого |
2,702 |
По источнику питания 5 В:
Данные сведены в таблицу 2.
Таблица 2 - Диапазон рабочих температур
Элемент |
Нижняя граница, °С |
Верхняя граница, °С |
AT89C8051 |
-40 |
+85 |
КР514ИД1 |
-10 |
+85 |
АЛС324А1 |
-60 |
+30 |
К561ЛН1 |
-60 |
+70 |
140УД7 |
-45 |
+85 |
КР572ПВ3 |
-40 |
+85 |
5ГДШ-3 |
-30 |
+85 |
Конденсаторы |
-40 |
+155 |
ИТОГО |
-10 |
+30 |
Таким образом, диапазон температур примет вид от -10 до +30ºC.
Общий алгоритм работы программы
После подачи питания
на устройство начинает работу основная
программа микропроцессора. Инициализация
включается в себя: заполнение данными ОЗУ, настройка портов,
включение контроллера прерываний, а также
настройка и сброс обоих таймеров. После
этого программа начинает опрос клавиатуры.
Опросу подлежат три кнопки: mBut1 и mBut2. Сначала
проверяется кнопка mBut1.При ее нажатом
состоянии происходит обнуление всех
счетчиков и начинается процедура приема
сигнала с аналого-цифрового преобразователя
по таймеру. Каждые 50 мс происходит считывание
кода в следущую ячейку массива mmas.
Когда окажется
уже 60 записей процесс заканчивается.
Затем мы переходим к поиску наибольшего
элемента в массиве находим его две составляющие,
если перевести его в десятичное число,
то мы можем получить 2 цифры, каждую из
которых необходимо будет вывести на индикатор.
Далее
идет процедура поочередного включения
семисегмента, на один из которых идет
код из переменной mBufInd и mBufId+1 в виду изменения
сигнала от порта P3.0, который либо дает
пройти току от катода семисегментного
светодиода на землю, либо нет.
Рисунок 9. Блок-схема общего алгоритма работы программы
Подпрограмма для записи массива оцифрованного сигнала.
Данная подпрограмма
выполняет основную задачу виброметра – следит за изменением сигнала
и в зависимости от его уровня задает ему
двоичный восьмиразрядный код, причем
запись его идет с определенной частотой.
Период занесения дискретизированного
сигнала приблизительно 50 мс, по истечении
этого периода вновь проверяется готовность
аналого-цифрового преобразователя к
записи и считывается код. Пока массив
не будет заполнен, все действует по этому
алгоритму.
Однако
как ячейки заканчиваются, начинается
процедура сравнения содержимого массива
с ячейкой памяти mmaximum, поочередно увеличивая
адрес сравниваемой ячейки на размер адресного
пространства предыдущей. Но чтобы не
проверять лишние переменные мы также
проверяем, не вышли ли мы за границы
объема нашего массива - сравнивая
индекс элемента массива с максимально
возможным.
Если весь массив проверен, то адрес ячейки
с максимальным зафиксированным сигналом
передается в процедуру подготовки индикации.
Рисунок 10. Блок-схема подпрограммы поиска наибольшего сигнала
Подготовка сигнала для индикатора
Ничего хорошего
не выйдет из того, чтобы подать
содержимое переменной mmaximum на индикатор, начиная с того,
что необходимо провести код через дешифратор,на
который подается лишь 4 бита информации.
Для начала мы готовим код, а именно делим
его на 10,чтобы разнести по разрядам десятичной
системы исчисления, которая удобнее для
восприятия пользователя на индикации.
Затем происходит поочередная подача
кода из 2-х переменных, одна из которых
содержит разряд десятков, а другая –
единиц согласно десятичной системе исчисления.
Эта передача сочетается с поочередной
заменой состояния катода для 1-го и 2-го
семисегментного индикатора.
Рисунок 11. Блок-схема подпрограммы вывода
максимального значения
Заключение
В результате выполнения курсовой работы был разработан виброметр. Результатом выполнения является принципиальная схема устройства и программное обеспечения на ассемблере для микропроцессора. Разработанное устройство полностью отвечает всем требованиям технического задания.
Список использованной
литературы
Приложение1. Принципиальная схема устройства
Приложение2. Перечень элементов
Приложение 3.
Текст программы
; Лаб3 - версия 00 - программ генерации
импульсов и мигания светодиодом
.list on ; эта директива включает листинг (протокол) процесса ассемблирования
;******** именуем константы и внешние выводы
mTik equ 10000 ; длительность импульса в мкс
;mPin10ms reg P3.5 ; имена внешних
mbitBUSY REG P3.5; бит занятости
mupr REG P3.0; управление индикатором
mbut1 reg P3.4
mbut2 reg P3.6;кнопки
mkvmas equ 60;число элементов массива
mKvozn equ 2; число индикаторов
;*****************
;***************** это макрос - поименованная группа команд
; МАКРОСЫ НЕ ДОЛЖНЫ СОДЕРЖАТЬ РУССКИХ КОММЕНТАРИЕВ!!!!!!!!!!!!!
mLoadTimer0 macro mDlitTi
Clr TF0
Clr TR0
Mov TH0, #>(-mDlitTi)
Mov TL0, #<(-mDlitTi)
SetB TR0
.endm
;*****************
;***************** ; распределяем ячейки ОЗУ
.ABSOLUTE
.DATA
.ORG 20h
mBufInd ds mKvozn
mPtrZn ds 1
mchislo ds 2
mmas ds mkvmas;сам массив
mFlags ds 2 ; 2 байта под битовые переменные
mFlagsReady REG mFlags.0
; Здесь можно определить и другие флажки.
;mbitRD REG mFlags.2;бит чтения
mCount10ms ds 1 ; Счетчик для счета времени по 10 мс.
; Здесь можно определить и другие переменные.
mi ds 1; счетчик числа элементов массива
mmaximum ds 1;максимум
mEndVar_BeginStack ds 1 ; Первая ячейка стека.
;*****************
;************** векторы прерываний
.RELATIVE
.CODE
.ORG 0
Jmp mStart
.ORG 3 ; внешнее прерывание 0
RetI
.ORG 0bh ; прерывание по таймеру 0
Jmp mIntT0
.ORG 13h ; внешнее прерывание 1
RetI
.ORG 1bh ; прерывание по таймеру 1
RetI
.ORG 23h ; прерывание по посл. порту
RetI
;**************
;************** начало программы
.ORG 30h
mStart:
Mov SP, #(mEndVar_BeginStack-1) ; начальный указатель стека
Mov mCount10ms, #0 ; обнулить счетчик
Mov mi,#0
Mov TMod, #00100001b ; таймер0 - на 16 бит.
; таймер1 - на 8 бит с перезагрузкой для посл. порта
mLoadTimer0 mTik
SetB ET0 ; разрешить прерывание от таймера0
SetB EA ; разрешить работу контроллера прерываний
;************** основной цикл программы
mMainLoop:
JNB mbut1,mm
JNB mbut2,mz
mm:
Call mShitivatel
mz:
Jmp mMainLoop
;**************
;************** процедура прерывания по переполнению таймера 0
mIntT0:
Push PSW ; Сохраняем
Push Acc ; регистры.
mLoadTimer0 mTik ; Перезагружаем таймер.
Inc mCount10ms ; Счет времени.
Call mIndZn;индикация
Pop Acc ; Восстанавливаем регистры
Pop PSW ; в обратном порядке.
RetI
;**************
mShitivatel:
Mov mi,#0;обнуляем счетчик,т е нулевой элемент массива
m1:
Mov A,mi
CJNE A, mkvmas,ms ;если <>60
mmax:;процедура максимума
Mov mi,#0
Mov mmaximum,#0
mzz:
Mov A,mi
CJNE A, mkvmas,mz1
Mov A, mmaximum
Call mAccToBcdtoBufInd;максимум на индикацию
Jmp mex1
mz1:
Mov A,mmas;адрес нулевого элемента
add A,#mi; адрес нужного элемента
mov R0,A
mov A,@R0 ;сам элемент
SUBB A, mmaximum ;больше максимума?
JB OV,mz1;если отрицательная разница, то
Add A, mmaximum
Mov mmaximum,A ;запоминаем новый максимум
Inc mi;следующий элемент
Jmp mzz
ms:
JNB mbitBUSY,ms; ждем готовности АЦП
Mov A,mmas;адрес нулевого элемента
add A,#mi; адрес нужного элемента
mov R0,A
mov @R0,P1
Inc mi
mmm:;задержка 50 мс перед считыванием следующего элемента
Mov A, mCount10ms ; Переменная mCount10ms равна 50?
CJNE A, #5, mmm ;
Mov mCount10ms, #0 ; начинаем счет времени с начала.
Jmp m1
mex1:Ret
mAccToBcdtoBufInd:
mov B,#10
div AB
mov mBufInd+1,A
mov mBufInd,B
Setb mupr ;2ой индикатор
Ret
mIndZn:
mov A,mPtrZn
add A,#mBufInd
mov R0,A
mov A,@R0
mov P2,A
Cpl mupr ; переход на 1ый индикатор
inc mPtrZn
mov A,mPtrZn
CJNE A,#mKvozn,mEx
Mov mPtrZn,#0
mEx:Ret
END