Разработка электронного кодового замка
.2 Сопряжение микроконтроллера и исполнительного элемента электромеханического замкаДля коммутации цепи питания привода электромеханического замка используются NPN-транзистор Q1 и оптопара OC1 (рисунок 3.2.1). Таким образом обеспечивается замыкание цепи с большими токами и напряжениями и гальваническая развязка цепей микроконтроллера и привода замка. Здесь используется широко распространённый транзистор отечественного производства КТ815А, характеристики которого (таблица 3.2.1) удовлетворяют требуемым (напряжение 12В и ток 0,5А) с некоторым запасом.Таблица 3.2.1 - Параметры транзисторов серии КТ815|
Наимен. | тип | Uкб,В | Uкэ, В | Iкmax(и), мА | Pкmax(т), Вт | h21э | Iкбо, мкА | fгр., МГц | Uкэн, В | | КТ815А | n-p-n | 40 | 30 | 1500(3000) | 1(10) | 40-275 | 50 | 3 | <0.6 | | КТ815Б | | 50 | 45 | 1500(3000) | 1(10) | 40-275 | 50 | 3 | <0.6 | | КТ815В | | 70 | 65 | 1500(3000) | 1(10) | 40-275 | 50 | 3 | <0.6 | | КТ815Г | | 100 | 85 | 1500(3000) | 1(10) | 30-275 | 50 | 3 | <0.6 | | |
Оптопара подключается к порту P0.0 микроконтроллера через резистор R2, ограничивающий ток. Входное напряжение оптопары 1,3В при токе 25 мА, значит, падение напряжения на резисторе должно быть (5-1,3)В=3,7 В. Тогда номинал сопротивления будет 3,7В/0,025А=148 Ом. Ближайшее значение ряда номинальных сопротивлений 150 Ом. Выходной каскад оптопары открывается низким уровнем на выводе микросхемы и закрывается высоким. Когда он открыт, напряжение подаётся на базу транзистора Q1 и он открывается, замыкая цепь привода замка. Рассчитаем сопротивление резистора R3. Для этого воспользуемся законом Ома [7]. Через цепь коллектор-эмиттер протекает ток 0,5А. Коэффициент передачи транзистора по току равен 40, значит ток база-эмиттер будет равен 0,5А/40=0,0125А. На базу подаётся 5В, а на базовом переходе транзистора падает 1,2В, поэтому сопротивление резистора будет равно (5-1,2)В/0,0125А=304 Ом. Возьмём резистор на 300Ом. Для того чтобы транзистор самопроизвольно не открываться обратным током коллектора, ставится шунтирующий резистор R10. Пусть через него протекает ток, в три раза меньший, чем ток базы транзистора. Падение напряжения на базовом переходе 1,2В. Тогда сопротивление R10 будет равно 1,2В/(0,0125А/3)=288 Ом. Используем резистор 270 Ом. Так как привод замка основан на индуктивности, то по закону электромагнитной индукции при коммутации в ней возникают обратные токи. Диод D2 шунтирует индуктивность в обратном направлении и препятствует появлению обратных токов в цепи. По своим характеристикам нам подходит диод КД208А. Его максимальное обратное напряжение 100 В, прямой ток 1 А. Рисунок 3.2.1 - Схема сопряжения микроконтроллера и исполнительного элемента электромеханического замка3.3 Сопряжение микроконтроллера и устройства сигнализации открытия двериЗелёный светодиод D3 подключается к порту P2.2 микроконтроллера через ограничивающий резистор R4 (рисунок 3.3.1). Диод включается высоким уровнем сигнала на выводе. Максимальное прямое напряжение на диоде 2,8В при токе 10мА. Как раз такой ток способен обеспечить один вывод порта этого микроконтроллера. Сопротивление резистора будет равно (5-2,8)В/0,01=220ОмРисунок 3.3.1 - Схема сопряжения МК и светодиода3.4 Сопряжение микроконтроллера и устройства звуковой сигнализацииПьезоэлектрический излучатель звука LS1 подключается к выводу P2.1 микроконтроллера через резистор R5, ограничивающий ток, и включается при появлении сигнала высокого уровня на выводе микросхемы. Напряжение питания динамика 1,5-24В, возьмём 3В. Максимальный ток 3,8мА. Сопротивление резистора будет равно (5-3)В/0,0038А=526,32Ом. Используем резистор 530Ом.Рисунок 3.4.1 - Схема сопряжения микроконтроллера и динамика3.5 Сопряжение микроконтроллера и датчика открытия двериДатчик подключается к выводу порта P0.7 через резистор R9, который подтягивает напряжение на выводе до единицы, когда контакты датчика разомкнуты (рисунок 3.5.1). При замыкании контактов напряжение +5В замыкается на землю, и на выводе порта появляется ноль. Длина провода от резистора к датчику много больше длины провода к микроконтроллеру, поэтому подтягивающий резистор R9 возьмём номиналом 1КОм, а для борьбы с помехами используем конденсатор С6 на 100пФ.Рисунок 3.5.1 - Схема сопряжения микроконтроллера и датчика открытия двери3.6 Подключение микроконтроллера к цепям, обеспечивающим его работуПодключение микроконтроллера к цепям питания, сброса, внешнему кварцевому резонатору и выводу блокировки работы с внутренней памятью (рисунок 3.6.1) является стандартным, рекомендованным производителем [4].Рисунок 3.6.1 - Схема подключения микроконтроллера4. Разработка алгоритма работы системы и программного обеспеченияАлгоритм функционирования программы кодового замка включает в себя следующие основные блоки:- включение;- ввод кода;- проверка введённого кода;- контроль количества попыток ввода кода;- открытие замка;- закрытие замка;- световая индикация;- звуковой сигнал.На рисунке 4.1 представлена блок-схема алгоритма работы программы.Рассмотрим алгоритм функционирования программы более подробно.- Включение устройстваПри подаче питания производится инициализация переменных: для хранения адреса ячейки памяти с текущей введённой цифрой кода используется регистр r0, для количества попыток ввода - память данных по адресу 38h. Затем выключаются светодиод и динамик установкой в 0 соответствующих битов порта p2. Настраивается таймер t0, который будет далее использоваться для формирования программной задержки. Режим - 16-битный таймер. Далее задаётся адрес для первой цифры кода и количество попыток ввода.- Ввод кодаВвод кода производится посредством опроса клавиатуры и регистрации нажатий клавиш. Клавиатура опрашивается в бесконечном цикле. При обнаружении нажатия кнопки во избежание регистрации нескольких нажатий из-за явления дребезга контактов вызывается подпрограмма формирования временной задержки длительностью 5 мс (delay2). После отпускания кнопки происходит запоминание введённого значения и возврат в цикл опроса клавиатуры, если ещё не все цифры введены.19 Рисунок 4.1 - Блок-схема работы программы- Проверка введённого кода Когда введены все цифры кода, производится последовательная проверка всех цифр, начиная с последней (метка code_wrong). Здесь для примера выбран шестизначный код “123456” В случае несовпадения цифры кода с заданной проверяется количество оставшихся попыток ввода кода (метка code_wrong).- Контроль количества попыток ввода кодаЕсли все попытки ввода израсходованы, включается звуковой сигнал длительностью 1 с. Для формирования задержки используется подпрограмма delay. Во время действия звукового сигнала устройство не реагирует на нажатия клавиш.- Открытие замкаОткрытие замка производится установкой бита p2.0.- Закрытие замкаЗакрытие замка производится сбросом бита p2.0.- Световая индикацияСветовая индикация включается установкой бита p2.2 и выключается его сбросом.- Звуковой сигналЗвуковой сигнал включается установкой бита p2.1 и выключается его сбросом.- Формирование программной временной задержки.1) Формирование задержки длительностью 5 мс.Подпрограмма реализации временной задержки использует метод программных циклов. При этом в некоторый рабочий регистр загружается число, которое затем в каждом проходе цикла уменьшается на 1. Так продолжается до тех пор, пока содержимое рабочего регистра не станет равным нулю, что интерпретируется программой как момент выхода из цикла. Время задержки при этом определяется числом, загруженным в рабочий регистр, и временем выполнения команд, образующих программный цикл. mov r2,#0ffh loop3: djnz r2,loop3 Команда mov выполняется за 1 машинный цикл, команда djnz - за 2. При тактовой частоте 24 МГц каждый машинный цикл выполняется за 0,5 мкс. Таким образом, максимальная длительность задержки, реализуемая с помощью одного цикла, составляет (1+255*2)*0,5=255,5 мкс (в регистре r2 значение 255). Задержка большой длительности может быть реализована методом вложенных циклов. delay2: ;задержка 5 мс mov r3,#13h loop4: mov r2,#0ffh loop3: djnz r2,loop3 djnz r3,loop4 ret Так, максимальная длительность задержки при использовании двух циклов составляет (1+((1+2*255)+2)*255)/2=65408 мкс=65,41 мс. Рассчитаем значение регистра r3 для формирования задержки длительностью 5 мс. Очевидно, что в регистр r2 нужно загрузить максимальное значение 255. При расчёте нужно учесть, что на выполнение команд call и ret требуется по 2 машинных цикла на каждую. (2+2+1+((1+2*255)+2)*X)/2=5000. X=19,42. В регистр заносим значение 13h. 2) Формирование задержки длительностью 1 с. При формировании задержки длительностью 1 с используется таймер T0. delay: ;задержка 1 с mov r1,#1fh loop1: mov th0,#0h mov tl0,#0h setb tcon.4 loop2: jb tcon.4,loop2 djnz r1,loop1 ret В 16-битном режиме (диапазон значений таймера 0-65535) при тактовой частоте 24МГц таймер позволяет формировать задержки длительностью до 32767,5 мкс. Для создания задержки в 1 с таймер должен переполниться 1/ 0,0327675=30,52 раз. Таким образом, в регистр r1 нужно загрузить значение 1fh. 5. Описание среды разработки программного обеспечения При разработке и отладке программного обеспечения для данного проекта использовался пакет ProView. ProView фирмы Franklin Software Inc. - интегрированная среда разработки программного обеспечения для однокристальных микроконтроллеров семейства Intel 8051 и его клонов. Она включает в себя все компоненты, необходимые для создания, редактирования, компиляции, трансляции, компоновки, загрузки и отладки программ: - стандартный интерфейс Windows; - полнофункциональный редактор исходных текстов с выделением синтаксических - элементов цветом; - организатор проекта; - транслятор с языка C; - ассемблер; - отладчик; - встроенную справочную систему. Среда разработки подобна Visual C++ Microsoft и Borland C++ для Windows. Пользователи, знакомые с любым из этих изделий, будут комфортно чувствовать себя в ProView. Первый этап разработки программы - запись её исходного текста на каком-либо языке программирования. Затем производится компиляция или трансляция его в коды системы команд микроконтроллера, используя транслятор или ассемблер. Трансляторы и ассемблеры - прикладные программы, которые обрабатывают текстовый файл, содержащий исходный текст программы, и создают объектные файлы, содержащие объектный код. После компоновки объектных модулей наступает этап отладки программы, устранения ошибок, оптимизации и тестирования программы. ProView объединяет все этапы разработки прикладной программы в единый рекурсивный процесс, когда в любой момент времени возможен быстрый возврат к любому предыдущему этапу. Далее описаны основные компоненты ProView. Оптимизирующий кросс-компилятор C51Язык C - универсальный язык программирования, который обеспечивает эффективность кода, элементы структурного программирования и имеет богатый набор операторов. Универсальность, отсутствие ограничений реализации делают язык C удобным и эффективным средством программирования для широкого разнообразия задач. Множество прикладных программ может быть написано легче и эффективнее на языке C, чем на других более специализированных языках. C51 - полная реализация стандарта ANSI (Американского национального института стандартов), насколько это возможно для архитектуры Intel 8051. C51 генерирует код для всего семейства микроконтроллеров Intel 8051. Транслятор сочетает гибкость программирования на языке C с эффективностью кода и быстродействием ассемблера. Использование языка высокого уровня C имеет следующие преимущества над программированием на ассемблере: не требуется глубокого знания системы команд процессора, элементарное знание архитектуры Intel 8051 желательно, но не необходимо; распределение регистров и способы адресации управляются полностью транслятором; обеспечивается лучшая читаемость программы, т.к. используются ключевые слова и функции, которые более свойственны человеческой мысли; сокращается время разработки и отладки программ в сравнении с программированием на ассемблере; наличие библиотечных файлов со стандартными подпрограммами, которые могут быть включены в прикладную программу; существующие программы могут многократно использоваться в новых программах, используя модульные методы программирования. Макроассемблер A51Ассемблер A51 совместим с ASM51 Intel для всего семейства микроконтроллеров Intel 8051. Ассемблер транслирует символическую мнемонику в перемещаемый объектный код, имеющий высокое быстродействие и малый размер. Макросредства ускоряют разработку и экономят время, поскольку общие последовательности могут быть разработаны только один раз. Ассемблер поддерживает символический доступ ко всем элементам микроконтроллера и перестраивает конфигурацию для каждой разновидности Intel 8051. A51 транслирует исходный файл ассемблера в перемещаемый объектный модуль. При отладке или при включенной опции “Include debugging information” этот объектный файл будет содержать полную символическую информацию для отладчика/имитатора или внутрисхемного эмулятора. Компоновщик L51Компоновщик объединяет один или несколько объектных модулей в одну исполняемую программу. Компоновщик размещает внешние и общие ссылки, назначает абсолютные адреса перемещаемым сегментам программ. Он может обрабатывать объектные модули, созданные транслятором C51, ассемблером A51, транслятором PL/M-51 Intel и ассемблером ASM51 Intel. Компоновщик автоматически выбирает соответствующие библиотеки поддержки и связывает только требуемые модули из библиотек. Установки по умолчанию для L51 выбраны так, чтобы они подходили для большинства прикладных программ, но можно определить и заказные установки. Отладчик/симулятор WinSim51 Отладчик/симулятор используется с транслятором C51, ассемблером A51, транслятором PL/M-51 Intel и ассемблером ASM51 Intel. Отладчик/симулятор позволяет моделировать большинство особенностей Intel 8051 без наличия аппаратных средств. Можно использовать его для проверки и отладки прикладной программы прежде, чем будут изготовлены аппаратные средства. При этом моделируется широкое разнообразие периферийных устройств, включая последовательный порт, внешний ввод - вывод и таймеры [6]. Внешний вид главного окна программы представлен на рисунке 5.1. Рисунок 5.1 - Внешний вид главного окна ProView ЗаключениеВ данной работе была осуществлена разработка электронного кодового замка, предназначенного для установки на наружную дверь жилого дома. В ходе выполнения работы был проведён анализ задачи, на основе которого были сформулированы требования к конечной системе. На основе требований была построена структурная схема. На основании структурной схемы были подобраны соответствующие устройства для реализации функций, возложенных на элементы системы. Исходя из экономических и эксплуатационных соображений, для данного устройства был выбран микроконтроллер AT89S51 фирмы Atmel. Особенностью данного замка является наличие звуковой сигнализации, оповещающей владельца о попытке подбора кода. Далее, с использованием выбранных устройств была построена функциональная схема. Разработка завершилась составлением блок-схемы алгоритма и написанием исходного кода программы для микроконтроллера.Список использованных источников1. Описания электронных компонентов в каталоге товаров оптовой базы комплектации электронных компонентов и приборов “ПЛАТАН”: http://www.platan.ru/2. Описание электромеханического замка ПОЛИС-13:http://dialog-universal.ru/product_info.php?cPath=109&products_id=1733. Описание клавиатуры AK-207 на сайте компании Accord: http://www.accordia.com.tw/html/general.htm4. Описание микроконтроллера AT89S51 на сайте компании Atmel: http://www.atmel.com/dyn/resources/prod_documents/doc2487.pdf5. Описание микроконтроллера AT89S51: http://www.gaw.ru/html.cgi/txt/ic/Atmel/micros/mcs51/at89s51.htm6. В.Б. Бродин. Микроконтроллеры: архитектура, программирование, интерфейс: - М.: ЭКОМ, 1999.7. П. Хоровиц, У. Хилл. Искусство схемотехники М. Мир, 2003. ПРИЛОЖЕНИЯПриложение АИсходный код программы микроконтроллераdsegdoor_code equ r0 ;массив введённых значенийattempts equ 38h ;переменная - число попыток вводаcsegorg 00hajmp mainorg 0bhajmp timer0org 100hmain:anl p2,#1h ;выключение светодиода и динамикаmov ie,#82h ;разрешаем прерывания от таймераmov tmod,#1h ;задаём режим таймера - 16 битmov door_code,#30h ;задание адреса для вводимых цифр кодаmov attempts,#3h ;количество попытокsjmp ent1 ;переход к началу главного циклаenter_digit: ;обработка введённого значенияmov @door_code,a ;запоминаем цифруinc door_code ;переходим к след. адресуmov a,door_code call delay2cjne a,#36h,ent1 ;проверяем,все ли цифры введены (из 6)ajmp compare ;переход к сравнению кодовent0: ;ввод 0mov p0,#0f7hjb p0.5,ent1call delay2mov a,#0hwait0:jnb p0.5,wait0ajmp enter_digitent9: ;ввод 9jb p0.6,ent0call delay2mov a,#9hwait9:jnb p0.6,wait9ajmp enter_digitent1: ;ввод 1mov p0,#0feh ;устанавливаем 0 на выходе P0.0jb p0.4,ent2 ;если не нажата кнопка, к след. кнопкеcall delay2 ;ждём, пока пройдёт дребезг контактовmov a,#1h ;запоминаем введённую цифруwait1: jnb p0.4,wait1 ; ждём, пока отпустят кнопкуajmp enter_digit ;переход к обраб. введённого значенияent2: ;ввод 2jb p0.5,ent3call delay2mov a,#2hwait2:jnb p0.5,wait2ajmp enter_digitent3: ;ввод 3jb p0.6,ent4call delay2mov a,#3hwait3:jnb p0.6,wait3ajmp enter_digitent4: ;ввод 4mov p0,#0fdhjb p0.4,ent5call delay2mov a,#4hwait4:jnb p0.4,wait4ajmp enter_digitent5: ;ввод 5jb p0.5,ent6call delay2mov a,#5hwait5:jnb p0.5,wait5ajmp enter_digitent6: ;ввод 6jb p0.6,ent7call delay2mov a,#6hwait6:jnb p0.6,wait6ajmp enter_digit ent7: ;ввод 7mov p0,#0fbhjb p0.4,ent8call delay2mov a,#7hwait7:jnb p0.4,wait7ajmp enter_digitent8: ;ввод 8jb p0.5,ent9call delay2mov a,#8hwait8:jnb p0.5,wait8ajmp enter_digit code_wrong: ;обработка неверного кодаmov door_code,#30h ;возвращаемся к началу массиваdjnz attempts,ent1 ;если есть ещё попытки, в гл. циклsetb p2.1 ;включение звукового сигналаcall delay ;задержка 1 сclr p2.1 ;выключение звукового сигналаmov attempts,#4h ;восстан. число попытокjmp code_wrong compare: ;сравнение кодовdec door_code ;переходим к предыдущей цифреcjne @door_code,#6h,code_wrong;проверяем 6-ю цифру и далее все dec door_code ;цифры по порядкуcjne @door_code,#5h,code_wrongdec door_codecjne @door_code,#4h,code_wrongdec door_codecjne @door_code,#3h,code_wrongdec door_codecjne @door_code,#2h,code_wrongdec door_codecjne @door_code,#1h,code_wrongclr p2.0 ;открыть замокsetb p2.2 ;включить светодиодmov attempts,#3h ;восстан. кол-во попытокwait_open:jnb p0.7,wait_open ;ждём, пока откроется дверьcall delay2 wait_close:jb p0.7,wait_close ;ждём, пока закроется дверьsetb p2.0 ;закрыть замок clr p2.2 ;выключить светодиодajmp ent1 ;переход в гл. циклtimer0: ;обработка прерывания от T0clr tcon.4clr tcon.5retidelay: ;задержка 1 сmov r1,#1fhloop1:mov th0,#0hmov tl0,#0hsetb tcon.4loop2:jb tcon.4,loop2djnz r1,loop1retdelay2: задержка 5 мсmov r3,#13hloop4:mov r2,#0ffhloop3:djnz r2,loop3djnz r3,loop4retend
Страницы: 1, 2, 3
|
|