Система управлением 'ролл'-воротами

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    1,11 Мб
  • Опубликовано:
    2012-11-19
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Система управлением 'ролл'-воротами

Оглавление

1. Техническое задание

. Описание функциональной схемы

.1 Описание элементов схемы

. Разработка принципиальной схемы

.1 Выбор микроконтроллера

.2 Обоснование выбора контроллера

.3 Выбор других элементов схемы

. Описание программы управления контроллером

.1 Общий алгоритм работы

.2 Описание работы программы

Заключение

1. Техническое задание

В данном курсовом проекте поставлена задача разработки системы контроля доступа с управлением «ролл» воротами.

Данная система выполняет контроль вводимых данных с матричной клавиатуры, размерностью 12 клавиш.

Отображение информации ведется на двух индикаторах внешнем семисегментном и внутреннем двухстрочном буквенно цифровом ЖКИ.

Этот модуль контроллера ворот предусматривает взаимодействие через интерфейс RS485.

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

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

Для управления воротами используется два электронных ключа управляющих двигателями на 220В. Один двигатель открывает ворота, второй закрывает их.

Для того чтобы обеспечить контроль доступа и пропуск только допущенным лицам используется электронный цифровой ключ, который записан во внутреннюю флеш ПЗУ и может быть добавлен или удалён с помощью специализированного «мастер» ключа администратора.

Для повышения защищенности предусмотрен ввод цифрового пароля со специальной 12-ти клавишной клавиатуры.

2. Описание функциональной схемы



2.1 Описание элементов схемы


Приведённая выше функциональная схема представляет структуру контроллера, управляющего системой управления воротами. Её можно представить в виде следующих блоков:

ПИ - преобразователь электронного интерфейса RS485 + - 12 В, который создаёт требуемые +/ - 12 В зачёт встроенного внутреннего генератора и конденсаторов обвязки, подключённых к данному чипу.

МК - управляющий микроконтроллер. Он считывает информацию датчиков температуры, движения, а также введённые пользователем при помощи клавиатуры параметры: открытия, закрытия ворот, ввода пароля. В зависимости от считанной информации микроконтроллер посылает сигналы в блок управления открытия, закрытия ворот и в блок электронного ключа. А также посылает сигналы в ЖКИ.

ЖКИ - специализированный жидкокристаллический дисплей, необходимый для отображения параметров работы системы, введённых пользователем.

БЭК1 - блок электронного ключа, в котором осуществляется управление открытием ворот после приёма сигналов, посланных микроконтроллером.

БЭК2 - блок электронного ключа, в котором осуществляется управление закрытия ворот после приёма сигналов, посланных микроконтроллером.

БЭК3 - блок электронного ключа, в котором осуществляется управление пожаротушением после приёма сигналов, посланных микроконтроллером.

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

ДД - датчик движения, который определяет движение автомобиля или человека в гараже.

БК - блок клавиатуры. Клавиатура содержит двенадцать кнопок. Это позволяет упростить логику и обеспечивает большое удобство работы с системой. Итак, на клавиатуре находятся следующие клавиши управления:

.   Подтверждение ввода данных.

2.       Отмена ввода данных.

.        Цифровые клавиши от 0 до 9

Данная функциональная схема отражает основные элементы необходимые для построения системы управления воротами.

3.Разработка принципиальной схемы

 

3.1    Выбор микроконтроллера


Для обеспечения использования наиболее подходящего контроллера оптимально рассмотреть несколько различных контроллеров, удовлетворяющих следующим требованиям:

·  8-ми разрядный,

·        с низким энергопотреблением,

·        наличие статичного режима,

·        гарвардская архитектура,

·        достаточное количество выводов

Мною были выбраны контроллеры следующих серий: AVR (ATiny2313), PIC (16C745), MK-51 (AT89C4051). В каждой серии выбирается примерно аналогичных по характеристикам контроллеры сравниваются их параметры, и оценивается, на сколько они подходят для оценивания конкретной задачи. Информация о выбранных микроконтроллерах для удобства представлена в таблице, наглядно показывающей различия между ними:


AVR (ATiny2313)

PIC (16C745)

MK-51 (AT89С4051)

ПЗУ (память программ)

2 Кб

8 Кб

4 Кб

Таймеры/счетчики

1(8 разрядов) 1(16 разрядов)

2(16 разрядов)

2(16 разрядов)

Число портов ввода/вывода

18

22

32

Питание

2,7-5,5

2,0-5,5

4,0-5,5

Архитектура

RISC

RISC

CISC

Тактовая частота

20МГц

24МГц

Режим экономии энергии

Idle, Power-down, Standby

Sleep

Idle, Power-down

Память данных

128 байт

256 байт

128 байт

Стоимость

50 руб.

300 руб.

50

AVR-микроконтроллер фирмы Атмел - это 8-разрядные RISC микроконтроллер для встраиваемых приложений. Они привлекают внимание наилучшим соотношением показателей быстродействие/энергопотребление, удобными режимами программирования, доступностью программно-аппаратных средств поддержки и широкой номенклатурой выпускаемых кристаллов. Микроконтроллеры обычно поставляются со стертыми встроенными FLASH и EEPROM блоками памяти (содержимое всех ячеек = $FF), готовыми к программированию. Улучшенная RISC (enhanced RISC) архитектура AVR-микроконтроллеров объединяет в себе комплекс решений, направленных на повышение быстродействия микропроцессорного ядра AVR. Арифметико-логическое устройство (ALU), в котором выполняются все вычислительные операции, имеет доступ к 32-м оперативным регистрам, объединенным в регистровый файл. Выборка содержимого регистров, выполнение операции и запись результата обратно в регистровый файл выполняются за один машинный цикл. Большинство встраиваемых микроконтроллеров имеют только один такой регистр, непосредственно доступный ALU, - аккумулятор, что требует включения в программу дополнительных команд его загрузки и считывания. В качестве контроллера рассмотрим ATiny2313, представляющий собой 8-битовый микроконтроллер, имеющий, следующие характеристики: построен на основе расширенной RISC-архитектуры; 2К загружаемой флэш-памяти; 32 рабочих регистра; 2 таймера/счетчика; 128 байтов EEPROM; 15 линий ввода/вывода общего назначения; внешние и внутренние прерывания; встроенный последовательный порт.

