O repique de sensores e interruptores mecânicos, também denominados “bounce” termo em inglês para balanço, pode comprometer muitos projetos de automatismos, robôs e outros ditos mecatrônicos, exigindo um bom estudo para sua superação. Neste artigo mostramos como o fenômeno ocorre e como implementar soluções anti-repique ou debouncer usando basicamente hardware.

Quando o sensor mecânico fecha seus contatos, ele não estabelece um percurso para a corrente de forma imediata. Por alguns instantes, os contatos mecânicos oscilam e o resultado é uma corrente que não comuta de forma rápida, mas também apresenta oscilações, conforme mostra a figura 1.

 

Figura 1 – O repique ou balanço (bounce) de um contato mecânico
Figura 1 – O repique ou balanço (bounce) de um contato mecânico

 

Isso ocorre com interruptores, chaves, relés, reed switches, enfim toda a forma de interruptor que faz uso de recursos mecânicos.

Conforme podemos ver pela figura, quando o sensor ou interruptor fecha a corrente não se estabelece de imediato e forma total, mas de uma forma instável devido a oscilação dos contatos. Isso faz com que um eventual circuito que esse sensor controle interprete o momento da conexão como uma sequência de pulsos.

Dependendo da aplicação, os pulsos são contados pelo circuito de processamento levando a um funcionamento errático.

Por exemplo, num sensor de reversão de movimento de um robô, se o número de pulsos for par, o robô inverte o movimento e volta depois ao sentido em que estava. Se for ímpar a reversão ocorre, não se antes uma oscilação do movimento.

Nos projetos microcontrolados em que se faz uso de sensores mecânicos, ou mesmo em projetos digitais, é preciso contar com um circuito que elimina esse problema, conforme mostra a mesma figura.

O circuito anti-repique o debouncer é fundamental para esta finalidade.

Indo além um pouco, a oscilação dos contatos pode causar um problema adicional se a corrente controlada for intensa ou se a carga controlada for indutiva. Podem ocorrer arcos que vão acabar por queimar os contatos que, em pouco tempo ficam inutilizados.

 

O Debouncer ou Anti-Repique

Como fazer um circuito reconhecer apenas como um evento o fechamento dos contatos de um sensor mecânico, mesmo que oscile muitas vezes produzindo uma sequência de pulsos que pode ter a intensidade correspondente aos níveis lógicos reconhecidos por um circuito digital?

Esse problema pode ser manifestar não apenas com microcontroladores, mas praticamente em todas as aplicações lógicas (TTL ou CMOS) em que o sensor, interruptor ou contatos de um relé deva informar um evento único ao ser aberto ou fechado.

O que se faz é então utilizar o recurso do debouncer ou anti-repique.

 

Debounce por software

Evidentemente, este recurso só é válido no caso de estarmos usando microcontroladores.

O que se faz então é agregar ao código de leitura de um sensor um retardo de modo que uma eventual leitura seguinte só ocorra depois que o período de balanço ou repique tenha ocorrido.

Desta forma, o microcontrolador não conseguirá “ler” diversos pulsos naquele intervalo que os contatos do sensor, interruptor ou relé estejam oscilando.

Para a maioria dos casos, um “delay 50” acrescentado após a leitura da entrada do sensor resolve, ou seja, espera-se 50 milissegundos antes de fazer uma nova leitura do estado do sensor.

Mas, esta solução tem seus problemas. Se o programa que está sendo rodado é relativamente simples e um tempo de espera de 50 a 150 ms não compromete seu desempenho, tudo bem.

Mas, se diversos sensores devem ser lidos e o projeto é sensível ao tempo de processamento que precisa ser rápido, o debounce por software pode ser um problema a mais, afetando o desempenho.

Algumas técnicas permitem contornar este problema via software, mas ainda temos de incluí-las na programação.

No entanto, nem sempre desejamos implementar uma solução anti-repique mexendo na programação. Na verdade, nem podemos pensar nisso se estamos trabalhando com um circuito digital comum.

Neste caso, a solução está num debouncer ou anti-repique por hardware, ou seja, um circuito que evite o “balanço” do sensor, interruptor ou contatos de um relé que produza pulsos aleatórios capazes de afetar o circuito de leitura.

Para isso, com é uma característica de nosso site (OHHW – Site do Hardware Livre) vamos trabalhar com soluções na forma de circuitos.

 

Debounce por hardware

Nos casos dos microcontroladores, aproveitamos seu potencial justamente para reduzir o número de componentes externos, no entanto, existem casos em que alguma pode ser necessária.

Neste caso, podemos contar com circuitos que tenham desde uma configuração simples até mais complexa, dependendo das necessidades. Precisaremos dele quando um eventual retardo de uma chave ou sensor compromete o desempenho do circuito, não podendo ser implementado por software.

A solução mais simples é a mostrada na figura 2 que consiste no uso de um capacitor e um resistor. O circuito RC assim formado, produz uma transição suave de nível lógico e com isso a leitura de pulso único pelo microcontrolador.

 

Figura 2 – Debounce simp
Figura 2 – Debounce simp

 

O que ocorre é que temos apenas uma passagem da tensão pelo nível de transição entre os níveis lógicos, conforme mostra a figura 3.

 

Figura 3 – Só há uma passagem pelo nível Hi-Lo
Figura 3 – Só há uma passagem pelo nível Hi-Lo

 

Mas, para os que desejam algo mais apurado, ou ainda que não estão trabalhando com microcontroladores, com a utilização de elementos lógicos, damos alguns circuitos a seguir.

