Различия

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

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
products:aruno:exp5_2 [2020/06/26 18:16] alexnikproducts:aruno:exp5_2 [2020/08/28 11:36] (текущий) alexnik
Строка 1: Строка 1:
 ===== Эксперимент 5.2. Эмуляция кнопки с фиксацией ===== ===== Эксперимент 5.2. Эмуляция кнопки с фиксацией =====
 +
 В предыдущем эксперименте мы столкнулись с явлением которое характерно для всех кнопок и выключателей - **дребезг контактов**. Это паразитное явление, которое вносит проблемы преимущественно в электронных схемах. \\ В предыдущем эксперименте мы столкнулись с явлением которое характерно для всех кнопок и выключателей - **дребезг контактов**. Это паразитное явление, которое вносит проблемы преимущественно в электронных схемах. \\
 Дребезг контактов возникает при нажатии на кнопку и переключатель, он возникает из-за реальных вибраций контактной пластины при её перемещении. Любой переключатель устроен так, что у него есть подвижный и неподвижный контакт. Как видно из названия, подвижным называется тот, что соединен с толкателем или рычагом, на который уже нажимает человек или механизм при работе устройства.\\ Дребезг контактов возникает при нажатии на кнопку и переключатель, он возникает из-за реальных вибраций контактной пластины при её перемещении. Любой переключатель устроен так, что у него есть подвижный и неподвижный контакт. Как видно из названия, подвижным называется тот, что соединен с толкателем или рычагом, на который уже нажимает человек или механизм при работе устройства.\\
Строка 7: Строка 8:
 {{ :products:ardu:drebezg-kontaktov.png?nolink&400 |}} {{ :products:ardu:drebezg-kontaktov.png?nolink&400 |}}
 Чтобы устранить эффект дребезга контактов есть два способа программный и аппаратный.\\ Чтобы устранить эффект дребезга контактов есть два способа программный и аппаратный.\\
-, параллельно кнопке включают конденсатор, сглаживающий скачки напряжения и делающий процесс переключения более плавным. Обычно номинал конденсатора делают не слишком большим, порядка 0.1 мкФ (микрофарад), иначе он будет заряжаться слишком долго и время +Один из вариантов программного устранения дребезга, это после первого изменения состояния кнопки, установить паузу в несколько миллисекунд, для того чтобы контакт стабилизировался и дребезг был проигнорирован.\\
-переключения кнопки станет заметно больше+
-Сглаживающий конденсатор заряжается до уровня HIGH почти мгновенно, а во время дребезга контактов разряжается, повышая уровень напряжения в цепи. Таким образом скачки напряжения значительно уменьшаются. +
-Теперь кнопка будет работать правильноно схема все еще нуждается в доработке. Предположим, что во время написания программы, мы ошиблись и случайно определили вывод контроллера не как INPUT, а как OUTPUT. В этом случае через ножку контроллера потечет ток короткого замыкания, превышающий предельно допустимый и контроллер выйдет из строя. +
-Чтобы защитить контроллер, последовательно с кнопкой добавим токоограничительный резистор 1 кОм.+
  
 ==== Схема эксперимента ==== ==== Схема эксперимента ====
-{{ :products:ardu:exp5_2_sch.png?nolink&400 |}}+Схема эксперимента не изменилась по сравнению с прошлым, изменения будут только в программной части 
 + 
 +{{ :products:ardu:exp3.4.png?nolink |}}
 //Рисунок 1. Электрическая принципиальная схема эксперимента// //Рисунок 1. Электрическая принципиальная схема эксперимента//
  
 Соберем эту схему: Соберем эту схему:
-{{ :products:ardu:exp5_2.png?direct&600 |}}+{{ :products:ardu:exp03.png?direct&600 |}}
 //Рисунок 2. Монтажная схема эксперимента// //Рисунок 2. Монтажная схема эксперимента//
  
 ==== Программный код эксперимента ==== ==== Программный код эксперимента ====
  
-<file cpp Exp5_2[enable_line_numbers="2", start_line_numbers_at="1"]>+<file cpp Exp5[enable_line_numbers="2", start_line_numbers_at="1"]>
 // инициализация констант // инициализация констант
  
Строка 35: Строка 34:
  
 void setup() {  void setup() { 
- pinMode(BUTTON, INPUT); +  pinMode(BUTTON, INPUT); 
- pinMode(LED, OUTPUT);  +  pinMode(LED, OUTPUT);  
-}+ }
  
 void loop() { void loop() {
Строка 45: Строка 44:
       if (switchState == HIGH) {       if (switchState == HIGH) {
         lightsOn = !lightsOn;         lightsOn = !lightsOn;
-      } +        delay(20); 
-    +       } 
-    if(lightsOn) {+     
 +   if(lightsOn) {
       digitalWrite(LED, HIGH); // зажигаем светодиод       digitalWrite(LED, HIGH); // зажигаем светодиод
-    +     
     else {     else {
       digitalWrite(LED, LOW); // гасим светодиод       digitalWrite(LED, LOW); // гасим светодиод
-    }+     }
  }  }
 </file> </file>
- +Электрическая принципиальная схема и монтажная схема эксперимента остаются без изменений, в программном коде добавляется строка с функцией **delay(20)**, которая приостанавливает выполнение программы на 20 миллисекунд для игнорирования дребезга контактов.\\ 
-В соответствие инструкции дополним схему конденсатором **С1** и резистором **R3**.\\ +Аппаратный способ устранения дребезга рассмотрим в следующем эксперименте.\\
-Программный код оставим без изменений. \\ +
-Запустим программу на выполнение, и на этот раз все работает как и задумано.\\ +