Como implementar o Debounce via Hardware - MakerHero

Desvendando o Debounce | Como implementar o Debounce via Hardware 2

Você já se deparou com o problema do “rebote” ao pressionar um botão ou interruptor? Aquelas oscilações indesejadas que fazem com que seu sistema eletrônico detecte múltiplas ações, gerando comandos indesejados? Bem, você não está sozinho! O bounce é um desafio comum em circuitos eletrônicos, mas felizmente há soluções para isso.

Neste artigo, vamos explorar o conceito de debounce e apresentar uma abordagem eficiente para resolvê-lo utilizando hardware. Explicaremos de forma simples e prática os princípios por trás do debounce e como aplicá-lo em suas próprias criações eletrônicas.

Ao seguir este guia, você estará apto a projetar e implementar seu próprio circuito de debounce, eliminando os rebotes e garantindo uma detecção precisa de entradas em seus projetos. Se você está curioso para descobrir como fazer debounce via hardware, continue lendo e desvende os segredos por trás dessa técnica valiosa!

Mas o que é “Debounce”?

Em eletrônica, o termo “debounce” refere-se a um processo de filtragem ou eliminação de ruído eletromecânico indesejado que ocorre quando um interruptor físico é pressionado ou liberado. Quando um interruptor é acionado, especialmente em circuitos digitais, ele pode gerar uma série rápida de pulsos elétricos ou oscilações devido ao movimento mecânico das peças internas do interruptor.

Em síntese, o “Debounce” (muitas vezes também nomeado como debouncing) é a kriptonita do “Bounce”, que poderá ser visto na imagem a seguir. Importante: o botão foi pressionado apenas uma vez.

Efeito Bounce
Efeito Bounce

Entendendo um pouco mais sobre o Efeito Bounce

Em eletrônica, o “efeito bounce” é um fenômeno indesejado que ocorre quando um interruptor físico é pressionado ou liberado. Ele se refere às oscilações rápidas e transitórias do sinal elétrico que são geradas devido ao movimento mecânico das peças internas do interruptor.

Quando um interruptor é acionado, as conexões físicas dentro dele podem vibrar ou se mover temporariamente antes de se estabilizarem em uma posição final. Essas vibrações causam o efeito bounce, onde o sinal elétrico oscila rapidamente entre os estados aberto e fechado várias vezes antes de se estabilizar.

Esse efeito pode ser problemático em circuitos digitais, pois pode levar a leituras incorretas do estado do interruptor ou a múltiplas ações indesejadas. Por exemplo, em um sistema de controle, um único acionamento do interruptor pode resultar em várias ativações do circuito, levando a comportamentos imprevisíveis.

Para lidar com o efeito bounce, é necessário aplicar técnicas de debounce, como mencionado anteriormente. Essas técnicas envolvem a implementação de filtros e temporizadores que ajudam a eliminar ou reduzir as oscilações indesejadas do sinal, garantindo uma leitura precisa e estável do estado do interruptor.

Abaixo iremos apresentar a você uma um circuito simples para você implementar o debounce via hardware. Essa é apenas uma das soluções possíveis, pois também é possível implementar o debounce via software

Materiais Necessários para implementar o debounce via hardware

Para implementar um circuito de debounce via hardware você vai precisar dos seguintes componentes: 

01 x 74HC14
01 x Chave Push-Button Mini Swtich SPST
02 x Resistor 2,2kΩ
01 x Diodo 1N4148
01 x Capacitor 100nF

Circuito Eletrônico para Debounce

Não existe forma única para remover ou filtrar o rebote. Existem vários métodos e técnicas para a solução desse problema, seja via hardware ou via software. 

A forma abordada neste artigo é implementar a solução via hardware e fazer a validação com duas evidências, uma através de instrumentos de medição, o osciloscópio e outra é através de um contador em uma entrada no Arduino. Assim, através dessas validações, poderemos verificar a eficiência e eficácia da nossa eletrônica para debounce.

Abaixo você encontra o esquemático do circuito eletrônico para o debounce:

Circuito eletrônico para debounce
Circuito eletrônico para debounce