Альтернативой может быть контроллер другой серии, например PIC 16С745. PIC16C745 - это 8-pазpядные микpоконтpоллеpы с RISC аpхитектуpой, производимые фирмой Microchip Technology. Это семейство микpоконтpоллеpов отличается низким энеpгопотpеблением и высокой скоростью. Микpоконтpоллеpы имеют встроенное ЭППЗУ пpогpамм, ОЗУ данных и выпускаются в 20 выводных корпусах. Память данных (ОЗУ) имеет pазpядность 8 бит, память пpогpамм (ППЗУ) для PIC16C745 14. Использование Гаpваpдской аpхитектуpы позволяет достичь высокой скорости выполнения битовых, байтовых и pегистpовых операций.

МК семейства МК-51 используют гарвардскую архитектуру. Классический микроконтроллер семейства 51 и его улучшенная модификация 52 серии имеет следующие данные: целочисленный 8-разрядный CISC-процессор, использование CISK архитектуры позволяет упростить программу за счет поддержки команд умножения и деления; тактовая частота до 80 МГц; командный цикл до 12 тактов; раздельные адресные пространства программ и данных; встроенная память программ объёмом 2-64 кб; встроенное ОЗУ данных объёмом 128б-64Кб; 40 выводов, 32 линии ввода-вывода; два или 4 8/16-разрядных таймера; последовательный порт RS-232; возможность подключения внешней памяти программ и данных, до 64 кб каждая (некоторые модели до 4Мб); режим пониженного энергопотребления.

Различные модификации дополнительно имеют возможность работы с интерфейсами SPI, I2C, USB.

 

.2 Обоснование выбора контроллера


Для данной задачи - разработки системы контроля доступа с управлением воротами - микроконтроллер семейства МК-51 является оптимальным, так как сочетает в себе большие возможности управления, необходимые для решения поставленной мной задачи. Кроме того по существенным параметрам: число портов ввода вывода (32), архитектура (CISC) - микроконтроллер MCS-51 АТ89C4051 превосходит микроконтроллеры подобных серий других производителей. Кроме того микроконтроллер серии МК-51 не уступает микроконтролерам AVR и PIC также в таких параметрах как: число таймеров счетчиков (2), тактовая частота (до 24 МГц), режимы экономии энергии (Idle, Power-down). А так же при серийном выпуске данного изделия большую роль будет играть его малая стоимость и высокая надежность работы.

Немаловажен тот факт, что архитектура данного контролера мной изучена в курсе лабораторных работ. А также важно, что у меня имеются средства программирования и средство моделирования элементов программы - лабораторный стенд на ADUC812

Краткие характеристики контроллера MCS-51 АТ89С4051:

Для использования в данном устройстве мной был выбран микропроцессор АТ89С4051 серии MSC-51.

Он обладает высокими техническими характеристиками:

. Частота работы от 0 до 24МГц.

2.       Объем встроенного флешь ПЗУ - 4КБ.

.        Объем регистрового ОЗУ 128 байт.

.        Два счетчика 16ти разрядных счетчика\таймера.

.        Порт выдерживает нагрузку до 20мА.

.        Число портов ввода вывода 32(оставлены порты P1 и P3).

.        Котроллер поставляется в сорокавыводном корпусе.

.        Напряжения питания от 5В +-20% (номинальное 5В).

Все выше сказанное позволяет реализовать требуемые функции и существенно упростить схему.

Распиновка выводов контроллера представлена на рис. 2.

Рис. 2. Разводка выводов контроллера и соответствие портам

Обозначения:

·  GND - потенциал общего провода ("земли");

·        Vcc - основное напряжение литания +5 В;

·        XTAL1,XTAL2 - выводы для подключения кварцевого резонатора;

·        RST - вход общего сброса микроконтроллера;

·        P1 - восьми битный квази двунаправленный порт ввода/вывода: каждый разряд порта может быть запрограммирован как на ввод, так и на вывод информации, независимо от состояния других разрядов;

·  РЗ - восьми битный квази двунаправленный порт, аналогичный. Р1; кроме того, выводы этого порта могут выполнять ряд альтернативных функций, которые используются при работе таймеров, порта последовательного ввода-вывода, контроллера прерываний, и внешней памяти программ и данных;

Рис. 3. Структурная схема АТ89C4051

 

3.3Выбор других элементов схемы


Связь с компьютером обеспечивается через специализированный интерфейс RS485. Для сопряжения с интерфейсом RS-485, необходим специализированный чип преобразующий напряжение +-12В или полнофункциональный преобразователь уровней для RS-485. В нашем случае эффективно использовать типовые микросхемы MAX серии 85 или их аналог преобразователь MAX-485, обеспечивающий нужный нам интерфейс.

Рис. 4. Разводка выводов микросхемы MAX-485

Основные параметры преобразователя MAX-485:


Текстовый LCD-дисплей HG1 имеет размер экрана 2 строки по 16 символов, размер одного символа - 5х8. Обмен данными с дисплеем производится по 4-х разрядной шине данных, причём сначала передаются старшие 4 байта, а затем младшие, управление - по 3-м линиям: RS - отвечает за формат передаваемых сигналов (1 - данные, 0 - команда); RW - определяет направление передачи информации (0 - запись (от контроллера к дисплею), 1 - чтение (от дисплея к контроллеру)), так как нам не требуется считывать какие-либо данные с контроллера этот вывод заземлен, что соответствует режиму записи; Е - сигнал активности дисплея, при Е=0 дисплей не воспринимает сигналы шин данных и управления, при Е=1 ведётся обмен информацией между дисплеем и контроллером. Резистором производится регулировка контрастности изображения на LCD-дисплее.

