Проблема с аппаратной стабилизацией дребезга

Тема в разделе "Arduino & Shields", создана пользователем Martin, 13 мар 2018.

  1. Martin

    Martin Нерд

    Добрый день использую аппаратную стабилизацию дребезга кнопок и следующий код на MEGA2560

    Код (C++):
    void setup(){
      pinMode(27, INPUT);
    }
    void loop(){
      while(1){
        if(digitalRead(27)==HIGH){
          while(digitalRead(27)!=LOW);
          //выполняемый код
        }
      }
    }
    [​IMG]
    По логике (выполняемый код) должен работать только после того как размыкается контакт кнопки, однако происходят непонятные явления. Иногда нормально срабатывает, как должно, а иногда выполняемый код срабатывает при нажатии кнопки, а потом еще и после ее отпукскания
     

    Вложения:

  2. Tomasina

    Tomasina Сушитель лампочек Модератор

    10 мкФ - это очень много, попробуй 1 мкФ или 0,47 мкФ.
     
    Martin нравится это.
  3. Martin

    Martin Нерд

    С 1 мкФ повторить ложное срабатывание не получилось, наверно все работает, но почему так происходит? Ведь дребезг напрямую зависит от кнопки и может достигать и 100мс. Если идти от обратного, то увеличивая номинал конденсатора от 1 до 10 мкФ, у нас увеличивается постоянная времени RC-цепи и соответственно время зарядки и разрядки конденсатора, инвертирующий триггер в свою очередь имеет гистерезис, я не понимаю почему 10мкФ является большим. Жаль, что нет осциллографа, чтобы посмотреть. Однако если мк, выполняет код при нажатии и отпускании, значит после триггера было не однократное изменение уровня, как это можно объяснить? куда копать ?
     
  4. DetSimen

    DetSimen Guest

    чота, мне моя практика подсказывает, типичное время дребезга китайских кнопок 5-20 мс.
     
  5. AlexU

    AlexU Гуру

    Только время зарядки, разрядка происходит почти моментально, т.к. разрядка идёт через кнопку без 'R'.
     
  6. Tomasina

    Tomasina Сушитель лампочек Модератор

    Причем при 10 мкФ возможно постепенное обгорание контактов кнопки, т.к. через них происходит короткое замыкание конденсатора, а 10 мкФ - это приличный запас энергии.
    Но к дребезгу это не имеет отношения.
     
  7. AlexU

    AlexU Гуру

    Вот как раз этот конденсатор и есть причина появления дребезга кнопки при нажатии. С уменьшением ёмкости дребезг уменьшился, но всё же может нет-нет, а проявиться. Надо обеспечить разряд кондея так же через резистор.
     
  8. ELITE

    ELITE Гик

    также триггер тут лишний
    и да ,емкость 0.1мкф эквивалентна примерно 7мс защиты от дребезга
    так что ставьте 0.3-0.47мкф и будет стабильно работать
     
    Igor68 нравится это.
  9. parovoZZ

    parovoZZ Гуру

    А стабилизация дребезга - это что значит? Что стабилизируем? Дребезг? Он и так стабилен - на частоте механического резонанса.
    Данная схема укорачивает жизнь и кнопки, и конденсатора из-за сверхтоков.
     
  10. ELITE

    ELITE Гик

    НЕ электролитический конденсатор менее 1 мкф при напряжениии 3-5в в такой схеме помрет от старости быстрее, чем от "сверхтоков", а кнопка сотрется в пыль )
     
  11. AlexU

    AlexU Гуру

    Триггер лишним не бывает, если только нет острого желания сэкономить на размерах устройства. Вот только его применять нужно правильно.
    Так же не ясно какие кнопки использует автор темы. Если обычные тактовые, то достаточно керамики 100n параллельно кнопке. У тактовых кнопок конструктивная особенность такая, что в момент нажатия дребезга почти нет (если кнопка новая). А вот в момент отжатия может произойти один-два пробоя между контактами, вот тут-то и спасёт конденсатор. Правда не всегда, поэтому применение триггера даст более стабильный результат.
     
    Igor68 нравится это.
  12. parovoZZ

    parovoZZ Гуру

    Если произойдет пробой кнопки, то триггер также переключится.
    Впрочем, во всех AVR триггеры уже стоят на входе. Внешний триггер имеет смысл, если только есть желание сузить диапазон срабатывания, либо защитить микросхему.
    А коротить кнопкой конденсатор весьма неудачное схемотехническое решение.
     
  13. AlexU

    AlexU Гуру

    При правильной обвязке RC-цепями не переключится.
    С гистерезисом в 0.4 mV. В то время как тот же 74HC14 даёт в районе 1 V.
     
  14. 9xA59kK

    9xA59kK Гик

    Схема не корректная однозначно.
    А вот такая будет отлично работать, я проверял с тактовыми кнопками, кондёр ставил что было под рукой 68nF.
    антидребезг_74HC14.png
    ps\\ Осцилограммы приложить не могу. На обычные кнопки, не тактовые ставил 0,1мкФ.
    ps_2\\ Надеюсь с подтягиванием входа, в нужную вам сторону, разберетесь.
     
    Последнее редактирование: 13 мар 2018
  15. parovoZZ

    parovoZZ Гуру

    При данной обвязке переключится. Речь не про правильную схему, а вышеизложенную.
     
  16. mcureenab

    mcureenab Гуру

    Вероятно кнопка, провода и конденсатор образуют LC контур, в котором могут возникать колебания.
     
  17. parovoZZ

    parovoZZ Гуру

    LC контур там, возможно и есть, но добротность у него такая, что в нем не родится ни одного колебания. А фокус в том, что электролит не успевает разрядиться через кнопку на частоте дребезга. Данная схема годится разве что на ресет, откуда и была сдернута. Правильная схема двумя постами выше.
     
  18. ELITE

    ELITE Гик

    да правильная она и так, просто кондер чересчур жирный и электролит - поставить керамику на 0.33мкф и будет как часы работать долго и стабильно
     
    citRUS_oleg нравится это.
  19. AlexU

    AlexU Гуру

    Да вот не правильная она (это о схеме автора топика). Кондёр при замыкании кнопки будет дополнительным источником ЭДС. И чем больше ёмкость, тем сильнее ЭДС -- отсюда и дребезг именно при нажатии.
     
  20. Martin

    Martin Нерд

    Использую следующие кнопки
    Безымянный.png
    Схему буду менять на вот такую
    qwe.png
    Какие номиналы резисторов лучше подобрать для электролитического конденсатора 1мкФ ?