¿Se debe eliminar el rebote de un interruptor cuando se abre?

8

Suponga que una entrada en un microcontrolador tiene una resistencia pullup a 5V y un interruptor a tierra (normalmente abierto) conectado a ella. Sé que un interruptor debe ser eliminado (en mi caso, en el software) cuando está cerrado, pero ¿es necesario eliminarlo cuando se abre un interruptor?

Nate
fuente

Respuestas:

11

Sí, es necesario eliminar el rebote en ambas direcciones si desea un borde único garantizado cada vez que el interruptor cambia de estado.

Afortunadamente, no necesita ningún hardware adicional para eliminar el rebote si el conmutador está conectado a un microcontrolador. Si el micro tiene un pullup interno, que muchos necesitan, no necesita nada más externo que el interruptor entre el micro pin y la tierra.

Encuentro que 50 ms es un buen momento para eliminar el rebote. La mayoría de los interruptores rebotan por mucho menos que eso, pero algunos pueden ser casi tan largos. Sin embargo, 50 ms aún se sentirán instantáneos para un usuario humano, por lo que bien podría ser más confiable. La única diferencia es el número con el que cuenta en el firmware, por lo que no hay ningún costo adicional. Por lo general, tengo una interrupción periódica de 1 ms por otras razones, por lo que si el interruptor está en el mismo estado 50 veces seguidas en esa interrupción, entonces declaras que se ha devuelto al nuevo estado.

Detalles sobre la lógica de rebote en respuesta al comentario:

En general, tendrá un bit global que indica el estado oficial cancelado del conmutador. Esto es lo que utiliza cualquier lógica que necesite saber de qué manera se configura el conmutador. El único estado adicional que necesita es un contador, generalmente un solo byte, en la rutina de interrupción. Digamos que la interrupción es cada 1 ms y el tiempo de rebote es de 50 ms. Para cada interrupción:

Si el estado instantáneo coincide con el estado sin rebote:
  Restablecer contador a 50
  Hecho

Si el estado instantáneo difiere del estado sin rebote:
  Contador de decremento
  Si el contador llega a 0:
    Declarar el nuevo estado sin rebote
    Restablecer contador a 50
  Hecho
Olin Lathrop
fuente
Hubo un muy buen artículo en www.embedded.com hace un tiempo. El autor tomó un grupo de interruptores y los colocó entre una fuente de alimentación y una entrada de alcance de almacenamiento digital, para observar las características de rebote. La conclusión final es que no puede elegir un tiempo de rebote "talla única": debe caracterizar cada interruptor en particular y ver cómo rebota.
John R. Strohm
@ John: ¿puedes dar el enlace? No entiendo por qué no se puede usar una suposición de tiempo de rebote máximo en el peor de los casos para todos los conmutadores, siempre que sea lo suficientemente corta como para satisfacer al usuario. IME el 50ms que Olin menciona satisface ambos criterios.
Wouter van Ooijen
Gracias Olin Entonces, ¿cómo hace un seguimiento de qué estado ha estado el interruptor en las últimas 50 interrupciones? Incrementaría una variable si el interruptor está en el mismo estado que la última interrupción, lo borraría si el estado ha cambiado y consideraría que el interruptor se cancelará si llega a 50. ¿Es esa una manera eficiente de hacerlo?
Nate
1
Puede que este no sea el artículo mencionado anteriormente, pero contiene mucha información interesante: ganssle.com/debouncing.htm Cualquier persona que se ocupe de la eliminación del rebote debería leerlo.
Incondicionalmente
1
@Nate: Vea la adición para responder.
Olin Lathrop
2

Sí, usaría uno, el mecanismo es básicamente el mismo. A medida que rompa el contacto, tendrá puntos en el tiempo en los que el interruptor está haciendo un buen contacto eléctrico y no está haciendo un buen contacto eléctrico. Lo mismo que cuando estás haciendo el contacto.

Some Hardware Guy
fuente
1

En general si. Los interruptores mecánicos pueden producir ruido eléctrico (rebote) tanto al cerrar como al abrir.

Dave Tweed
fuente
1

En general, sí, pero siempre depende de lo que esté haciendo con la entrada digital. He tenido algunos sistemas que no tenían necesidad de ser eliminados en ninguna dirección.

Sin embargo, si manejas una interrupción, lo más probable es que debas renunciar.

Scott Seidman
fuente