Электронной ключ нам задан в двух возможных вариантах

- это iButton - микросхема, заключённая в стандартный круглый корпус из нержавеющей стали, диаметром 16.3 мм.

- это RFid радио метка по протоколу полностью совместима с iButton и возвращает аналогичный код. При подключении считывателя легко заменяет iButton. Поэтому будем рассматривать базовый электронный ключ iButton, работающий по протоколу 1-Wire.

Протокол IWare предусматривает подключение по двупроводной линии связи с подтягивающим резистором 4.5Ком.Последовательная передача осуществляется в полудуплексном режиме (т. е. либо приём, либо передача), внутри дискретно определённых временных интервалов, называемых тайм-слотами. Микроконтроллер (master устройство), подключенный к считывающей чашке, всегда инициирует передачу с помощью посылки командного слова на прикладываемый к чашке iButton (он играет роль подчинённого, или slave устройства). К шине может быть подключено несколько slave-устройств. Подобно электрическим вилке и розетке, которые определяют потребитель и источник электричества, контактное считывающее устройство в виде чашки является атрибутом master-устройства а круглая металлическая "таблетка" iButton является признаком slave-устройства. Такое точное разделение позволяет автоматически избежать конфликтов типа соединения двух master-устройств.

Команды и данные посылаются бит за битом и собираются в байты, причём вначале передаётся наименее значащий бит LSB (Least Significant Bit). Синхронизация master и slave происходит по спадающему срезу сигнала, когда master замыкает стоком выходного транзистора порта линию данных на провод земли. Через определённое время после среза сигнала происходит анализ (выборка) состояния данных на линии (лог. 0 или лог. 1) для получения одного бита информации. В зависимости от направления передачи информации в данный момент эту выборку делает либо устройство master, либо устройство slave. Этот метод обмена информацией называют передачей данных в тайм-слотах. Каждый тайм-слот отсчитывается независимо от другого, и в обмене данными могут иметь место паузы без возникновения ошибок.

Рис. 5. Передача данных в тайм-слотах

 

Синхронизация

Почти сразу после присоединения к считывающему устройству (через несколько микросекунд) slave-устройство iButton выдаёт на линию импульс низкого уровня, чтобы сказать устройству master, что оно на линии и ожидаёт получения команды. Этот сигнал называется presence pulse (импульс присутствия, далее просто presence). Master может также давать запрос на iButton с целью получения presence, путём выдачи на iButton специального импульса, называемого импульсом сброса (reset pulse, далее просто reset). Если iButton принял reset или если он был отсоединён от считывающего устройства, он будет анализировать линию данных, и как только линия снова достигнет высокого уровня, iButton сгенерирует presence.

Рис. 6. Импульсы RESET и PRESENCE

 

Передача данных

После выдачи presence iButton ожидает получения команды. Любая команда записывается в iButton с помощью последовательности тайм-слотов, записывающих в iButton биты 1 и 0. Такая последовательность создаёт полный байт команды.

Передача данных в обратном направлении (чтение iButton) использует те же самые временные правила для представления 0 или 1. Поскольку iButton разработано как slave-устройство, то оно оставляет устройству master определять начало каждого тайм-слота. Чтобы произвести чтение iButton, master для чтения одного бита данных просто генерирует тайм-слот записи лог. 1 (именно тайм-слот записи, а не чтения). Если бит, который посылает iButton, равен 1, то iButton просто ожидает появления следующего тайм-слота, пропуская текущий. При этом с линии данных master считывает 1. Если бит, который посылает iButton, равен 0, то iButton удерживает линию данных в состоянии лог. 0 определённое время, и master считывает с линии данных 0.

В качестве датчика температуры рассмотрены несколько вариантов но окончательно выбран цифровой вариант реализации DS18S20 имеющий в себе все элементы преобразования температуры в цифровой вид и возможность адресной выборки. Они обеспечивают точность до 0.1, что позволяет использовать их в качестве надежного средства измерения. Не требуется АЦП, они сами преобразуют данные в цифровой вид. Подключение можно выполнить на одну двухпроводную линию, это возможно за счет того, что они обеспечивают возможность адресного обращения и питания по линии связи.

Отличительные особенности датчика DS18S20: микросхема цифрового термометра DS18S20, обеспечивает измерение температуры в диапазоне -55..+125°C с дискретностью 0.5°C; с помощью дополнительных вычислений дискретность представления температуры можно уменьшить, в нашем случае она равна 0.1°C; DS18S20 допускает напряжение питания от +3 до +5.5В.

Каждая микросхема DS18S20 имеет уникальный и неизменяемый 64 битный серийный номер, который используется как узловой адрес датчика. Это позволяет множеству микросхем DS18S20 сосуществовать на одной 1 проводной шине. Для DS18S20 температура представляется в виде 9-битного значения в дополнительном коде. Поскольку это значение занимает 2 байта, все разряды старшего байта равны знаковому разряду.





Рис. 7. Внешний вид микросхемы цифрового термометра DS18S20

Обозначения:

·  GND - потенциал общего провода ("земли");

·        Vcc - основное напряжение литания +5 В;

·        DQ - ввод/вывод данных

Контроллер полностью управляет обменом. Все пересылки начинаются с процесса инициализации. Инициализация производится в следующей последовательности (рис. 8):

