Світ електроніки - брязкіт контактів

AVR мікроконтролери для початківців

Багато хто, напевно вже чули такий вислів як брязкіт контактів. Що таке брязкіт контактів?
Так все легко і просто: вся справа в тому що при будь-якому механічному включенні (натисканні на кнопку, наприклад), контакти замикаються не відразу, а як-би ще "вібрують" якийсь час.
Якщо в електриці ця сама вібрація сильного впливу може і не надати на працездатність всього пристрою (хіба тільки що може бути прискорить підгоряння контактів), то в електроніці, особливо там де мова йде про швидкодіючих процесах, брязкіт контактів дуже навіть запросто може викликати помилкове спрацьовування пристрою або збій програми.

Загалом давайте подивимося на малюнок який відображає фізичний процес брязкоту контактів

Світ електроніки - брязкіт контактів

Чим це може загрожувати?
Припустимо, наприклад, програма мікроконтролера відстежує певний порт вводу і вона повинна спрацювати коли рівень на цьому вході стане рівним 0. Гаразд, ми натиснули на кнопку і подали логічний нуль на цей порт. Начебто-б все в порядку.
А насправді що відбувається? За короткий проміжок часу логічний рівень на цьому введенні зміниться хаотично кілька разів! Результат такого впливу може бути просто непередбачуваний.

Способи усунення брязкоту контактів

Усунути ефект брязкоту контактів можна двома способами: або введенням додаткових елементів, або програмно. Розглянемо обидва:

Програмне усунення брязкоту контактів

Програмне усунення проблеми брязкоту контактів зводиться до затримки в часі. У програму вводиться певний часовий інтервал, під час якого мікроконтролер не реагує на перепади логічних рівнів.

У разі підключення кнопки до порту введення / виведення алгоритм обробки може виглядати наступним чином.

Світ електроніки - брязкіт контактів

При досягненні напругою на виведенні порту необхідного рівня виконується підпрограма, а потім йде блок затримки. Цикл затримки можна реалізувати на инкрементирование до певного числа або декрементірованіі до нуля декількох регістрів.

Якщо кнопка використовується для ініціалізації зовнішнього переривання, то структура обробки переривання може бути реалізована за наступним алгоритмом.

Світ електроніки - брязкіт контактів

В обробці переривання ми забороняємо зовнішнє переривання і запускаємо таймер. За переривання таймера ми знову дозволимо зовнішні переривання.

Час необхідної затримки залежить від тривалості процесу брязкоту контактів. В середньому процес брязкоту може тривати 0,01 - 0,3 секунд. Можна виконати затримку інтервалом в 0,5 секунд, чого вистачить з головою. У критичних за часом випадках необхідно підганяти цей час на етапі налагодження.

Усунення брязкоту контактів за допомогою додаткових елементів

Тут так-же використовується принцип тимчасової затримки. Вирішити питання тимчасової затримки для усунення брязкоту контактів можна двома способами:
1. на простій логіці

Світ електроніки - брязкіт контактів

Робота цих схем заснована на тимчасові затримки, що створюються за допомогою RC - ланцюжків. На малюнку 2а показана схема, робота якої здійснює затримку включення і виключення, малюнок 2в містить схему з затримкою тільки включення, а на малюнку 2д показана схема з затримкою вимикання. Ці схеми є одновібратори, про які вже було написано в одній з частин даної статті. На малюнках 2б, 2г, 2е показані їх тимчасові діаграми.

Неважко бачити, що ці формувачі виконані на мікросхемах серії К561, яка відноситься до КМОП мікросхем, тому номінали резисторів і конденсаторів вказані саме для таких мікросхем. Ці формувачі повинні використовуватися в схемах, побудованих на мікросхемах серій К561, К564, К176 і подібних.

2. Застосування RS тригера

Світ електроніки - брязкіт контактів

Найпростіше усунути брязкіт контактів за допомогою вже добре нам знайомого RS - тригера, який зібраний на логічної мікросхемі К155ЛА3, точніше на її елементах DD1.1 і DD1.2. Домовимося, що прямий вихід RS - тригера це висновок 3, відповідно інверсний вихід це висновок 6.

Коли RS - тригер збирається з елементів логічних мікросхем, доводиться робити таку угоду. Якщо ж тригером є готова мікросхема, наприклад К155ТВ1, положення прямого і інверсного виходів обумовлено її довідковими даними. Але, навіть і в цьому випадку, якщо не використовуються JK і C входи, а мікросхема використовується просто як RS - тригер, вищезгадану угоду може бути цілком доречно. Наприклад, для зручності монтажу мікросхеми на платі. Звичайно, при цьому RS - входи також міняються місцями.

У положенні перемикача, показаному на схемі, на прямому виході RS - тригера рівень логічної одиниці, а на інверсному, природно, логічний нуль. Стан рахункового тригера DD2.1 поки залишається таким, в якому він опинився при включенні харчування.

Якщо в цьому є необхідність, то його можна скинути за допомогою кнопки SB2. Щоб скинути тригер в момент включення живлення між R - входом і загальним проводом підключають конденсатор невеликої ємності, в межах 0,05 ... 0,1 мкФ, а між плюсом харчування і R - входом резистор опором 1 ... 10 КОм. Поки конденсатор зарядиться на R - вході короткочасно присутня напруга логічного нуля. Цього короткого нульового імпульсу цілком достатньо для скидання тригера. Якщо за умовами роботи пристрою необхідно тригер при включенні харчування встановити в одиничний стан, то таку RC - ланцюжок підключають до S - входу. Абзац про RC - ланцюжку будемо вважати ліричним відступом, а тепер продовжимо про боротьбу з дребезгом контактів.

Натискання кнопки SB1 призведе до замикання її правого по малюнку контакту із загальним проводом. При цьому на виводі 5 мікросхеми DD1.2 з'явиться ціла серія імпульсів брязкоту. Але швидкодія мікросхем навіть самих повільних серій набагато вище, ніж швидкодія механічних контактів. І тому першим же імпульсом RS - тригер скинеться в нульовий стан, чому відповідає високий рівень на інверсному виході.

У цей момент на ньому формується позитивний перепад напруги, який по C - входу перемикає тригер DD2.1 в протилежний стан, що можна спостерігати за допомогою світлодіода HL2. Наступні імпульси брязкоту вплив на стан RS - тригера не роблять, тому стан тригера DD2.1 залишається незмінним.

При відпуску кнопки SB1 тригер на елементах DD1.1 DD1.2 переходить знову в одиничний стан. У цей момент на інверсному виході (вивід 6 DD1.2) формується негативний перепад напруги, який не змінює стан тригера DD2.1. Для того щоб повернути лічильний тригер початковий стан кнопку SB1 доведеться натиснути ще раз. З таким же успіхом в подібному пристрої буде працювати і JK - тригер.

Подібний формувач є типовою схемою і працює чітко і безвідмовно. Єдиним його недоліком можна вважати застосування кнопки з перекидним контактом.