Електроний посібник з
дисципліни "Мікропроцесорні системи"
 
Дипломный проект
                                 7. ПРИКЛАДИ ВВОДУ ІНФОРМАЦІЇ З ДИСКРЕТНИХ ДАТЧИКІВ

У реальних системах керування майже завжди присутні всілякі контактні дискретні датчики, кнопки, органи блокування і т.п. Схеми підключення датчиків до МК51 наведено на рис 7.1, а. Ввід інформації із цих датчиків має свої особливості.
Рис. 7.1. Схеми підключення дискретних датчиків
  По-перше, сигнал при спрацьовуванні може бути статичним, тобто при спрацьовуванні датчика формується тільки перехід з 1 в 0, як зображено на рис. 7.1, б. Але може формуватися й імпульсний сигнал (рис. 7.1, в). Крім того, при спрацьовуванні таких датчиків виникає деренчання контакту. При замиканні контакту виникає відскік контактів і в систему може бути введена випадкова послідовність нулів і одиниць (рис. 7.1, г).
  Причому датчик може бути приєднаний до входів Т0 або Т1 порту Р3 або до входів портів Р0…Р3.
При приєднанні до входів Т0 або Т1 здійснюється контроль тривалості спрацьовування датчика з використанням таймерів Т0 або Т1 у режимі 0 або режимі 1.
  Контроль стану датчика при приєднанні до входів портів Р0…Р2 і сигналі, як зображено на рис. 7.1, а, на виході датчика можна здійснити всього однією командою, наприклад, JВ Р1.4, мітка; мітка переводить мікропроцесор на виконання підпрограми, яка здійснює команди операції, які відповідають замкненому стану контакту. Схему алгоритму опитування стану датчика наведено на рис. 7.2, а.
  Якщо спостерігається деренчання контакту, то усунути його можна шляхом вводу в схему алгоритму лічильника заданого числа станів, що збігаються (рис. 7.2, б), або шляхом вводу тимчасової затримки (рис. 7.2, в).
Рис. 7.2. Схема алгоритму аналізу інформації з дискретного датчика:
а) опитування датчика; б) з використанням лічильника; в) з використанням часової затримки
  Розглянемо приклад розробки мікропроцесорної системи керування шахтною водовідливною установкою. Вона містить основний насос, заливальний насос, засувку основного ставу, датчики верхнього й нижнього рівнів (рис. 7.3). Відкачка води починається, якщо рівень води у водозбірнику досягне значення датчика верхнього рівня (ДВ), вимкнутись насос повинен, якщо рівень води у водозбірнику досяг значення нижче датчика нижнього (ДН) рівня. Перед увімкненням основний насос повинен бути заповнений водою за допомогою заливального насоса.  Тривалість  заливання  основного  насоса  - 30 секунд. Перед увімкненням основного насоса повинна бути відкрита засувка водонапорного ставу. Таким чином, відповідно до завдання, насосна установка містить два датчики рівня, два насоси, яким надають руху асинхронні двигуни з короткозамкненим ротором, засувку водонапорного ставу (рис. 7.3).
Рис. 7.3. Структурна схема системи керування водовідливом
  Завдання конкретне, викладено в текстовому вигляді, з якого випливає, що до МК51 необхідно підключити датчики верхнього й нижнього (ДВ, ДН) рівнів і три котушки пускачів для увімкнення приводів заливального, основного насосів і засувки. Датчики рівня на виході мають сухий контакт, а напруга живлення котушок пускачів становить 12 вольт. Виходячи із цього, функціональна схема мікропроцесорної системи керування буде мати вигляд, який наведено на рис. 7.4.
  Алгоритм функціонування системи зобразимо у вигляді графа станів системи (рис. 7.5). Система відповідно до умов перебуває у вихідному (А0) стані доти, поки рівень води не досягне значення верхнього рівня. Після цього система переходить у стан (А1). У цьому стані вмикається заливальний насос і запускається затримка 30 секунд. Після закінчення затримки система переходить у стан (А2). У цьому стані вимикається заливальний насос, вмикається привід засувки на відкривання (вимкнення приводу засувки виконує локальна автоматика) і вмикається основний насос. У стані А2 система буде перебувати доти, поки рівень води не опуститься нижче датчика нижнього рівня (воду відкачено). У цьому випадку система перейде у вихідний стан (А0), при цьому вимкнеться основний насос, закриється засувка водонапорного ставу. Далі процеси повторюються.
  Після  складання  графа  станів  системи  привласнимо  символічні  імена змінним:
datn - датчик нижнього рівня;
datv - датчик верхнього рівня;
no - основний насос;
nz - заливальний насос;
zadv - засувка водонапорного ставу; zd - затримка;
state - стан системи;
prescal - переддільник для організації інтервалу в 1 секунду.
Рис. 7.4. Функціональна схема мікропроцесорної системи керування водовідливом
Рис. 7.5. Граф стану системи керування водовідливом
Після цього визначимо адреси ОЗУ, де будуть перебувати ці змінні: datn equ 81h ; адреса датчика нижнього рівня,
datv    equ 80h ; адреса датчика верхнього рівня,
no         equ 90h ; адреса основного насоса,
nz    equ 91h ; адреса насоса, що заливає основний насос,
zd         equ 31h ; адреса комірки формування затримки,
zadv      equ 32h ; адреса засувки водонапорного ставу;
state    equ 40h ; адреса комірки стану системи,
prescal  equ 30h ; адреса комірки переддільника.
  Текст програми, що відповідає графу станів системи (рис. 7.5), наведено нижче:
          ljmp m0;
          org 0bh;
          ljmp tim0
m0: clr no;переводимо вихідний стан системи в початковий скиданням до нуля
          clr nz ; змінних nz, no, zadv,state
          clr no
          clr zadv
          mov state,#0 ;
          mov sp,#70h ; призначаємо початкову адресу стекової пам'яті,
          mov tmod,#1h ; установлюємо режим роботи Таймера 0,
          mov th0,#3ch ; заносимо в Таймер 0 стартове число, яке
          mov tl0,#0b0h ; визначає величину затримки 50 мілісекунд,
          setb tcon.4 ; запуск таймера (установка біта TR у регістрі TCON)
          setb ie.7; дозвіл переривань
          setb ie.1; дозвіл переривань від Таймера 0
          mov prescal,#20    ; коефіцієнт множення затримки 50 мілісекунд,
loop:  mov a,state ; основний цикл системи,
          cjne a,#0,st1; перевірка стану системи, якщо 0, то перехід до аналізу стану
          ;датчика ДВ, якщо не нуль, то перехід на мітку st1,
          jnb datv,loop ; перевірка стану датчика верхнього рівня, якщо спрацював,
          ;запускаємо затримку, якщо немає вертаємося у вихідний стан,
          mov zd,#1eh ; встановлення змінної zd значення 30 (секунд),
          setb nz; увімкнути заливальний насос,
          mov state1,#1 ; фіксація переходу системи в стан а1,
          ajmp loop ; перехід на початок циклу,
st1: cjne a,#1,st2 ; перевірка стану системи,
          mov a,zd1; перевірка умови закінчення затримки,
          jnz loop;
          clr nzo; вимкнути заливальний насос,
          setb no ; увімкнути основний насос
          mov state,#2 ;зафіксувати перехід системи в стан 2 ajmp,
          loop; перехід на початок циклу,
st2: jb datn,loop ; перевірка стану датчика нижнього рівня, clr no; вимкнути основний насос,
          clr zadv; закрити засувку водонапорного ставу, 
          mov state,#0 ; зафіксувати перехід системи в стан 0,
          ajmp loop ;
tim0:   push acc;
          mov th0,#3ch ; перезавантаження таймера (50 мілісекунд)
          mov tl0,#0b0h ;
          djnz prescal,m1; перевірка затримки 1 секунда,
          mov prescal,#20 ; перезавантаження переддільника числом 20,
          mov a,zd; пересилання змінної zd в акумулятор,
          jz, m1 ; перевірка закінчення затримки, якщо ні,
         dec zd; декрементуємо змінну zd,
m1:    pop acc ; відновлюємо вміст акумулятора,
         reti; вихід з підпрограми переривання.