Контроллер посылает импульс сброса (reset pulse) - сигнал низкого уровня длительностью не менее 480 мкс. За импульсом сброса следует ответ подчиненного устройства (presence pulse) - сигнал низкого уровня длительностью 60-240 мкс, который генерируется через 15 - 60 мкс после завершения импульса сброса.

Рис. 8. Инициализация обмена по 1-проводной шине

Ответ подчиненного устройства даёт контроллеру понять, что на шине присутствует датчик температуры и он готов к обмену. После того, как контроллер обнаружил ответ, он может передать датчику одну из команд. Передача ведётся путём формирования контроллером специальных временных интервалов (time slots). Каждый временной интервал служит для передачи одного бита. Первым передаётся младший бит. Интервал начинается импульсом низкого уровня, длительность которого лежит в пределах 1-15 мкс. Поскольку переход из единицы в ноль менее чувствителен к ёмкости шины (он формируется открытым транзистором, в то время как переход из ноля в единицу формируется подтягивающим резистором), именно этот переход используют 1-проводные устройства для синхронизации с контроллером. В подчиненном устройстве запускается схема временной задержки, которая определяет момент считывания данных. Номинальное значение задержки равно 30 мкс, однако, оно может колебаться в пределах 15-60 мкс. За импульсом низкого уровня следует передаваемый бит. Он должен удерживаться контроллером на шине в течение 60-120 мкс от начала интервала. Временной интервал завершается переводом шины в состояние высокого уровня на время не менее 1 мкс. Нужно отметить, что ограничение на это время сверху не накладывается. Аналогичным образом формируются временные интервалы для всех передаваемых битов:

Рис. 9. Передача бита нуля/единицы

Первой командой, которую должен передать контроллер для DS18S20 после инициализации, является одна из команд функций ПЗУ.

При приеме данных от подчиненного устройства временные интервалы для принимаемых битов тоже формирует контроллер. Интервал начинается импульсом низкого уровня длительностью 1-15 мкс. Затем контроллер должен освободить шину, чтобы дать возможность термометру вывести бит данных. По переходу из единицы в ноль DS18S20 выводит на шину бит данных и запускает схему временной задержки, которая определяет, как долго бит данных будет присутствовать на шине. Это время лежит в пределах 15-60 мкс. Для того чтобы данные на шине, которая всегда обладает некоторой ёмкостью, гарантированно установились, требуется некоторое время. Поэтому момент считывания данных контроллером должен отстоять как можно дальше, но не более чем на 15 мкс от начала временного интервала:

Рис. 10. Чтение бита по 1-проводной шине

Прием байта начинается с младшего бита. Вначале идет байт кода семейства. За кодом семейства идет 6 байт серийного номера, начиная с младшего.

После обработки одной из команд функций ПЗУ, DS18S20 способен воспринимать еще несколько команд:

·  Write Scratchpad [4Eh]. Эта команда позволяет записать данные в промежуточное ОЗУ DS18S20.

·        Read Scratchpad [BEh]. Эта команда позволяет считать данные из промежуточного ОЗУ.

·        Convert T [44h]. Эта команда запускает процесс преобразования температуры.

·        Recall E2 [B8h]. Эта команда действует обратным образом по отношению к команде Copy Scratchpad, т.е. она позволяет считать байты TH и TL из энергонезависимой памяти в промежуточное ОЗУ. При включении питания эта команда выполняется автоматически.

При использовании DS18S20 только для измерения температуры нужны всего две из этих команд: Convert T и Read Scratchpad.

Последовательность действий при измерении температуры должна быть следующей:

Посылаем импульс сброса и принимаем ответ термометра.

Посылаем команду Skip ROM [CCh].

Посылаем команду Convert T [44h].

Формируем задержку минимум 750мс.

Посылаем импульс сброса и принимаем ответ термометра.

Посылаем команду Skip ROM [CCh].

Посылаем команду Read Scratchpad [BEh].

Читаем данные из промежуточного ОЗУ (8 байт).

Датчик движения.

Датчик движения KS-200DLT. Он имеет достаточно низкую частоту ложных срабатываний и высокую помехоустойчивость. Детектор надежен и прост в эксплуатации.

Благодаря сочетанию сдвоенного PIR элемента с усовершенствованной технологией цифровой обработки сигнала и автоматической температурной компенсацией, детектор KS-200DLT имеет достаточно низкую частоту ложных срабатываний и высокую помехоустойчивость.

Основные функции и особенности:

Микропроцессорная схема

Двухканальная цифровая обработка сигнала

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

Настройка трех классов чувствительности

Сдвоенный PIR элемент с высокой чувствительностью

Контроль вскрытия корпуса

Технические характеристики

Дальность действия детектора: 6…12 м

Угол действия детектора: 110 х 35о

Рабочее напряжение: 9,6В - 13,8 В

Нормальный ток: <10 мА 5.

Ток тревожной сигнализации: <40 мА

Длительность нахождения в состоянии автоблокировки: 20 секунд.

Для организации ПЗУ была выбрана EEPROM AT24c16. Подключаемая по интерфейсом I2C имеющая следующие технические характеристики

Напряжение питания работы 5.0 (Vсс =от 4.5В до 5.5В)

Внутренняя организация -  2048x8 (16КБ)

Последовательный двухпроводный интерфейс I2C

Максимальная частота тактирования - 400 кГц (5V)

Режимы записи - 16-байтовая страница

Высокая надежность

Временной ресурс: 1 миллион циклов записи

Сохранение данных: 100 лет

ESD защита: > 3,000В

Интерфейс I2C является двухпроводным последовательным интерфейсом, разработанным фирмой «Philips Corporation».

Две линии данных (SDA) и синхронизации (SCL) служат для переноса информации. Каждое устройство распознается по уникальному адресу, задаваемому типом микросхемы и внешними выводами A0,A1,A2 (когда используется одна микросхема, все эти выводы подключены на землю) может работать как передатчик или приёмник, в зависимости от назначения устройства. Устройства могут быть классифицированы как ведущие и ведомые при передаче данных. Ведущий - это устройство, которое инициирует передачу данных и вырабатывает сигналы синхронизации. При этом любое адресуемое устройство считается ведомым по отношению к ведущему.

