Este é um tópico bastante complexo para o tipo de curso que estamos desenvolvendo. Mas vamos tentar abordar o assunto de uma forma bem superficial para que o aluno não se sinta intimidado pelo assunto. A intenção é dar uma ideia ao aluno sobre a importância dos filtros em um projeto que envolve eletrônica.

Vamos começar mostrando as definições clássicas de ruído elétrico e filtros.

Ruído elétrico é todo tipo de interferência que se sobrepõe a uma informação elétrica. Por exemplo, imagine que temos uma onda quadrada com frequência constante que sofre a interferência de um ruído gerado por um motor ligado perto do circuito. Abaixo temos os diagramas do sinal da onda quadrada e do ruído elétrico gerado pelo motor:

teorica6_1

 

É muito frequente em situações como estas que o ruído elétrico seja induzido para o sinal da onda quadrada, modificando as suas características. Abaixo temos o sinal resultante dessa união de sinais.

teorica6_2

O exemplo dado pode ocorrer na prática e o sinal resultante é bem diferente do sinal desejado e pode causar efeitos indesejáveis e prejudicar o bom funcionamento do projeto.

Existem circuitos analógicos de filtro que realizam um bom trabalho nestes casos, mas normalmente são difíceis de projetar e ajustar para ter um bom resultado. Assim vamos falar nesta aula dos filtros implementados em software que podem ajudar em situações como esta. Não é em todas as situações que os filtros implementados em software resolvem a situação, mas são bem simples de ser usados e podem salvar um projeto de forma bem rápida.

O primeiro tipo de filtro de software muito comum é o filtro “delay-on-off”.

teorica6_3

Neste tipo de filtro definimos um tempo mínimo para o sinal de entrada permanecer em determinado estado lógico 1 ou 0, para que o sinal de saída seja atualizado com o novo estado lógico.

No exemplo dado o sinal de entrada seria o sinal modificado da figura acima. Este sinal é aplicado a uma entrada do Arduino que fica lendo o estado desta entrada constantemente. Quando ocorre uma mudança de estado na entrada o Arduino inicia a contagem de um temporizador programado com o tempo mínimo desejado para que os picos espúrios sejam eliminados. Quando o temporizador zera sua contagem de tempo o novo estado da entrada é transferido para a saída. Caso o sinal de entrada volte para o estado lógico original antes que o temporizador finalize sua contagem, o temporizador é finalizado e a saída permanece com o estado que estava mesmo. Assim o ruído é ignorado e o sinal de saída fica bem parecido com o sinal original.

Neste filtro é importante determinar o valor ótimo para o tempo mínimo, de forma que o ruído seja eliminado sem que o sinal original seja muito distorcido pelo atraso do filtro.

Vamos dar um exemplo mais prático de como deve ser elaborado este filtro em software. Imagine que temos um sinal como no diagrama abaixo:

Temos uma onda quadrada com frequência de 10 Hz (período de 100ms) e um pulso espúrio de ruído com largura de 5ms. O objetivo do filtro é eliminar o pulso espúrio, preservando o sinal da onda quadrada.

No inicio do programa preparamos um temporizador com tempo de 5ms, mas não iniciaremos a contagem de tempo ainda.

Ao perceber uma transição no sinal de entrada, o programa ignora o estado atual do sinal e inicia a contagem do temporizador de 5 ms. Ao final da contagem de tempo o programa verifica novamente o estado do sinal de entrada e aceita este estado para a entrada.

Transição do sinal é o momento que o estado muda de 0 para 1 (transição positiva) ou de 1 para 0 (transição negativa).

Outro tipo de filtro utilizado é o “debounce”. Este filtro é aplicado principalmente em sinais oriundos de chaves ou teclas. As chaves ou teclas são componentes que “fecham” contato entre seus terminais quando são pressionadas. Quando são ligadas em sinais de entradas do Arduino, produzem um sinal como o que está na figura abaixo:

fig6_6

Quando a tecla é pressionada o sinal vai para 0. Quando a tecla é solta o sinal vai para 1.

Acontece que uma tecla não é um componente ideal. Ao pressionarmos a tecla o contato entre seus terminais não acontece de uma vez. Se ampliarmos a visão do sinal no momento que a tecla é pressionada, veremos que o sinal dá uma repicada (“bouce” em inglês):

fig6_7

O filtro “debounce” serve para eliminar este tipo de ruído. Na IDE do Arduino existe um exemplo de programa que faz este tipo de filtro. Para abrir este exemplo abra a opção Arquivo->Exemplos->02.Digital->Debounce:

debounce

NA próxima aula prática vamos montar um contador de toques em uma tecla onde vamos precisar usar este filtro para obter o resultado esperado. Então vamos explicar passo a passo como este filtro funciona.

Até lá.