Os circuitos que selecionamos estão espalhados no site. Digitando “debounce” e “anti-repique” na busca, certamente o leitor terá uma infinidade deles para analisar e escolher o que é melhor para seu projeto.

 

Seleção de circuitos

A seleção de circuitos anti-repique ou debouncer dada a seguir se aplica tanto a circuitos comuns, como circuitos digitais ou microcontroladores, dependendo apenas das características específicas.

 

Debouncer TTL LS

O circuito mostrado na figura 4 se aplica tanto à lógica TTL como a microcontroladores. Trata-se de uma configuração disparadora muito rápida que é interessantes em que o tempo de estabilização do contato deve ser mínimo.

 

Figura 4 – Debouncer TTL
Figura 4 – Debouncer TTL

 

 

Anti-repique 7404

Este circuito é indicado para aplicações em que dois sensores ou chaves são usados. O circuito deve ser alimentado com 5 V e é compatível com lógica TTL, CMOS e microcontroladores.

 

 

Figura 5 – Anti-repique com 7404
Figura 5 – Anti-repique com 7404

 

 

Chave Anti-repique

Na figura 6 temos uma interessante aplicação anti-repique ou debouncer usando uma chave de 1 polo x posições ou um sensor com as mesmas características. O circuito deve ser alimentado por 5 V.

 

Figura 6
Figura 6

 

 

Chave Anti Repique

Outro circuito interessante para eliminação de sensores ou chaves é mostrado na figura 7 em que temos um interruptor especial ou sensor que na realidade é uma chave de 1 polo x 2 posições, representada de uma forma um pouco diferente.

 

Figura 7
Figura 7

 

 

Anti-repique CMOS

Na figura 8 temos o modo de se implementar uma chave anti-repique usando lógica CMOS. No diagrama usamos um inversor disparado, mas pode ser usado um 4093 comas entradas unidas de modo a funcionar como um inversor.

 

Figura 8
Figura 8

 

 

Disparador Anti-repique

O circuito da figura 9 foi implementado com duas potras NAND que podem ter lógica TTL ou CMOS conforme a aplicação. O circuito, na realidade pode ser usado com outras fontes de sinal que não sejam sensores, mas com pulsos deformados com muito ruído que devam ser usados em lógica.

 

Figura 9
Figura 9

 

 

Anti-Repique 7400

O circuito da figura 10 é indicado para aplicações com tecnologia TTL como em shields, eliminando o repique de interruptores e sensores. O circuito produz um pulso único de saída, cuja duração depende de C.

 

Figura 10
Figura 10

 

 

Chave anti-repique CMOS

Originalmente o circuito da figura 11 foi criado para operar com sensores, mas pode ser adaptado para qualquer tipo de comutador que esteja sujeito a repiques. A tensão de alimentação depende da lógica a ser acionada;

 

Figura 11
Figura 11

 

 

Anti-repique transistorizado

Finalmente, temos na figura 12 de nossa sequência um anti-repique que encontramos numa publicação americana antiga. O circuito pode ser alimentado por tensões de 3 a 12 V e os valores dos componentes podem ser alterados conforme a aplicação.

 

Figura 12
Figura 12

 

 

Circuitos Avançados de Debounce

Diversois fabricantes de dispositivos semicondutores possuem em suas linhas de produtos chips específicos para aplicações em debouncers assim como isoladores ópticos que podem ser utilizados nesta mesma função.

Destacamos alguns, cujas informações (datasheets) com as características foram obtidas no site da Mouser (www.mouser.com). Digite debounce no search daMouser se quiser ter acesso a todos os tipos disponíveis.

 

MAX6816, MAX6817 e MAX6818

Estes três circuitos integrados da Maxim consistem em debouncers em uma, duas ou quatro unidades no mesmo invólucro, com proteção contra ESD para 15 kV a tensão de operação de 2,7 a 5,6 V. Sua aplicação principal é justamente com chaves mecânicas produzindo um sinal de saída livre de repiques.

Mais detalhes sobre os componentes ( MAX6816  -  MAX6817 - MAX6818 )

 

Figura 13
Figura 13

 

 Na figura 14 temos as curvas obtidas para o desempenho no anti-repique para estes componentes.

 

Figura 14 – Funcionamento
Figura 14 – Funcionamento

 

A Maxim possui diversos circuitos como este com maior número de entradas.

 

LTC6994 e LTC6994-2

Estes dois circuitos integrados da Linear Technology consistem em blocos de retardo programáveis que podem ser usados como discriminadores de ruído, linha de retardo, debouncing de chaves e sensores, ambientes de vibrações e aceleração.

Na figura 15 temos o circuito de aplicação.

 

Figura 15 – circuito de aplicação
Figura 15 – circuito de aplicação

 

 

O datasheet pode ser acessado pelo site da Mouser clicando aqui

A tensão de alimentação é de 6 V e ele é fornecido com diversos sufixos que indicam a faixa de temperaturas de operação.

 

IS31IO7326

Este circuito integrado da ISSI cujo datasheet pode ser acessado na Mouser pelo endereço https://br.mouser.com/IS21IO7326 consiste num controlador matricial de 8 x 8 teclas ou sensores alimentado por tensões de 2,4 a 5,5 V. Na figura 16 temos o seu circuito típico de aplicação.

 

Figura 16
Figura 16

 

 

Outros circuitos podem ser acessados se o leitor pesquisar no site da Mouser.