Данные на линии SDA должны быть стабильными в течение ВЫСОКОГО периода синхроимпульса. ВЫСОКОЕ или НИЗКОЕ состояние линии данных должно меняться, только если линия синхронизации в состоянии НИЗКОЕ (см. Рис 17).

Рис. 11. Пересылка бита в шине I2C

.   Линия данных находится в стабильном состоянии, данные определены

2.       Допускается изменение данных

Специальные ситуации на шине отмечают сигналы START и STOP (см. Рис 18). Переход линии SDA из ВЫСОКОГО состояния в НИЗКОЕ, в то время как SCL находится в ВЫСОКОМ состоянии означает START. Переход линии SDA из НИЗКОГО состояния в ВЫСОКОЕ при SCL в ВЫСОКОМ состоянии означает STOP. Сигналы СТАРТ и СТОП всегда вырабатываются ведущим. Считается, что шина занята после сигнала СТАРТ. Шина считается освободившейся через определенное время после сигнала СТОП. Определение сигналов СТАРТ и СТОП устройствами, подключенными к шине достаточно легко, если в них встроены необходимые цепи. Однако микроконтроллеры без таковых цепей должны осуществлять считывание значения линии SDA как минимум дважды за период синхронизации для того, чтобы определить переход состояния.

Рис. 12. Сигналы СТАРТ и СТОП

.   Сигнал СТАРТ

2.       Сигнал СТОП

Каждый байт, передаваемый по линии SDA, должен состоять из 8 бит. Количество байт, передаваемых за один сеанс связи неограничено. Каждый байт должен оканчиваться битом подтверждения. Данные передаются, начиная с наиболее значащего бита (см. Рис. 13). Если приёмник не может принять еще один целый байт, пока он не выполнит какую-либо другую функцию (например, обслужит внутреннее прерывание), он может удерживать линию SCL в НИЗКОМ состоянии, переводя передатчик в состояние ожидания. Пересылка данных продолжается, когда приёмник будет готов к следующему байту и отпустит линию SCL.

В некоторых случаях, необходимо использовать другой формат данных (например, CBUS). Посылка, которая передается с таким адресом, может быть закончена выдачей сигнала СТОП, даже если это происходит во время передачи байта. В этом случае подтверждение не генерируется.

Рис. 13. Пересылка данных по шине I2C

.   Сигнал СТАРТ

2.       Старший разряд байта

.        Сигнал подтверждения от приёмника

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

.        Сигнал подтверждения от приемника

.        Сигнал СТОП

Подтверждение при передаче данных обязательно. Соответствующий испульс синхронизации генерируется ведущим. Передатчик отпускает (ВЫСОКОЕ) линию SDA в течение синхроимпульса подтверждения. Приёмник должен удерживать линию SDA в течение ВЫСОКОГО состояния синхроимпульса подтверждения в стабильно НИЗКОМ состоянии (рис. 14).

Обычно, приёмник, который был адресован, обязан генерировать подтверждение после каждого принятого байта, исключая те случаи, когда посылка начинается с адреса CBUS .

В том случае, когда ведомый-приёмник не может подтвердить свой адрес (например, когда он выполняет в данный момент какие-либо функции реального времени), линия данных должна быть оставлена в ВЫСОКОМ состоянии. После этого ведущий может выдать сигнал СТОП для прерывания пересылки данных.

Если ведомый-приёмник подтвердил свой адрес, но через некоторое время больше не может принимать данные, ведущий также должен прервать пересылку. Для этого ведомый не подтверждает следующий байт, оставляет линию данных в ВЫСОКОМ состоянии и ведущий генерирует сигнал СТОП.

Если в пересылке участвует ведущий-приёмник, то он должен сообщить об окончании передачи ведомому-передатчику путем не подтверждения последнего байта. Ведомый-передатчик должен освободить линию данных для того, чтобы позволить ведущему выдать сигнал СТОП или повторить сигнал СТАРТ.

Рис. 14. ACK - Подтверждение приема байта микросхемой ПЗУ

.   Данные, переданные передатчиком

2.       Данные, переданные приёмником

.        SCL от ведущего

.        Сигнал СТАРТ

.        Синхроимпульс подтверждения

ролл ворота датчик микроконтроллер

Схемы управления подъемом и опусканием ворот подключаются к портам микроконтроллера и представляют собой слаботочные оптоэлектронные семисторные ключи MOC306 (коммутируемый ток до 1А). Эти ключи управляют далее более мощными семисторами ВТ139 (с током коммутации до 25А или 5КВт) к которым непосредственно и подключены двигатели, поднимающие и опускающие ворота.

4. Описание программы управления контроллером

 

4.1    Общий алгоритм работы


При старте система сразу же переходит в основной цикл работы программы управления контроллером. Назовем этот цикл ожиданием прикосновения ключа. На индикаторе при ожидании отображается буква “L” как сигнал к готовности принять ключ iButton.

Прикосновение мастер - ключа на небольшой промежуток времени семисегментный индикатор отображает букву “P” - как сигнал к готовности программировать в память новый ключ (также небольшой промежуток времени), либо ожидание повторного касания мастером для цикла открытия двери.

При совпадении приложенного ключа с ключом, имеющимся в памяти семисегментный индикатор отображает на небольшой промежуток времени буква “b” как сигнал к тому, что можно нажимать кнопку инициирующую открытие двери. При нажатии на кнопку индикатор отображает “o” как сигнал, что дверь открыта. Для наглядности также выводится номер ключа(в соответствии с его адресом в памяти). На несколько секунд замок открывается, а по COM - порту передается код ключа, с помощью которого была открыта дверь.

