O Efeito Bouncing e as técnicas para Debouncing


Quando trabalhamos com um circuito que envolve chaves mecânicas, tem-se o surgimento de um efeito conhecido como “bouncing”. Basicamente isto apresenta-se como um pequeno problema em nosso circuito, já que esse tipo de efeito pode indicar equivocadamente, que ocorreram diversos acionamentos em um pequeno intervalo de tempo.

Neste artigo, vamos compreender como você pode minimizar esse efeito indesejado.

 

O Efeito Bouncing

Inicialmente vamos aplicar um circuito bem simples e comumente utilizado para acionamentos de chaves. Um típico circuito que é empregado, envolve uma chave mecânica e um resistor. O resistor é conhecido como resistor de pull-down ou resistor de pull-up.

Se ele estiver conectado ao terra, então é chamado de pull-down.

Se ele estiver conectado ao Vcc, então é chamado de pull-up.

Veja nas figuras abaixo, a típica ligação destes dois tipos de circuito.

PullDownandPullUp

Figura 1 – Circuito com resistor de Pull-Up e Pull-Down

Vamos considerar um o circuito com o resistor de pull-up. Isto significa que no momento inicial, sem pressionar a chave, o valor que temos no pino conectado ao circuito será nível lógico alto, pois este está atrelado ao nosso resistor que vai para o Vcc.

 

Ao pressionarmos a chave, estaremos fazendo uma ligação direta com o terra. Como não há nenhuma tipo de resistência no caminho, nosso pino então possuirá o valor de nível lógico baixo. O mesmo acontece de modo inverso no circuito envolvendo o resistor de pull-down.

ChavesFechadas

Figura 2 – Circuito com as chaves fechadas

Neste tipo de circuito, o aparecimento do efeito bouncing pode dar as caras. Veja na figura abaixo o efeito que pode surgir:

Bouncing

Figura 3 – Efeito Bounce

bounce

Figura 4 – Efeito Bounce Fonte:http://www.labbookpages.co.uk/electronics/debounce

A imagem diz tudo. Como você pode ver, esse efeito é caracterizado por “idas” e “vindas”, do nível lógico alto e o nível lógico baixo, antes de efetivamente estabilizar. Entre outras palavras, essas oscilações rápidas podem gerar acionamentos indevidos no nosso programa. Pois o mesmo tende a interpretar que você pressionou rapidamente várias vezes a chave, quando na verdade foi apenas uma vez.

Dito isto vamos ver a seguir algumas técnicas simples de resolver esse problema. Essas técnicas são também conhecidas como Debouncing.

Debouncing

Software

Existem técnicas por hardware e software. Geralmente por software o que é feito, é utilizar um pequeno atraso no código, que seria o tempo suficiente para que a etapa do efeito bouncing passasse, e desta forma minimizar esse problema.

 

Circuito

Circuito

Figura 5 – Circuito utilizado

 

Código

Vamos utilizar o código abaixo para solucionar o efeito bouncing por software. O código está todo comentado, o que facilita seu entendimento.

 

Hardware

Agora com relação a soluções por hardware, vamos ver dois tipos de circuitos que podem ser utilizados. Antes disso, vamos ao código para as próximas duas montagens:

Código

Veja que neste código algumas etapas foram “queimadas” em comparação com o outro. Isso foi feito propositalmente, justamente para que possamos solucionar o problema do efeito bounce através de um circuito externo, ao invés da implementação via software, como foi feito anteriormente.

 

Primeira solução

Uma das alternativas é simplesmente adicionar um capacitor ao seu circuito. O capacitor irá atenuar o sinal, sendo que a malha resistor/capacitor irá gerar um tempo de atraso no circuito. Devido a esse tempo, isso fará com que as rápidas oscilações indesejadas sejam atenuadas. Abaixo você pode ver como vai ficar o circuito. A saída out é conectada ao nosso pino 2 do Arduino. 

DebounceRC

Figura 6 – Circuito com Capacitor

Segunda Solução

Outra alternativa que você pode empregar, é utilizar um circuito integrado 4093. Esse CI é composto por quatro portas NAND do tipo Schmitt Trigger. O conceito resumido por trás do Schmitt Trigger, é que através de determinados níveis de limite inferior e superior, ele compara o sinal, e define em qual nível lógico ele se encontra. Isso é muito favorável em sinais ruidosos onde não queremos um falso acionamento, que é justamente onde se aplica em nosso exemplo com chaves mecânicas. Esse assunto merece um post a parte, mas por enquanto continuaremos com o nosso artigo.

 

Em suma, teremos então na saída um sinal limpo e sem falsos acionamentos. Veja como ficará nosso circuito logo mais. Mantemos o circuito anterior, no entanto é adicionado um CI 4093, onde utilizamos uma porta NAND. Se você colocar no osciloscópio, verá que agora o sinal estará invertido, em função da conexão da porta NAND, a qual resultou em uma porta NOT, já que ambas entradas estão ligadas entre si.

 

Com relação a conexão do 4093, você deve conectar o pino 14 ao 5 V, e o pino 7 ao GND. Vamos utilizar uma porta NAND, portanto podemos escolher os pinos 1 e 2 como entradas, e o pino 3 como saída, sendo que este último será conectado ao pino 2 do Arduino.

 

EfeitoBounce4093

Figura 7 – Circuito com CI4093

 

Prática

Pra fechar este assunto, acompanhe no vídeo abaixo, os testes referentes ao artigo. Ficamos por aqui e até a próxima!

Referências

https://www.arduino.cc/en/Tutorial/Debounce

Inscreva-se para ficar atualizado!

Inscreva-se agora e fique por dentro das novidades do site

Fique tranquilo, respeitamos sua privacidade!

Deixe um comentário

O seu endereço de e-mail não será publicado.