Um switch precisa ser rebocado quando aberto?


8

Suponha que uma entrada em um microcontrolador tenha um resistor de pull-up de 5V e um interruptor para terra (normalmente aberto) conectado a ele. Eu sei que um switch deve ser rebocado (no meu caso, em software) quando fechado, mas está sendo rebocado quando um switch é aberto necessário?

Respostas:


11

Sim, a conversão em ambas as direções é necessária se você desejar uma borda única garantida cada vez que a chave mudar de estado.

Felizmente, você não precisa de nenhum hardware adicional para rebater se o switch estiver conectado a um microcontrolador. Se o micro possui um pullup interno, o que muitos fazem, você não precisa de nada mais externamente do que a troca entre o micro pin e o terra.

Acho 50 ms é um bom tempo de debounce. A maioria dos switches salta por muito menos que isso, mas alguns podem demorar quase tanto. Porém, 50 ms ainda parecerão instantâneos para um usuário humano; portanto, você também pode ser extremamente confiável. A única diferença é o número com o qual você conta no firmware, portanto, não há nenhum custo extra. Geralmente, eu tenho uma interrupção periódica de 1 ms por outros motivos, portanto, se o comutador estiver no mesmo estado 50 vezes seguidas nessa interrupção, você declara que ele foi devolvido ao novo estado.

Detalhes sobre a lógica de debounce em resposta ao comentário:

Geralmente, você terá um bit global que indica o estado oficial de devolução do comutador. É isso que qualquer lógica que precisa saber de que maneira o switch está configurado usa. O único estado adicional necessário é um contador, geralmente um byte, na rotina de interrupção. Digamos que a interrupção seja a cada 1 ms e o tempo de debounce seja 50 ms. Para cada interrupção:

Se o estado instanâneo corresponder ao estado devolvido:
  Redefinir contador para 50
  Feito

Se o estado instantâneo for diferente do estado de devolução:
  Contador de diminuição
  Se o contador atingir 0:
    Declare o novo estado debitado
    Redefinir contador para 50
  Feito

Havia um artigo muito bom em www.embedded.com há um tempo. O autor pegou vários switches e os colocou entre uma fonte de alimentação e uma entrada de escopo de armazenamento digital, para examinar as características de rejeição. A conclusão final é que você não pode escolher um tempo de devolução "tamanho único": é necessário caracterizar cada opção em particular e ver como ela salta.
John R. Strohm

@ John: você pode dar o link? Não entendo por que uma suposição de tempo máximo de rejeição máxima não pode ser usada para todos os comutadores, desde que seja curto o suficiente para satisfazer o usuário. O IME de 50ms que Olin menciona atende a ambos os critérios.
Wouter van Ooijen

Obrigado Olin. Então, como você monitora em que estado o switch esteve nas últimas 50 interrupções? Eu incrementaria uma variável se o comutador estiver no mesmo estado da última interrupção, limpe-o se o estado for alterado e considere o comutador debocado se atingir 50. Essa é uma maneira eficiente de fazer isso?
Nate

1
Este pode não ser o artigo mencionado acima, mas possui muitas informações interessantes: ganssle.com/debouncing.htm Qualquer pessoa que lide com a devolução deve lê-la.
UnconditionallyReinstateMonica

1
@ Nate: Veja a adição à resposta.
Olin Lathrop

2

Sim, eu usaria um, o mecanismo é basicamente o mesmo. Ao interromper o contato, haverá pontos no tempo em que o comutador está fazendo um bom contato elétrico, além de não fazer um bom contato elétrico. O mesmo que quando você está fazendo o contato.


1

Em geral, sim. Os interruptores mecânicos podem produzir ruídos elétricos (saltando) em locais próximos e abertos.


1

Geralmente sim, mas sempre depende do que você está fazendo com a entrada digital. Eu tive alguns sistemas que absolutamente não precisavam ser rebatidos em nenhuma direção.

Se você estiver dirigindo uma interrupção, é provável que você deva desistir.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.