После проработки подобных действий система вновь переходит в режим ожидания прикосновения ключа и выводит на индикатор “L”.

В режиме ожидания опрашивается датчик температуры, и полученное значение сравнивается с предыдущим. Если температура резко возросла на порт P2.0 подается 1, что приводит к воспроизведению звукового сигнала, также на удаленный компьютер по COM порту передается информация о возникшей критической ситуации.

По запросу пользователя прошедшего аутентификацию с помощью LCD и клавиатуры может быть просмотрена статистика последнего посещения.

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

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

Интерфейс общения с пользователем представлен меню пошагово:

1. Меню:

1.1     Просмотр даты и времени

1.2     Настройки:

1.2.1  ввод времени/даты

1.2.1.1 ввод даты

1.2.1.2         ввод часов

.2.1.3 ввод минут

.2.1.4 ввод секунд

Меню управляется 12 клавишами:

-10. цифры 0-9

- enter

- back

Если код электронного ключа совпал с записаннам в памяти, то необходимо ввести код, тогда на LCD будет дублироваться вводимые пользователем с клавиатуры значения:

В

в

е

д

и

т

е


к

о

д






1

2

3

4

5

6

7











В зависимости от того какой пункт меню выбран на дисплее будет выведено:

если выбран пункт меню “установка времени и даты” (отображается не изменяемая статическая информация):

у

с

т

а

н

о

в

к

а


в

р

е

м

н

и

/

д

а

т

ы
























если пользователь вводит параметры времени (дата, часы, минуты):

221254













































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


Программа работает за счет нескольких основных функций() - осуществляет считывание ключа находящегося на линии I-Ware;cwrite () - осуществляет запись в flash-ПЗУ кода нового ключа;cread () - осуществляет чтение кода ключа из flash-ПЗУ;

При включении в розетку контроллер производит начальную инициализацию основных переменных и массивов и необходимых флагов. Например, массив master_key [] используется для хранения кода мастер - ключа, массив dataib [] используется для принятия кода ключа, присоединенного к линии, массив datai2c [] используется для принятия кода ключа, читаемого из памяти. Переменные bitint0 - привязка к биту 0 порта P1(линия подключения считывающей чашки), button - привязка к биту 2 порта P3 (линия кнопки открытия замка), button1 - привязка к биту 3 порта P3 (линия кнопки закрытия замка), sda, scl привязка к битам 6,7 порта P0 (линии подключения ППЗУ), sdab привязка к биту 5 порта P3 (линия ключа замка), sdab1 привязка к биту 4 порта P3 (линия ключа замка).

Далее организуется основной цикл работы программы - while(1). Флаг приема кода ключа - chet устанавливается в 0, далее читаем линию процедурой ibread (). Процедура чтения ключа организована, как несколькими циклами и операторами условия. Первое что мы делаем - запрещаем прерывания (EX = 0), bitint устанавливаем в 0 и при помощи цикла for организуем формирование reset-импульса 500мкс, далее bitint устанавливаем в 1 и организуем паузу в 80мкс перед приемом ответа ключа, сбросив в 0. Далее организуем 500-микросекундную задержку и если ключ находится на линии и ответил(bitint перешел в 1) переходим к циклу, передающему ключу побитно команду 0x33 (00110011) которая инициирует ключ к передаче кода на контроллер(master-устройство). Прием кода организован как цикл в цикле for, побитно принимая в переменную ii код. Принятый байт записывается в определенный элемент массива dataib []. По завершению флаг chet устанавливается в 1.

Далее в цикле происходит проверка на совпадение принятого ключа с мастером, и при совпадении на порт P2 выводится значение соответствующее букве P (0x8C), и происходит задержка (delay) ожидания касания ключа. При прикосновении ключа отрабатывает функция ibread () и происходит повторная проверка кода с кодом мастера и при совпадении программа ожидает нажатия кнопки открытия ворот гаража и если кнопка нажата, пока не истек таймаут button устанавливается в 1 на несколько секунд. Код ключа отсылается по COM-порту. Если ключ не соответствует мастеру, но программа переходит в цикл записи нового ключа. Он организован следующим образом: в цикле процедура i2cread () последовательно перебирает имеющиеся в памяти ключи и при нахождении адреса, по которому в памяти нет кода записывает новый ключ по данному адресу. Процедура i2cread () работает по следующему алгоритму: в соответствии с правилами передачи данных по шине I2C организуется старт импульс начала обмена (используются scl - стробирование, и sda - данные). Стробирование данных, происходящее по scl реализует небольшая процедура i2cb () она обеспечивает корректное изменение sda. Изменение sda возможно при scl = 0, время переключения по данным производителя составляет 5-8мкс, поэтому, чтобы уверенно попасть на значение sda в процедуре мы обеспечиваем 4-ех кратную задержку 0 для scl, 6-ти кратную задержку установленного значения sda и только после этого возвращаем scl значение 1.

Далее в соответствии документацией формируется 7-ми битный адрес устройства (1010000), восьмой бит заполняется 1 как признак работы памяти в режиме чтения. Далее устройство памяти самостоятельно формирует сигнал ACK и в цикле формируем, установленный до вызова процедуры адрес (adrh), по которому будет производиться чтение. Формируется ACK. Далее при помощи цикла в цикле организуется прием 7-ми байт и запись кода в массив datai2c []. Оканчивается процедура формированием stop-импульс.

Новый ключ записывается в память процедурой i2cwrite (). Она работает аналогично процедуре i2cread (), но восьмой бит остается 0-ем, а вместо цикла чтения кода организуется запись из массива dataib []. Нужно отметить, что при записи ACK формируется подчиненным устройством (flash-ПЗУ), а при чтении после каждого принятого байта информации ACK устанавливает контроллер, путем сброса sda в 0.