Quando o push button é pressionado, nesse caso fechado, o capacitor C1 é descarregado através do resistor R2. Se o diodo 1N4148 não estivesse presente no circuito, então ao soltar o push button, abrindo o circuito, C1 seria carregado através dos resistores R1 e R2. No entanto, a presença do diodo influencia diretamente fazendo com que o capacitor seja carregado apenas através de R1.

Observe que o circuito proposto terá nível lógico alto (5V) na saída (out) quando o botão for pressionado e nível lógico baixo (0V), mesmo que o botão esteja ligado diretamente no GND. Isso acontece porque o CI 74HC14, além de ter a função Schmitt Trigger, importantíssimo para o nosso filtro, também é uma porta inversora.

Recorte do datasheet do CI 74HC14D disponível em alldatasheet.
Recorte do datasheet do CI 74HC14D disponível em alldatasheet.

Resultado do debounce via hardware

Durante a verificação dos resultados, um Arduino fazia a leitura do botão em uma entrada digital, incrementava em um contador e apresentava seus valores no Monitor Serial. Em paralelo, o osciloscópio fazia a leitura desse sinal. 

As próximas 03 imagens registram bem a leitura antes e depois do filtro. Em azul é o sinal medido diretamente no botão antes do filtro. Repare que está em nível lógico alto e vai para nível lógico baixo quando o push button é pressionado. 

Em amarelo é o sinal filtrado no circuito proposto na segunda figura.

Quando as leituras foram realizadas sem o circuito debounce, a contagem no Arduino era imprecisa. Algumas vezes contava corretamente e o sinal em azul era “limpo” (o rebote não acontecia) e somente incrementava o valor 1 na contagem. Outras vezes acrescentava 2, 3 e até 5 valores na medição. O sinal apresentava instabilidade durante a transitória, período entre pressionar e estabilizar.

Já utilizando o circuito debounce as leituras foram muito precisas. A cada vez que o botão foi pressionado somente o número 1 era incrementado ao contador. O que, de fato, é o desejado quando se pressiona um push button.

tela com código parcial e informação do contador via serial monitor
tela com código parcial e informação do contador via serial monitor

Se você se atentou a imagem, percebeu que a contagem estava em 1290. Isso mesmo, pressionei mais de 1290 vezes para constatar as incrementações, tanto com quanto sem filtro. Para ser mais exato, a última recordação que tenho da contagem exibida no monitor serial foi o valor 1500! Contudo, a última captura da tela ficou o valor da figura 7.

Outra informação que merece destaque é o tempo de resposta do circuito. Mas qual seria esse tempo? É o intervalo de tempo entre o botão ser pressionado e o sinal “out”, pino 02 do CI 74HC14 ir de nível lógico baixo para nível lógico alto. As evidências durante os ensaios marcam valores entre 200 us e 550 us. No caso do registro a seguir, o tempo aproximado foi 406 us.

tela do osciloscópio registrando o tempo de resposta do filtro 
tela do osciloscópio registrando o tempo de resposta do filtro

Conclusão

Os registros falam por si só, o circuito funcionou muito bem, com resposta rápida e eliminando o indesejado efeito bounce. Dependendo da situação, você pode redimensionar os componentes, tanto os resistores quanto o capacitor, adequando à sua necessidade específica. 

Não existe receita pronta para todas as necessidades, mas esse circuito é uma excelente ferramenta e pode te ajudar em diversas circunstâncias, seja em sistemas digitais, analógicos, mistos, microcontrolados, etc.

E então, gostou de aprender Como implementar o Debounce via Hardware? Deixe um comentário abaixo dizendo o que achou e em qual aplicação você usaria ou modificaria. Para mais conteúdos como este, acesse nosso blog.

Faça seu comentário

Acesse sua conta e participe

2 Comentários

  1. Bom dia !!! Sensacional a matéria. Estamos tendo problemas na medição de pulsos de um medidor de vazão, porém a saída é fotoacoplada mas tudo indica que estamos tendo medição de pulsos a mais…

    1. Olá Marcelo.

      Muito obrigado pelo feedback.

      Ficamos a disposição.

      Att.
      Vitor Mattos.
      MakerHero.