Если изначально присоединенный ключ не мастер, то происходит поиск ключа в памяти и если ключ обнаружен программа запускает цикл ожидания нажатия кнопки открытия или закрытия ворот гаража. И если кнопка нажата (button = 1 или button1 = 1) происходит открытиеили закрытие ворот. Код ключа отсылается по COM-порту.

Функция void klaviatura(void):

Вначале сбрасывается значение счетчика для клавиатуры: в течение 100 мксек на вход счетчика подаем высокий уровень, затем в течение 200 мксек - низкий. Затем передаем счетные импульсы пока на выходе счетчика не получим низкий уровень, что будет свидетельствовать о том, что нажата клавиша, номер которой равен номеру счетного импульса вызвавшего низкий уровень на выходе счетчика. Возвращаем полученное значение номера нажатой клавиши и выходим из функции.

Функция SendHex(unsigned char Data) посылает один байт как два ASCII hex байта:

Переводит данные в ASCII коды и пересылает их, занося в SBUF.

Функция HacTransmit(unsigned char *Buffer, Length) производит посылку пакета через MAX485:

Активируем передатчик, переводя P3.0 в 1 ,устанавливаем длину сообщения, посылаем начало кадра SBUF=STX; посылаем каждый байт как Hex ASCII слово, вычисляем контрольную сумму, посылаем контрольную сумму, посылаем сигнал окончания кадра SBUF=ETX; отключаем передатчик, устанавливая P3.0 равным 0.

Функция displey (void) отображает передаваемые данные на дисплее:

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

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

Функция InitIWARE инициализирует датчик:

Удерживаем низкий уровень на P1.7 как минимум на 500 мсек, восстанавливаем высокий уровень и ожидаем как минимум 60 мсек перед проверкой присутствия устройства. Проверяем, присутствует ли датчик, ожидаем минимум 500 мсек пока устройство не восстановит высокий уровень, возвращаем 1 если датчик присутствует и 0 если датчика на шине нет.

Функция IWAREWByte записывает байта в датчик:

Инициализируем слот для записи, устанавливая низкий уровень на P1.7, позволяем датчику зафиксировать инициализацию, осуществляя задержку на 15 мсек, выводим бит для записи, ожидаем 45 мсек, пока устройство считает переданный бит, Восстанавливаем высокий уровень на шине. Переходим к следующему биту, и повторяем всю цепочку для нового бита. Передача осуществляется, пока не будет передан последний бит.

Функция IWARERByte читает байт с датчика:

Устанавливаем на шине нулевой уровень, позволяем датчику зафиксировать инициализацию, осуществляя задержку на 15 мсек, восстанавливаем единичное значение на шине, позволяем датчику установить данные, осуществляя задержку на 15 мсек, читаем бит, позволяем слоту для чтения передать данные, осуществляя задержку на 30 мсек, переходим к следующему биту, и повторяем для него процедуру чтения. Когда считан весь байт возвращаем его значение и выходим из функции.

Функция чтения температуры с DS18S20 IWAREReadTemp :

Запрещаем прерывания, устанавливая флаг EA в 0. Инициализируем датчик функцией InitIWARE(); передаем команду о том, что работаем со всеми устройствами, независимо от их адреса - IWAREWByte(0xCC); передаем датчику команду преобразования температуры IWAREWByte(0x44); Разрешаем прерывания, ожидаем 100 мсек, Запрещаем прерывания, перезапускаем датчик, передаем команду о том, что работаем со всеми устройствами, независимо от их адреса - IWAREWByte(0xCC); передаем команду выдачи преобразованной температуры - IWAREWByte(0xBE); читаем первый байт температуры j=IWARERByte(); читаем второй байт температуры j+=IWARERByte() << 8; преобразуем полученную температуру к необходимому нам виду temper=((j>>1)*10)+((j & 0x0001) * 5); перезапускаем, датчик разрешаем прерывания, возвращаем полученное значение температуры и выходим из функции.

 

Заключение


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

Вторым этапом реализации проекта стало написание программной части, которая обеспечивает управление оборудованием по заданному алгоритму. Также было выполнено описание программы и представлен её код.

Окончательно программа была отлажена и весь комплект полученной документации позволяет далее изготовить данную систему. Таким образом задача проекта решена полностью.

Приложение 1

 

Схема устройства




Приложение 2

 

Листинг программы)


#include <reg52.h>

#include <stdio.h>

//-------------------------------------------------------------k,l;flag;  //флаг приема кода ключаii,codflag,codi2c;i,ti,j,n0,n,i1,pp,ii,tin;datai2c[]={ 0,0,0,0,0,0,0,0};//массив чтения кода из памятиdataib[]={ 0,0,0,0,0,0,0,0};//массив для сохранения полученного

ключаbitint0=P3^2; //линия подключения считывающей модуляbutton=P1^0; // линия кнопки открытия воротbutton1=P1^1; // линия кнопки закрытия воротlinet=P3^3;//линия подключения температурного датчикаscl = P0^7; // линии подключения ППЗУsda = P0^6;// линии подключения ППЗУchet;

//0123456789ABCDEFchar []={0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x08,0x83,0xC6,0x,0x86,0x8E };// массив преобразования для семисегментного

индикатораchar master_key[]={0x00,0x18,0x5F,0x01,0x0D,0x00,0x00};

void delay (unsigned char t) // процедура задержки

{int i,k;(i=0;i<t;i++)(k=0;k<12000;k++);

}

void ibread(void) interrupt 0 using 1//процедура чтения кода ключа

{= 0; //запрет прерываний(! bitint0);// ждем отпускания линии(10);=0; // сброс линии обмена с ключем(100); // низкий уровень в течение 500мкс=1;(15);//удерживаем высокий уровень в течение 75мкс=0;(j=0;j<8;j++)(i=0;i<8;i++)

{=0;(3);=1;(5);//3мкс до считывания бита кода= bitint0;>>1;(14);[j]=pp;

}

}

}=1;

void i2cread(void)// чтение памяти по заданным адресам

{=0;=0;//start impuls=0;(n=1;n<8;n++)

{=0;=0;=1; //формируем start impuls=1;=sda;>>1;=0;//ACK для микросхемы ПЗУ=0;=0;=1;=1;

}

}i2cread(void char ii1)// запись памяти

{=ii1;(n=1;n<8;n++)

{=0;=0;>>1;=CY;//формируем передаваемый бит=1;=0;=0;=1;(sda)

{=0;//ACK для микросхемы ПЗУ=0;=0;=1;=1;

}

}

}

Void i2creadblok (void);

{=1; //формируем start impuls=1;=1;=1;=0;=0;=1;cwritei(0xa1);//посылаем префикс адресcwritei(adresi2c);//посылаем адресячейки(i=0;i<8;i++)

{cread();c[i]=ii;=adres+8;

}

}

Void i2creadblok (void);

{=1; //формируем start impuls=1;=1;=1;=0;=0;=1;cwritei(0xa1);//посылаем префикс адресcwritei(adresi2c);//посылаем адресячейки(i=0;i<8;i++)

}

void startpreobr t(void) //процедура запуска преобразования T

{=0; // сброс линии обмена с T(100); // низкий уровень в течение 500мкс=1;(100);//удерживаем высокий уровень в течение 500мкс=0xCC;(i=0;i<8;i++)

{=0;(3);>>1;=CY;(21);

}=0x44;//команда измерить температуру(i=0;i<8;i++)

{=0;(3);>>1;=CY;(21);//

}

}tread(void) //процедура чтения T

{=0; // сброс линии обмена с T(100); // низкий уровень в течение 500мкс=1;(100);//удерживаем высокий уровень в течение 500мкс=0xCC;(i=0;i<8;i++)

{=0;(3);>>1;=CY;(21);

}=0xBE;//команда читать температуру(i=0;i<8;i++)

{=0;(3);>>1;=CY;(21);//3мкс до считывания бита кода

}=0(i=0;i<8;i++)

{=0;(3);=1;(5);//3мкс до считывания бита кода= linet;>>1;

}(pp==0xff)

{=0(i=0;i<8;i++)

{linet=0;(3);=1;(5);//3мкс до считывания бита кода= linet;>>1;

}=(~pp+1)>>1+0x80;//отрицательная температура

}{=0(i=0;i<8;i++)

{linet=0;(3);=1;(5);//3мкс до считывания бита кода= linet;>>1;

}=pp>>1;//положительная температура

} }}i=1;

void i2cread(void)// чтение памяти по заданным адресам

{ sda=0;=0;//start impuls=0;(n=1;n<8;n++)

{=0;=0;=1; //формируем start impuls=1;=sda;>>1;=0;//ACK для микросхемы ПЗУ=0;=0;=1;=1;

} }i2cread(void char ii1)// запись памяти

{=ii1;(n=1;n<8;n++)

{ scl=0;=0;>>1;=CY;//формируем передаваемый бит=1;=0;=0;=1;(sda)

{ scl=0;//ACK для микросхемы ПЗУ=0;=0;=1;=1;

} } }

void main()

{= 0x50;= 0xFD;|= 0x21; // режим таймера 1= 1; //разрешает работу таймера=0;= 0x47;(1)

{(w==16){=0xBD; // 0.258791 - это 16954 машинных цикла=0xC6; // 65536-16954 = 48582. 48582(10)=BDC6(16)

}

= 0;(10);(); //чтение кода ключа(chet == 1)

{=0; //флаг кода(n = 0;n<7;n++)

{(dataib[n] == master_key[n]) //если бит вводимого ключа совпал с соответствующим битом мастер-ключа

{++;

}

}(codflag == 7) //если весь ключ совпал

{(k=0;k<10;k++)

{= 0x8C;

= 0;(10);();(chet == 1)

{=0;(n = 0;n<7;n++)

{(dataib[n] == master_key[n])

{++;

}

}(codflag == 7)

{(k=0;k<10;k++)

{= 0x83;

(10);(button == 1)

{= 1;= 0xA3; //вывод на семисегментник(30);= 0xC0;(30);= 0;= 0;z;

}(button1 == 1)

{ if (flagzakr=0)

{ sdab1 = 1;= 0xA3;(30);= 0xC0;(30);= 0;= 0;z;

}}

}

}

{(j=0;j<10;j++)

{=j;cread();(l=0;l<7;l++)

{(datai2c[l]==0) codi2c++;

}(codi2c == 7) {adrh=j;break;}

}cwrite();= 0xCC;(30);x;

}: for(n=7; n>0; n--)

{= 0;= dataib[n-1];(!TI);= 0;

};

}

}

}

{

{=j;cread();(l=0;l<7;l++)

{(datai2c[l]==0) codi2c++;

}(codi2c == 7)

{= 1;= 0xA3;(30);= a[j+1];(30);sdab = 0;button = 0; button1 = 0;(n=7; n>0; n--)

{= 0;= dataib[n-1];(!TI);= 0;

};}

}

}: P2 = 0x47;

}

}++;(i>9) i=0;[i]=IWAREReadTemp(); //чтение температуры(i=0;i<9;i++) b=b- Temperatyra[i];(b<-3){P2.0=1; for(i=0;i<2000; i++);(9999);=(datad<<4)+(detach<<2)+datam;(DV);

}(P3.6=1) flagzakr=1 else flagzakr=0;=klaviatura();(kl=11) menu();

}

}

Похожие работы на - Система управлением 'ролл'-воротами

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!